atomic-queues 1.4.1 → 1.6.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 (229) hide show
  1. package/README.md +300 -283
  2. package/dist/decorators/constants.d.ts +17 -0
  3. package/dist/decorators/constants.d.ts.map +1 -0
  4. package/dist/decorators/constants.js +23 -0
  5. package/dist/decorators/constants.js.map +1 -0
  6. package/dist/decorators/entity.decorators.d.ts +88 -0
  7. package/dist/decorators/entity.decorators.d.ts.map +1 -0
  8. package/dist/decorators/entity.decorators.js +150 -0
  9. package/dist/decorators/entity.decorators.js.map +1 -0
  10. package/dist/decorators/index.d.ts +9 -1
  11. package/dist/decorators/index.d.ts.map +1 -1
  12. package/dist/decorators/index.js +9 -1
  13. package/dist/decorators/index.js.map +1 -1
  14. package/dist/decorators/interfaces.d.ts +130 -0
  15. package/dist/decorators/interfaces.d.ts.map +1 -0
  16. package/dist/decorators/interfaces.js +3 -0
  17. package/dist/decorators/interfaces.js.map +1 -0
  18. package/dist/decorators/job.decorators.d.ts +60 -0
  19. package/dist/decorators/job.decorators.d.ts.map +1 -0
  20. package/dist/decorators/job.decorators.js +97 -0
  21. package/dist/decorators/job.decorators.js.map +1 -0
  22. package/dist/decorators/legacy.decorators.d.ts +36 -0
  23. package/dist/decorators/legacy.decorators.d.ts.map +1 -0
  24. package/dist/decorators/legacy.decorators.js +61 -0
  25. package/dist/decorators/legacy.decorators.js.map +1 -0
  26. package/dist/decorators/metadata-readers.d.ts +31 -0
  27. package/dist/decorators/metadata-readers.d.ts.map +1 -0
  28. package/dist/decorators/metadata-readers.js +53 -0
  29. package/dist/decorators/metadata-readers.js.map +1 -0
  30. package/dist/decorators/registry.d.ts +2 -0
  31. package/dist/decorators/registry.d.ts.map +1 -0
  32. package/dist/decorators/registry.js +6 -0
  33. package/dist/decorators/registry.js.map +1 -0
  34. package/dist/decorators/scaler.decorators.d.ts +65 -0
  35. package/dist/decorators/scaler.decorators.d.ts.map +1 -0
  36. package/dist/decorators/scaler.decorators.js +103 -0
  37. package/dist/decorators/scaler.decorators.js.map +1 -0
  38. package/dist/decorators/type-guards.d.ts +18 -0
  39. package/dist/decorators/type-guards.d.ts.map +1 -0
  40. package/dist/decorators/type-guards.js +32 -0
  41. package/dist/decorators/type-guards.js.map +1 -0
  42. package/dist/decorators/utils.d.ts +20 -0
  43. package/dist/decorators/utils.d.ts.map +1 -0
  44. package/dist/decorators/utils.js +98 -0
  45. package/dist/decorators/utils.js.map +1 -0
  46. package/dist/decorators/worker.decorators.d.ts +58 -0
  47. package/dist/decorators/worker.decorators.d.ts.map +1 -0
  48. package/dist/decorators/worker.decorators.js +92 -0
  49. package/dist/decorators/worker.decorators.js.map +1 -0
  50. package/dist/domain/interfaces/config.interfaces.d.ts +188 -0
  51. package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -0
  52. package/dist/domain/interfaces/config.interfaces.js +3 -0
  53. package/dist/domain/interfaces/config.interfaces.js.map +1 -0
  54. package/dist/domain/interfaces/cqrs.interfaces.d.ts +7 -0
  55. package/dist/domain/interfaces/cqrs.interfaces.d.ts.map +1 -0
  56. package/dist/domain/interfaces/cqrs.interfaces.js +3 -0
  57. package/dist/domain/interfaces/cqrs.interfaces.js.map +1 -0
  58. package/dist/domain/interfaces/event.interfaces.d.ts +71 -0
  59. package/dist/domain/interfaces/event.interfaces.d.ts.map +1 -0
  60. package/dist/domain/interfaces/event.interfaces.js +3 -0
  61. package/dist/domain/interfaces/event.interfaces.js.map +1 -0
  62. package/dist/domain/interfaces/index-tracking.interfaces.d.ts +69 -0
  63. package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +1 -0
  64. package/dist/domain/interfaces/index-tracking.interfaces.js +3 -0
  65. package/dist/domain/interfaces/index-tracking.interfaces.js.map +1 -0
  66. package/dist/domain/interfaces/index.d.ts +12 -0
  67. package/dist/domain/interfaces/index.d.ts.map +1 -0
  68. package/dist/domain/interfaces/index.js +28 -0
  69. package/dist/domain/interfaces/index.js.map +1 -0
  70. package/dist/domain/interfaces/job.interfaces.d.ts +76 -0
  71. package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -0
  72. package/dist/domain/interfaces/job.interfaces.js +3 -0
  73. package/dist/domain/interfaces/job.interfaces.js.map +1 -0
  74. package/dist/domain/interfaces/lock.interfaces.d.ts +54 -0
  75. package/dist/domain/interfaces/lock.interfaces.d.ts.map +1 -0
  76. package/dist/domain/interfaces/lock.interfaces.js +3 -0
  77. package/dist/domain/interfaces/lock.interfaces.js.map +1 -0
  78. package/dist/domain/interfaces/process.interfaces.d.ts +44 -0
  79. package/dist/domain/interfaces/process.interfaces.d.ts.map +1 -0
  80. package/dist/domain/interfaces/process.interfaces.js +3 -0
  81. package/dist/domain/interfaces/process.interfaces.js.map +1 -0
  82. package/dist/domain/interfaces/queue.interfaces.d.ts +46 -0
  83. package/dist/domain/interfaces/queue.interfaces.d.ts.map +1 -0
  84. package/dist/domain/interfaces/queue.interfaces.js +3 -0
  85. package/dist/domain/interfaces/queue.interfaces.js.map +1 -0
  86. package/dist/domain/interfaces/scaling.interfaces.d.ts +62 -0
  87. package/dist/domain/interfaces/scaling.interfaces.d.ts.map +1 -0
  88. package/dist/domain/interfaces/scaling.interfaces.js +3 -0
  89. package/dist/domain/interfaces/scaling.interfaces.js.map +1 -0
  90. package/dist/domain/interfaces/utility.types.d.ts +15 -0
  91. package/dist/domain/interfaces/utility.types.d.ts.map +1 -0
  92. package/dist/domain/interfaces/utility.types.js +3 -0
  93. package/dist/domain/interfaces/utility.types.js.map +1 -0
  94. package/dist/domain/interfaces/worker.interfaces.d.ts +120 -0
  95. package/dist/domain/interfaces/worker.interfaces.d.ts.map +1 -0
  96. package/dist/domain/interfaces/worker.interfaces.js +3 -0
  97. package/dist/domain/interfaces/worker.interfaces.js.map +1 -0
  98. package/dist/module/atomic-queues.module.d.ts.map +1 -1
  99. package/dist/module/atomic-queues.module.js +5 -0
  100. package/dist/module/atomic-queues.module.js.map +1 -1
  101. package/dist/services/cron-manager/cron-manager.service.d.ts +5 -4
  102. package/dist/services/cron-manager/cron-manager.service.d.ts.map +1 -1
  103. package/dist/services/cron-manager/cron-manager.service.js +26 -57
  104. package/dist/services/cron-manager/cron-manager.service.js.map +1 -1
  105. package/dist/services/index-manager/index-manager.service.d.ts +0 -4
  106. package/dist/services/index-manager/index-manager.service.d.ts.map +1 -1
  107. package/dist/services/index-manager/index-manager.service.js +4 -16
  108. package/dist/services/index-manager/index-manager.service.js.map +1 -1
  109. package/dist/services/index.d.ts +1 -0
  110. package/dist/services/index.d.ts.map +1 -1
  111. package/dist/services/index.js +1 -0
  112. package/dist/services/index.js.map +1 -1
  113. package/dist/services/processor-discovery/decorator-discovery.service.d.ts +40 -0
  114. package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +1 -0
  115. package/dist/services/processor-discovery/decorator-discovery.service.js +191 -0
  116. package/dist/services/processor-discovery/decorator-discovery.service.js.map +1 -0
  117. package/dist/services/processor-discovery/index.d.ts +4 -0
  118. package/dist/services/processor-discovery/index.d.ts.map +1 -1
  119. package/dist/services/processor-discovery/index.js +4 -0
  120. package/dist/services/processor-discovery/index.js.map +1 -1
  121. package/dist/services/processor-discovery/processor-discovery.service.d.ts +30 -138
  122. package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +1 -1
  123. package/dist/services/processor-discovery/processor-discovery.service.js +125 -502
  124. package/dist/services/processor-discovery/processor-discovery.service.js.map +1 -1
  125. package/dist/services/processor-discovery/processor-registry.d.ts +58 -0
  126. package/dist/services/processor-discovery/processor-registry.d.ts.map +1 -0
  127. package/dist/services/processor-discovery/processor-registry.js +74 -0
  128. package/dist/services/processor-discovery/processor-registry.js.map +1 -0
  129. package/dist/services/processor-discovery/scaling-registration.service.d.ts +60 -0
  130. package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +1 -0
  131. package/dist/services/processor-discovery/scaling-registration.service.js +261 -0
  132. package/dist/services/processor-discovery/scaling-registration.service.js.map +1 -0
  133. package/dist/services/processor-discovery/worker-factory.service.d.ts +54 -0
  134. package/dist/services/processor-discovery/worker-factory.service.d.ts.map +1 -0
  135. package/dist/services/processor-discovery/worker-factory.service.js +185 -0
  136. package/dist/services/processor-discovery/worker-factory.service.js.map +1 -0
  137. package/dist/services/queue-bus/entity-target.d.ts +58 -0
  138. package/dist/services/queue-bus/entity-target.d.ts.map +1 -0
  139. package/dist/services/queue-bus/entity-target.js +109 -0
  140. package/dist/services/queue-bus/entity-target.js.map +1 -0
  141. package/dist/services/queue-bus/index.d.ts +4 -0
  142. package/dist/services/queue-bus/index.d.ts.map +1 -1
  143. package/dist/services/queue-bus/index.js +4 -0
  144. package/dist/services/queue-bus/index.js.map +1 -1
  145. package/dist/services/queue-bus/queue-bus.service.d.ts +9 -145
  146. package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
  147. package/dist/services/queue-bus/queue-bus.service.js +23 -311
  148. package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
  149. package/dist/services/queue-bus/queue-bus.types.d.ts +40 -0
  150. package/dist/services/queue-bus/queue-bus.types.d.ts.map +1 -0
  151. package/dist/services/queue-bus/queue-bus.types.js +3 -0
  152. package/dist/services/queue-bus/queue-bus.types.js.map +1 -0
  153. package/dist/services/queue-bus/queue-bus.utils.d.ts +34 -0
  154. package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -0
  155. package/dist/services/queue-bus/queue-bus.utils.js +82 -0
  156. package/dist/services/queue-bus/queue-bus.utils.js.map +1 -0
  157. package/dist/services/queue-bus/queue-target.d.ts +61 -0
  158. package/dist/services/queue-bus/queue-target.d.ts.map +1 -0
  159. package/dist/services/queue-bus/queue-target.js +123 -0
  160. package/dist/services/queue-bus/queue-target.js.map +1 -0
  161. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +23 -6
  162. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +1 -1
  163. package/dist/services/queue-events-manager/queue-events-manager.service.js +69 -37
  164. package/dist/services/queue-events-manager/queue-events-manager.service.js.map +1 -1
  165. package/dist/services/resource-lock/resource-lock.service.d.ts +0 -4
  166. package/dist/services/resource-lock/resource-lock.service.d.ts.map +1 -1
  167. package/dist/services/resource-lock/resource-lock.service.js +4 -16
  168. package/dist/services/resource-lock/resource-lock.service.js.map +1 -1
  169. package/dist/services/service-queue/index.d.ts +1 -0
  170. package/dist/services/service-queue/index.d.ts.map +1 -1
  171. package/dist/services/service-queue/index.js +1 -0
  172. package/dist/services/service-queue/index.js.map +1 -1
  173. package/dist/services/service-queue/service-queue.service.d.ts +2 -35
  174. package/dist/services/service-queue/service-queue.service.d.ts.map +1 -1
  175. package/dist/services/service-queue/service-queue.service.js +17 -49
  176. package/dist/services/service-queue/service-queue.service.js.map +1 -1
  177. package/dist/services/service-queue/service-queue.types.d.ts +32 -0
  178. package/dist/services/service-queue/service-queue.types.d.ts.map +1 -0
  179. package/dist/services/service-queue/service-queue.types.js +27 -0
  180. package/dist/services/service-queue/service-queue.types.js.map +1 -0
  181. package/dist/services/spawn-queue/index.d.ts +2 -0
  182. package/dist/services/spawn-queue/index.d.ts.map +1 -0
  183. package/dist/services/spawn-queue/index.js +18 -0
  184. package/dist/services/spawn-queue/index.js.map +1 -0
  185. package/dist/services/spawn-queue/spawn-queue.service.d.ts +119 -0
  186. package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +1 -0
  187. package/dist/services/spawn-queue/spawn-queue.service.js +273 -0
  188. package/dist/services/spawn-queue/spawn-queue.service.js.map +1 -0
  189. package/dist/services/worker-manager/worker-manager.service.d.ts +18 -3
  190. package/dist/services/worker-manager/worker-manager.service.d.ts.map +1 -1
  191. package/dist/services/worker-manager/worker-manager.service.js +46 -21
  192. package/dist/services/worker-manager/worker-manager.service.js.map +1 -1
  193. package/dist/utils/async.utils.d.ts +51 -0
  194. package/dist/utils/async.utils.d.ts.map +1 -0
  195. package/dist/utils/async.utils.js +87 -0
  196. package/dist/utils/async.utils.js.map +1 -0
  197. package/dist/utils/helpers.d.ts +4 -123
  198. package/dist/utils/helpers.d.ts.map +1 -1
  199. package/dist/utils/helpers.js +18 -226
  200. package/dist/utils/helpers.js.map +1 -1
  201. package/dist/utils/index.d.ts +1 -0
  202. package/dist/utils/index.d.ts.map +1 -1
  203. package/dist/utils/index.js +1 -0
  204. package/dist/utils/index.js.map +1 -1
  205. package/dist/utils/job.utils.d.ts +50 -0
  206. package/dist/utils/job.utils.d.ts.map +1 -0
  207. package/dist/utils/job.utils.js +89 -0
  208. package/dist/utils/job.utils.js.map +1 -0
  209. package/dist/utils/naming.utils.d.ts +21 -0
  210. package/dist/utils/naming.utils.d.ts.map +1 -0
  211. package/dist/utils/naming.utils.js +38 -0
  212. package/dist/utils/naming.utils.js.map +1 -0
  213. package/dist/utils/rate-limit.utils.d.ts +9 -0
  214. package/dist/utils/rate-limit.utils.d.ts.map +1 -0
  215. package/dist/utils/rate-limit.utils.js +30 -0
  216. package/dist/utils/rate-limit.utils.js.map +1 -0
  217. package/dist/utils/redis.utils.d.ts +3 -0
  218. package/dist/utils/redis.utils.d.ts.map +1 -0
  219. package/dist/utils/redis.utils.js +14 -0
  220. package/dist/utils/redis.utils.js.map +1 -0
  221. package/package.json +17 -17
  222. package/dist/decorators/decorators.d.ts +0 -489
  223. package/dist/decorators/decorators.d.ts.map +0 -1
  224. package/dist/decorators/decorators.js +0 -680
  225. package/dist/decorators/decorators.js.map +0 -1
  226. package/dist/domain/interfaces.d.ts +0 -748
  227. package/dist/domain/interfaces.d.ts.map +0 -1
  228. package/dist/domain/interfaces.js +0 -19
  229. package/dist/domain/interfaces.js.map +0 -1
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkerProcessor = WorkerProcessor;
4
+ exports.JobHandler = JobHandler;
5
+ const constants_1 = require("./constants");
6
+ /**
7
+ * @WorkerProcessor class decorator
8
+ *
9
+ * Marks a class as a worker processor for a specific entity type.
10
+ * Combined with @JobHandler method decorators, this enables declarative
11
+ * job processing with automatic worker creation and management.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * @WorkerProcessor({
16
+ * entityType: 'table',
17
+ * queueName: (tableId) => `${tableId}-queue`,
18
+ * workerName: (tableId) => `table-worker-${tableId}`,
19
+ * workerConfig: {
20
+ * concurrency: 1,
21
+ * heartbeatTTL: 3,
22
+ * }
23
+ * })
24
+ * @Injectable()
25
+ * export class TableWorkerProcessor {
26
+ * constructor(private readonly commandBus: CommandBus) {}
27
+ *
28
+ * @JobHandler('make-bet')
29
+ * async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
30
+ * return this.commandBus.execute(new MakeBetCommand(entityId, job.data));
31
+ * }
32
+ *
33
+ * @JobHandler('*') // Wildcard handler for any unmatched job
34
+ * async handleDynamic(job: Job, entityId: string) {
35
+ * // Dynamic handling
36
+ * }
37
+ * }
38
+ * ```
39
+ */
40
+ function WorkerProcessor(options) {
41
+ return (target) => {
42
+ // Store the options with defaults
43
+ const metadata = {
44
+ ...options,
45
+ overrideDefaults: options.overrideDefaults ?? false,
46
+ };
47
+ Reflect.defineMetadata(constants_1.WORKER_PROCESSOR_METADATA, metadata, target);
48
+ // Mark as injectable if not already
49
+ if (!Reflect.hasMetadata('injectable', target)) {
50
+ Reflect.defineMetadata('injectable', true, target);
51
+ }
52
+ };
53
+ }
54
+ /**
55
+ * @JobHandler method decorator
56
+ *
57
+ * Marks a method as a handler for a specific job name.
58
+ * Use '*' as jobName to create a wildcard handler that catches
59
+ * any jobs not matched by specific handlers.
60
+ *
61
+ * @example
62
+ * ```typescript
63
+ * @JobHandler('make-bet')
64
+ * async handleMakeBet(job: Job<MakeBetData>, entityId: string) {
65
+ * // Handle make-bet jobs
66
+ * }
67
+ *
68
+ * @JobHandler('*')
69
+ * async handleOther(job: Job, entityId: string) {
70
+ * // Handle any other jobs
71
+ * }
72
+ * ```
73
+ */
74
+ function JobHandler(jobName) {
75
+ return (target, propertyKey, descriptor) => {
76
+ const methodName = String(propertyKey);
77
+ const isWildcard = jobName === '*';
78
+ // Store handler metadata on the method
79
+ const metadata = {
80
+ jobName,
81
+ methodName,
82
+ isWildcard,
83
+ };
84
+ Reflect.defineMetadata(constants_1.JOB_HANDLER_METADATA, metadata, target, propertyKey);
85
+ // Collect all handlers on the class
86
+ const existingHandlers = Reflect.getMetadata(constants_1.JOB_HANDLER_METADATA, target.constructor) || [];
87
+ existingHandlers.push(metadata);
88
+ Reflect.defineMetadata(constants_1.JOB_HANDLER_METADATA, existingHandlers, target.constructor);
89
+ return descriptor;
90
+ };
91
+ }
92
+ //# sourceMappingURL=worker.decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.decorators.js","sourceRoot":"","sources":["../../src/decorators/worker.decorators.ts"],"names":[],"mappings":";;AAqCA,0CAcC;AAsBD,gCAyBC;AAlGD,2CAA8E;AAG9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAgB,eAAe,CAAC,OAA+B;IAC7D,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC1B,kCAAkC;QAClC,MAAM,QAAQ,GAAG;YACf,GAAG,OAAO;YACV,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK;SACpD,CAAC;QACF,OAAO,CAAC,cAAc,CAAC,qCAAyB,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEpE,oCAAoC;QACpC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;IACH,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,OAAO,CACL,MAAc,EACd,WAA4B,EAC5B,UAA8B,EAC9B,EAAE;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,OAAO,KAAK,GAAG,CAAC;QAEnC,uCAAuC;QACvC,MAAM,QAAQ,GAAuB;YACnC,OAAO;YACP,UAAU;YACV,UAAU;SACX,CAAC;QACF,OAAO,CAAC,cAAc,CAAC,gCAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAE5E,oCAAoC;QACpC,MAAM,gBAAgB,GACpB,OAAO,CAAC,WAAW,CAAC,gCAAoB,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACtE,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,OAAO,CAAC,cAAc,CAAC,gCAAoB,EAAE,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEnF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Redis connection configuration
3
+ */
4
+ export interface IRedisConfig {
5
+ host?: string;
6
+ port?: number;
7
+ password?: string;
8
+ db?: number;
9
+ url?: string;
10
+ maxRetriesPerRequest?: number | null;
11
+ }
12
+ /**
13
+ * Worker configuration options
14
+ */
15
+ export interface IWorkerConfig {
16
+ /** Number of concurrent jobs a worker can process */
17
+ concurrency?: number;
18
+ /** Interval in ms to check for stalled jobs */
19
+ stalledInterval?: number;
20
+ /** Duration in ms that a job lock is held */
21
+ lockDuration?: number;
22
+ /** Maximum number of times a job can be marked as stalled before failing */
23
+ maxStalledCount?: number;
24
+ /** Heartbeat TTL in seconds for worker liveness tracking */
25
+ heartbeatTTL?: number;
26
+ /** Interval in ms between heartbeat updates */
27
+ heartbeatInterval?: number;
28
+ }
29
+ /**
30
+ * Queue configuration options
31
+ */
32
+ export interface IQueueConfig {
33
+ /** Default job options for the queue */
34
+ defaultJobOptions?: IJobOptions;
35
+ /** Limiter configuration for rate limiting */
36
+ limiter?: {
37
+ groupKey?: string;
38
+ max?: number;
39
+ duration?: number;
40
+ };
41
+ }
42
+ /**
43
+ * Job configuration options
44
+ */
45
+ export interface IJobOptions {
46
+ /** Remove job from queue when completed */
47
+ removeOnComplete?: boolean | number;
48
+ /** Remove job from queue when failed */
49
+ removeOnFail?: boolean | number;
50
+ /** Number of attempts before marking as failed */
51
+ attempts?: number;
52
+ /** Backoff strategy for retries */
53
+ backoff?: {
54
+ type: 'fixed' | 'exponential';
55
+ delay: number;
56
+ };
57
+ /** Job priority (lower = higher priority) */
58
+ priority?: number;
59
+ /** Delay in ms before the job becomes available */
60
+ delay?: number;
61
+ }
62
+ /**
63
+ * Service queue configuration for global singleton operations
64
+ */
65
+ export interface IServiceQueueConfig {
66
+ /** Whether to enable the service queue (default: true) */
67
+ enabled?: boolean;
68
+ /** Custom queue name (default: {keyPrefix}-service-queue) */
69
+ queueName?: string;
70
+ /** Custom worker name (default: {keyPrefix}-service-worker) */
71
+ workerName?: string;
72
+ }
73
+ /**
74
+ * Entity-specific configuration for per-entity queue defaults
75
+ * Used in module-level `entities` config to define defaults per entity type.
76
+ *
77
+ * When configured in the module, entities automatically get:
78
+ * - Worker spawning when jobs arrive (via QueueEvents)
79
+ * - Idle worker termination (via CronManager)
80
+ * - Job routing via CQRS CommandBus/QueryBus
81
+ *
82
+ * No @WorkerProcessor class needed!
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * AtomicQueuesModule.forRoot({
87
+ * redis: { host: 'localhost', port: 6379 },
88
+ * enableCronManager: true,
89
+ * entities: {
90
+ * account: {
91
+ * queueName: (id) => `${id}-queue`,
92
+ * workerName: (id) => `${id}-worker`,
93
+ * maxWorkersPerEntity: 1,
94
+ * idleTimeoutSeconds: 15,
95
+ * },
96
+ * },
97
+ * })
98
+ * ```
99
+ */
100
+ export interface IEntityConfig {
101
+ /**
102
+ * Default property name to use for entity ID extraction.
103
+ * This is used when commands don't have an @QueueEntityId() decorator.
104
+ * Example: 'tableId', 'accountId', 'userId'
105
+ */
106
+ defaultEntityId?: string;
107
+ /**
108
+ * Custom queue name generator for this entity type.
109
+ * If not provided, uses: {keyPrefix}:{entityType}:{entityId}:queue
110
+ */
111
+ queueName?: (entityId: string) => string;
112
+ /**
113
+ * Custom worker name generator for this entity type.
114
+ * If not provided, uses: {keyPrefix}:{entityType}:{entityId}:worker
115
+ */
116
+ workerName?: (entityId: string) => string;
117
+ /** Worker configuration overrides for this entity type */
118
+ workerConfig?: Partial<IWorkerConfig>;
119
+ /**
120
+ * Maximum workers per entity (default: 1).
121
+ * Determines how many concurrent workers can process jobs for a single entity.
122
+ */
123
+ maxWorkersPerEntity?: number;
124
+ /**
125
+ * Idle timeout in seconds before a worker is terminated (default: 15).
126
+ * Workers are terminated when they have no jobs to process for this duration.
127
+ */
128
+ idleTimeoutSeconds?: number;
129
+ /**
130
+ * If true, workers are automatically spawned when jobs arrive (default: true).
131
+ * When enabled, no @WorkerProcessor or @EntityScaler is required.
132
+ */
133
+ autoSpawn?: boolean;
134
+ }
135
+ /**
136
+ * Main module configuration
137
+ */
138
+ export interface IAtomicQueuesModuleConfig {
139
+ /** Redis connection configuration */
140
+ redis: IRedisConfig;
141
+ /** Default worker configuration */
142
+ workerDefaults?: IWorkerConfig;
143
+ /** Default queue configuration */
144
+ queueDefaults?: IQueueConfig;
145
+ /** Enable cron-based worker management */
146
+ enableCronManager?: boolean;
147
+ /** Cron interval in ms for worker management cycle */
148
+ cronInterval?: number;
149
+ /** Prefix for all Redis keys */
150
+ keyPrefix?: string;
151
+ /** Service queue configuration for global atomic operations */
152
+ serviceQueue?: IServiceQueueConfig;
153
+ /** Enable verbose logging (debug logs for service jobs, scaling cycles, etc.) */
154
+ verbose?: boolean;
155
+ /**
156
+ * Auto-register commands from @nestjs/cqrs handlers (default: true)
157
+ * When enabled, all @CommandHandler and @QueryHandler decorated classes
158
+ * are automatically discovered and registered with QueueBus.
159
+ */
160
+ autoRegisterCommands?: boolean;
161
+ /**
162
+ * Per-entity type configuration.
163
+ * Allows setting defaults for specific entity types (e.g., 'table', 'account').
164
+ * These defaults are merged with processor-level and command-level settings.
165
+ *
166
+ * Priority chain (highest to lowest):
167
+ * 1. @QueueEntityId() decorator on command property
168
+ * 2. @WorkerProcessor({ defaultEntityId })
169
+ * 3. entities[entityType].defaultEntityId
170
+ * 4. Error (no fallback to magic extraction)
171
+ *
172
+ * @example
173
+ * ```typescript
174
+ * entities: {
175
+ * table: {
176
+ * defaultEntityId: 'tableId',
177
+ * workerConfig: { concurrency: 1 }
178
+ * },
179
+ * account: {
180
+ * defaultEntityId: 'accountId',
181
+ * queueName: (id) => `accounts-${id}-queue`
182
+ * }
183
+ * }
184
+ * ```
185
+ */
186
+ entities?: Record<string, IEntityConfig>;
187
+ }
188
+ //# sourceMappingURL=config.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/config.interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=config.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/config.interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export interface ICommandBus {
2
+ execute<T>(command: T): Promise<any>;
3
+ }
4
+ export interface IQueryBus {
5
+ execute<T>(query: T): Promise<any>;
6
+ }
7
+ //# sourceMappingURL=cqrs.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cqrs.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/cqrs.interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACpC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=cqrs.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cqrs.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/cqrs.interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Event types for pub/sub communication
3
+ */
4
+ export type AtomicQueueEventType = 'worker:shutdown' | 'worker:ready' | 'worker:closed' | 'job:completed' | 'job:failed' | 'job:progress' | 'queue:closed' | 'custom';
5
+ /**
6
+ * Event payload structure
7
+ */
8
+ export interface IAtomicQueueEvent<T = unknown> {
9
+ type: AtomicQueueEventType;
10
+ nodeId: string;
11
+ workerId?: string;
12
+ entityId?: string;
13
+ entityType?: string;
14
+ timestamp: Date;
15
+ data?: T;
16
+ }
17
+ /**
18
+ * Event bus interface for internal pub/sub
19
+ */
20
+ export interface IEventBus {
21
+ /**
22
+ * Publish an event
23
+ */
24
+ publish<T>(channel: string, event: IAtomicQueueEvent<T>): Promise<void>;
25
+ /**
26
+ * Subscribe to a channel
27
+ */
28
+ subscribe(channel: string, handler: (event: IAtomicQueueEvent) => void | Promise<void>): Promise<void>;
29
+ /**
30
+ * Unsubscribe from a channel
31
+ */
32
+ unsubscribe(channel: string): Promise<void>;
33
+ /**
34
+ * Subscribe to worker shutdown events for a specific worker
35
+ */
36
+ subscribeToWorkerShutdown(workerName: string, handler: () => void | Promise<void>): Promise<void>;
37
+ }
38
+ /**
39
+ * Socket connection tracking interface
40
+ */
41
+ export interface IConnectionTracker {
42
+ /**
43
+ * Track a socket connection for an entity
44
+ */
45
+ trackConnection(entityType: string, entityId: string, socketId: string, nodeId: string): Promise<void>;
46
+ /**
47
+ * Untrack a socket connection
48
+ */
49
+ untrackConnection(entityType: string, entityId: string, socketId: string): Promise<void>;
50
+ /**
51
+ * Get all socket connections for an entity
52
+ */
53
+ getEntityConnections(entityType: string, entityId: string): Promise<string[]>;
54
+ /**
55
+ * Get entity connections for a specific node
56
+ */
57
+ getEntityNodeConnections(entityType: string, entityId: string, nodeId: string): Promise<string[]>;
58
+ /**
59
+ * Untrack all connections for current node
60
+ */
61
+ untrackNodeConnections(): Promise<void>;
62
+ /**
63
+ * Check if entity has active connections
64
+ */
65
+ hasActiveConnections(entityType: string, entityId: string): Promise<boolean>;
66
+ /**
67
+ * Get node ID for a socket connection
68
+ */
69
+ getNodeForSocket(entityType: string, entityId: string, socketId: string): Promise<string | null>;
70
+ }
71
+ //# sourceMappingURL=event.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/event.interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,iBAAiB,GACjB,cAAc,GACd,eAAe,GACf,eAAe,GACf,YAAY,GACZ,cAAc,GACd,cAAc,GACd,QAAQ,CAAC;AAEb;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC,GAAG,OAAO;IAC5C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,CAAC,CAAC;CACV;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE;;OAEG;IACH,SAAS,CACP,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5C;;OAEG;IACH,yBAAyB,CACvB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzF;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE9E;;OAEG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAErB;;OAEG;IACH,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAExC;;OAEG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7E;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAClG"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=event.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/event.interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Index entry for tracking jobs, workers, queues
3
+ */
4
+ export interface IIndexEntry {
5
+ id: string;
6
+ type: 'job' | 'worker' | 'queue' | 'death' | 'custom';
7
+ entityId: string;
8
+ entityType: string;
9
+ createdAt: Date;
10
+ metadata?: Record<string, unknown>;
11
+ }
12
+ /**
13
+ * Index manager interface for tracking various entities
14
+ */
15
+ export interface IIndexManager {
16
+ /**
17
+ * Index a job for an entity
18
+ */
19
+ indexJob(entityType: string, entityId: string, jobId: string): Promise<void>;
20
+ /**
21
+ * Remove job index
22
+ */
23
+ removeJobIndex(entityType: string, entityId: string, jobId: string): Promise<void>;
24
+ /**
25
+ * Get all job IDs for an entity
26
+ */
27
+ getEntityJobs(entityType: string, entityId: string): Promise<string[]>;
28
+ /**
29
+ * Get all entities with jobs
30
+ */
31
+ getEntitiesWithJobs(entityType: string): Promise<Record<string, number>>;
32
+ /**
33
+ * Index a worker death signal
34
+ */
35
+ indexWorkerDeath(entityType: string, entityId: string, deathId: string): Promise<void>;
36
+ /**
37
+ * Remove worker death index
38
+ */
39
+ removeWorkerDeathIndex(entityType: string, entityId: string, deathId: string): Promise<void>;
40
+ /**
41
+ * Get queued worker deaths for an entity
42
+ */
43
+ getQueuedWorkerDeaths(entityType: string, entityId: string): Promise<string[]>;
44
+ /**
45
+ * Index entity queue
46
+ */
47
+ indexEntityQueue(entityType: string, entityId: string): Promise<void>;
48
+ /**
49
+ * Remove entity queue index
50
+ */
51
+ removeEntityQueueIndex(entityType: string, entityId: string): Promise<void>;
52
+ /**
53
+ * Get all entities with active queues
54
+ */
55
+ getEntitiesWithQueues(entityType: string): Promise<string[]>;
56
+ /**
57
+ * Index a queue death signal
58
+ */
59
+ indexQueueDeath(entityType: string, entityId: string): Promise<void>;
60
+ /**
61
+ * Remove queue death index
62
+ */
63
+ removeQueueDeathIndex(entityType: string, entityId: string): Promise<void>;
64
+ /**
65
+ * Get all entities with queued queue deaths
66
+ */
67
+ getEntitiesWithQueuedQueueDeaths(entityType: string): Promise<string[]>;
68
+ }
69
+ //# sourceMappingURL=index-tracking.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-tracking.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/index-tracking.interfaces.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7E;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnF;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEvE;;OAEG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAEzE;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvF;;OAEG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7F;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE/E;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtE;;OAEG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5E;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7D;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErE;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3E;;OAEG;IACH,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CACzE"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index-tracking.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-tracking.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/index-tracking.interfaces.ts"],"names":[],"mappings":""}
@@ -0,0 +1,12 @@
1
+ export * from './config.interfaces';
2
+ export * from './queue.interfaces';
3
+ export * from './worker.interfaces';
4
+ export * from './lock.interfaces';
5
+ export * from './job.interfaces';
6
+ export * from './scaling.interfaces';
7
+ export * from './index-tracking.interfaces';
8
+ export * from './event.interfaces';
9
+ export * from './process.interfaces';
10
+ export * from './cqrs.interfaces';
11
+ export * from './utility.types';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./config.interfaces"), exports);
18
+ __exportStar(require("./queue.interfaces"), exports);
19
+ __exportStar(require("./worker.interfaces"), exports);
20
+ __exportStar(require("./lock.interfaces"), exports);
21
+ __exportStar(require("./job.interfaces"), exports);
22
+ __exportStar(require("./scaling.interfaces"), exports);
23
+ __exportStar(require("./index-tracking.interfaces"), exports);
24
+ __exportStar(require("./event.interfaces"), exports);
25
+ __exportStar(require("./process.interfaces"), exports);
26
+ __exportStar(require("./cqrs.interfaces"), exports);
27
+ __exportStar(require("./utility.types"), exports);
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/interfaces/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,qDAAmC;AACnC,sDAAoC;AACpC,oDAAkC;AAClC,mDAAiC;AACjC,uDAAqC;AACrC,8DAA4C;AAC5C,qDAAmC;AACnC,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC"}
@@ -0,0 +1,76 @@
1
+ import { Job } from 'bullmq';
2
+ /**
3
+ * Job data structure for atomic processing
4
+ */
5
+ export interface IAtomicJobData<T = unknown> {
6
+ /** Unique job identifier */
7
+ uuid: string;
8
+ /** Entity ID this job belongs to */
9
+ entityId: string;
10
+ /** Entity type (user, table, etc.) */
11
+ entityType: string;
12
+ /** Command/Query class name to execute */
13
+ commandName?: string;
14
+ /** Type of operation */
15
+ type: 'command' | 'query' | 'custom';
16
+ /** Payload data */
17
+ payload: T;
18
+ /** Additional metadata */
19
+ metadata?: Record<string, unknown>;
20
+ }
21
+ /**
22
+ * Job processing result
23
+ */
24
+ export interface IJobResult<T = unknown> {
25
+ success: boolean;
26
+ result?: T;
27
+ error?: string;
28
+ processingTime: number;
29
+ }
30
+ /**
31
+ * Job processor function type
32
+ */
33
+ export type JobProcessor<T = unknown, R = unknown> = (job: Job<IAtomicJobData<T>>) => Promise<R>;
34
+ /**
35
+ * Job processor registry interface
36
+ */
37
+ export interface IJobProcessorRegistry {
38
+ /**
39
+ * Register a processor for a job type
40
+ */
41
+ registerProcessor<T, R>(jobType: string, processor: JobProcessor<T, R>): void;
42
+ /**
43
+ * Get processor for a job type
44
+ */
45
+ getProcessor<T, R>(jobType: string): JobProcessor<T, R> | undefined;
46
+ /**
47
+ * Check if processor exists
48
+ */
49
+ hasProcessor(jobType: string): boolean;
50
+ /**
51
+ * Get all registered job types
52
+ */
53
+ getRegisteredTypes(): string[];
54
+ }
55
+ /**
56
+ * Dynamic command/query executor interface
57
+ */
58
+ export interface IDynamicExecutor {
59
+ /**
60
+ * Execute a command by class name
61
+ */
62
+ executeCommand<T>(commandName: string, payload: T): Promise<unknown>;
63
+ /**
64
+ * Execute a query by class name
65
+ */
66
+ executeQuery<T>(queryName: string, payload: T): Promise<unknown>;
67
+ /**
68
+ * Register command module for dynamic loading
69
+ */
70
+ registerCommandModule(modulePath: string): void;
71
+ /**
72
+ * Register query module for dynamic loading
73
+ */
74
+ registerQueryModule(modulePath: string): void;
75
+ }
76
+ //# sourceMappingURL=job.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.interfaces.d.ts","sourceRoot":"","sources":["../../../src/domain/interfaces/job.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACzC,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrC,mBAAmB;IACnB,OAAO,EAAE,CAAC,CAAC;IACX,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,OAAO;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI,CACnD,GAAG,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KACxB,OAAO,CAAC,CAAC,CAAC,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,iBAAiB,CAAC,CAAC,EAAE,CAAC,EACpB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAC5B,IAAI,CAAC;IAER;;OAEG;IACH,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;IAEpE;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,kBAAkB,IAAI,MAAM,EAAE,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,cAAc,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAErE;;OAEG;IACH,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjE;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=job.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.interfaces.js","sourceRoot":"","sources":["../../../src/domain/interfaces/job.interfaces.ts"],"names":[],"mappings":""}