@pattern-stack/codegen 0.15.1 → 0.15.2

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 (521) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/dist/chunk-24CWKBK5.js +94 -0
  3. package/dist/chunk-24CWKBK5.js.map +1 -0
  4. package/dist/chunk-2E224ZSN.js +20 -0
  5. package/dist/chunk-2E224ZSN.js.map +1 -0
  6. package/dist/chunk-2FTZLDBP.js +179 -0
  7. package/dist/chunk-2FTZLDBP.js.map +1 -0
  8. package/dist/chunk-2N4UG4VD.js +20 -0
  9. package/dist/chunk-2N4UG4VD.js.map +1 -0
  10. package/dist/chunk-2TVVBC53.js +92 -0
  11. package/dist/chunk-2TVVBC53.js.map +1 -0
  12. package/dist/chunk-2VHZ7EKC.js +37 -0
  13. package/dist/chunk-2VHZ7EKC.js.map +1 -0
  14. package/dist/chunk-32BMMV4H.js +109 -0
  15. package/dist/chunk-32BMMV4H.js.map +1 -0
  16. package/dist/chunk-32DOFN3T.js +4042 -0
  17. package/dist/chunk-32DOFN3T.js.map +1 -0
  18. package/dist/chunk-36U5UGIO.js +107 -0
  19. package/dist/chunk-36U5UGIO.js.map +1 -0
  20. package/dist/chunk-3CJFPU6Q.js +14 -0
  21. package/dist/chunk-3CJFPU6Q.js.map +1 -0
  22. package/dist/chunk-3NMCDN7L.js +90 -0
  23. package/dist/chunk-3NMCDN7L.js.map +1 -0
  24. package/dist/chunk-3SZFUTXE.js +62 -0
  25. package/dist/chunk-3SZFUTXE.js.map +1 -0
  26. package/dist/chunk-4DOJBQTP.js +117 -0
  27. package/dist/chunk-4DOJBQTP.js.map +1 -0
  28. package/dist/chunk-4JLJYWJC.js +308 -0
  29. package/dist/chunk-4JLJYWJC.js.map +1 -0
  30. package/dist/chunk-4KNXX6TI.js +29 -0
  31. package/dist/chunk-4KNXX6TI.js.map +1 -0
  32. package/dist/chunk-4LH67P4U.js +17 -0
  33. package/dist/chunk-4LH67P4U.js.map +1 -0
  34. package/dist/chunk-4MVGAMUA.js +40 -0
  35. package/dist/chunk-4MVGAMUA.js.map +1 -0
  36. package/dist/chunk-4OMHBMZJ.js +75 -0
  37. package/dist/chunk-4OMHBMZJ.js.map +1 -0
  38. package/dist/chunk-4RFHUZXU.js +635 -0
  39. package/dist/chunk-4RFHUZXU.js.map +1 -0
  40. package/dist/chunk-5A432NZJ.js +7 -0
  41. package/dist/chunk-5A432NZJ.js.map +1 -0
  42. package/dist/chunk-5Y7W3XR6.js +356 -0
  43. package/dist/chunk-5Y7W3XR6.js.map +1 -0
  44. package/dist/chunk-6DWFJNIK.js +15 -0
  45. package/dist/chunk-6DWFJNIK.js.map +1 -0
  46. package/dist/chunk-6I7ULIN6.js +15 -0
  47. package/dist/chunk-6I7ULIN6.js.map +1 -0
  48. package/dist/chunk-6XY6ZMMD.js +25 -0
  49. package/dist/chunk-6XY6ZMMD.js.map +1 -0
  50. package/dist/chunk-7B3RYX45.js +63 -0
  51. package/dist/chunk-7B3RYX45.js.map +1 -0
  52. package/dist/chunk-7C3FOSDI.js +1 -0
  53. package/dist/chunk-7C3FOSDI.js.map +1 -0
  54. package/dist/chunk-7KOW6PU6.js +59 -0
  55. package/dist/chunk-7KOW6PU6.js.map +1 -0
  56. package/dist/chunk-7LKAMLV4.js +92 -0
  57. package/dist/chunk-7LKAMLV4.js.map +1 -0
  58. package/dist/chunk-7RELQJIN.js +22 -0
  59. package/dist/chunk-7RELQJIN.js.map +1 -0
  60. package/dist/chunk-AHV4GDYM.js +63 -0
  61. package/dist/chunk-AHV4GDYM.js.map +1 -0
  62. package/dist/chunk-AQFQ4BYM.js +81 -0
  63. package/dist/chunk-AQFQ4BYM.js.map +1 -0
  64. package/dist/chunk-AS3NAZB6.js +14 -0
  65. package/dist/chunk-AS3NAZB6.js.map +1 -0
  66. package/dist/chunk-BGULBWKJ.js +88 -0
  67. package/dist/chunk-BGULBWKJ.js.map +1 -0
  68. package/dist/chunk-BIO6F7YI.js +17 -0
  69. package/dist/chunk-BIO6F7YI.js.map +1 -0
  70. package/dist/chunk-BOPZWRJK.js +36 -0
  71. package/dist/chunk-BOPZWRJK.js.map +1 -0
  72. package/dist/chunk-BPARRK6F.js +14 -0
  73. package/dist/chunk-BPARRK6F.js.map +1 -0
  74. package/dist/chunk-CO6LUM72.js +59 -0
  75. package/dist/chunk-CO6LUM72.js.map +1 -0
  76. package/dist/chunk-COGHTKXY.js +84 -0
  77. package/dist/chunk-COGHTKXY.js.map +1 -0
  78. package/dist/chunk-DCCZB4UC.js +100 -0
  79. package/dist/chunk-DCCZB4UC.js.map +1 -0
  80. package/dist/chunk-DKKFTHHI.js +53 -0
  81. package/dist/chunk-DKKFTHHI.js.map +1 -0
  82. package/dist/chunk-DV4RV2DC.js +59 -0
  83. package/dist/chunk-DV4RV2DC.js.map +1 -0
  84. package/dist/chunk-EDKJU5BO.js +11 -0
  85. package/dist/chunk-EDKJU5BO.js.map +1 -0
  86. package/dist/chunk-EO2QPOKH.js +116 -0
  87. package/dist/chunk-EO2QPOKH.js.map +1 -0
  88. package/dist/chunk-EOLLMEAH.js +155 -0
  89. package/dist/chunk-EOLLMEAH.js.map +1 -0
  90. package/dist/chunk-EWYCWP4H.js +14 -0
  91. package/dist/chunk-EWYCWP4H.js.map +1 -0
  92. package/dist/chunk-EXVDJMIY.js +33 -0
  93. package/dist/chunk-EXVDJMIY.js.map +1 -0
  94. package/dist/chunk-FASRXRX5.js +19 -0
  95. package/dist/chunk-FASRXRX5.js.map +1 -0
  96. package/dist/chunk-FI34KYZ5.js +1 -0
  97. package/dist/chunk-FI34KYZ5.js.map +1 -0
  98. package/dist/chunk-FN2PYDPP.js +1 -0
  99. package/dist/chunk-FN2PYDPP.js.map +1 -0
  100. package/dist/chunk-GM3RMJIJ.js +92 -0
  101. package/dist/chunk-GM3RMJIJ.js.map +1 -0
  102. package/dist/chunk-GYGNEQSC.js +9 -0
  103. package/dist/chunk-GYGNEQSC.js.map +1 -0
  104. package/dist/chunk-H5NH7KPE.js +21 -0
  105. package/dist/chunk-H5NH7KPE.js.map +1 -0
  106. package/dist/chunk-HNWZFNKP.js +168 -0
  107. package/dist/chunk-HNWZFNKP.js.map +1 -0
  108. package/dist/chunk-HUH73XGI.js +1 -0
  109. package/dist/chunk-HUH73XGI.js.map +1 -0
  110. package/dist/chunk-I6MG4M3F.js +201 -0
  111. package/dist/chunk-I6MG4M3F.js.map +1 -0
  112. package/dist/chunk-I6MVCB5A.js +39 -0
  113. package/dist/chunk-I6MVCB5A.js.map +1 -0
  114. package/dist/chunk-IBGER4YK.js +12 -0
  115. package/dist/chunk-IBGER4YK.js.map +1 -0
  116. package/dist/chunk-IF5I3DAA.js +92 -0
  117. package/dist/chunk-IF5I3DAA.js.map +1 -0
  118. package/dist/chunk-IP4OO26U.js +54 -0
  119. package/dist/chunk-IP4OO26U.js.map +1 -0
  120. package/dist/chunk-IWAOY6KC.js +1 -0
  121. package/dist/chunk-IWAOY6KC.js.map +1 -0
  122. package/dist/chunk-J37YWU7Y.js +19 -0
  123. package/dist/chunk-J37YWU7Y.js.map +1 -0
  124. package/dist/chunk-J6KZS54B.js +269 -0
  125. package/dist/chunk-J6KZS54B.js.map +1 -0
  126. package/dist/chunk-J6MN42LG.js +19 -0
  127. package/dist/chunk-J6MN42LG.js.map +1 -0
  128. package/dist/chunk-JRQO2IOF.js +65 -0
  129. package/dist/chunk-JRQO2IOF.js.map +1 -0
  130. package/dist/chunk-JRVNVKN6.js +212 -0
  131. package/dist/chunk-JRVNVKN6.js.map +1 -0
  132. package/dist/chunk-JWNHNUYL.js +96 -0
  133. package/dist/chunk-JWNHNUYL.js.map +1 -0
  134. package/dist/chunk-K2I6XIK5.js +122 -0
  135. package/dist/chunk-K2I6XIK5.js.map +1 -0
  136. package/dist/chunk-KMZCQASO.js +111 -0
  137. package/dist/chunk-KMZCQASO.js.map +1 -0
  138. package/dist/chunk-KVOWSC5S.js +1 -0
  139. package/dist/chunk-KVOWSC5S.js.map +1 -0
  140. package/dist/chunk-KYR3B3OW.js +79 -0
  141. package/dist/chunk-KYR3B3OW.js.map +1 -0
  142. package/dist/chunk-L3LZWWSX.js +61 -0
  143. package/dist/chunk-L3LZWWSX.js.map +1 -0
  144. package/dist/chunk-L4SDDEEU.js +1 -0
  145. package/dist/chunk-L4SDDEEU.js.map +1 -0
  146. package/dist/chunk-L6FTY45T.js +13 -0
  147. package/dist/chunk-L6FTY45T.js.map +1 -0
  148. package/dist/chunk-L7BNNRGI.js +134 -0
  149. package/dist/chunk-L7BNNRGI.js.map +1 -0
  150. package/dist/chunk-LG57S2SC.js +150 -0
  151. package/dist/chunk-LG57S2SC.js.map +1 -0
  152. package/dist/chunk-M6QLSLPO.js +97 -0
  153. package/dist/chunk-M6QLSLPO.js.map +1 -0
  154. package/dist/chunk-MZ6GV4YF.js +21 -0
  155. package/dist/chunk-MZ6GV4YF.js.map +1 -0
  156. package/dist/chunk-N5OTOWTP.js +55 -0
  157. package/dist/chunk-N5OTOWTP.js.map +1 -0
  158. package/dist/chunk-NN7XZEGF.js +14 -0
  159. package/dist/chunk-NN7XZEGF.js.map +1 -0
  160. package/dist/chunk-NPFPZ2HO.js +13 -0
  161. package/dist/chunk-NPFPZ2HO.js.map +1 -0
  162. package/dist/chunk-NXXDZ6ZF.js +42 -0
  163. package/dist/chunk-NXXDZ6ZF.js.map +1 -0
  164. package/dist/chunk-NYBCQZC7.js +11 -0
  165. package/dist/chunk-NYBCQZC7.js.map +1 -0
  166. package/dist/chunk-OFRRBC7M.js +78 -0
  167. package/dist/chunk-OFRRBC7M.js.map +1 -0
  168. package/dist/chunk-OGIZXGPY.js +222 -0
  169. package/dist/chunk-OGIZXGPY.js.map +1 -0
  170. package/dist/chunk-OKXZ63IA.js +168 -0
  171. package/dist/chunk-OKXZ63IA.js.map +1 -0
  172. package/dist/chunk-OSQRXVG2.js +58 -0
  173. package/dist/chunk-OSQRXVG2.js.map +1 -0
  174. package/dist/chunk-OTDN3OUQ.js +215 -0
  175. package/dist/chunk-OTDN3OUQ.js.map +1 -0
  176. package/dist/chunk-OZZJDRGW.js +122 -0
  177. package/dist/chunk-OZZJDRGW.js.map +1 -0
  178. package/dist/chunk-PNZSGAB2.js +114 -0
  179. package/dist/chunk-PNZSGAB2.js.map +1 -0
  180. package/dist/chunk-PRWIX6UW.js +21 -0
  181. package/dist/chunk-PRWIX6UW.js.map +1 -0
  182. package/dist/chunk-PSXUNOVU.js +7 -0
  183. package/dist/chunk-PSXUNOVU.js.map +1 -0
  184. package/dist/chunk-QLTJSCE6.js +44 -0
  185. package/dist/chunk-QLTJSCE6.js.map +1 -0
  186. package/dist/chunk-RC23QROE.js +447 -0
  187. package/dist/chunk-RC23QROE.js.map +1 -0
  188. package/dist/chunk-RFH7N6EP.js +36 -0
  189. package/dist/chunk-RFH7N6EP.js.map +1 -0
  190. package/dist/chunk-RHVN6NA7.js +134 -0
  191. package/dist/chunk-RHVN6NA7.js.map +1 -0
  192. package/dist/chunk-S7C6TIIF.js +21 -0
  193. package/dist/chunk-S7C6TIIF.js.map +1 -0
  194. package/dist/chunk-SNQ3TOWP.js +20 -0
  195. package/dist/chunk-SNQ3TOWP.js.map +1 -0
  196. package/dist/chunk-SOVM2VEK.js +14 -0
  197. package/dist/chunk-SOVM2VEK.js.map +1 -0
  198. package/dist/chunk-SQDOBLBP.js +13 -0
  199. package/dist/chunk-SQDOBLBP.js.map +1 -0
  200. package/dist/chunk-SR7F3TJY.js +130 -0
  201. package/dist/chunk-SR7F3TJY.js.map +1 -0
  202. package/dist/chunk-SZVPIHWE.js +129 -0
  203. package/dist/chunk-SZVPIHWE.js.map +1 -0
  204. package/dist/chunk-T4BIIU5E.js +89 -0
  205. package/dist/chunk-T4BIIU5E.js.map +1 -0
  206. package/dist/chunk-T6C4LFLC.js +112 -0
  207. package/dist/chunk-T6C4LFLC.js.map +1 -0
  208. package/dist/chunk-TNXH7BJS.js +48 -0
  209. package/dist/chunk-TNXH7BJS.js.map +1 -0
  210. package/dist/chunk-U64T4YZE.js +9 -0
  211. package/dist/chunk-U64T4YZE.js.map +1 -0
  212. package/dist/chunk-UQ5EHOH2.js +39 -0
  213. package/dist/chunk-UQ5EHOH2.js.map +1 -0
  214. package/dist/chunk-UTN4GBPQ.js +1 -0
  215. package/dist/chunk-UTN4GBPQ.js.map +1 -0
  216. package/dist/chunk-V4AF6DI4.js +16 -0
  217. package/dist/chunk-V4AF6DI4.js.map +1 -0
  218. package/dist/chunk-W72PRNJY.js +126 -0
  219. package/dist/chunk-W72PRNJY.js.map +1 -0
  220. package/dist/chunk-WEVWJKOW.js +81 -0
  221. package/dist/chunk-WEVWJKOW.js.map +1 -0
  222. package/dist/chunk-WL67FZGF.js +21 -0
  223. package/dist/chunk-WL67FZGF.js.map +1 -0
  224. package/dist/chunk-WPXNN6QS.js +290 -0
  225. package/dist/chunk-WPXNN6QS.js.map +1 -0
  226. package/dist/chunk-WRUUSZDJ.js +29 -0
  227. package/dist/chunk-WRUUSZDJ.js.map +1 -0
  228. package/dist/chunk-X2GMTYPA.js +50 -0
  229. package/dist/chunk-X2GMTYPA.js.map +1 -0
  230. package/dist/chunk-XCEI7NUH.js +41 -0
  231. package/dist/chunk-XCEI7NUH.js.map +1 -0
  232. package/dist/chunk-Y7GDG744.js +88 -0
  233. package/dist/chunk-Y7GDG744.js.map +1 -0
  234. package/dist/chunk-Y7RRSEOC.js +9 -0
  235. package/dist/chunk-Y7RRSEOC.js.map +1 -0
  236. package/dist/chunk-YPWODKD5.js +184 -0
  237. package/dist/chunk-YPWODKD5.js.map +1 -0
  238. package/dist/chunk-YSLTTQLC.js +25 -0
  239. package/dist/chunk-YSLTTQLC.js.map +1 -0
  240. package/dist/chunk-YTN6BKWA.js +121 -0
  241. package/dist/chunk-YTN6BKWA.js.map +1 -0
  242. package/dist/chunk-Z7PQCAVK.js +200 -0
  243. package/dist/chunk-Z7PQCAVK.js.map +1 -0
  244. package/dist/chunk-ZUKFQL6E.js +47 -0
  245. package/dist/chunk-ZUKFQL6E.js.map +1 -0
  246. package/dist/chunk-ZUMULSEQ.js +1 -0
  247. package/dist/chunk-ZUMULSEQ.js.map +1 -0
  248. package/dist/runtime/analytics/index.js +8 -41
  249. package/dist/runtime/analytics/index.js.map +1 -1
  250. package/dist/runtime/analytics/types.js +8 -41
  251. package/dist/runtime/analytics/types.js.map +1 -1
  252. package/dist/runtime/base-classes/activity-entity-repository.js +6 -312
  253. package/dist/runtime/base-classes/activity-entity-repository.js.map +1 -1
  254. package/dist/runtime/base-classes/activity-entity-service.js +6 -212
  255. package/dist/runtime/base-classes/activity-entity-service.js.map +1 -1
  256. package/dist/runtime/base-classes/base-read-use-cases.js +5 -27
  257. package/dist/runtime/base-classes/base-read-use-cases.js.map +1 -1
  258. package/dist/runtime/base-classes/base-repository.js +5 -277
  259. package/dist/runtime/base-classes/base-repository.js.map +1 -1
  260. package/dist/runtime/base-classes/base-service.js +5 -184
  261. package/dist/runtime/base-classes/base-service.js.map +1 -1
  262. package/dist/runtime/base-classes/index.js +59 -1076
  263. package/dist/runtime/base-classes/index.js.map +1 -1
  264. package/dist/runtime/base-classes/integrated-entity-repository.js +6 -486
  265. package/dist/runtime/base-classes/integrated-entity-repository.js.map +1 -1
  266. package/dist/runtime/base-classes/integrated-entity-service.js +6 -213
  267. package/dist/runtime/base-classes/integrated-entity-service.js.map +1 -1
  268. package/dist/runtime/base-classes/junction-integration-repository.js +8 -448
  269. package/dist/runtime/base-classes/junction-integration-repository.js.map +1 -1
  270. package/dist/runtime/base-classes/knowledge-entity-repository.js +6 -283
  271. package/dist/runtime/base-classes/knowledge-entity-repository.js.map +1 -1
  272. package/dist/runtime/base-classes/knowledge-entity-service.js +6 -190
  273. package/dist/runtime/base-classes/knowledge-entity-service.js.map +1 -1
  274. package/dist/runtime/base-classes/lifecycle-events.js +8 -70
  275. package/dist/runtime/base-classes/lifecycle-events.js.map +1 -1
  276. package/dist/runtime/base-classes/metadata-entity-repository.js +6 -330
  277. package/dist/runtime/base-classes/metadata-entity-repository.js.map +1 -1
  278. package/dist/runtime/base-classes/metadata-entity-service.js +6 -212
  279. package/dist/runtime/base-classes/metadata-entity-service.js.map +1 -1
  280. package/dist/runtime/base-classes/tenant-context.js +10 -36
  281. package/dist/runtime/base-classes/tenant-context.js.map +1 -1
  282. package/dist/runtime/base-classes/with-analytics.js +4 -7
  283. package/dist/runtime/base-classes/with-analytics.js.map +1 -1
  284. package/dist/runtime/constants/tokens.js +5 -3
  285. package/dist/runtime/constants/tokens.js.map +1 -1
  286. package/dist/runtime/eav-helpers.js +2 -0
  287. package/dist/runtime/eav-helpers.js.map +1 -1
  288. package/dist/runtime/pipes/zod-validation.pipe.js +3 -10
  289. package/dist/runtime/pipes/zod-validation.pipe.js.map +1 -1
  290. package/dist/runtime/shared/openapi/error-response.dto.js +5 -8
  291. package/dist/runtime/shared/openapi/error-response.dto.js.map +1 -1
  292. package/dist/runtime/shared/openapi/errors.js +5 -19
  293. package/dist/runtime/shared/openapi/errors.js.map +1 -1
  294. package/dist/runtime/shared/openapi/index.js +15 -106
  295. package/dist/runtime/shared/openapi/index.js.map +1 -1
  296. package/dist/runtime/shared/openapi/registry.js +6 -103
  297. package/dist/runtime/shared/openapi/registry.js.map +1 -1
  298. package/dist/runtime/shared/openapi/registry.tokens.js +4 -2
  299. package/dist/runtime/shared/openapi/registry.tokens.js.map +1 -1
  300. package/dist/runtime/subsystems/analytics/analytics.module.js +8 -117
  301. package/dist/runtime/subsystems/analytics/analytics.module.js.map +1 -1
  302. package/dist/runtime/subsystems/analytics/analytics.tokens.js +7 -8
  303. package/dist/runtime/subsystems/analytics/analytics.tokens.js.map +1 -1
  304. package/dist/runtime/subsystems/analytics/cube-backend.js +6 -71
  305. package/dist/runtime/subsystems/analytics/cube-backend.js.map +1 -1
  306. package/dist/runtime/subsystems/analytics/index.js +16 -117
  307. package/dist/runtime/subsystems/analytics/index.js.map +1 -1
  308. package/dist/runtime/subsystems/analytics/noop-backend.js +4 -21
  309. package/dist/runtime/subsystems/analytics/noop-backend.js.map +1 -1
  310. package/dist/runtime/subsystems/auth/auth-oauth-state.schema.js +4 -8
  311. package/dist/runtime/subsystems/auth/auth-oauth-state.schema.js.map +1 -1
  312. package/dist/runtime/subsystems/auth/auth.module.js +12 -359
  313. package/dist/runtime/subsystems/auth/auth.module.js.map +1 -1
  314. package/dist/runtime/subsystems/auth/auth.tokens.js +12 -13
  315. package/dist/runtime/subsystems/auth/auth.tokens.js.map +1 -1
  316. package/dist/runtime/subsystems/auth/backends/encryption-key/env.js +4 -49
  317. package/dist/runtime/subsystems/auth/backends/encryption-key/env.js.map +1 -1
  318. package/dist/runtime/subsystems/auth/backends/state-store.drizzle-backend.js +6 -64
  319. package/dist/runtime/subsystems/auth/backends/state-store.drizzle-backend.js.map +1 -1
  320. package/dist/runtime/subsystems/auth/backends/state-store.memory-backend.js +5 -47
  321. package/dist/runtime/subsystems/auth/backends/state-store.memory-backend.js.map +1 -1
  322. package/dist/runtime/subsystems/auth/controllers/auth.controller.js +5 -139
  323. package/dist/runtime/subsystems/auth/controllers/auth.controller.js.map +1 -1
  324. package/dist/runtime/subsystems/auth/index.js +53 -542
  325. package/dist/runtime/subsystems/auth/index.js.map +1 -1
  326. package/dist/runtime/subsystems/auth/middleware/requester-context.js +9 -65
  327. package/dist/runtime/subsystems/auth/middleware/requester-context.js.map +1 -1
  328. package/dist/runtime/subsystems/auth/protocols/oauth-state-store.js +4 -9
  329. package/dist/runtime/subsystems/auth/protocols/oauth-state-store.js.map +1 -1
  330. package/dist/runtime/subsystems/auth/runtime/connection-broken.error.js +4 -15
  331. package/dist/runtime/subsystems/auth/runtime/connection-broken.error.js.map +1 -1
  332. package/dist/runtime/subsystems/auth/runtime/oauth2-refresh.strategy.js +5 -104
  333. package/dist/runtime/subsystems/auth/runtime/oauth2-refresh.strategy.js.map +1 -1
  334. package/dist/runtime/subsystems/auth/runtime/session-expired.error.js +5 -16
  335. package/dist/runtime/subsystems/auth/runtime/session-expired.error.js.map +1 -1
  336. package/dist/runtime/subsystems/auth/runtime/with-auth-retry.js +5 -29
  337. package/dist/runtime/subsystems/auth/runtime/with-auth-retry.js.map +1 -1
  338. package/dist/runtime/subsystems/bridge/assert-tenant-id.js +5 -18
  339. package/dist/runtime/subsystems/bridge/assert-tenant-id.js.map +1 -1
  340. package/dist/runtime/subsystems/bridge/bridge-delivery-handler.js +12 -184
  341. package/dist/runtime/subsystems/bridge/bridge-delivery-handler.js.map +1 -1
  342. package/dist/runtime/subsystems/bridge/bridge-delivery.drizzle-backend.js +10 -448
  343. package/dist/runtime/subsystems/bridge/bridge-delivery.drizzle-backend.js.map +1 -1
  344. package/dist/runtime/subsystems/bridge/bridge-delivery.memory-backend.js +5 -126
  345. package/dist/runtime/subsystems/bridge/bridge-delivery.memory-backend.js.map +1 -1
  346. package/dist/runtime/subsystems/bridge/bridge-delivery.schema.js +6 -308
  347. package/dist/runtime/subsystems/bridge/bridge-delivery.schema.js.map +1 -1
  348. package/dist/runtime/subsystems/bridge/bridge-errors.js +6 -35
  349. package/dist/runtime/subsystems/bridge/bridge-errors.js.map +1 -1
  350. package/dist/runtime/subsystems/bridge/bridge-outbox-drain-hook.js +14 -606
  351. package/dist/runtime/subsystems/bridge/bridge-outbox-drain-hook.js.map +1 -1
  352. package/dist/runtime/subsystems/bridge/bridge.module.js +35 -3476
  353. package/dist/runtime/subsystems/bridge/bridge.module.js.map +1 -1
  354. package/dist/runtime/subsystems/bridge/bridge.tokens.js +9 -7
  355. package/dist/runtime/subsystems/bridge/bridge.tokens.js.map +1 -1
  356. package/dist/runtime/subsystems/bridge/event-flow.service.js +11 -137
  357. package/dist/runtime/subsystems/bridge/event-flow.service.js.map +1 -1
  358. package/dist/runtime/subsystems/bridge/generated/registry.js +4 -2
  359. package/dist/runtime/subsystems/bridge/generated/registry.js.map +1 -1
  360. package/dist/runtime/subsystems/bridge/index.js +60 -3470
  361. package/dist/runtime/subsystems/bridge/index.js.map +1 -1
  362. package/dist/runtime/subsystems/bridge/reserved-pools.js +4 -6
  363. package/dist/runtime/subsystems/bridge/reserved-pools.js.map +1 -1
  364. package/dist/runtime/subsystems/cache/cache.drizzle-backend.js +10 -133
  365. package/dist/runtime/subsystems/cache/cache.drizzle-backend.js.map +1 -1
  366. package/dist/runtime/subsystems/cache/cache.memory-backend.js +6 -101
  367. package/dist/runtime/subsystems/cache/cache.memory-backend.js.map +1 -1
  368. package/dist/runtime/subsystems/cache/cache.module.js +10 -278
  369. package/dist/runtime/subsystems/cache/cache.module.js.map +1 -1
  370. package/dist/runtime/subsystems/cache/cache.schema.js +4 -14
  371. package/dist/runtime/subsystems/cache/cache.schema.js.map +1 -1
  372. package/dist/runtime/subsystems/cache/cache.tokens.js +6 -7
  373. package/dist/runtime/subsystems/cache/cache.tokens.js.map +1 -1
  374. package/dist/runtime/subsystems/cache/index.js +20 -278
  375. package/dist/runtime/subsystems/cache/index.js.map +1 -1
  376. package/dist/runtime/subsystems/events/domain-events.schema.js +3 -72
  377. package/dist/runtime/subsystems/events/domain-events.schema.js.map +1 -1
  378. package/dist/runtime/subsystems/events/event-bus.drizzle-backend.js +9 -413
  379. package/dist/runtime/subsystems/events/event-bus.drizzle-backend.js.map +1 -1
  380. package/dist/runtime/subsystems/events/event-bus.memory-backend.js +7 -235
  381. package/dist/runtime/subsystems/events/event-bus.memory-backend.js.map +1 -1
  382. package/dist/runtime/subsystems/events/event-bus.redis-backend.js +8 -20
  383. package/dist/runtime/subsystems/events/event-bus.redis-backend.js.map +1 -1
  384. package/dist/runtime/subsystems/events/event-keyset-cursor.js +8 -30
  385. package/dist/runtime/subsystems/events/event-keyset-cursor.js.map +1 -1
  386. package/dist/runtime/subsystems/events/event-read.protocol.js +2 -0
  387. package/dist/runtime/subsystems/events/event-read.protocol.js.map +1 -1
  388. package/dist/runtime/subsystems/events/events-errors.js +4 -11
  389. package/dist/runtime/subsystems/events/events-errors.js.map +1 -1
  390. package/dist/runtime/subsystems/events/events.module.js +15 -949
  391. package/dist/runtime/subsystems/events/events.module.js.map +1 -1
  392. package/dist/runtime/subsystems/events/events.tokens.js +10 -11
  393. package/dist/runtime/subsystems/events/events.tokens.js.map +1 -1
  394. package/dist/runtime/subsystems/events/generated/bus.js +9 -240
  395. package/dist/runtime/subsystems/events/generated/bus.js.map +1 -1
  396. package/dist/runtime/subsystems/events/generated/index.js +23 -240
  397. package/dist/runtime/subsystems/events/generated/index.js.map +1 -1
  398. package/dist/runtime/subsystems/events/generated/registry.js +5 -82
  399. package/dist/runtime/subsystems/events/generated/registry.js.map +1 -1
  400. package/dist/runtime/subsystems/events/generated/schemas.js +12 -52
  401. package/dist/runtime/subsystems/events/generated/schemas.js.map +1 -1
  402. package/dist/runtime/subsystems/events/generated/types.js +1 -0
  403. package/dist/runtime/subsystems/events/index.js +32 -949
  404. package/dist/runtime/subsystems/events/index.js.map +1 -1
  405. package/dist/runtime/subsystems/index.js +171 -5912
  406. package/dist/runtime/subsystems/index.js.map +1 -1
  407. package/dist/runtime/subsystems/integration/build-change-source.js +6 -178
  408. package/dist/runtime/subsystems/integration/build-change-source.js.map +1 -1
  409. package/dist/runtime/subsystems/integration/deep-equal.differ.js +4 -109
  410. package/dist/runtime/subsystems/integration/deep-equal.differ.js.map +1 -1
  411. package/dist/runtime/subsystems/integration/detection-config.schema.js +11 -78
  412. package/dist/runtime/subsystems/integration/detection-config.schema.js.map +1 -1
  413. package/dist/runtime/subsystems/integration/entity-change-source-registry.memory.js +5 -30
  414. package/dist/runtime/subsystems/integration/entity-change-source-registry.memory.js.map +1 -1
  415. package/dist/runtime/subsystems/integration/entity-change-source-registry.protocol.js +4 -9
  416. package/dist/runtime/subsystems/integration/entity-change-source-registry.protocol.js.map +1 -1
  417. package/dist/runtime/subsystems/integration/execute-integration.use-case.js +6 -239
  418. package/dist/runtime/subsystems/integration/execute-integration.use-case.js.map +1 -1
  419. package/dist/runtime/subsystems/integration/incremental-read.js +5 -144
  420. package/dist/runtime/subsystems/integration/incremental-read.js.map +1 -1
  421. package/dist/runtime/subsystems/integration/index.js +83 -1352
  422. package/dist/runtime/subsystems/integration/index.js.map +1 -1
  423. package/dist/runtime/subsystems/integration/integration-audit.schema.js +10 -155
  424. package/dist/runtime/subsystems/integration/integration-audit.schema.js.map +1 -1
  425. package/dist/runtime/subsystems/integration/integration-cursor-store.drizzle-backend.js +7 -270
  426. package/dist/runtime/subsystems/integration/integration-cursor-store.drizzle-backend.js.map +1 -1
  427. package/dist/runtime/subsystems/integration/integration-cursor-store.memory-backend.js +4 -65
  428. package/dist/runtime/subsystems/integration/integration-cursor-store.memory-backend.js.map +1 -1
  429. package/dist/runtime/subsystems/integration/integration-errors.js +5 -15
  430. package/dist/runtime/subsystems/integration/integration-errors.js.map +1 -1
  431. package/dist/runtime/subsystems/integration/integration-field-diff.protocol.js +5 -7
  432. package/dist/runtime/subsystems/integration/integration-field-diff.protocol.js.map +1 -1
  433. package/dist/runtime/subsystems/integration/integration-run-recorder.drizzle-backend.js +8 -303
  434. package/dist/runtime/subsystems/integration/integration-run-recorder.drizzle-backend.js.map +1 -1
  435. package/dist/runtime/subsystems/integration/integration-run-recorder.memory-backend.js +5 -125
  436. package/dist/runtime/subsystems/integration/integration-run-recorder.memory-backend.js.map +1 -1
  437. package/dist/runtime/subsystems/integration/integration.module.js +13 -700
  438. package/dist/runtime/subsystems/integration/integration.module.js.map +1 -1
  439. package/dist/runtime/subsystems/integration/integration.tokens.js +11 -9
  440. package/dist/runtime/subsystems/integration/integration.tokens.js.map +1 -1
  441. package/dist/runtime/subsystems/integration/loopback.middleware.js +4 -16
  442. package/dist/runtime/subsystems/integration/loopback.middleware.js.map +1 -1
  443. package/dist/runtime/subsystems/integration/poll-change-source.js +4 -89
  444. package/dist/runtime/subsystems/integration/poll-change-source.js.map +1 -1
  445. package/dist/runtime/subsystems/integration/webhook-change-source.js +4 -70
  446. package/dist/runtime/subsystems/integration/webhook-change-source.js.map +1 -1
  447. package/dist/runtime/subsystems/jobs/bullmq.config.js +9 -140
  448. package/dist/runtime/subsystems/jobs/bullmq.config.js.map +1 -1
  449. package/dist/runtime/subsystems/jobs/index.js +88 -2691
  450. package/dist/runtime/subsystems/jobs/index.js.map +1 -1
  451. package/dist/runtime/subsystems/jobs/job-handler.base.js +10 -49
  452. package/dist/runtime/subsystems/jobs/job-handler.base.js.map +1 -1
  453. package/dist/runtime/subsystems/jobs/job-orchestration.schema.js +13 -152
  454. package/dist/runtime/subsystems/jobs/job-orchestration.schema.js.map +1 -1
  455. package/dist/runtime/subsystems/jobs/job-orchestrator.bullmq-backend.js +36 -699
  456. package/dist/runtime/subsystems/jobs/job-orchestrator.bullmq-backend.js.map +1 -1
  457. package/dist/runtime/subsystems/jobs/job-orchestrator.drizzle-backend.js +10 -564
  458. package/dist/runtime/subsystems/jobs/job-orchestrator.drizzle-backend.js.map +1 -1
  459. package/dist/runtime/subsystems/jobs/job-orchestrator.memory-backend.js +10 -824
  460. package/dist/runtime/subsystems/jobs/job-orchestrator.memory-backend.js.map +1 -1
  461. package/dist/runtime/subsystems/jobs/job-run-keyset-cursor.js +9 -51
  462. package/dist/runtime/subsystems/jobs/job-run-keyset-cursor.js.map +1 -1
  463. package/dist/runtime/subsystems/jobs/job-run-service.drizzle-backend.js +9 -416
  464. package/dist/runtime/subsystems/jobs/job-run-service.drizzle-backend.js.map +1 -1
  465. package/dist/runtime/subsystems/jobs/job-run-service.memory-backend.js +9 -290
  466. package/dist/runtime/subsystems/jobs/job-run-service.memory-backend.js.map +1 -1
  467. package/dist/runtime/subsystems/jobs/job-step-service.drizzle-backend.js +5 -213
  468. package/dist/runtime/subsystems/jobs/job-step-service.drizzle-backend.js.map +1 -1
  469. package/dist/runtime/subsystems/jobs/job-step-service.memory-backend.js +5 -131
  470. package/dist/runtime/subsystems/jobs/job-step-service.memory-backend.js.map +1 -1
  471. package/dist/runtime/subsystems/jobs/job-worker.bullmq-backend.js +9 -175
  472. package/dist/runtime/subsystems/jobs/job-worker.bullmq-backend.js.map +1 -1
  473. package/dist/runtime/subsystems/jobs/job-worker.js +14 -613
  474. package/dist/runtime/subsystems/jobs/job-worker.js.map +1 -1
  475. package/dist/runtime/subsystems/jobs/job-worker.module.js +23 -2647
  476. package/dist/runtime/subsystems/jobs/job-worker.module.js.map +1 -1
  477. package/dist/runtime/subsystems/jobs/jobs-domain.module.js +19 -1897
  478. package/dist/runtime/subsystems/jobs/jobs-domain.module.js.map +1 -1
  479. package/dist/runtime/subsystems/jobs/jobs-domain.tokens.js +8 -9
  480. package/dist/runtime/subsystems/jobs/jobs-domain.tokens.js.map +1 -1
  481. package/dist/runtime/subsystems/jobs/jobs-errors.js +10 -78
  482. package/dist/runtime/subsystems/jobs/jobs-errors.js.map +1 -1
  483. package/dist/runtime/subsystems/jobs/memory-job-store.js +4 -15
  484. package/dist/runtime/subsystems/jobs/memory-job-store.js.map +1 -1
  485. package/dist/runtime/subsystems/jobs/pool-config.loader.js +9 -124
  486. package/dist/runtime/subsystems/jobs/pool-config.loader.js.map +1 -1
  487. package/dist/runtime/subsystems/observability/index.js +21 -310
  488. package/dist/runtime/subsystems/observability/index.js.map +1 -1
  489. package/dist/runtime/subsystems/observability/observability-errors.js +4 -9
  490. package/dist/runtime/subsystems/observability/observability-errors.js.map +1 -1
  491. package/dist/runtime/subsystems/observability/observability.module.js +11 -300
  492. package/dist/runtime/subsystems/observability/observability.module.js.map +1 -1
  493. package/dist/runtime/subsystems/observability/observability.service.js +9 -197
  494. package/dist/runtime/subsystems/observability/observability.service.js.map +1 -1
  495. package/dist/runtime/subsystems/observability/observability.tokens.js +5 -3
  496. package/dist/runtime/subsystems/observability/observability.tokens.js.map +1 -1
  497. package/dist/runtime/subsystems/observability/reporters/bridge-metrics.reporter.js +4 -84
  498. package/dist/runtime/subsystems/observability/reporters/bridge-metrics.reporter.js.map +1 -1
  499. package/dist/runtime/subsystems/observability/reporters/index.js +5 -84
  500. package/dist/runtime/subsystems/observability/reporters/index.js.map +1 -1
  501. package/dist/runtime/subsystems/storage/index.js +15 -200
  502. package/dist/runtime/subsystems/storage/index.js.map +1 -1
  503. package/dist/runtime/subsystems/storage/storage.local-backend.js +4 -103
  504. package/dist/runtime/subsystems/storage/storage.local-backend.js.map +1 -1
  505. package/dist/runtime/subsystems/storage/storage.memory-backend.js +5 -68
  506. package/dist/runtime/subsystems/storage/storage.memory-backend.js.map +1 -1
  507. package/dist/runtime/subsystems/storage/storage.module.js +8 -200
  508. package/dist/runtime/subsystems/storage/storage.module.js.map +1 -1
  509. package/dist/runtime/subsystems/storage/storage.tokens.js +5 -6
  510. package/dist/runtime/subsystems/storage/storage.tokens.js.map +1 -1
  511. package/dist/runtime/subsystems/storage/storage.utils.js +4 -14
  512. package/dist/runtime/subsystems/storage/storage.utils.js.map +1 -1
  513. package/dist/runtime/subsystems/token-key.js +5 -3
  514. package/dist/runtime/subsystems/token-key.js.map +1 -1
  515. package/dist/src/cli/index.js +637 -5454
  516. package/dist/src/cli/index.js.map +1 -1
  517. package/dist/src/index.js +68 -4170
  518. package/dist/src/index.js.map +1 -1
  519. package/package.json +1 -1
  520. package/runtime/subsystems/bridge/bridge-outbox-drain-hook.ts +44 -21
  521. package/runtime/subsystems/jobs/job-worker.ts +17 -11
@@ -1,953 +1,36 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __decorateClass = (decorators, target, key, kind) => {
4
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
- for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
- if (decorator = decorators[i])
7
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
- if (kind && result) __defProp(target, key, result);
9
- return result;
10
- };
11
- var __decorateParam = (index2, decorator) => (target, key) => decorator(target, key, index2);
12
-
13
- // runtime/subsystems/token-key.ts
14
- var PKG = "@pattern-stack/codegen";
15
- var tokenKey = (area, name) => `${PKG}.${area}.${name}`;
16
-
17
- // runtime/subsystems/events/events.tokens.ts
18
- var EVENT_BUS = "EVENT_BUS";
19
- var EVENT_READ_PORT = "EVENT_READ_PORT";
20
- var TYPED_EVENT_BUS = "TYPED_EVENT_BUS";
21
- var EVENTS_MULTI_TENANT = "EVENTS_MULTI_TENANT";
22
- var REDIS_URL = Symbol.for(tokenKey("events", "redis-url"));
23
- var EVENTS_MODULE_OPTIONS = "EVENTS_MODULE_OPTIONS";
24
-
25
- // runtime/subsystems/events/generated/bus.ts
26
- import { Injectable, Inject } from "@nestjs/common";
27
- import { randomUUID } from "crypto";
28
-
29
- // runtime/subsystems/events/events-errors.ts
30
- var MissingTenantIdError = class extends Error {
31
- constructor(eventType) {
32
- super(
33
- `Missing tenantId for event '${eventType}'. EventsModule is configured with multiTenant: true \u2014 every publish must include opts.metadata.tenantId. Either pass the tenantId or disable multi-tenancy on the module.`
34
- );
35
- this.eventType = eventType;
36
- }
37
- eventType;
38
- name = "MissingTenantIdError";
39
- };
40
-
41
- // runtime/subsystems/events/generated/schemas.ts
42
- import { z } from "zod";
43
- var contactCreatedPayloadSchema = z.object({
44
- accountId: z.string().uuid().nullable(),
45
- contactId: z.string().uuid(),
46
- createdBy: z.string().uuid()
47
- }).strict();
48
- var contactMarkedChampionPayloadSchema = z.object({
49
- contactId: z.string().uuid(),
50
- opportunityId: z.string().uuid()
51
- }).strict();
52
- var contactMergedPayloadSchema = z.object({
53
- mergedBy: z.string().uuid(),
54
- sourceId: z.string().uuid(),
55
- targetId: z.string().uuid()
56
- }).strict();
57
- var crmSyncStartedPayloadSchema = z.object({
58
- runId: z.string().uuid(),
59
- source: z.string()
60
- }).strict();
61
- var dealCreatedPayloadSchema = z.object({
62
- accountId: z.string().uuid(),
63
- dealId: z.string().uuid(),
64
- ownerId: z.string().uuid()
65
- }).strict();
66
- var dealStageChangedPayloadSchema = z.object({
67
- dealId: z.string().uuid(),
68
- newStage: z.string(),
69
- oldStage: z.string()
70
- }).strict();
71
- var stripePaymentReceivedPayloadSchema = z.object({
72
- amountCents: z.number(),
73
- currency: z.string(),
74
- customerId: z.string(),
75
- eventId: z.string(),
76
- receivedAt: z.coerce.date()
77
- }).strict();
78
- var webhookOutboundContactSyncPayloadSchema = z.object({
79
- contactId: z.string().uuid(),
80
- occurredAt: z.coerce.date(),
81
- operation: z.string()
82
- }).strict();
83
- var eventPayloadSchemas = {
84
- "contact_created": contactCreatedPayloadSchema,
85
- "contact_marked_champion": contactMarkedChampionPayloadSchema,
86
- "contact_merged": contactMergedPayloadSchema,
87
- "crm_sync_started": crmSyncStartedPayloadSchema,
88
- "deal_created": dealCreatedPayloadSchema,
89
- "deal_stage_changed": dealStageChangedPayloadSchema,
90
- "stripe_payment_received": stripePaymentReceivedPayloadSchema,
91
- "webhook_outbound_contact_sync": webhookOutboundContactSyncPayloadSchema
92
- };
93
-
94
- // runtime/subsystems/events/generated/registry.ts
95
- var eventRegistry = {
96
- "contact_created": {
97
- type: "contact_created",
98
- tier: "domain",
99
- direction: "change",
100
- pool: "events_change",
101
- aggregate: "contact",
102
- version: 1,
103
- retry: { attempts: 3, backoff: "exponential" }
104
- },
105
- "contact_marked_champion": {
106
- type: "contact_marked_champion",
107
- tier: "domain",
108
- direction: "change",
109
- pool: "events_change",
110
- aggregate: "contact",
111
- version: 1,
112
- retry: { attempts: 3, backoff: "exponential" }
113
- },
114
- "contact_merged": {
115
- type: "contact_merged",
116
- tier: "domain",
117
- direction: "change",
118
- pool: "events_change",
119
- aggregate: "contact",
120
- version: 1,
121
- retry: { attempts: 3, backoff: "exponential" }
122
- },
123
- "crm_sync_started": {
124
- type: "crm_sync_started",
125
- tier: "audit",
126
- direction: null,
127
- pool: null,
128
- version: 1,
129
- retry: { attempts: 3, backoff: "exponential" }
130
- },
131
- "deal_created": {
132
- type: "deal_created",
133
- tier: "domain",
134
- direction: "change",
135
- pool: "events_change",
136
- aggregate: "deal",
137
- version: 1,
138
- retry: { attempts: 3, backoff: "exponential" }
139
- },
140
- "deal_stage_changed": {
141
- type: "deal_stage_changed",
142
- tier: "domain",
143
- direction: "change",
144
- pool: "events_change",
145
- aggregate: "deal",
146
- version: 1,
147
- retry: { attempts: 3, backoff: "exponential" }
148
- },
149
- "stripe_payment_received": {
150
- type: "stripe_payment_received",
151
- tier: "domain",
152
- direction: "inbound",
153
- pool: "events_inbound",
154
- source: "stripe",
155
- version: 1,
156
- retry: { attempts: 5, backoff: "exponential" }
157
- },
158
- "webhook_outbound_contact_sync": {
159
- type: "webhook_outbound_contact_sync",
160
- tier: "domain",
161
- direction: "outbound",
162
- pool: "events_outbound",
163
- aggregate: "contact",
164
- destination: "crm",
165
- version: 1,
166
- retry: { attempts: 3, backoff: "exponential" }
167
- }
168
- };
169
- function getEventMetadata(type) {
170
- const meta = eventRegistry[type];
171
- if (!meta) {
172
- throw new Error(`No registry entry for event type '${String(type)}' \u2014 declare events under events/*.yaml and re-run \`codegen entity new --all\`.`);
173
- }
174
- return meta;
175
- }
176
-
177
- // runtime/subsystems/events/generated/bus.ts
178
- var TypedEventBus = class {
179
- constructor(bus, multiTenant) {
180
- this.bus = bus;
181
- this.multiTenant = multiTenant;
182
- }
183
- bus;
184
- multiTenant;
185
- async publish(type, aggregateId, payload, opts) {
186
- const meta = getEventMetadata(type);
187
- const flag = process.env["CODEGEN_EVENT_VALIDATE"];
188
- const shouldValidate = flag === void 0 ? true : flag !== "false" && flag !== "0";
189
- if (shouldValidate) {
190
- const schema = eventPayloadSchemas[type];
191
- if (schema) {
192
- const check2 = schema.safeParse(payload);
193
- if (!check2.success) {
194
- console.warn(
195
- `[TypedEventBus] payload validation failed for ${String(type)}:`,
196
- check2.error.issues
197
- );
198
- }
199
- }
200
- }
201
- const tenantId = opts?.metadata?.["tenantId"];
202
- if (this.multiTenant && (tenantId === void 0 || tenantId === null)) {
203
- throw new MissingTenantIdError(type);
204
- }
205
- const aggregateType = meta.aggregate ?? meta.source ?? meta.destination ?? type;
206
- const baseMetadata = { ...opts?.metadata ?? {} };
207
- if (meta.tier === "audit") {
208
- if (baseMetadata["pool"] !== void 0 || baseMetadata["direction"] !== void 0) {
209
- console.debug(
210
- `[TypedEventBus] tier:audit event '${String(type)}' had pool/direction in opts.metadata; overriding to null.`
211
- );
212
- }
213
- baseMetadata["pool"] = null;
214
- baseMetadata["direction"] = null;
215
- baseMetadata["tier"] = "audit";
216
- } else {
217
- baseMetadata["pool"] = meta.pool;
218
- baseMetadata["direction"] = meta.direction;
219
- baseMetadata["tier"] = "domain";
220
- }
221
- baseMetadata["version"] = meta.version;
222
- await this.bus.publish(
223
- {
224
- id: randomUUID(),
225
- type,
226
- aggregateId,
227
- aggregateType,
228
- payload,
229
- occurredAt: /* @__PURE__ */ new Date(),
230
- metadata: baseMetadata
231
- },
232
- opts?.tx
233
- );
234
- }
235
- subscribe(type, handler) {
236
- return this.bus.subscribe(type, handler);
237
- }
238
- };
239
- TypedEventBus = __decorateClass([
240
- Injectable(),
241
- __decorateParam(0, Inject(EVENT_BUS)),
242
- __decorateParam(1, Inject(EVENTS_MULTI_TENANT))
243
- ], TypedEventBus);
244
-
245
- // runtime/subsystems/events/events.module.ts
246
- import { Module } from "@nestjs/common";
247
-
248
- // runtime/constants/tokens.ts
249
- var DRIZZLE = "DRIZZLE";
250
-
251
- // runtime/subsystems/events/event-bus.drizzle-backend.ts
252
- import { Injectable as Injectable2, Inject as Inject2, Logger, Optional } from "@nestjs/common";
253
- import { eq, and, inArray, asc, desc, gte, lt, or, sql as sql2 } from "drizzle-orm";
254
-
255
- // runtime/subsystems/events/event-keyset-cursor.ts
256
- var DEFAULT_EVENT_LIST_LIMIT = 50;
257
- var MAX_EVENT_LIST_LIMIT = 200;
258
- function clampEventLimit(limit) {
259
- if (typeof limit !== "number" || !Number.isFinite(limit)) {
260
- return DEFAULT_EVENT_LIST_LIMIT;
261
- }
262
- const floored = Math.floor(limit);
263
- if (floored < 1) return 1;
264
- if (floored > MAX_EVENT_LIST_LIMIT) return MAX_EVENT_LIST_LIMIT;
265
- return floored;
266
- }
267
- function encodeEventCursor(keyset) {
268
- const tuple = [keyset.occurredAt.toISOString(), keyset.id];
269
- return Buffer.from(JSON.stringify(tuple), "utf8").toString("base64url");
270
- }
271
- function decodeEventCursor(cursor) {
272
- try {
273
- const json = Buffer.from(cursor, "base64url").toString("utf8");
274
- const parsed = JSON.parse(json);
275
- if (!Array.isArray(parsed) || parsed.length !== 2) return null;
276
- const [iso, id] = parsed;
277
- if (typeof iso !== "string" || typeof id !== "string") return null;
278
- const occurredAt = new Date(iso);
279
- if (Number.isNaN(occurredAt.getTime())) return null;
280
- return { occurredAt, id };
281
- } catch {
282
- return null;
283
- }
284
- }
285
-
286
- // runtime/subsystems/events/domain-events.schema.ts
1
+ import "../../../chunk-FN2PYDPP.js";
287
2
  import {
288
- check,
289
- index,
290
- jsonb,
291
- pgTable,
292
- text,
293
- timestamp,
294
- uuid
295
- } from "drizzle-orm/pg-core";
296
- import { sql } from "drizzle-orm";
297
- var domainEvents = pgTable(
298
- "domain_events",
299
- {
300
- id: uuid("id").primaryKey(),
301
- type: text("type").notNull(),
302
- aggregateId: text("aggregate_id").notNull(),
303
- aggregateType: text("aggregate_type").notNull(),
304
- payload: jsonb("payload").notNull().$type(),
305
- occurredAt: timestamp("occurred_at", { withTimezone: true }).notNull(),
306
- processedAt: timestamp("processed_at", { withTimezone: true }),
307
- /** Lifecycle status: pending | processed | failed */
308
- status: text("status").notNull().default("pending"),
309
- /** Error message from the last failed dispatch attempt. */
310
- error: text("error"),
311
- metadata: jsonb("metadata").$type(),
312
- /** Routing pool (e.g. `events_inbound`, `events_change`, `events_outbound`). Populated by DrizzleEventBus.publish() in EVT-4. NULL when `tier='audit'`. */
313
- pool: text("pool"),
314
- /** Routing direction: `inbound` | `change` | `outbound`. Populated by DrizzleEventBus.publish() in EVT-4. NULL when `tier='audit'`. */
315
- direction: text("direction"),
316
- /**
317
- * Event tier: `'domain'` (default) or `'audit'`. Audit-tier rows are
318
- * observability-only and have null `pool`/`direction` by construction —
319
- * enforced by the `domain_events_tier_routing_check` CHECK constraint
320
- * declared below. (AUDIT-1)
321
- */
322
- tier: text("tier").notNull().default("domain"),
323
- // conditional: emitted only when events.multi_tenant: true
324
- tenantId: text("tenant_id")
325
- },
326
- (t) => ({
327
- /** Polling drain filter (existing — promoted from comment to declaration in EVT-1). */
328
- idxDomainEventsStatusOccurredAt: index("idx_domain_events_status_occurred_at").on(
329
- t.status,
330
- t.occurredAt
331
- ),
332
- /** Event replay per aggregate (existing — promoted from comment to declaration in EVT-1). */
333
- idxDomainEventsAggregate: index("idx_domain_events_aggregate").on(
334
- t.aggregateId,
335
- t.aggregateType
336
- ),
337
- /** Per-pool drain filter (EVT-1). Enables DrizzleEventBus to drain a single pool without scanning all events. */
338
- idxDomainEventsPoolStatusOccurredAt: index(
339
- "idx_domain_events_pool_status_occurred_at"
340
- ).on(t.pool, t.status, t.occurredAt),
341
- /** Per-tier filter (AUDIT-1). Backs the observability viewer's tier toggle. */
342
- idxDomainEventsTierStatusOccurredAt: index(
343
- "idx_domain_events_tier_status_occurred_at"
344
- ).on(t.tier, t.status, t.occurredAt),
345
- /**
346
- * Tier ↔ routing-fields invariant (AUDIT-1):
347
- * - `tier` is one of `'domain' | 'audit'`.
348
- * - `tier='audit'` ⇔ `pool IS NULL AND direction IS NULL`.
349
- * - `tier='domain'` ⇒ `pool` and `direction` are populated (the
350
- * DrizzleEventBus inserts always supply them; the bus stamps them
351
- * in AUDIT-3).
352
- */
353
- tierRoutingCheck: check(
354
- "domain_events_tier_routing_check",
355
- sql`${t.tier} in ('domain','audit') AND ((${t.tier} = 'audit') = (${t.pool} is null and ${t.direction} is null))`
356
- )
357
- })
358
- );
359
-
360
- // runtime/subsystems/bridge/bridge.tokens.ts
361
- var BRIDGE_OUTBOX_DRAIN_HOOK = "BRIDGE_OUTBOX_DRAIN_HOOK";
362
-
363
- // runtime/subsystems/events/event-bus.drizzle-backend.ts
364
- var POLL_INTERVAL_MS = 1e3;
365
- var POLL_BATCH_SIZE = 50;
366
- function toInsertValues(event, multiTenant) {
367
- const metadata = event.metadata ?? void 0;
368
- const pool = metadata?.["pool"] ?? null;
369
- const direction = metadata?.["direction"] ?? null;
370
- const tier = metadata?.["tier"] ?? "domain";
371
- const base = {
372
- id: event.id,
373
- type: event.type,
374
- aggregateId: event.aggregateId,
375
- aggregateType: event.aggregateType,
376
- payload: event.payload,
377
- occurredAt: event.occurredAt,
378
- processedAt: null,
379
- status: "pending",
380
- metadata: event.metadata,
381
- pool,
382
- direction,
383
- tier
384
- };
385
- if (!multiTenant) return base;
386
- const tenantId = metadata?.["tenantId"] ?? null;
387
- return { ...base, tenantId };
388
- }
389
- function toEventSummary(r) {
390
- const metadata = r.metadata ?? void 0;
391
- const rootRunId = metadata?.["rootRunId"];
392
- return {
393
- id: r.id,
394
- type: r.type,
395
- aggregateId: r.aggregateId,
396
- aggregateType: r.aggregateType,
397
- status: r.status,
398
- pool: r.pool,
399
- direction: r.direction,
400
- tier: r.tier,
401
- rootRunId: typeof rootRunId === "string" ? rootRunId : null,
402
- // EVT-8: `tenant_id` is a scaffold-time conditional column. Read it
403
- // structurally so this projection typechecks against both the
404
- // multi-tenant schema (column present) and the single-tenant schema
405
- // (column absent → undefined → null).
406
- tenantId: r.tenantId ?? null,
407
- occurredAt: r.occurredAt instanceof Date ? r.occurredAt : new Date(r.occurredAt),
408
- processedAt: r.processedAt == null ? null : r.processedAt instanceof Date ? r.processedAt : new Date(r.processedAt)
409
- };
410
- }
411
- var DrizzleEventBus = class {
412
- constructor(db, opts, bridgeHook = null) {
413
- this.db = db;
414
- this.bridgeHook = bridgeHook;
415
- this.opts = opts ?? { backend: "drizzle" };
416
- }
417
- db;
418
- bridgeHook;
419
- logger = new Logger(DrizzleEventBus.name);
420
- polling = false;
421
- pollTimer = null;
422
- handlers = /* @__PURE__ */ new Map();
423
- opts;
424
- // ============================================================================
425
- // Lifecycle
426
- // ============================================================================
427
- async onModuleInit() {
428
- this.polling = true;
429
- this.schedulePoll();
430
- }
431
- async onModuleDestroy() {
432
- this.polling = false;
433
- if (this.pollTimer) {
434
- clearTimeout(this.pollTimer);
435
- this.pollTimer = null;
436
- }
437
- }
438
- // ============================================================================
439
- // IEventBus
440
- // ============================================================================
441
- async publish(event, tx) {
442
- const client = tx ?? this.db;
443
- const multiTenant = this.opts.multiTenant ?? false;
444
- await client.insert(domainEvents).values(toInsertValues(event, multiTenant));
445
- }
446
- async publishMany(events, tx) {
447
- if (events.length === 0) return;
448
- const client = tx ?? this.db;
449
- const multiTenant = this.opts.multiTenant ?? false;
450
- await client.insert(domainEvents).values(events.map((e) => toInsertValues(e, multiTenant)));
451
- }
452
- async findById(eventId) {
453
- const rows = await this.db.select().from(domainEvents).where(eq(domainEvents.id, eventId)).limit(1);
454
- const row = rows[0];
455
- if (!row) return null;
456
- return {
457
- id: row.id,
458
- type: row.type,
459
- aggregateId: row.aggregateId,
460
- aggregateType: row.aggregateType,
461
- payload: row.payload,
462
- occurredAt: row.occurredAt instanceof Date ? row.occurredAt : new Date(row.occurredAt),
463
- metadata: row.metadata ?? void 0
464
- };
465
- }
466
- subscribe(eventType, handler) {
467
- if (!this.handlers.has(eventType)) {
468
- this.handlers.set(eventType, /* @__PURE__ */ new Set());
469
- }
470
- const set = this.handlers.get(eventType);
471
- const h = handler;
472
- set.add(h);
473
- return () => {
474
- set.delete(h);
475
- };
476
- }
477
- // ============================================================================
478
- // IEventReadPort (OBS-LIST-1)
479
- // ============================================================================
480
- async listEvents(query = {}) {
481
- const limit = clampEventLimit(query.limit);
482
- const conditions = [];
483
- if (query.poolId) conditions.push(eq(domainEvents.pool, query.poolId));
484
- if (query.direction)
485
- conditions.push(eq(domainEvents.direction, query.direction));
486
- if (query.since) conditions.push(gte(domainEvents.occurredAt, query.since));
487
- if (query.rootRunId) {
488
- conditions.push(
489
- sql2`${domainEvents.metadata}->>'rootRunId' = ${query.rootRunId}`
490
- );
491
- }
492
- if (this.opts.multiTenant && query.tenantId !== void 0) {
493
- const tenantIdColumn = domainEvents.tenantId;
494
- conditions.push(
495
- query.tenantId === null ? sql2`${tenantIdColumn} is null` : eq(tenantIdColumn, query.tenantId)
496
- );
497
- }
498
- if (query.cursor) {
499
- const keyset = decodeEventCursor(query.cursor);
500
- if (keyset) {
501
- conditions.push(
502
- or(
503
- lt(domainEvents.occurredAt, keyset.occurredAt),
504
- and(
505
- eq(domainEvents.occurredAt, keyset.occurredAt),
506
- lt(domainEvents.id, keyset.id)
507
- )
508
- )
509
- );
510
- }
511
- }
512
- const rows = await this.db.select().from(domainEvents).where(conditions.length > 0 ? and(...conditions) : void 0).orderBy(desc(domainEvents.occurredAt), desc(domainEvents.id)).limit(limit + 1);
513
- const hasMore = rows.length > limit;
514
- const page = hasMore ? rows.slice(0, limit) : rows;
515
- const items = page.map(toEventSummary);
516
- const last = page[page.length - 1];
517
- const nextCursor = hasMore && last ? encodeEventCursor({ occurredAt: last.occurredAt, id: last.id }) : null;
518
- return { items, nextCursor };
519
- }
520
- // ============================================================================
521
- // Polling
522
- // ============================================================================
523
- /**
524
- * Test-only hook. Runs exactly one drain cycle and returns. Production
525
- * code goes through `onModuleInit` → `schedulePoll`, which calls the
526
- * same `processBatch` under a timer.
527
- */
528
- async drainOnce() {
529
- await this.processBatch();
530
- }
531
- schedulePoll() {
532
- if (!this.polling) return;
533
- this.pollTimer = setTimeout(async () => {
534
- try {
535
- await this.processBatch();
536
- } catch (err) {
537
- this.logger.error(`Poll cycle error: ${err}`);
538
- } finally {
539
- this.schedulePoll();
540
- }
541
- }, POLL_INTERVAL_MS);
542
- }
543
- /**
544
- * Drain one batch (BRIDGE-4 restructure of EVT-4).
545
- *
546
- * Two-phase per drained event:
547
- *
548
- * 1. **Per-event transaction** — bridge fanout (`bridgeHook.processEvent`)
549
- * + `processed_at` stamp. Both write through the same `tx`. A throw
550
- * inside the tx (only infra-level failures should reach here, since
551
- * the hook tolerates null direction and registry misses inline)
552
- * rolls back the bridge inserts AND the `processed_at` stamp; the
553
- * event re-claims on the next drain cycle. Bridge `UNIQUE
554
- * (event_id, trigger_id)` makes the retry idempotent.
555
- *
556
- * 2. **After commit** — dispatch in-process subscribers (`IEventBus.subscribe`
557
- * handlers). This deliberately runs OUTSIDE the per-event tx (lead
558
- * decision 2026-04-22): subscribers are best-effort and must not
559
- * gate forward progress or roll back bridge fanout. Subscriber
560
- * errors are caught + logged; `processed_at` is already committed.
561
- * The old `MAX_RETRIES=3` in-process retry loop and the
562
- * `failed`-stamping path were removed in BRIDGE-4 along with their
563
- * coupling.
564
- *
565
- * The `processed_at` UPDATE carries `AND status='pending'` (BRIDGE-4
566
- * tightening — without it, a hypothetical double-claim could double-stamp
567
- * the timestamp). The per-event tx + `FOR UPDATE SKIP LOCKED` claim
568
- * make this defensive belt-and-suspenders.
569
- */
570
- async processBatch() {
571
- const pools = this.opts.pools;
572
- const whereClause = pools && pools.length > 0 ? and(eq(domainEvents.status, "pending"), inArray(domainEvents.pool, pools)) : eq(domainEvents.status, "pending");
573
- const rows = await this.db.transaction(async (tx) => {
574
- return tx.select().from(domainEvents).where(whereClause).orderBy(asc(domainEvents.occurredAt)).limit(POLL_BATCH_SIZE).for("update", { skipLocked: true });
575
- });
576
- for (const row of rows) {
577
- const event = {
578
- id: row.id,
579
- type: row.type,
580
- aggregateId: row.aggregateId,
581
- aggregateType: row.aggregateType,
582
- payload: row.payload,
583
- occurredAt: row.occurredAt instanceof Date ? row.occurredAt : new Date(row.occurredAt),
584
- metadata: row.metadata ?? void 0
585
- };
586
- try {
587
- await this.db.transaction(async (tx) => {
588
- if (this.bridgeHook) {
589
- await this.bridgeHook.processEvent(event, tx);
590
- }
591
- await tx.update(domainEvents).set({ status: "processed", processedAt: /* @__PURE__ */ new Date() }).where(
592
- and(
593
- eq(domainEvents.id, event.id),
594
- eq(domainEvents.status, "pending")
595
- )
596
- );
597
- });
598
- } catch (err) {
599
- this.logger.error(
600
- `Per-event tx failed for event id=${event.id} type=${event.type}: ${err}`
601
- );
602
- continue;
603
- }
604
- try {
605
- await this.dispatch(event);
606
- } catch (err) {
607
- this.logger.error(
608
- `Subscriber dispatch failed for event id=${event.id} type=${event.type} (processed_at already committed; failure does not retry): ${err}`
609
- );
610
- }
611
- }
612
- }
613
- async dispatch(event) {
614
- const set = this.handlers.get(event.type);
615
- if (!set) return;
616
- let firstError;
617
- for (const handler of set) {
618
- try {
619
- await handler(event);
620
- } catch (err) {
621
- this.logger.error(
622
- `Handler error for event type "${event.type}" (id: ${event.id}): ${err}`
623
- );
624
- if (firstError === void 0) {
625
- firstError = err;
626
- }
627
- }
628
- }
629
- if (firstError !== void 0) {
630
- throw firstError;
631
- }
632
- }
633
- };
634
- DrizzleEventBus = __decorateClass([
635
- Injectable2(),
636
- __decorateParam(0, Inject2(DRIZZLE)),
637
- __decorateParam(1, Optional()),
638
- __decorateParam(1, Inject2(EVENTS_MODULE_OPTIONS)),
639
- __decorateParam(2, Optional()),
640
- __decorateParam(2, Inject2(BRIDGE_OUTBOX_DRAIN_HOOK))
641
- ], DrizzleEventBus);
642
-
643
- // runtime/subsystems/events/event-bus.memory-backend.ts
644
- import { Inject as Inject3, Injectable as Injectable3, Logger as Logger2, Optional as Optional2 } from "@nestjs/common";
645
- function toEventSummary2(event) {
646
- const metadata = event.metadata;
647
- const str = (key) => {
648
- const v = metadata?.[key];
649
- return typeof v === "string" ? v : null;
650
- };
651
- return {
652
- id: event.id,
653
- type: event.type,
654
- aggregateId: event.aggregateId,
655
- aggregateType: event.aggregateType,
656
- status: "processed",
657
- pool: str("pool"),
658
- direction: str("direction"),
659
- tier: str("tier") ?? "domain",
660
- rootRunId: str("rootRunId"),
661
- tenantId: str("tenantId"),
662
- occurredAt: event.occurredAt,
663
- processedAt: event.occurredAt
664
- };
665
- }
666
- var MemoryEventBus = class {
667
- logger = new Logger2(MemoryEventBus.name);
668
- /** All events published since construction (or last clear). */
669
- publishedEvents = [];
670
- handlers = /* @__PURE__ */ new Map();
671
- opts;
672
- constructor(opts) {
673
- this.opts = opts ?? { backend: "memory" };
674
- }
675
- async publish(event) {
676
- this.assertTierRouting(event);
677
- this.publishedEvents.push(event);
678
- if (this.shouldDispatch(event)) {
679
- await this.dispatch(event);
680
- }
681
- }
682
- async publishMany(events) {
683
- for (const event of events) {
684
- await this.publish(event);
685
- }
686
- }
687
- async findById(eventId) {
688
- return this.publishedEvents.find((e) => e.id === eventId) ?? null;
689
- }
690
- subscribe(eventType, handler) {
691
- if (!this.handlers.has(eventType)) {
692
- this.handlers.set(eventType, /* @__PURE__ */ new Set());
693
- }
694
- const set = this.handlers.get(eventType);
695
- const h = handler;
696
- set.add(h);
697
- return () => {
698
- set.delete(h);
699
- };
700
- }
701
- // ============================================================================
702
- // IEventReadPort (OBS-LIST-1)
703
- // ============================================================================
704
- async listEvents(query = {}) {
705
- const limit = clampEventLimit(query.limit);
706
- const keyset = query.cursor ? decodeEventCursor(query.cursor) : null;
707
- const str = (e, key) => {
708
- const v = e.metadata?.[key];
709
- return typeof v === "string" ? v : null;
710
- };
711
- const matched = this.publishedEvents.filter((e) => {
712
- if (query.poolId && str(e, "pool") !== query.poolId) return false;
713
- if (query.direction && str(e, "direction") !== query.direction)
714
- return false;
715
- if (query.rootRunId && str(e, "rootRunId") !== query.rootRunId)
716
- return false;
717
- if (query.since && e.occurredAt.getTime() < query.since.getTime())
718
- return false;
719
- if (query.tenantId !== void 0) {
720
- const t = str(e, "tenantId");
721
- if (query.tenantId === null) {
722
- if (t !== null) return false;
723
- } else if (t !== query.tenantId) {
724
- return false;
725
- }
726
- }
727
- return true;
728
- });
729
- matched.sort((a, b) => {
730
- const dt = b.occurredAt.getTime() - a.occurredAt.getTime();
731
- if (dt !== 0) return dt;
732
- return a.id < b.id ? 1 : a.id > b.id ? -1 : 0;
733
- });
734
- const seeked = keyset ? matched.filter((e) => {
735
- const ct = e.occurredAt.getTime();
736
- const kt = keyset.occurredAt.getTime();
737
- if (ct < kt) return true;
738
- if (ct > kt) return false;
739
- return e.id < keyset.id;
740
- }) : matched;
741
- const hasMore = seeked.length > limit;
742
- const page = hasMore ? seeked.slice(0, limit) : seeked;
743
- const items = page.map(toEventSummary2);
744
- const last = page[page.length - 1];
745
- const nextCursor = hasMore && last ? encodeEventCursor({ occurredAt: last.occurredAt, id: last.id }) : null;
746
- return { items, nextCursor };
747
- }
748
- /** Remove all published events and subscriptions. Useful in beforeEach. */
749
- clear() {
750
- this.publishedEvents.length = 0;
751
- this.handlers.clear();
752
- }
753
- /** Filter published events by `metadata.pool`. */
754
- publishedEventsForPool(pool) {
755
- return this.publishedEvents.filter((e) => e.metadata?.["pool"] === pool);
756
- }
757
- /** Filter published events by `metadata.direction`. */
758
- publishedEventsForDirection(direction) {
759
- return this.publishedEvents.filter((e) => e.metadata?.["direction"] === direction);
760
- }
761
- /**
762
- * Decide whether `event` should be dispatched to handlers given the
763
- * current pool filter.
764
- *
765
- * Semantics (mirroring `DrizzleEventBus.processBatch`):
766
- * - `opts.pools` undefined → dispatch everything (no filter).
767
- * - `opts.pools` empty array → treated as "no filter" to match the
768
- * Drizzle backend, where `pools && pools.length > 0` is the gate on
769
- * the `inArray` WHERE clause. Empty arrays dispatch everything.
770
- * - `opts.pools` non-empty → dispatch only when `event.metadata.pool`
771
- * is in the list. Events without `metadata.pool` do NOT match — they
772
- * are out of all configured pools by definition.
773
- */
774
- shouldDispatch(event) {
775
- const pools = this.opts.pools;
776
- if (!pools || pools.length === 0) return true;
777
- const eventPool = event.metadata?.["pool"];
778
- return typeof eventPool === "string" && pools.includes(eventPool);
779
- }
780
- /**
781
- * Mirror the `domain_events_tier_routing_check` DB CHECK at the memory
782
- * backend (AUDIT-1). Audit-tier events MUST have null/undefined
783
- * `pool` and `direction` in metadata; the bridge dispatcher relies on
784
- * this invariant.
785
- */
786
- assertTierRouting(event) {
787
- const tier = event.metadata?.["tier"];
788
- if (tier !== "audit") return;
789
- const pool = event.metadata?.["pool"];
790
- const direction = event.metadata?.["direction"];
791
- const poolIsNull = pool === null || pool === void 0;
792
- const directionIsNull = direction === null || direction === void 0;
793
- if (!poolIsNull || !directionIsNull) {
794
- throw new Error(
795
- `MemoryEventBus: tier='audit' events must have null pool and direction (got pool=${String(pool)}, direction=${String(direction)}). This mirrors the domain_events CHECK constraint.`
796
- );
797
- }
798
- }
799
- async dispatch(event) {
800
- const set = this.handlers.get(event.type);
801
- if (!set) return;
802
- let firstError;
803
- for (const handler of set) {
804
- try {
805
- await handler(event);
806
- } catch (err) {
807
- this.logger.error(
808
- `Handler error for event type "${event.type}" (id: ${event.id}): ${err}`
809
- );
810
- if (firstError === void 0) {
811
- firstError = err;
812
- }
813
- }
814
- }
815
- if (firstError !== void 0) {
816
- throw firstError;
817
- }
818
- }
819
- };
820
- MemoryEventBus = __decorateClass([
821
- Injectable3(),
822
- __decorateParam(0, Optional2()),
823
- __decorateParam(0, Inject3(EVENTS_MODULE_OPTIONS))
824
- ], MemoryEventBus);
825
-
826
- // runtime/subsystems/events/events.module.ts
827
- async function loadRedisEventBus() {
828
- const specifier = "./event-bus.redis-backend";
829
- const mod = await import(specifier);
830
- return mod.RedisEventBus;
831
- }
832
- function buildTypedBusProviders(multiTenant, typedBus) {
833
- const BusClass = typedBus ?? TypedEventBus;
834
- return [
835
- BusClass,
836
- { provide: TYPED_EVENT_BUS, useExisting: BusClass },
837
- { provide: EVENTS_MULTI_TENANT, useValue: multiTenant }
838
- ];
839
- }
840
- async function buildEventBusAsync(options, db, redisUrl) {
841
- if (options.backend === "drizzle") {
842
- if (!db) {
843
- throw new Error(
844
- "EventsModule.forRootAsync: backend: 'drizzle' selected but DRIZZLE provider is not available. Ensure DatabaseModule (or another provider exposing DRIZZLE) is imported before EventsModule.forRootAsync."
845
- );
846
- }
847
- return new DrizzleEventBus(db, options);
848
- }
849
- if (options.backend === "redis") {
850
- const RedisEventBus = await loadRedisEventBus();
851
- return new RedisEventBus(redisUrl);
852
- }
853
- return new MemoryEventBus(options);
854
- }
855
- var EventsModule = class {
856
- static forRootAsync(asyncOptions) {
857
- return {
858
- module: EventsModule,
859
- global: true,
860
- imports: asyncOptions.imports ?? [],
861
- providers: [
862
- {
863
- provide: EVENTS_MODULE_OPTIONS,
864
- useFactory: asyncOptions.useFactory,
865
- inject: asyncOptions.inject ?? []
866
- },
867
- {
868
- provide: EVENTS_MULTI_TENANT,
869
- useFactory: (options) => options.multiTenant ?? false,
870
- inject: [EVENTS_MODULE_OPTIONS]
871
- },
872
- {
873
- provide: REDIS_URL,
874
- useFactory: (options) => options.redisUrl ?? process.env["REDIS_URL"] ?? "redis://localhost:6379",
875
- inject: [EVENTS_MODULE_OPTIONS]
876
- },
877
- {
878
- provide: EVENT_BUS,
879
- useFactory: (options, db, redisUrl) => buildEventBusAsync(options, db, redisUrl),
880
- inject: [
881
- EVENTS_MODULE_OPTIONS,
882
- { token: DRIZZLE, optional: true },
883
- REDIS_URL
884
- ]
885
- },
886
- {
887
- // Read port (OBS-LIST-1). Drizzle + memory backends implement
888
- // IEventReadPort on the EVENT_BUS instance; the redis backend
889
- // retains no history, so EVENT_READ_PORT resolves to `null` and
890
- // optional consumers (the observability combiner) degrade to
891
- // empty results.
892
- provide: EVENT_READ_PORT,
893
- useFactory: (options, bus) => options.backend === "redis" ? null : bus,
894
- inject: [EVENTS_MODULE_OPTIONS, EVENT_BUS]
895
- },
896
- TypedEventBus,
897
- { provide: TYPED_EVENT_BUS, useExisting: TypedEventBus }
898
- ],
899
- exports: [EVENT_BUS, EVENT_READ_PORT, TYPED_EVENT_BUS, EVENTS_MULTI_TENANT]
900
- };
901
- }
902
- static forRoot(options = { backend: "drizzle" }) {
903
- const multiTenant = options.multiTenant ?? false;
904
- if (options.backend === "redis") {
905
- const resolvedUrl = options.redisUrl ?? process.env["REDIS_URL"] ?? "redis://localhost:6379";
906
- return {
907
- module: EventsModule,
908
- global: true,
909
- providers: [
910
- { provide: EVENTS_MODULE_OPTIONS, useValue: options },
911
- { provide: REDIS_URL, useValue: resolvedUrl },
912
- {
913
- // #6: useFactory + dynamic import so the consumer's tsc never
914
- // needs to resolve `event-bus.redis-backend.ts` for drizzle/
915
- // memory installs (the file is filtered out by
916
- // `backendFileFilter`). Nest awaits async factories + manages
917
- // lifecycle on the returned instance, so we drop the old bare
918
- // `RedisEventBus` provider entry.
919
- provide: EVENT_BUS,
920
- useFactory: async (url) => {
921
- const RedisEventBus = await loadRedisEventBus();
922
- return new RedisEventBus(url);
923
- },
924
- inject: [REDIS_URL]
925
- },
926
- ...buildTypedBusProviders(multiTenant, options.typedBus)
927
- ],
928
- exports: [EVENT_BUS, TYPED_EVENT_BUS, EVENTS_MULTI_TENANT]
929
- };
930
- }
931
- const provider = options.backend === "drizzle" ? { provide: EVENT_BUS, useClass: DrizzleEventBus } : { provide: EVENT_BUS, useClass: MemoryEventBus };
932
- return {
933
- module: EventsModule,
934
- global: true,
935
- providers: [
936
- { provide: EVENTS_MODULE_OPTIONS, useValue: options },
937
- provider,
938
- // Read port (OBS-LIST-1): drizzle + memory backends implement
939
- // IEventReadPort on the same instance as EVENT_BUS. The redis
940
- // backend retains no history and does not provide this token.
941
- { provide: EVENT_READ_PORT, useExisting: EVENT_BUS },
942
- ...buildTypedBusProviders(multiTenant, options.typedBus)
943
- ],
944
- exports: [EVENT_BUS, EVENT_READ_PORT, TYPED_EVENT_BUS, EVENTS_MULTI_TENANT]
945
- };
946
- }
947
- };
948
- EventsModule = __decorateClass([
949
- Module({})
950
- ], EventsModule);
3
+ EventsModule
4
+ } from "../../../chunk-EOLLMEAH.js";
5
+ import {
6
+ TypedEventBus
7
+ } from "../../../chunk-GM3RMJIJ.js";
8
+ import "../../../chunk-BGULBWKJ.js";
9
+ import "../../../chunk-JRQO2IOF.js";
10
+ import {
11
+ MissingTenantIdError
12
+ } from "../../../chunk-V4AF6DI4.js";
13
+ import {
14
+ DrizzleEventBus
15
+ } from "../../../chunk-4JLJYWJC.js";
16
+ import {
17
+ MemoryEventBus
18
+ } from "../../../chunk-Z7PQCAVK.js";
19
+ import "../../../chunk-UQ5EHOH2.js";
20
+ import {
21
+ EVENTS_MODULE_OPTIONS,
22
+ EVENTS_MULTI_TENANT,
23
+ EVENT_BUS,
24
+ EVENT_READ_PORT,
25
+ TYPED_EVENT_BUS
26
+ } from "../../../chunk-H5NH7KPE.js";
27
+ import "../../../chunk-4LH67P4U.js";
28
+ import {
29
+ domainEvents
30
+ } from "../../../chunk-OFRRBC7M.js";
31
+ import "../../../chunk-GYGNEQSC.js";
32
+ import "../../../chunk-U64T4YZE.js";
33
+ import "../../../chunk-2E224ZSN.js";
951
34
  export {
952
35
  DrizzleEventBus,
953
36
  EVENTS_MODULE_OPTIONS,