atomic-queues 2.3.0 → 3.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 (204) hide show
  1. package/README.md +297 -382
  2. package/dist/cli/generators/classes.d.ts +1 -1
  3. package/dist/cli/generators/json-schema.d.ts +1 -1
  4. package/dist/cli/generators/typescript.d.ts +1 -1
  5. package/dist/cli/index.js +147 -5
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cluster/cluster-discovery.service.d.ts +91 -0
  8. package/dist/cluster/cluster-discovery.service.d.ts.map +1 -0
  9. package/dist/cluster/cluster-discovery.service.js +423 -0
  10. package/dist/cluster/cluster-discovery.service.js.map +1 -0
  11. package/dist/cluster/grpc-peer-monitor.service.d.ts +31 -0
  12. package/dist/cluster/grpc-peer-monitor.service.d.ts.map +1 -0
  13. package/dist/cluster/grpc-peer-monitor.service.js +192 -0
  14. package/dist/cluster/grpc-peer-monitor.service.js.map +1 -0
  15. package/dist/cluster/index.d.ts +7 -0
  16. package/dist/cluster/index.d.ts.map +1 -0
  17. package/dist/cluster/index.js +23 -0
  18. package/dist/cluster/index.js.map +1 -0
  19. package/dist/cluster/leader-election.service.d.ts +38 -0
  20. package/dist/cluster/leader-election.service.d.ts.map +1 -0
  21. package/dist/cluster/leader-election.service.js +184 -0
  22. package/dist/cluster/leader-election.service.js.map +1 -0
  23. package/dist/cluster/master-coordinator.d.ts +50 -0
  24. package/dist/cluster/master-coordinator.d.ts.map +1 -0
  25. package/dist/cluster/master-coordinator.js +307 -0
  26. package/dist/cluster/master-coordinator.js.map +1 -0
  27. package/dist/cluster/redis-health-monitor.service.d.ts +23 -0
  28. package/dist/cluster/redis-health-monitor.service.d.ts.map +1 -0
  29. package/dist/cluster/redis-health-monitor.service.js +100 -0
  30. package/dist/cluster/redis-health-monitor.service.js.map +1 -0
  31. package/dist/cluster/server-ring.service.d.ts +48 -0
  32. package/dist/cluster/server-ring.service.d.ts.map +1 -0
  33. package/dist/cluster/server-ring.service.js +136 -0
  34. package/dist/cluster/server-ring.service.js.map +1 -0
  35. package/dist/decorators/entity.decorators.d.ts +16 -24
  36. package/dist/decorators/entity.decorators.d.ts.map +1 -1
  37. package/dist/decorators/entity.decorators.js +0 -39
  38. package/dist/decorators/entity.decorators.js.map +1 -1
  39. package/dist/decorators/interfaces.d.ts +10 -10
  40. package/dist/decorators/interfaces.d.ts.map +1 -1
  41. package/dist/decorators/job.decorators.d.ts +4 -52
  42. package/dist/decorators/job.decorators.d.ts.map +1 -1
  43. package/dist/decorators/job.decorators.js +6 -54
  44. package/dist/decorators/job.decorators.js.map +1 -1
  45. package/dist/decorators/metadata-readers.d.ts +4 -2
  46. package/dist/decorators/metadata-readers.d.ts.map +1 -1
  47. package/dist/decorators/metadata-readers.js +2 -0
  48. package/dist/decorators/metadata-readers.js.map +1 -1
  49. package/dist/decorators/schema.decorators.d.ts +1 -1
  50. package/dist/decorators/schema.decorators.d.ts.map +1 -1
  51. package/dist/decorators/schema.decorators.js.map +1 -1
  52. package/dist/decorators/utils.d.ts +1 -1
  53. package/dist/decorators/utils.d.ts.map +1 -1
  54. package/dist/decorators/utils.js +5 -1
  55. package/dist/decorators/utils.js.map +1 -1
  56. package/dist/domain/interfaces/config.interfaces.d.ts +92 -29
  57. package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -1
  58. package/dist/domain/interfaces/index.d.ts +1 -0
  59. package/dist/domain/interfaces/index.d.ts.map +1 -1
  60. package/dist/domain/interfaces/index.js +1 -0
  61. package/dist/domain/interfaces/index.js.map +1 -1
  62. package/dist/{services/registry → domain/interfaces}/registry.types.d.ts.map +1 -1
  63. package/dist/domain/interfaces/registry.types.js.map +1 -0
  64. package/dist/grpc/grpc-client-pool.service.d.ts +71 -0
  65. package/dist/grpc/grpc-client-pool.service.d.ts.map +1 -0
  66. package/dist/grpc/grpc-client-pool.service.js +307 -0
  67. package/dist/grpc/grpc-client-pool.service.js.map +1 -0
  68. package/dist/grpc/grpc-server.service.d.ts +47 -0
  69. package/dist/grpc/grpc-server.service.d.ts.map +1 -0
  70. package/dist/grpc/grpc-server.service.js +494 -0
  71. package/dist/grpc/grpc-server.service.js.map +1 -0
  72. package/dist/grpc/index.d.ts +3 -0
  73. package/dist/grpc/index.d.ts.map +1 -0
  74. package/dist/{services/executor-pool → grpc}/index.js +2 -1
  75. package/dist/grpc/index.js.map +1 -0
  76. package/dist/index.d.ts +4 -0
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +4 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/module/atomic-queues.module.d.ts +1 -0
  81. package/dist/module/atomic-queues.module.d.ts.map +1 -1
  82. package/dist/module/atomic-queues.module.js +59 -10
  83. package/dist/module/atomic-queues.module.js.map +1 -1
  84. package/dist/services/command-discovery/command-discovery.service.js +2 -2
  85. package/dist/services/command-discovery/command-discovery.service.js.map +1 -1
  86. package/dist/services/index.d.ts +2 -8
  87. package/dist/services/index.d.ts.map +1 -1
  88. package/dist/services/index.js +2 -8
  89. package/dist/services/index.js.map +1 -1
  90. package/dist/services/message-router/index.d.ts +2 -0
  91. package/dist/services/message-router/index.d.ts.map +1 -0
  92. package/dist/services/{actor-system → message-router}/index.js +1 -1
  93. package/dist/services/message-router/index.js.map +1 -0
  94. package/dist/services/message-router/message-router.service.d.ts +53 -0
  95. package/dist/services/message-router/message-router.service.d.ts.map +1 -0
  96. package/dist/services/message-router/message-router.service.js +519 -0
  97. package/dist/services/message-router/message-router.service.js.map +1 -0
  98. package/dist/services/queue-bus/cluster-contracts.d.ts +1 -1
  99. package/dist/services/queue-bus/cluster-contracts.d.ts.map +1 -1
  100. package/dist/services/queue-bus/cluster-contracts.js.map +1 -1
  101. package/dist/services/queue-bus/queue-bus.service.d.ts +3 -21
  102. package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
  103. package/dist/services/queue-bus/queue-bus.service.js +15 -119
  104. package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
  105. package/dist/utils/id.utils.d.ts +3 -0
  106. package/dist/utils/id.utils.d.ts.map +1 -0
  107. package/dist/utils/id.utils.js +14 -0
  108. package/dist/utils/id.utils.js.map +1 -0
  109. package/dist/utils/index.d.ts +1 -0
  110. package/dist/utils/index.d.ts.map +1 -1
  111. package/dist/utils/index.js +1 -0
  112. package/dist/utils/index.js.map +1 -1
  113. package/dist/wal/index.d.ts +4 -0
  114. package/dist/wal/index.d.ts.map +1 -0
  115. package/dist/{services/gate → wal}/index.js +3 -1
  116. package/dist/wal/index.js.map +1 -0
  117. package/dist/wal/wal.scripts.d.ts +51 -0
  118. package/dist/wal/wal.scripts.d.ts.map +1 -0
  119. package/dist/wal/wal.scripts.js +84 -0
  120. package/dist/wal/wal.scripts.js.map +1 -0
  121. package/dist/wal/wal.service.d.ts +46 -0
  122. package/dist/wal/wal.service.d.ts.map +1 -0
  123. package/dist/wal/wal.service.js +243 -0
  124. package/dist/wal/wal.service.js.map +1 -0
  125. package/dist/wal/wal.types.d.ts +23 -0
  126. package/dist/wal/wal.types.d.ts.map +1 -0
  127. package/dist/wal/wal.types.js +3 -0
  128. package/dist/wal/wal.types.js.map +1 -0
  129. package/dist/workers/consistent-hash.d.ts +97 -0
  130. package/dist/workers/consistent-hash.d.ts.map +1 -0
  131. package/dist/workers/consistent-hash.js +231 -0
  132. package/dist/workers/consistent-hash.js.map +1 -0
  133. package/dist/workers/entity-worker-manager.d.ts +35 -0
  134. package/dist/workers/entity-worker-manager.d.ts.map +1 -0
  135. package/dist/workers/entity-worker-manager.js +237 -0
  136. package/dist/workers/entity-worker-manager.js.map +1 -0
  137. package/dist/workers/entity-worker.d.ts +54 -0
  138. package/dist/workers/entity-worker.d.ts.map +1 -0
  139. package/dist/workers/entity-worker.js +142 -0
  140. package/dist/workers/entity-worker.js.map +1 -0
  141. package/dist/workers/index.d.ts +4 -0
  142. package/dist/workers/index.d.ts.map +1 -0
  143. package/dist/{services/log → workers}/index.js +3 -1
  144. package/dist/workers/index.js.map +1 -0
  145. package/package.json +17 -4
  146. package/dist/services/actor-system/actor-system.service.d.ts +0 -19
  147. package/dist/services/actor-system/actor-system.service.d.ts.map +0 -1
  148. package/dist/services/actor-system/actor-system.service.js +0 -86
  149. package/dist/services/actor-system/actor-system.service.js.map +0 -1
  150. package/dist/services/actor-system/index.d.ts +0 -2
  151. package/dist/services/actor-system/index.d.ts.map +0 -1
  152. package/dist/services/actor-system/index.js.map +0 -1
  153. package/dist/services/executor-pool/executor-pool.service.d.ts +0 -38
  154. package/dist/services/executor-pool/executor-pool.service.d.ts.map +0 -1
  155. package/dist/services/executor-pool/executor-pool.service.js +0 -166
  156. package/dist/services/executor-pool/executor-pool.service.js.map +0 -1
  157. package/dist/services/executor-pool/index.d.ts +0 -2
  158. package/dist/services/executor-pool/index.d.ts.map +0 -1
  159. package/dist/services/executor-pool/index.js.map +0 -1
  160. package/dist/services/gate/gate.service.d.ts +0 -17
  161. package/dist/services/gate/gate.service.d.ts.map +0 -1
  162. package/dist/services/gate/gate.service.js +0 -81
  163. package/dist/services/gate/gate.service.js.map +0 -1
  164. package/dist/services/gate/index.d.ts +0 -2
  165. package/dist/services/gate/index.d.ts.map +0 -1
  166. package/dist/services/gate/index.js.map +0 -1
  167. package/dist/services/log/index.d.ts +0 -2
  168. package/dist/services/log/index.d.ts.map +0 -1
  169. package/dist/services/log/index.js.map +0 -1
  170. package/dist/services/log/log.service.d.ts +0 -21
  171. package/dist/services/log/log.service.d.ts.map +0 -1
  172. package/dist/services/log/log.service.js +0 -92
  173. package/dist/services/log/log.service.js.map +0 -1
  174. package/dist/services/registry/index.d.ts +0 -4
  175. package/dist/services/registry/index.d.ts.map +0 -1
  176. package/dist/services/registry/index.js +0 -20
  177. package/dist/services/registry/index.js.map +0 -1
  178. package/dist/services/registry/registry.service.d.ts +0 -43
  179. package/dist/services/registry/registry.service.d.ts.map +0 -1
  180. package/dist/services/registry/registry.service.js +0 -367
  181. package/dist/services/registry/registry.service.js.map +0 -1
  182. package/dist/services/registry/registry.types.js.map +0 -1
  183. package/dist/services/registry/schema-converter.d.ts +0 -2
  184. package/dist/services/registry/schema-converter.d.ts.map +0 -1
  185. package/dist/services/registry/schema-converter.js +0 -27
  186. package/dist/services/registry/schema-converter.js.map +0 -1
  187. package/dist/services/result-collector/index.d.ts +0 -2
  188. package/dist/services/result-collector/index.d.ts.map +0 -1
  189. package/dist/services/result-collector/index.js +0 -18
  190. package/dist/services/result-collector/index.js.map +0 -1
  191. package/dist/services/result-collector/result-collector.service.d.ts +0 -17
  192. package/dist/services/result-collector/result-collector.service.d.ts.map +0 -1
  193. package/dist/services/result-collector/result-collector.service.js +0 -92
  194. package/dist/services/result-collector/result-collector.service.js.map +0 -1
  195. package/dist/services/scheduler/index.d.ts +0 -2
  196. package/dist/services/scheduler/index.d.ts.map +0 -1
  197. package/dist/services/scheduler/index.js +0 -18
  198. package/dist/services/scheduler/index.js.map +0 -1
  199. package/dist/services/scheduler/scheduler.service.d.ts +0 -17
  200. package/dist/services/scheduler/scheduler.service.d.ts.map +0 -1
  201. package/dist/services/scheduler/scheduler.service.js +0 -140
  202. package/dist/services/scheduler/scheduler.service.js.map +0 -1
  203. /package/dist/{services/registry → domain/interfaces}/registry.types.d.ts +0 -0
  204. /package/dist/{services/registry → domain/interfaces}/registry.types.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"master-coordinator.js","sourceRoot":"","sources":["../../src/cluster/master-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { OnModuleInit, OnApplicationShutdown } from '@nestjs/common';
2
+ import Redis from 'ioredis';
3
+ import { IAtomicQueuesModuleConfig } from '../domain';
4
+ export declare class RedisHealthMonitor implements OnModuleInit, OnApplicationShutdown {
5
+ private readonly redis;
6
+ private readonly config;
7
+ private readonly logger;
8
+ private readonly enabled;
9
+ private readonly checkIntervalMs;
10
+ private readonly failureThreshold;
11
+ private checkTimer;
12
+ private consecutiveFailures;
13
+ private _isDegraded;
14
+ private readonly healthChangeListeners;
15
+ constructor(redis: Redis, config: IAtomicQueuesModuleConfig);
16
+ onModuleInit(): Promise<void>;
17
+ onApplicationShutdown(): Promise<void>;
18
+ get isDegraded(): boolean;
19
+ onHealthChange(listener: (healthy: boolean) => void): () => void;
20
+ private check;
21
+ private notifyListeners;
22
+ }
23
+ //# sourceMappingURL=redis-health-monitor.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-health-monitor.service.d.ts","sourceRoot":"","sources":["../../src/cluster/redis-health-monitor.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAGtD,qBACa,kBAAmB,YAAW,YAAY,EAAE,qBAAqB;IAa7C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAyC;gBAG/B,KAAK,EAAE,KAAK,EACX,MAAM,EAAE,yBAAyB;IAO5E,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAO5C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,cAAc,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;YAQlD,KAAK;IAuBnB,OAAO,CAAC,eAAe;CASxB"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
17
+ var RedisHealthMonitor_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.RedisHealthMonitor = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const ioredis_1 = __importDefault(require("ioredis"));
22
+ const constants_1 = require("../services/constants");
23
+ let RedisHealthMonitor = RedisHealthMonitor_1 = class RedisHealthMonitor {
24
+ constructor(redis, config) {
25
+ this.redis = redis;
26
+ this.config = config;
27
+ this.logger = new common_1.Logger(RedisHealthMonitor_1.name);
28
+ this.checkTimer = null;
29
+ this.consecutiveFailures = 0;
30
+ this._isDegraded = false;
31
+ this.healthChangeListeners = [];
32
+ this.enabled = config.grpc?.enabled ?? false;
33
+ this.checkIntervalMs = config.grpc?.redisHealthCheckMs ?? 500;
34
+ this.failureThreshold = config.grpc?.redisHealthFailureThreshold ?? 3;
35
+ }
36
+ async onModuleInit() {
37
+ if (!this.enabled)
38
+ return;
39
+ this.checkTimer = setInterval(() => {
40
+ this.check().catch((err) => {
41
+ this.logger.error(`Health check error: ${err.message}`);
42
+ });
43
+ }, this.checkIntervalMs);
44
+ this.logger.log(`Redis health monitor started: interval=${this.checkIntervalMs}ms, threshold=${this.failureThreshold}`);
45
+ }
46
+ async onApplicationShutdown() {
47
+ if (this.checkTimer) {
48
+ clearInterval(this.checkTimer);
49
+ this.checkTimer = null;
50
+ }
51
+ }
52
+ get isDegraded() {
53
+ return this._isDegraded;
54
+ }
55
+ onHealthChange(listener) {
56
+ this.healthChangeListeners.push(listener);
57
+ return () => {
58
+ const idx = this.healthChangeListeners.indexOf(listener);
59
+ if (idx >= 0)
60
+ this.healthChangeListeners.splice(idx, 1);
61
+ };
62
+ }
63
+ async check() {
64
+ try {
65
+ await this.redis.ping();
66
+ this.consecutiveFailures = 0;
67
+ if (this._isDegraded) {
68
+ this._isDegraded = false;
69
+ this.logger.log('Redis connectivity restored');
70
+ this.notifyListeners(true);
71
+ }
72
+ }
73
+ catch {
74
+ this.consecutiveFailures++;
75
+ if (!this._isDegraded && this.consecutiveFailures >= this.failureThreshold) {
76
+ this._isDegraded = true;
77
+ this.logger.error(`Redis unreachable after ${this.consecutiveFailures} consecutive failures — entering degraded mode`);
78
+ this.notifyListeners(false);
79
+ }
80
+ }
81
+ }
82
+ notifyListeners(healthy) {
83
+ for (const listener of this.healthChangeListeners) {
84
+ try {
85
+ listener(healthy);
86
+ }
87
+ catch (err) {
88
+ this.logger.error(`Health change listener error: ${err.message}`);
89
+ }
90
+ }
91
+ }
92
+ };
93
+ exports.RedisHealthMonitor = RedisHealthMonitor;
94
+ exports.RedisHealthMonitor = RedisHealthMonitor = RedisHealthMonitor_1 = __decorate([
95
+ (0, common_1.Injectable)(),
96
+ __param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_REDIS)),
97
+ __param(1, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
98
+ __metadata("design:paramtypes", [ioredis_1.default, Object])
99
+ ], RedisHealthMonitor);
100
+ //# sourceMappingURL=redis-health-monitor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-health-monitor.service.js","sourceRoot":"","sources":["../../src/cluster/redis-health-monitor.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,2CAAiG;AACjG,sDAA4B;AAE5B,qDAAkF;AAG3E,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAY7B,YAC+B,KAA6B,EAC5B,MAAkD;QADlC,UAAK,GAAL,KAAK,CAAO;QACX,WAAM,GAAN,MAAM,CAA2B;QAbjE,WAAM,GAAG,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAKtD,eAAU,GAA0B,IAAI,CAAC;QACzC,wBAAmB,GAAG,CAAC,CAAC;QACxB,gBAAW,GAAG,KAAK,CAAC;QAEX,0BAAqB,GAAsC,EAAE,CAAC;QAM7E,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,kBAAkB,IAAI,GAAG,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,IAAI,EAAE,2BAA2B,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,0CAA0C,IAAI,CAAC,eAAe,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,CACvG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,cAAc,CAAC,QAAoC;QACjD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzD,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,KAAK;QACjB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAE7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC/C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE3B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,2BAA2B,IAAI,CAAC,mBAAmB,gDAAgD,CACpG,CAAC;gBACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,OAAgB;QACtC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAClD,IAAI,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AAtFY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAcR,WAAA,IAAA,eAAM,EAAC,+BAAmB,CAAC,CAAA;IAC3B,WAAA,IAAA,eAAM,EAAC,gCAAoB,CAAC,CAAA;qCADwB,iBAAK;GAbjD,kBAAkB,CAsF9B"}
@@ -0,0 +1,48 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { IAtomicQueuesModuleConfig } from '../domain';
3
+ import { ClusterDiscoveryService } from './cluster-discovery.service';
4
+ export interface ServerRingNode {
5
+ serverId: string;
6
+ grpcAddress: string;
7
+ serviceGroup: string;
8
+ entityTypes: string[];
9
+ }
10
+ /**
11
+ * Server Ring — consistent hash ring of cluster servers.
12
+ *
13
+ * Determines which server owns a given entity key.
14
+ * Updates automatically when cluster membership changes.
15
+ */
16
+ export declare class ServerRingService implements OnModuleInit {
17
+ private readonly config;
18
+ private readonly discovery;
19
+ private readonly logger;
20
+ private readonly ring;
21
+ private readonly enabled;
22
+ private readonly localServerId;
23
+ constructor(config: IAtomicQueuesModuleConfig, discovery: ClusterDiscoveryService);
24
+ onModuleInit(): Promise<void>;
25
+ /**
26
+ * Determine which server owns the given entity key.
27
+ * If gRPC is disabled or the entity is local, returns null (process locally).
28
+ */
29
+ getOwner(entityType: string, entityId: string): ServerRingNode | null;
30
+ /**
31
+ * Check if the current server owns the given entity.
32
+ */
33
+ isLocal(entityType: string, entityId: string): boolean;
34
+ /**
35
+ * Get the local server ID.
36
+ */
37
+ getLocalServerId(): string;
38
+ /**
39
+ * Get all server IDs in the ring.
40
+ */
41
+ getServerIds(): string[];
42
+ /**
43
+ * Get the number of servers in the ring.
44
+ */
45
+ get size(): number;
46
+ private rebuildRing;
47
+ }
48
+ //# sourceMappingURL=server-ring.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-ring.service.d.ts","sourceRoot":"","sources":["../../src/cluster/server-ring.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAGtD,OAAO,EAAE,uBAAuB,EAAe,MAAM,6BAA6B,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBACa,iBAAkB,YAAW,YAAY;IAOpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA+C;IACpE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAGU,MAAM,EAAE,yBAAyB,EAC/D,SAAS,EAAE,uBAAuB;IAM/C,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBnC;;;OAGG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAgBrE;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAStD;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAMD,OAAO,CAAC,WAAW;CA8BpB"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var ServerRingService_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ServerRingService = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const consistent_hash_1 = require("../workers/consistent-hash");
19
+ const constants_1 = require("../services/constants");
20
+ const cluster_discovery_service_1 = require("./cluster-discovery.service");
21
+ /**
22
+ * Server Ring — consistent hash ring of cluster servers.
23
+ *
24
+ * Determines which server owns a given entity key.
25
+ * Updates automatically when cluster membership changes.
26
+ */
27
+ let ServerRingService = ServerRingService_1 = class ServerRingService {
28
+ constructor(config, discovery) {
29
+ this.config = config;
30
+ this.discovery = discovery;
31
+ this.logger = new common_1.Logger(ServerRingService_1.name);
32
+ this.ring = new consistent_hash_1.ConsistentHashRing(150);
33
+ this.enabled = config.grpc?.enabled ?? false;
34
+ this.localServerId = config.grpc?.serverId ?? 'unknown';
35
+ }
36
+ async onModuleInit() {
37
+ if (!this.enabled)
38
+ return;
39
+ // Load initial ring state
40
+ const nodes = await this.discovery.getNodes();
41
+ this.rebuildRing(nodes);
42
+ // Listen for ring changes
43
+ this.discovery.onRingChange((updatedNodes) => {
44
+ this.rebuildRing(updatedNodes);
45
+ });
46
+ this.logger.log(`Server ring initialized with ${this.ring.size} nodes`);
47
+ }
48
+ // =========================================================================
49
+ // PUBLIC API
50
+ // =========================================================================
51
+ /**
52
+ * Determine which server owns the given entity key.
53
+ * If gRPC is disabled or the entity is local, returns null (process locally).
54
+ */
55
+ getOwner(entityType, entityId) {
56
+ if (!this.enabled)
57
+ return null;
58
+ if (this.ring.size === 0)
59
+ return null;
60
+ const entityKey = `${entityType}:${entityId}`;
61
+ // Use filtered lookup: only consider servers that handle this entity type
62
+ const owner = this.ring.getNodeFiltered(entityKey, (node) => {
63
+ // If the node has no entity types declared, it accepts all
64
+ if (node.data.entityTypes.length === 0)
65
+ return true;
66
+ return node.data.entityTypes.includes(entityType);
67
+ });
68
+ return owner?.data ?? null;
69
+ }
70
+ /**
71
+ * Check if the current server owns the given entity.
72
+ */
73
+ isLocal(entityType, entityId) {
74
+ if (!this.enabled)
75
+ return true; // Single-server mode: everything is local
76
+ const owner = this.getOwner(entityType, entityId);
77
+ if (!owner)
78
+ return true; // No owner found, process locally
79
+ return owner.serverId === this.localServerId;
80
+ }
81
+ /**
82
+ * Get the local server ID.
83
+ */
84
+ getLocalServerId() {
85
+ return this.localServerId;
86
+ }
87
+ /**
88
+ * Get all server IDs in the ring.
89
+ */
90
+ getServerIds() {
91
+ return this.ring.getNodeIds();
92
+ }
93
+ /**
94
+ * Get the number of servers in the ring.
95
+ */
96
+ get size() {
97
+ return this.ring.size;
98
+ }
99
+ // =========================================================================
100
+ // INTERNAL
101
+ // =========================================================================
102
+ rebuildRing(nodes) {
103
+ const currentIds = new Set(this.ring.getNodeIds());
104
+ const newIds = new Set(nodes.map((n) => n.serverId));
105
+ // Remove nodes that left
106
+ for (const id of currentIds) {
107
+ if (!newIds.has(id)) {
108
+ this.ring.removeNode(id);
109
+ this.logger.log(`Removed server ${id} from ring`);
110
+ }
111
+ }
112
+ // Add/update nodes
113
+ for (const node of nodes) {
114
+ const ringNode = {
115
+ id: node.serverId,
116
+ data: {
117
+ serverId: node.serverId,
118
+ grpcAddress: node.grpcAddress,
119
+ serviceGroup: node.serviceGroup,
120
+ entityTypes: node.entityTypes,
121
+ },
122
+ };
123
+ if (!currentIds.has(node.serverId)) {
124
+ this.ring.addNode(ringNode);
125
+ this.logger.log(`Added server ${node.serverId} to ring`);
126
+ }
127
+ }
128
+ }
129
+ };
130
+ exports.ServerRingService = ServerRingService;
131
+ exports.ServerRingService = ServerRingService = ServerRingService_1 = __decorate([
132
+ (0, common_1.Injectable)(),
133
+ __param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
134
+ __metadata("design:paramtypes", [Object, cluster_discovery_service_1.ClusterDiscoveryService])
135
+ ], ServerRingService);
136
+ //# sourceMappingURL=server-ring.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-ring.service.js","sourceRoot":"","sources":["../../src/cluster/server-ring.service.ts"],"names":[],"mappings":"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"}
@@ -53,36 +53,28 @@ export declare const EntityId: typeof QueueEntityId;
53
53
  /**
54
54
  * @QueueEntity decorator
55
55
  *
56
- * Single decorator that combines @EntityType and @QueueEntityId into one.
57
- * This is the recommended way to mark commands/queries for queue routing.
56
+ * Sets the entity type for queue routing. Use with `@QueueEntityId()` on the
57
+ * constructor parameter that holds the entity ID.
58
58
  *
59
- * @param entityType - The entity type for routing (e.g., 'table', 'account')
60
- * @param entityIdProperty - Optional property name containing the entity ID.
61
- * If omitted, uses module-level defaultEntityId from entities config.
59
+ * @param entityType - The entity type for routing (e.g., 'order', 'account')
62
60
  *
63
61
  * @example
64
- * // With explicit property name:
65
- * @QueueEntity('table', 'tableId')
66
- * export class MakeBetCommand {
67
- * constructor(
68
- * public readonly tableId: string, // <- unchanged!
69
- * public readonly amount: number,
70
- * ) {}
71
- * }
72
- *
73
- * @example
74
- * // Using module default (entities config has defaultEntityId: 'tableId'):
75
- * @QueueEntity('table')
76
- * export class DealCommand {
62
+ * ```typescript
63
+ * @QueueEntity('order')
64
+ * export class PlaceOrderCommand {
77
65
  * constructor(
78
- * public readonly tableId: string,
79
- * public readonly card: string,
66
+ * @QueueEntityId() public readonly orderId: string,
67
+ * public readonly quantity: number,
80
68
  * ) {}
81
69
  * }
82
70
  *
83
- * @example
84
- * // Then just enqueue directly:
85
- * await queueBus.enqueue(new MakeBetCommand(tableId, 100));
71
+ * await queueBus.enqueue(new PlaceOrderCommand(orderId, 100));
72
+ * ```
73
+ */
74
+ export declare function QueueEntity(entityType: string): ClassDecorator;
75
+ /**
76
+ * @deprecated The two-argument form `@QueueEntity('type', 'idProp')` is deprecated.
77
+ * Use `@QueueEntity('type')` + `@QueueEntityId()` on the parameter instead.
86
78
  */
87
- export declare function QueueEntity(entityType: string, entityIdProperty?: string): ClassDecorator;
79
+ export declare function QueueEntity(entityType: string, entityIdProperty: string): ClassDecorator;
88
80
  //# sourceMappingURL=entity.decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/entity.decorators.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAI7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,GAAG,kBAAkB,CAiDtE;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,sBAAgB,CAAC;AAMtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,cAAc,CAUzF"}
1
+ {"version":3,"file":"entity.decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/entity.decorators.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAI7D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,aAAa,IAAI,iBAAiB,GAAG,kBAAkB,CAiDtE;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,sBAAgB,CAAC;AAEtC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAAC;AAChE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,cAAc,CAAC"}
@@ -100,48 +100,9 @@ function QueueEntityId() {
100
100
  * @deprecated Use @QueueEntityId() instead. This alias is provided for backwards compatibility.
101
101
  */
102
102
  exports.EntityId = QueueEntityId;
103
- // =============================================================================
104
- // NEW COMBINED DECORATOR - Less Invasive
105
- // =============================================================================
106
- /**
107
- * @QueueEntity decorator
108
- *
109
- * Single decorator that combines @EntityType and @QueueEntityId into one.
110
- * This is the recommended way to mark commands/queries for queue routing.
111
- *
112
- * @param entityType - The entity type for routing (e.g., 'table', 'account')
113
- * @param entityIdProperty - Optional property name containing the entity ID.
114
- * If omitted, uses module-level defaultEntityId from entities config.
115
- *
116
- * @example
117
- * // With explicit property name:
118
- * @QueueEntity('table', 'tableId')
119
- * export class MakeBetCommand {
120
- * constructor(
121
- * public readonly tableId: string, // <- unchanged!
122
- * public readonly amount: number,
123
- * ) {}
124
- * }
125
- *
126
- * @example
127
- * // Using module default (entities config has defaultEntityId: 'tableId'):
128
- * @QueueEntity('table')
129
- * export class DealCommand {
130
- * constructor(
131
- * public readonly tableId: string,
132
- * public readonly card: string,
133
- * ) {}
134
- * }
135
- *
136
- * @example
137
- * // Then just enqueue directly:
138
- * await queueBus.enqueue(new MakeBetCommand(tableId, 100));
139
- */
140
103
  function QueueEntity(entityType, entityIdProperty) {
141
104
  return (target) => {
142
- // Always set entity type
143
105
  Reflect.defineMetadata(constants_1.ENTITY_TYPE_METADATA, entityType, target);
144
- // Set entity ID property if provided (otherwise falls back to module config)
145
106
  if (entityIdProperty) {
146
107
  Reflect.defineMetadata(constants_1.ENTITY_ID_METADATA, entityIdProperty, target);
147
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"entity.decorators.js","sourceRoot":"","sources":["../../src/decorators/entity.decorators.ts"],"names":[],"mappings":";;;AAuBA,gCAIC;AA6BD,sCAiDC;AA6CD,kCAUC;AAhKD,2CAAuE;AACvE,yCAAmD;AACnD,mCAAkD;AAElD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,UAAU,CAAC,UAAkB;IAC3C,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,OAAO,CAAC,cAAc,CAAC,gCAAoB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,aAAa;IAC3B,OAAO,CAAC,MAAc,EAAE,WAAwC,EAAE,cAAuB,EAAE,EAAE;QAC3F,kDAAkD;QAClD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,MAAkB,CAAC;YACvC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;YAEnC,0CAA0C;YAC1C,MAAM,SAAS,GAAG,IAAA,+BAAuB,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACvE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,4CAA4C,cAAc,OAAO,SAAS,IAAI;oBAC5E,yDAAyD,CAC5D,CAAC;YACJ,CAAC;YAED,sBAAsB;YACtB,MAAM,QAAQ,GAAG,gCAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,2CAA2C,SAAS,IAAI;oBACtD,aAAa,QAAQ,UAAU,SAAS,KAAK;oBAC7C,mDAAmD,CACtD,CAAC;YACJ,CAAC;YAED,gCAAqB,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAClD,OAAO,CAAC,cAAc,CAAC,8BAAkB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,8CAA8C;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAErC,mDAAmD;QACnD,MAAM,QAAQ,GAAG,gCAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2CAA2C,SAAS,IAAI;gBACtD,aAAa,QAAQ,UAAU,QAAQ,KAAK;gBAC5C,yCAAyC,CAC5C,CAAC;QACJ,CAAC;QAED,gCAAqB,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,cAAc,CAAC,8BAAkB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACU,QAAA,QAAQ,GAAG,aAAa,CAAC;AAEtC,gFAAgF;AAChF,yCAAyC;AACzC,gFAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAgB,WAAW,CAAC,UAAkB,EAAE,gBAAyB;IACvE,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,yBAAyB;QACzB,OAAO,CAAC,cAAc,CAAC,gCAAoB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEjE,6EAA6E;QAC7E,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,cAAc,CAAC,8BAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"entity.decorators.js","sourceRoot":"","sources":["../../src/decorators/entity.decorators.ts"],"names":[],"mappings":";;;AAuBA,gCAIC;AA6BD,sCAiDC;AAkCD,kCAQC;AAnJD,2CAAuE;AACvE,yCAAmD;AACnD,mCAAkD;AAElD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,UAAU,CAAC,UAAkB;IAC3C,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,OAAO,CAAC,cAAc,CAAC,gCAAoB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACnE,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,aAAa;IAC3B,OAAO,CAAC,MAAc,EAAE,WAAwC,EAAE,cAAuB,EAAE,EAAE;QAC3F,kDAAkD;QAClD,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,MAAkB,CAAC;YACvC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;YAEnC,0CAA0C;YAC1C,MAAM,SAAS,GAAG,IAAA,+BAAuB,EAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YACvE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,4CAA4C,cAAc,OAAO,SAAS,IAAI;oBAC5E,yDAAyD,CAC5D,CAAC;YACJ,CAAC;YAED,sBAAsB;YACtB,MAAM,QAAQ,GAAG,gCAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,2CAA2C,SAAS,IAAI;oBACtD,aAAa,QAAQ,UAAU,SAAS,KAAK;oBAC7C,mDAAmD,CACtD,CAAC;YACJ,CAAC;YAED,gCAAqB,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YAClD,OAAO,CAAC,cAAc,CAAC,8BAAkB,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QAED,8CAA8C;QAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QAErC,mDAAmD;QACnD,MAAM,QAAQ,GAAG,gCAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,2CAA2C,SAAS,IAAI;gBACtD,aAAa,QAAQ,UAAU,QAAQ,KAAK;gBAC5C,yCAAyC,CAC5C,CAAC;QACJ,CAAC;QAED,gCAAqB,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,cAAc,CAAC,8BAAkB,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACU,QAAA,QAAQ,GAAG,aAAa,CAAC;AA6BtC,SAAgB,WAAW,CAAC,UAAkB,EAAE,gBAAyB;IACvE,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,OAAO,CAAC,cAAc,CAAC,gCAAoB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAEjE,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,CAAC,cAAc,CAAC,8BAAkB,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Options for @JobCommand decorator
2
+ * @deprecated `@JobCommand` is deprecated. Use `@EntityType` + `@QueueEntityId` with `@CommandHandler`.
3
3
  */
4
4
  export interface JobCommandOptions {
5
5
  /** Job name (defaults to kebab-case of class name without 'Command' suffix) */
@@ -8,9 +8,11 @@ export interface JobCommandOptions {
8
8
  entityType?: string;
9
9
  /** Which constructor parameter is the entityId (default: 0 = first param) */
10
10
  entityIdParam?: number | string;
11
+ /** Explicit parameter names — use when builds minify constructor argument names */
12
+ params?: string[];
11
13
  }
12
14
  /**
13
- * Options for @JobQuery decorator
15
+ * @deprecated `@JobQuery` is deprecated. Use `@EntityType` + `@QueueEntityId` with `@QueryHandler`.
14
16
  */
15
17
  export interface JobQueryOptions {
16
18
  /** Job name (defaults to kebab-case of class name without 'Query' suffix) */
@@ -19,10 +21,10 @@ export interface JobQueryOptions {
19
21
  entityType?: string;
20
22
  /** Which constructor parameter is the entityId (default: 0 = first param) */
21
23
  entityIdParam?: number | string;
24
+ /** Explicit parameter names — use when builds minify constructor argument names */
25
+ params?: string[];
22
26
  }
23
- /**
24
- * Stored job command metadata
25
- */
27
+ /** @deprecated Part of the deprecated `@JobCommand` API. */
26
28
  export interface JobCommandMetadata {
27
29
  jobName: string;
28
30
  entityType?: string;
@@ -30,9 +32,7 @@ export interface JobCommandMetadata {
30
32
  targetClass: Function;
31
33
  paramNames: string[];
32
34
  }
33
- /**
34
- * Stored job query metadata
35
- */
35
+ /** @deprecated Part of the deprecated `@JobQuery` API. */
36
36
  export interface JobQueryMetadata {
37
37
  jobName: string;
38
38
  entityType?: string;
@@ -45,8 +45,8 @@ export interface JobQueryMetadata {
45
45
  */
46
46
  export interface SchemaDecoratorOptions {
47
47
  /** The Zod schema for the message payload */
48
- schema: any;
48
+ schema: unknown;
49
49
  /** Optional reply schema (for queries) */
50
- replySchema?: any;
50
+ replySchema?: unknown;
51
51
  }
52
52
  //# sourceMappingURL=interfaces.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/decorators/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,WAAW,EAAE,QAAQ,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,WAAW,EAAE,QAAQ,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,MAAM,EAAE,GAAG,CAAC;IACZ,0CAA0C;IAC1C,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/decorators/interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,WAAW,EAAE,QAAQ,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,WAAW,EAAE,QAAQ,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"}
@@ -1,60 +1,12 @@
1
1
  import { JobCommandOptions, JobQueryOptions } from './interfaces';
2
2
  /**
3
- * @JobCommand class decorator
4
- *
5
- * Marks a command class for automatic job routing. When a job with the
6
- * specified name arrives, the library will automatically instantiate
7
- * the command with entityId + job.data and execute it via CommandBus.
8
- *
9
- * This eliminates the need for @JobHandler boilerplate in processors.
10
- *
11
- * @example
12
- * ```typescript
13
- * // Option 1: Explicit job name
14
- * @JobCommand('make-bet')
15
- * export class MakeBetCommand {
16
- * constructor(
17
- * public readonly tableId: string, // entityId (first param)
18
- * public readonly playerId: string,
19
- * public readonly amount: number,
20
- * ) {}
21
- * }
22
- *
23
- * // Option 2: Auto-derived job name (MakeBetCommand -> 'make-bet')
24
- * @JobCommand()
25
- * export class MakeBetCommand { ... }
26
- *
27
- * // Option 3: With options
28
- * @JobCommand({
29
- * name: 'place-bet',
30
- * entityType: 'table',
31
- * entityIdParam: 'tableId', // or 0 for first param
32
- * })
33
- * export class PlaceBetCommand { ... }
34
- * ```
3
+ * @deprecated Use `@EntityType` + `@QueueEntityId` (or `@QueueEntity`) with standard `@nestjs/cqrs`
4
+ * `@CommandHandler` instead. This decorator will be removed in a future major version.
35
5
  */
36
6
  export declare function JobCommand(options?: string | JobCommandOptions): ClassDecorator;
37
7
  /**
38
- * @JobQuery class decorator
39
- *
40
- * Marks a query class for automatic job routing. When a job with the
41
- * specified name arrives, the library will automatically instantiate
42
- * the query with entityId + job.data and execute it via QueryBus.
43
- *
44
- * @example
45
- * ```typescript
46
- * @JobQuery('get-score')
47
- * export class GetScoreQuery {
48
- * constructor(
49
- * public readonly tableId: string,
50
- * public readonly seatIndex: number,
51
- * ) {}
52
- * }
53
- *
54
- * // Auto-derived: GetTableStateQuery -> 'get-table-state'
55
- * @JobQuery()
56
- * export class GetTableStateQuery { ... }
57
- * ```
8
+ * @deprecated Use `@EntityType` + `@QueueEntityId` (or `@QueueEntity`) with standard `@nestjs/cqrs`
9
+ * `@QueryHandler` instead. This decorator will be removed in a future major version.
58
10
  */
59
11
  export declare function JobQuery(options?: string | JobQueryOptions): ClassDecorator;
60
12
  //# sourceMappingURL=job.decorators.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"job.decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/job.decorators.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,eAAe,EAGhB,MAAM,cAAc,CAAC;AAGtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,cAAc,CAiB/E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,cAAc,CAiB3E"}
1
+ {"version":3,"file":"job.decorators.d.ts","sourceRoot":"","sources":["../../src/decorators/job.decorators.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,eAAe,EAGhB,MAAM,cAAc,CAAC;AAGtB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,cAAc,CAiB/E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,cAAc,CAiB3E"}