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