atomic-queues 1.6.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/README.md +182 -411
  2. package/dist/cli/generators/json-schema.d.ts +3 -0
  3. package/dist/cli/generators/json-schema.d.ts.map +1 -0
  4. package/dist/cli/generators/json-schema.js +31 -0
  5. package/dist/cli/generators/json-schema.js.map +1 -0
  6. package/dist/cli/generators/typescript.d.ts +3 -0
  7. package/dist/cli/generators/typescript.d.ts.map +1 -0
  8. package/dist/cli/generators/typescript.js +62 -0
  9. package/dist/cli/generators/typescript.js.map +1 -0
  10. package/dist/cli/index.d.ts +3 -0
  11. package/dist/cli/index.d.ts.map +1 -0
  12. package/dist/cli/index.js +156 -0
  13. package/dist/cli/index.js.map +1 -0
  14. package/dist/decorators/actor.decorators.d.ts +4 -0
  15. package/dist/decorators/actor.decorators.d.ts.map +1 -0
  16. package/dist/decorators/actor.decorators.js +32 -0
  17. package/dist/decorators/actor.decorators.js.map +1 -0
  18. package/dist/decorators/constants.d.ts +5 -12
  19. package/dist/decorators/constants.d.ts.map +1 -1
  20. package/dist/decorators/constants.js +10 -16
  21. package/dist/decorators/constants.js.map +1 -1
  22. package/dist/decorators/index.d.ts +4 -4
  23. package/dist/decorators/index.d.ts.map +1 -1
  24. package/dist/decorators/index.js +4 -4
  25. package/dist/decorators/index.js.map +1 -1
  26. package/dist/decorators/interfaces.d.ts +18 -78
  27. package/dist/decorators/interfaces.d.ts.map +1 -1
  28. package/dist/decorators/metadata-readers.d.ts +5 -26
  29. package/dist/decorators/metadata-readers.d.ts.map +1 -1
  30. package/dist/decorators/metadata-readers.js +16 -33
  31. package/dist/decorators/metadata-readers.js.map +1 -1
  32. package/dist/decorators/schema.decorators.d.ts +2 -0
  33. package/dist/decorators/schema.decorators.d.ts.map +1 -0
  34. package/dist/decorators/schema.decorators.js +13 -0
  35. package/dist/decorators/schema.decorators.js.map +1 -0
  36. package/dist/domain/interfaces/config.interfaces.d.ts +52 -153
  37. package/dist/domain/interfaces/config.interfaces.d.ts.map +1 -1
  38. package/dist/domain/interfaces/index.d.ts +0 -7
  39. package/dist/domain/interfaces/index.d.ts.map +1 -1
  40. package/dist/domain/interfaces/index.js +0 -7
  41. package/dist/domain/interfaces/index.js.map +1 -1
  42. package/dist/domain/interfaces/job.interfaces.d.ts +32 -65
  43. package/dist/domain/interfaces/job.interfaces.d.ts.map +1 -1
  44. package/dist/index.d.ts +0 -34
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +0 -39
  47. package/dist/index.js.map +1 -1
  48. package/dist/module/atomic-queues.module.d.ts +0 -83
  49. package/dist/module/atomic-queues.module.d.ts.map +1 -1
  50. package/dist/module/atomic-queues.module.js +35 -134
  51. package/dist/module/atomic-queues.module.js.map +1 -1
  52. package/dist/services/actor-registry/actor-registry.service.d.ts +30 -0
  53. package/dist/services/actor-registry/actor-registry.service.d.ts.map +1 -0
  54. package/dist/services/actor-registry/actor-registry.service.js +186 -0
  55. package/dist/services/actor-registry/actor-registry.service.js.map +1 -0
  56. package/dist/services/actor-registry/index.d.ts +2 -0
  57. package/dist/services/actor-registry/index.d.ts.map +1 -0
  58. package/dist/services/actor-registry/index.js +18 -0
  59. package/dist/services/actor-registry/index.js.map +1 -0
  60. package/dist/services/actor-system/actor-system.service.d.ts +19 -0
  61. package/dist/services/actor-system/actor-system.service.d.ts.map +1 -0
  62. package/dist/services/actor-system/actor-system.service.js +86 -0
  63. package/dist/services/actor-system/actor-system.service.js.map +1 -0
  64. package/dist/services/actor-system/index.d.ts +2 -0
  65. package/dist/services/actor-system/index.d.ts.map +1 -0
  66. package/dist/services/{cron-manager → actor-system}/index.js +1 -1
  67. package/dist/services/actor-system/index.js.map +1 -0
  68. package/dist/services/command-discovery/command-discovery.service.d.ts +6 -53
  69. package/dist/services/command-discovery/command-discovery.service.d.ts.map +1 -1
  70. package/dist/services/command-discovery/command-discovery.service.js +0 -59
  71. package/dist/services/command-discovery/command-discovery.service.js.map +1 -1
  72. package/dist/services/constants.d.ts +2 -9
  73. package/dist/services/constants.d.ts.map +1 -1
  74. package/dist/services/constants.js +3 -10
  75. package/dist/services/constants.js.map +1 -1
  76. package/dist/services/executor-pool/executor-pool.service.d.ts +31 -0
  77. package/dist/services/executor-pool/executor-pool.service.d.ts.map +1 -0
  78. package/dist/services/executor-pool/executor-pool.service.js +147 -0
  79. package/dist/services/executor-pool/executor-pool.service.js.map +1 -0
  80. package/dist/services/executor-pool/index.d.ts +2 -0
  81. package/dist/services/executor-pool/index.d.ts.map +1 -0
  82. package/dist/services/{queue-manager → executor-pool}/index.js +1 -1
  83. package/dist/services/executor-pool/index.js.map +1 -0
  84. package/dist/services/gate/gate.service.d.ts +17 -0
  85. package/dist/services/gate/gate.service.d.ts.map +1 -0
  86. package/dist/services/gate/gate.service.js +66 -0
  87. package/dist/services/gate/gate.service.js.map +1 -0
  88. package/dist/services/gate/index.d.ts +2 -0
  89. package/dist/services/gate/index.d.ts.map +1 -0
  90. package/dist/services/{spawn-queue → gate}/index.js +1 -1
  91. package/dist/services/gate/index.js.map +1 -0
  92. package/dist/services/handler-executor/handler-executor.service.d.ts +32 -0
  93. package/dist/services/handler-executor/handler-executor.service.d.ts.map +1 -0
  94. package/dist/services/handler-executor/handler-executor.service.js +186 -0
  95. package/dist/services/handler-executor/handler-executor.service.js.map +1 -0
  96. package/dist/services/handler-executor/index.d.ts +2 -0
  97. package/dist/services/handler-executor/index.d.ts.map +1 -0
  98. package/dist/services/handler-executor/index.js +18 -0
  99. package/dist/services/handler-executor/index.js.map +1 -0
  100. package/dist/services/index.d.ts +11 -12
  101. package/dist/services/index.d.ts.map +1 -1
  102. package/dist/services/index.js +11 -12
  103. package/dist/services/index.js.map +1 -1
  104. package/dist/services/log/index.d.ts +2 -0
  105. package/dist/services/log/index.d.ts.map +1 -0
  106. package/dist/services/{index-manager → log}/index.js +1 -1
  107. package/dist/services/log/index.js.map +1 -0
  108. package/dist/services/log/log.service.d.ts +21 -0
  109. package/dist/services/log/log.service.d.ts.map +1 -0
  110. package/dist/services/log/log.service.js +92 -0
  111. package/dist/services/log/log.service.js.map +1 -0
  112. package/dist/services/queue-bus/index.d.ts +0 -4
  113. package/dist/services/queue-bus/index.d.ts.map +1 -1
  114. package/dist/services/queue-bus/index.js +0 -4
  115. package/dist/services/queue-bus/index.js.map +1 -1
  116. package/dist/services/queue-bus/queue-bus.service.d.ts +44 -198
  117. package/dist/services/queue-bus/queue-bus.service.d.ts.map +1 -1
  118. package/dist/services/queue-bus/queue-bus.service.js +103 -259
  119. package/dist/services/queue-bus/queue-bus.service.js.map +1 -1
  120. package/dist/services/queue-bus/queue-bus.utils.d.ts +0 -28
  121. package/dist/services/queue-bus/queue-bus.utils.d.ts.map +1 -1
  122. package/dist/services/queue-bus/queue-bus.utils.js +1 -41
  123. package/dist/services/queue-bus/queue-bus.utils.js.map +1 -1
  124. package/dist/services/registry/index.d.ts +4 -0
  125. package/dist/services/registry/index.d.ts.map +1 -0
  126. package/dist/services/{queue-events-manager → registry}/index.js +3 -1
  127. package/dist/services/registry/index.js.map +1 -0
  128. package/dist/services/registry/registry.service.d.ts +43 -0
  129. package/dist/services/registry/registry.service.d.ts.map +1 -0
  130. package/dist/services/registry/registry.service.js +379 -0
  131. package/dist/services/registry/registry.service.js.map +1 -0
  132. package/dist/services/registry/registry.types.d.ts +24 -0
  133. package/dist/services/registry/registry.types.d.ts.map +1 -0
  134. package/dist/{domain/interfaces/lock.interfaces.js → services/registry/registry.types.js} +1 -1
  135. package/dist/services/registry/registry.types.js.map +1 -0
  136. package/dist/services/registry/schema-converter.d.ts +2 -0
  137. package/dist/services/registry/schema-converter.d.ts.map +1 -0
  138. package/dist/services/registry/schema-converter.js +27 -0
  139. package/dist/services/registry/schema-converter.js.map +1 -0
  140. package/dist/services/result-collector/index.d.ts +2 -0
  141. package/dist/services/result-collector/index.d.ts.map +1 -0
  142. package/dist/services/result-collector/index.js +18 -0
  143. package/dist/services/result-collector/index.js.map +1 -0
  144. package/dist/services/result-collector/result-collector.service.d.ts +17 -0
  145. package/dist/services/result-collector/result-collector.service.d.ts.map +1 -0
  146. package/dist/services/result-collector/result-collector.service.js +92 -0
  147. package/dist/services/result-collector/result-collector.service.js.map +1 -0
  148. package/dist/services/scheduler/index.d.ts +2 -0
  149. package/dist/services/scheduler/index.d.ts.map +1 -0
  150. package/dist/services/{job-processor → scheduler}/index.js +1 -1
  151. package/dist/services/scheduler/index.js.map +1 -0
  152. package/dist/services/scheduler/scheduler.service.d.ts +17 -0
  153. package/dist/services/scheduler/scheduler.service.d.ts.map +1 -0
  154. package/dist/services/scheduler/scheduler.service.js +116 -0
  155. package/dist/services/scheduler/scheduler.service.js.map +1 -0
  156. package/dist/services/shutdown/index.d.ts +2 -0
  157. package/dist/services/shutdown/index.d.ts.map +1 -0
  158. package/dist/services/shutdown/index.js +18 -0
  159. package/dist/services/shutdown/index.js.map +1 -0
  160. package/dist/services/shutdown/shutdown.service.d.ts +8 -0
  161. package/dist/services/shutdown/shutdown.service.d.ts.map +1 -0
  162. package/dist/services/shutdown/shutdown.service.js +29 -0
  163. package/dist/services/shutdown/shutdown.service.js.map +1 -0
  164. package/dist/utils/index.d.ts +3 -1
  165. package/dist/utils/index.d.ts.map +1 -1
  166. package/dist/utils/index.js +3 -1
  167. package/dist/utils/index.js.map +1 -1
  168. package/dist/utils/naming.utils.d.ts +0 -16
  169. package/dist/utils/naming.utils.d.ts.map +1 -1
  170. package/dist/utils/naming.utils.js +0 -29
  171. package/dist/utils/naming.utils.js.map +1 -1
  172. package/package.json +19 -11
  173. package/dist/decorators/legacy.decorators.d.ts +0 -36
  174. package/dist/decorators/legacy.decorators.d.ts.map +0 -1
  175. package/dist/decorators/legacy.decorators.js +0 -61
  176. package/dist/decorators/legacy.decorators.js.map +0 -1
  177. package/dist/decorators/scaler.decorators.d.ts +0 -65
  178. package/dist/decorators/scaler.decorators.d.ts.map +0 -1
  179. package/dist/decorators/scaler.decorators.js +0 -103
  180. package/dist/decorators/scaler.decorators.js.map +0 -1
  181. package/dist/decorators/type-guards.d.ts +0 -18
  182. package/dist/decorators/type-guards.d.ts.map +0 -1
  183. package/dist/decorators/type-guards.js +0 -32
  184. package/dist/decorators/type-guards.js.map +0 -1
  185. package/dist/decorators/worker.decorators.d.ts +0 -58
  186. package/dist/decorators/worker.decorators.d.ts.map +0 -1
  187. package/dist/decorators/worker.decorators.js +0 -92
  188. package/dist/decorators/worker.decorators.js.map +0 -1
  189. package/dist/domain/interfaces/event.interfaces.d.ts +0 -71
  190. package/dist/domain/interfaces/event.interfaces.d.ts.map +0 -1
  191. package/dist/domain/interfaces/event.interfaces.js +0 -3
  192. package/dist/domain/interfaces/event.interfaces.js.map +0 -1
  193. package/dist/domain/interfaces/index-tracking.interfaces.d.ts +0 -69
  194. package/dist/domain/interfaces/index-tracking.interfaces.d.ts.map +0 -1
  195. package/dist/domain/interfaces/index-tracking.interfaces.js +0 -3
  196. package/dist/domain/interfaces/index-tracking.interfaces.js.map +0 -1
  197. package/dist/domain/interfaces/lock.interfaces.d.ts +0 -54
  198. package/dist/domain/interfaces/lock.interfaces.d.ts.map +0 -1
  199. package/dist/domain/interfaces/lock.interfaces.js.map +0 -1
  200. package/dist/domain/interfaces/process.interfaces.d.ts +0 -44
  201. package/dist/domain/interfaces/process.interfaces.d.ts.map +0 -1
  202. package/dist/domain/interfaces/process.interfaces.js +0 -3
  203. package/dist/domain/interfaces/process.interfaces.js.map +0 -1
  204. package/dist/domain/interfaces/queue.interfaces.d.ts +0 -46
  205. package/dist/domain/interfaces/queue.interfaces.d.ts.map +0 -1
  206. package/dist/domain/interfaces/queue.interfaces.js +0 -3
  207. package/dist/domain/interfaces/queue.interfaces.js.map +0 -1
  208. package/dist/domain/interfaces/scaling.interfaces.d.ts +0 -62
  209. package/dist/domain/interfaces/scaling.interfaces.d.ts.map +0 -1
  210. package/dist/domain/interfaces/scaling.interfaces.js +0 -3
  211. package/dist/domain/interfaces/scaling.interfaces.js.map +0 -1
  212. package/dist/domain/interfaces/worker.interfaces.d.ts +0 -120
  213. package/dist/domain/interfaces/worker.interfaces.d.ts.map +0 -1
  214. package/dist/domain/interfaces/worker.interfaces.js +0 -3
  215. package/dist/domain/interfaces/worker.interfaces.js.map +0 -1
  216. package/dist/services/cron-manager/cron-manager.service.d.ts +0 -199
  217. package/dist/services/cron-manager/cron-manager.service.d.ts.map +0 -1
  218. package/dist/services/cron-manager/cron-manager.service.js +0 -583
  219. package/dist/services/cron-manager/cron-manager.service.js.map +0 -1
  220. package/dist/services/cron-manager/index.d.ts +0 -2
  221. package/dist/services/cron-manager/index.d.ts.map +0 -1
  222. package/dist/services/cron-manager/index.js.map +0 -1
  223. package/dist/services/index-manager/index-manager.service.d.ts +0 -142
  224. package/dist/services/index-manager/index-manager.service.d.ts.map +0 -1
  225. package/dist/services/index-manager/index-manager.service.js +0 -325
  226. package/dist/services/index-manager/index-manager.service.js.map +0 -1
  227. package/dist/services/index-manager/index.d.ts +0 -2
  228. package/dist/services/index-manager/index.d.ts.map +0 -1
  229. package/dist/services/index-manager/index.js.map +0 -1
  230. package/dist/services/job-processor/index.d.ts +0 -2
  231. package/dist/services/job-processor/index.d.ts.map +0 -1
  232. package/dist/services/job-processor/index.js.map +0 -1
  233. package/dist/services/job-processor/job-processor.service.d.ts +0 -156
  234. package/dist/services/job-processor/job-processor.service.d.ts.map +0 -1
  235. package/dist/services/job-processor/job-processor.service.js +0 -331
  236. package/dist/services/job-processor/job-processor.service.js.map +0 -1
  237. package/dist/services/processor-discovery/decorator-discovery.service.d.ts +0 -40
  238. package/dist/services/processor-discovery/decorator-discovery.service.d.ts.map +0 -1
  239. package/dist/services/processor-discovery/decorator-discovery.service.js +0 -191
  240. package/dist/services/processor-discovery/decorator-discovery.service.js.map +0 -1
  241. package/dist/services/processor-discovery/index.d.ts +0 -6
  242. package/dist/services/processor-discovery/index.d.ts.map +0 -1
  243. package/dist/services/processor-discovery/index.js +0 -22
  244. package/dist/services/processor-discovery/index.js.map +0 -1
  245. package/dist/services/processor-discovery/processor-discovery.service.d.ts +0 -98
  246. package/dist/services/processor-discovery/processor-discovery.service.d.ts.map +0 -1
  247. package/dist/services/processor-discovery/processor-discovery.service.js +0 -258
  248. package/dist/services/processor-discovery/processor-discovery.service.js.map +0 -1
  249. package/dist/services/processor-discovery/processor-registry.d.ts +0 -58
  250. package/dist/services/processor-discovery/processor-registry.d.ts.map +0 -1
  251. package/dist/services/processor-discovery/processor-registry.js +0 -74
  252. package/dist/services/processor-discovery/processor-registry.js.map +0 -1
  253. package/dist/services/processor-discovery/scaling-registration.service.d.ts +0 -60
  254. package/dist/services/processor-discovery/scaling-registration.service.d.ts.map +0 -1
  255. package/dist/services/processor-discovery/scaling-registration.service.js +0 -261
  256. package/dist/services/processor-discovery/scaling-registration.service.js.map +0 -1
  257. package/dist/services/processor-discovery/worker-factory.service.d.ts +0 -54
  258. package/dist/services/processor-discovery/worker-factory.service.d.ts.map +0 -1
  259. package/dist/services/processor-discovery/worker-factory.service.js +0 -185
  260. package/dist/services/processor-discovery/worker-factory.service.js.map +0 -1
  261. package/dist/services/queue-bus/entity-target.d.ts +0 -58
  262. package/dist/services/queue-bus/entity-target.d.ts.map +0 -1
  263. package/dist/services/queue-bus/entity-target.js +0 -109
  264. package/dist/services/queue-bus/entity-target.js.map +0 -1
  265. package/dist/services/queue-bus/queue-bus.types.d.ts +0 -40
  266. package/dist/services/queue-bus/queue-bus.types.d.ts.map +0 -1
  267. package/dist/services/queue-bus/queue-bus.types.js +0 -3
  268. package/dist/services/queue-bus/queue-bus.types.js.map +0 -1
  269. package/dist/services/queue-bus/queue-target.d.ts +0 -61
  270. package/dist/services/queue-bus/queue-target.d.ts.map +0 -1
  271. package/dist/services/queue-bus/queue-target.js +0 -123
  272. package/dist/services/queue-bus/queue-target.js.map +0 -1
  273. package/dist/services/queue-events-manager/index.d.ts +0 -2
  274. package/dist/services/queue-events-manager/index.d.ts.map +0 -1
  275. package/dist/services/queue-events-manager/index.js.map +0 -1
  276. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts +0 -120
  277. package/dist/services/queue-events-manager/queue-events-manager.service.d.ts.map +0 -1
  278. package/dist/services/queue-events-manager/queue-events-manager.service.js +0 -343
  279. package/dist/services/queue-events-manager/queue-events-manager.service.js.map +0 -1
  280. package/dist/services/queue-manager/index.d.ts +0 -2
  281. package/dist/services/queue-manager/index.d.ts.map +0 -1
  282. package/dist/services/queue-manager/index.js.map +0 -1
  283. package/dist/services/queue-manager/queue-manager.service.d.ts +0 -148
  284. package/dist/services/queue-manager/queue-manager.service.d.ts.map +0 -1
  285. package/dist/services/queue-manager/queue-manager.service.js +0 -348
  286. package/dist/services/queue-manager/queue-manager.service.js.map +0 -1
  287. package/dist/services/resource-lock/index.d.ts +0 -2
  288. package/dist/services/resource-lock/index.d.ts.map +0 -1
  289. package/dist/services/resource-lock/index.js +0 -18
  290. package/dist/services/resource-lock/index.js.map +0 -1
  291. package/dist/services/resource-lock/resource-lock.service.d.ts +0 -120
  292. package/dist/services/resource-lock/resource-lock.service.d.ts.map +0 -1
  293. package/dist/services/resource-lock/resource-lock.service.js +0 -367
  294. package/dist/services/resource-lock/resource-lock.service.js.map +0 -1
  295. package/dist/services/service-queue/index.d.ts +0 -3
  296. package/dist/services/service-queue/index.d.ts.map +0 -1
  297. package/dist/services/service-queue/index.js +0 -19
  298. package/dist/services/service-queue/index.js.map +0 -1
  299. package/dist/services/service-queue/service-queue.service.d.ts +0 -199
  300. package/dist/services/service-queue/service-queue.service.d.ts.map +0 -1
  301. package/dist/services/service-queue/service-queue.service.js +0 -617
  302. package/dist/services/service-queue/service-queue.service.js.map +0 -1
  303. package/dist/services/service-queue/service-queue.types.d.ts +0 -32
  304. package/dist/services/service-queue/service-queue.types.d.ts.map +0 -1
  305. package/dist/services/service-queue/service-queue.types.js +0 -27
  306. package/dist/services/service-queue/service-queue.types.js.map +0 -1
  307. package/dist/services/shutdown-state/index.d.ts +0 -2
  308. package/dist/services/shutdown-state/index.d.ts.map +0 -1
  309. package/dist/services/shutdown-state/index.js +0 -18
  310. package/dist/services/shutdown-state/index.js.map +0 -1
  311. package/dist/services/shutdown-state/shutdown-state.service.d.ts +0 -69
  312. package/dist/services/shutdown-state/shutdown-state.service.d.ts.map +0 -1
  313. package/dist/services/shutdown-state/shutdown-state.service.js +0 -127
  314. package/dist/services/shutdown-state/shutdown-state.service.js.map +0 -1
  315. package/dist/services/spawn-queue/index.d.ts +0 -2
  316. package/dist/services/spawn-queue/index.d.ts.map +0 -1
  317. package/dist/services/spawn-queue/index.js.map +0 -1
  318. package/dist/services/spawn-queue/spawn-queue.service.d.ts +0 -119
  319. package/dist/services/spawn-queue/spawn-queue.service.d.ts.map +0 -1
  320. package/dist/services/spawn-queue/spawn-queue.service.js +0 -273
  321. package/dist/services/spawn-queue/spawn-queue.service.js.map +0 -1
  322. package/dist/services/worker-manager/index.d.ts +0 -2
  323. package/dist/services/worker-manager/index.d.ts.map +0 -1
  324. package/dist/services/worker-manager/index.js +0 -18
  325. package/dist/services/worker-manager/index.js.map +0 -1
  326. package/dist/services/worker-manager/worker-manager.service.d.ts +0 -221
  327. package/dist/services/worker-manager/worker-manager.service.d.ts.map +0 -1
  328. package/dist/services/worker-manager/worker-manager.service.js +0 -591
  329. package/dist/services/worker-manager/worker-manager.service.js.map +0 -1
  330. package/dist/utils/helpers.d.ts +0 -5
  331. package/dist/utils/helpers.d.ts.map +0 -1
  332. package/dist/utils/helpers.js +0 -21
  333. package/dist/utils/helpers.js.map +0 -1
  334. package/dist/utils/job.utils.d.ts +0 -50
  335. package/dist/utils/job.utils.d.ts.map +0 -1
  336. package/dist/utils/job.utils.js +0 -89
  337. package/dist/utils/job.utils.js.map +0 -1
@@ -0,0 +1,43 @@
1
+ import { OnModuleInit, OnApplicationShutdown } from '@nestjs/common';
2
+ import { DiscoveryService } from '@nestjs/core';
3
+ import Redis from 'ioredis';
4
+ import { IAtomicQueuesModuleConfig } from '../../domain';
5
+ import { EntityContract, MessageSpec, RegistryChange, RegistrySnapshot } from './registry.types';
6
+ export declare class RegistryService implements OnModuleInit, OnApplicationShutdown {
7
+ private readonly redis;
8
+ private readonly config;
9
+ private readonly discoveryService;
10
+ private readonly logger;
11
+ private readonly keyPrefix;
12
+ private readonly enabled;
13
+ private readonly serviceName;
14
+ private readonly schemaValidation;
15
+ private readonly registrationTTL;
16
+ private readonly heartbeatInterval;
17
+ private readonly cache;
18
+ private readonly changeListeners;
19
+ private heartbeatTimer;
20
+ private subscriber;
21
+ private readonly ownedEntityTypes;
22
+ constructor(redis: Redis, config: IAtomicQueuesModuleConfig, discoveryService: DiscoveryService);
23
+ onModuleInit(): Promise<void>;
24
+ onApplicationShutdown(): Promise<void>;
25
+ getContract(entityType: string): Promise<EntityContract | null>;
26
+ listEntityTypes(): Promise<string[]>;
27
+ getMessage(entityType: string, messageName: string): Promise<MessageSpec | null>;
28
+ watchChanges(callback: (change: RegistryChange) => void): () => void;
29
+ exportSnapshot(): Promise<RegistrySnapshot>;
30
+ validate(entityType: string, messageName: string, data?: Record<string, any>): Promise<void>;
31
+ isEnabled(): boolean;
32
+ private publishLocalContracts;
33
+ private buildMessageSpec;
34
+ private getOrCreateContract;
35
+ private publishContract;
36
+ private refreshRegistrations;
37
+ private handleRegistryUpdate;
38
+ private validateJsonSchema;
39
+ private getRegistryKey;
40
+ private getUpdateChannel;
41
+ private scanKeys;
42
+ }
43
+ //# sourceMappingURL=registry.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.service.d.ts","sourceRoot":"","sources":["../../../src/services/registry/registry.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAAE,qBAAqB,EAAY,MAAM,gBAAgB,CAAC;AAC3G,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAazD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGjG,qBACa,eAAgB,YAAW,YAAY,EAAE,qBAAqB;IAgB1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAjB/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAE3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA+C;IAC/E,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;gBAGN,KAAK,EAAE,KAAK,EACX,MAAM,EAAE,yBAAyB,EACnD,gBAAgB,EAAE,gBAAgB;IAU3D,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAatC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAe/D,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMtF,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ9D,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAgB3C,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BlG,SAAS,IAAI,OAAO;YAIN,qBAAqB;IAwGnC,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,mBAAmB;YAmBb,eAAe;YA2Bf,oBAAoB;IAgBlC,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,gBAAgB;YAIV,QAAQ;CAUvB"}
@@ -0,0 +1,379 @@
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 RegistryService_1;
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.RegistryService = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const core_1 = require("@nestjs/core");
22
+ const ioredis_1 = __importDefault(require("ioredis"));
23
+ const utils_1 = require("../../utils");
24
+ const decorators_1 = require("../../decorators");
25
+ const queue_bus_1 = require("../queue-bus");
26
+ const constants_1 = require("../constants");
27
+ const schema_converter_1 = require("./schema-converter");
28
+ let RegistryService = RegistryService_1 = class RegistryService {
29
+ constructor(redis, config, discoveryService) {
30
+ this.redis = redis;
31
+ this.config = config;
32
+ this.discoveryService = discoveryService;
33
+ this.logger = new common_1.Logger(RegistryService_1.name);
34
+ this.cache = new Map();
35
+ this.changeListeners = [];
36
+ this.heartbeatTimer = null;
37
+ this.subscriber = null;
38
+ this.ownedEntityTypes = new Set();
39
+ this.keyPrefix = (0, utils_1.resolveKeyPrefix)(config);
40
+ this.enabled = config.registry?.enabled ?? false;
41
+ this.serviceName = config.registry?.serviceName ?? 'unknown';
42
+ this.schemaValidation = config.registry?.schemaValidation ?? false;
43
+ this.registrationTTL = config.registry?.registrationTTL ?? 30;
44
+ this.heartbeatInterval = config.registry?.heartbeatInterval ?? 10000;
45
+ }
46
+ async onModuleInit() {
47
+ if (!this.enabled)
48
+ return;
49
+ this.subscriber = this.redis.duplicate();
50
+ const updateChannel = this.getUpdateChannel();
51
+ await this.subscriber.subscribe(updateChannel);
52
+ this.subscriber.on('message', (_ch, payload) => {
53
+ this.handleRegistryUpdate(payload);
54
+ });
55
+ await this.publishLocalContracts();
56
+ this.heartbeatTimer = setInterval(() => {
57
+ this.refreshRegistrations().catch(err => {
58
+ this.logger.error(`Heartbeat failed: ${err.message}`);
59
+ });
60
+ }, this.heartbeatInterval);
61
+ this.logger.log(`Registry enabled for service '${this.serviceName}' with ${this.ownedEntityTypes.size} entity types`);
62
+ }
63
+ async onApplicationShutdown() {
64
+ if (!this.enabled)
65
+ return;
66
+ if (this.heartbeatTimer) {
67
+ clearInterval(this.heartbeatTimer);
68
+ }
69
+ if (this.subscriber) {
70
+ await this.subscriber.unsubscribe();
71
+ await this.subscriber.quit();
72
+ }
73
+ }
74
+ async getContract(entityType) {
75
+ if (!this.enabled)
76
+ return null;
77
+ const cached = this.cache.get(entityType);
78
+ if (cached)
79
+ return cached;
80
+ const key = this.getRegistryKey(entityType);
81
+ const raw = await this.redis.get(key);
82
+ if (!raw)
83
+ return null;
84
+ const contract = JSON.parse(raw);
85
+ this.cache.set(entityType, contract);
86
+ return contract;
87
+ }
88
+ async listEntityTypes() {
89
+ if (!this.enabled)
90
+ return [];
91
+ const pattern = `${this.keyPrefix}:registry:*`;
92
+ const keys = await this.scanKeys(pattern);
93
+ return keys.map(k => k.replace(`${this.keyPrefix}:registry:`, ''));
94
+ }
95
+ async getMessage(entityType, messageName) {
96
+ const contract = await this.getContract(entityType);
97
+ if (!contract)
98
+ return null;
99
+ return contract.messages[messageName] ?? null;
100
+ }
101
+ watchChanges(callback) {
102
+ this.changeListeners.push(callback);
103
+ return () => {
104
+ const idx = this.changeListeners.indexOf(callback);
105
+ if (idx >= 0)
106
+ this.changeListeners.splice(idx, 1);
107
+ };
108
+ }
109
+ async exportSnapshot() {
110
+ const entityTypes = await this.listEntityTypes();
111
+ const entities = [];
112
+ for (const et of entityTypes) {
113
+ const contract = await this.getContract(et);
114
+ if (contract)
115
+ entities.push(contract);
116
+ }
117
+ return {
118
+ generatedAt: Date.now(),
119
+ keyPrefix: this.keyPrefix,
120
+ entities,
121
+ };
122
+ }
123
+ async validate(entityType, messageName, data) {
124
+ if (!this.enabled)
125
+ return;
126
+ const contract = await this.getContract(entityType);
127
+ if (!contract) {
128
+ throw new Error(`[Registry] Unknown entity type '${entityType}'. ` +
129
+ `No service has registered handlers for this entity type. ` +
130
+ `Registered types: [${(await this.listEntityTypes()).join(', ')}]`);
131
+ }
132
+ const msgSpec = contract.messages[messageName];
133
+ if (!msgSpec) {
134
+ const accepted = Object.keys(contract.messages).join(', ');
135
+ throw new Error(`[Registry] Entity '${entityType}' (service: ${contract.serviceName}) does not accept message '${messageName}'. ` +
136
+ `Accepted messages: [${accepted}]`);
137
+ }
138
+ if (this.schemaValidation && msgSpec.schema && data) {
139
+ this.validateJsonSchema(data, msgSpec.schema, entityType, messageName);
140
+ }
141
+ }
142
+ isEnabled() {
143
+ return this.enabled;
144
+ }
145
+ async publishLocalContracts() {
146
+ if (!this.discoveryService)
147
+ return;
148
+ const contracts = new Map();
149
+ const providers = this.discoveryService.getProviders();
150
+ // 1. @Actor classes
151
+ for (const wrapper of providers) {
152
+ const { metatype } = wrapper;
153
+ if (!metatype)
154
+ continue;
155
+ const actorMeta = (0, decorators_1.getActorMetadata)(metatype);
156
+ if (actorMeta) {
157
+ const entityType = actorMeta.entityType;
158
+ const contract = this.getOrCreateContract(contracts, entityType);
159
+ const handlers = (0, decorators_1.getActorHandlers)(metatype);
160
+ for (const handler of handlers) {
161
+ const msgClass = handler.messageClass;
162
+ const msgName = msgClass.name;
163
+ if (!contract.messages[msgName]) {
164
+ contract.messages[msgName] = this.buildMessageSpec(msgClass);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ // 2. @JobCommand / @JobQuery classes
170
+ for (const wrapper of providers) {
171
+ const { metatype } = wrapper;
172
+ if (!metatype)
173
+ continue;
174
+ const cmdMeta = (0, decorators_1.getJobCommandMetadata)(metatype);
175
+ if (cmdMeta && cmdMeta.entityType) {
176
+ const contract = this.getOrCreateContract(contracts, cmdMeta.entityType);
177
+ const msgName = cmdMeta.targetClass.name;
178
+ if (!contract.messages[msgName]) {
179
+ contract.messages[msgName] = this.buildMessageSpec(cmdMeta.targetClass, 'command');
180
+ }
181
+ }
182
+ const queryMeta = (0, decorators_1.getJobQueryMetadata)(metatype);
183
+ if (queryMeta && queryMeta.entityType) {
184
+ const contract = this.getOrCreateContract(contracts, queryMeta.entityType);
185
+ const msgName = queryMeta.targetClass.name;
186
+ if (!contract.messages[msgName]) {
187
+ contract.messages[msgName] = this.buildMessageSpec(queryMeta.targetClass, 'query');
188
+ }
189
+ }
190
+ }
191
+ // 3. @CommandHandler / @QueryHandler (CQRS)
192
+ const COMMAND_HANDLER_METADATA = '__commandHandler__';
193
+ const QUERY_HANDLER_METADATA = '__queryHandler__';
194
+ for (const wrapper of providers) {
195
+ const { metatype } = wrapper;
196
+ if (!metatype)
197
+ continue;
198
+ const commandClass = Reflect.getMetadata(COMMAND_HANDLER_METADATA, metatype);
199
+ if (commandClass && typeof commandClass === 'function') {
200
+ const entityType = (0, decorators_1.getEntityType)(commandClass);
201
+ if (entityType) {
202
+ const contract = this.getOrCreateContract(contracts, entityType);
203
+ if (!contract.messages[commandClass.name]) {
204
+ contract.messages[commandClass.name] = this.buildMessageSpec(commandClass, 'command');
205
+ }
206
+ }
207
+ }
208
+ const queryClass = Reflect.getMetadata(QUERY_HANDLER_METADATA, metatype);
209
+ if (queryClass && typeof queryClass === 'function') {
210
+ const entityType = (0, decorators_1.getEntityType)(queryClass);
211
+ if (entityType) {
212
+ const contract = this.getOrCreateContract(contracts, entityType);
213
+ if (!contract.messages[queryClass.name]) {
214
+ contract.messages[queryClass.name] = this.buildMessageSpec(queryClass, 'query');
215
+ }
216
+ }
217
+ }
218
+ }
219
+ // 4. QueueBus static registry
220
+ const queueBusRegistry = queue_bus_1.QueueBus.getAllRegistered();
221
+ for (const [className, entry] of queueBusRegistry) {
222
+ const entityType = (0, decorators_1.getEntityType)(entry.targetClass);
223
+ if (entityType) {
224
+ const contract = this.getOrCreateContract(contracts, entityType);
225
+ if (!contract.messages[className]) {
226
+ contract.messages[className] = this.buildMessageSpec(entry.targetClass, entry.isQuery ? 'query' : 'command');
227
+ }
228
+ }
229
+ }
230
+ for (const [entityType, contract] of contracts) {
231
+ await this.publishContract(entityType, contract);
232
+ this.ownedEntityTypes.add(entityType);
233
+ }
234
+ }
235
+ buildMessageSpec(msgClass, kind) {
236
+ const zodSchema = (0, decorators_1.getSchemaMetadata)(msgClass);
237
+ const zodReplySchema = (0, decorators_1.getReplySchemaMetadata)(msgClass);
238
+ const spec = {
239
+ kind: kind ?? 'command',
240
+ };
241
+ if (zodSchema) {
242
+ const jsonSchema = (0, schema_converter_1.convertZodToJsonSchema)(zodSchema);
243
+ if (jsonSchema)
244
+ spec.schema = jsonSchema;
245
+ }
246
+ if (zodReplySchema) {
247
+ const jsonReplySchema = (0, schema_converter_1.convertZodToJsonSchema)(zodReplySchema);
248
+ if (jsonReplySchema)
249
+ spec.replySchema = jsonReplySchema;
250
+ }
251
+ return spec;
252
+ }
253
+ getOrCreateContract(map, entityType) {
254
+ let contract = map.get(entityType);
255
+ if (!contract) {
256
+ contract = {
257
+ entityType,
258
+ serviceName: this.serviceName,
259
+ version: '1.0.0',
260
+ messages: {},
261
+ registeredAt: Date.now(),
262
+ lastHeartbeat: Date.now(),
263
+ };
264
+ map.set(entityType, contract);
265
+ }
266
+ return contract;
267
+ }
268
+ async publishContract(entityType, contract) {
269
+ const key = this.getRegistryKey(entityType);
270
+ const existing = await this.redis.get(key);
271
+ if (existing) {
272
+ const existingContract = JSON.parse(existing);
273
+ if (existingContract.serviceName !== this.serviceName) {
274
+ this.logger.log(`Entity type '${entityType}' co-owned: merging with service '${existingContract.serviceName}'`);
275
+ contract.messages = { ...existingContract.messages, ...contract.messages };
276
+ }
277
+ }
278
+ contract.lastHeartbeat = Date.now();
279
+ await this.redis.set(key, JSON.stringify(contract), 'EX', this.registrationTTL);
280
+ this.cache.set(entityType, contract);
281
+ const change = {
282
+ entityType,
283
+ action: existing ? 'updated' : 'registered',
284
+ serviceName: this.serviceName,
285
+ };
286
+ await this.redis.publish(this.getUpdateChannel(), JSON.stringify(change));
287
+ }
288
+ async refreshRegistrations() {
289
+ for (const entityType of this.ownedEntityTypes) {
290
+ const key = this.getRegistryKey(entityType);
291
+ const raw = await this.redis.get(key);
292
+ if (raw) {
293
+ const contract = JSON.parse(raw);
294
+ contract.lastHeartbeat = Date.now();
295
+ await this.redis.set(key, JSON.stringify(contract), 'EX', this.registrationTTL);
296
+ }
297
+ else {
298
+ this.logger.warn(`Registration for '${entityType}' expired — re-publishing`);
299
+ await this.publishLocalContracts();
300
+ return;
301
+ }
302
+ }
303
+ }
304
+ handleRegistryUpdate(payload) {
305
+ try {
306
+ const change = JSON.parse(payload);
307
+ this.cache.delete(change.entityType);
308
+ for (const listener of this.changeListeners) {
309
+ try {
310
+ listener(change);
311
+ }
312
+ catch (err) {
313
+ this.logger.error(`Registry change listener error: ${err.message}`);
314
+ }
315
+ }
316
+ if (this.config.verbose) {
317
+ this.logger.debug(`Registry update: ${change.action} ${change.entityType} by ${change.serviceName}`);
318
+ }
319
+ }
320
+ catch {
321
+ // Ignore malformed updates
322
+ }
323
+ }
324
+ validateJsonSchema(data, schema, entityType, messageName) {
325
+ if (schema.required && Array.isArray(schema.required)) {
326
+ const missing = schema.required.filter((prop) => !(prop in data));
327
+ if (missing.length > 0) {
328
+ throw new Error(`[Registry] Schema validation failed for '${messageName}' on '${entityType}': ` +
329
+ `missing required fields: [${missing.join(', ')}]`);
330
+ }
331
+ }
332
+ if (schema.properties && typeof schema.properties === 'object') {
333
+ for (const [prop, propSchema] of Object.entries(schema.properties)) {
334
+ if (prop in data) {
335
+ const expectedType = propSchema.type;
336
+ const actualValue = data[prop];
337
+ if (expectedType && actualValue !== undefined && actualValue !== null) {
338
+ const actualType = typeof actualValue;
339
+ const typeMatch = (expectedType === 'string' && actualType === 'string') ||
340
+ (expectedType === 'number' && actualType === 'number') ||
341
+ (expectedType === 'integer' && actualType === 'number' && Number.isInteger(actualValue)) ||
342
+ (expectedType === 'boolean' && actualType === 'boolean') ||
343
+ (expectedType === 'object' && actualType === 'object') ||
344
+ (expectedType === 'array' && Array.isArray(actualValue));
345
+ if (!typeMatch) {
346
+ throw new Error(`[Registry] Schema validation failed for '${messageName}' on '${entityType}': ` +
347
+ `field '${prop}' expected ${expectedType}, got ${actualType}`);
348
+ }
349
+ }
350
+ }
351
+ }
352
+ }
353
+ }
354
+ getRegistryKey(entityType) {
355
+ return `${this.keyPrefix}:registry:${entityType}`;
356
+ }
357
+ getUpdateChannel() {
358
+ return `${this.keyPrefix}:registry:updates`;
359
+ }
360
+ async scanKeys(pattern) {
361
+ let cursor = '0';
362
+ const keys = [];
363
+ do {
364
+ const [nextCursor, foundKeys] = await this.redis.scan(cursor, 'MATCH', pattern, 'COUNT', 100);
365
+ cursor = nextCursor;
366
+ keys.push(...foundKeys);
367
+ } while (cursor !== '0');
368
+ return keys;
369
+ }
370
+ };
371
+ exports.RegistryService = RegistryService;
372
+ exports.RegistryService = RegistryService = RegistryService_1 = __decorate([
373
+ (0, common_1.Injectable)(),
374
+ __param(0, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_REDIS)),
375
+ __param(1, (0, common_1.Inject)(constants_1.ATOMIC_QUEUES_CONFIG)),
376
+ __param(2, (0, common_1.Optional)()),
377
+ __metadata("design:paramtypes", [ioredis_1.default, Object, core_1.DiscoveryService])
378
+ ], RegistryService);
379
+ //# sourceMappingURL=registry.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.service.js","sourceRoot":"","sources":["../../../src/services/registry/registry.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export interface MessageSpec {
2
+ kind: 'command' | 'query';
3
+ schema?: Record<string, any>;
4
+ replySchema?: Record<string, any>;
5
+ }
6
+ export interface EntityContract {
7
+ entityType: string;
8
+ serviceName: string;
9
+ version: string;
10
+ messages: Record<string, MessageSpec>;
11
+ registeredAt: number;
12
+ lastHeartbeat: number;
13
+ }
14
+ export interface RegistryChange {
15
+ entityType: string;
16
+ action: 'registered' | 'updated' | 'removed';
17
+ serviceName: string;
18
+ }
19
+ export interface RegistrySnapshot {
20
+ generatedAt: number;
21
+ keyPrefix: string;
22
+ entities: EntityContract[];
23
+ }
24
+ //# sourceMappingURL=registry.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.types.d.ts","sourceRoot":"","sources":["../../../src/services/registry/registry.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B"}
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=lock.interfaces.js.map
3
+ //# sourceMappingURL=registry.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.types.js","sourceRoot":"","sources":["../../../src/services/registry/registry.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function convertZodToJsonSchema(zodSchema: any): Record<string, any> | undefined;
2
+ //# sourceMappingURL=schema-converter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../../src/services/registry/schema-converter.ts"],"names":[],"mappings":"AAaA,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAYtF"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertZodToJsonSchema = convertZodToJsonSchema;
4
+ const common_1 = require("@nestjs/common");
5
+ const logger = new common_1.Logger('SchemaConverter');
6
+ let zodToJsonSchema = null;
7
+ try {
8
+ const mod = require('zod-to-json-schema');
9
+ zodToJsonSchema = mod.zodToJsonSchema || mod.default?.zodToJsonSchema || mod.default;
10
+ }
11
+ catch {
12
+ // zod-to-json-schema not installed
13
+ }
14
+ function convertZodToJsonSchema(zodSchema) {
15
+ if (!zodToJsonSchema) {
16
+ logger.debug('zod-to-json-schema not available — schema will not be serialized');
17
+ return undefined;
18
+ }
19
+ try {
20
+ return zodToJsonSchema(zodSchema);
21
+ }
22
+ catch (err) {
23
+ logger.warn(`Failed to convert Zod schema: ${err.message}`);
24
+ return undefined;
25
+ }
26
+ }
27
+ //# sourceMappingURL=schema-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../../../src/services/registry/schema-converter.ts"],"names":[],"mappings":";;AAaA,wDAYC;AAzBD,2CAAwC;AAExC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAiB,CAAC,CAAC;AAE7C,IAAI,eAAe,GAAkC,IAAI,CAAC;AAE1D,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC1C,eAAe,GAAG,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,OAAO,EAAE,eAAe,IAAI,GAAG,CAAC,OAAO,CAAC;AACvF,CAAC;AAAC,MAAM,CAAC;IACP,mCAAmC;AACrC,CAAC;AAED,SAAgB,sBAAsB,CAAC,SAAc;IACnD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACjF,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,SAAS,CAAwB,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,iCAAkC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './result-collector.service';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/result-collector/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC"}
@@ -0,0 +1,18 @@
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("./result-collector.service"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/result-collector/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C"}
@@ -0,0 +1,17 @@
1
+ import { OnModuleInit, OnApplicationShutdown } from '@nestjs/common';
2
+ import Redis from 'ioredis';
3
+ import { IAtomicQueuesModuleConfig } from '../../domain';
4
+ export declare class ResultCollector implements OnModuleInit, OnApplicationShutdown {
5
+ private readonly redis;
6
+ private readonly config;
7
+ private readonly logger;
8
+ private readonly keyPrefix;
9
+ private readonly pending;
10
+ private subscriber;
11
+ constructor(redis: Redis, config: IAtomicQueuesModuleConfig);
12
+ onModuleInit(): Promise<void>;
13
+ onApplicationShutdown(): Promise<void>;
14
+ waitForResult<R = any>(correlationId: string, timeout: number): Promise<R>;
15
+ pendingCount(): number;
16
+ }
17
+ //# sourceMappingURL=result-collector.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-collector.service.d.ts","sourceRoot":"","sources":["../../../src/services/result-collector/result-collector.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,cAAc,CAAC;AAUzD,qBACa,eAAgB,YAAW,YAAY,EAAE,qBAAqB;IAO1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPvD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,UAAU,CAAsB;gBAGQ,KAAK,EAAE,KAAK,EACX,MAAM,EAAE,yBAAyB;IAK5E,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B7B,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5C,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAW1E,YAAY,IAAI,MAAM;CAGvB"}