@cosmicdrift/kumiko-framework 0.389.0 → 0.390.1

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 (617) hide show
  1. package/AGENTS.md +9 -4
  2. package/README.md +1 -1
  3. package/agents/examples/apex-surface-auth.md +2 -3
  4. package/agents/examples/api-worker-split.md +9 -2
  5. package/agents/examples/auth-claims.md +1 -1
  6. package/agents/examples/cross-feature-events.md +12 -12
  7. package/agents/examples/crypto-shredding-hr.md +2 -2
  8. package/agents/examples/encrypted-tenant-config.md +1 -1
  9. package/agents/examples/error-contract.md +12 -7
  10. package/agents/examples/event-sourcing.md +29 -29
  11. package/agents/examples/files-post-processing.md +10 -8
  12. package/agents/examples/inbound-mail-triage.md +1 -0
  13. package/agents/examples/lane-routing.md +2 -1
  14. package/agents/examples/legal-pages.md +2 -2
  15. package/agents/examples/lifecycle-hooks.md +3 -3
  16. package/agents/examples/managed-config.md +4 -4
  17. package/agents/examples/managed-pages.md +1 -1
  18. package/agents/examples/relations.md +19 -4
  19. package/agents/examples/search.md +4 -4
  20. package/agents/examples/secrets-demo.md +9 -6
  21. package/agents/examples/state-machine.md +2 -2
  22. package/agents/examples/tenant-settings.md +1 -1
  23. package/agents/examples/user-data-rights.md +3 -6
  24. package/agents/examples/workflow-engine.md +53 -47
  25. package/agents/examples.md +4 -4
  26. package/agents/features.md +1 -1
  27. package/dist/api/auth-middleware.js +1 -1
  28. package/dist/api/auth-routes-invite.js +2 -1
  29. package/dist/api/entity-read-access.d.ts +3 -1
  30. package/dist/api/export/export-columns.d.ts +3 -1
  31. package/dist/api/export/export-route.js +3 -2
  32. package/dist/api/export/export-screen.d.ts +2 -1
  33. package/dist/api/extra-route.d.ts +3 -1
  34. package/dist/api/index.d.ts +23 -27
  35. package/dist/api/index.js +13 -15
  36. package/dist/api/jwt.js +1 -1
  37. package/dist/api/observability-middleware.d.ts +1 -1
  38. package/dist/api/observability-middleware.js +2 -1
  39. package/dist/api/request-context-internals.d.ts +31 -0
  40. package/dist/api/request-context-internals.js +11 -0
  41. package/dist/api/request-context-scopes.d.ts +14 -0
  42. package/dist/api/request-context-scopes.js +69 -0
  43. package/dist/api/request-context.d.ts +1 -40
  44. package/dist/api/request-context.js +22 -51
  45. package/dist/api/request-id-middleware.d.ts +1 -1
  46. package/dist/api/route-registrars.d.ts +2 -1
  47. package/dist/api/route-registrars.js +1 -1
  48. package/dist/api/routes.js +7 -3
  49. package/dist/api/server-boot-checks.d.ts +1 -1
  50. package/dist/api/server-boot-checks.js +2 -2
  51. package/dist/api/server-event-dispatcher.d.ts +6 -1
  52. package/dist/api/server-event-dispatcher.js +3 -4
  53. package/dist/api/server-extra-routes.d.ts +1 -1
  54. package/dist/api/server-extra-routes.js +2 -1
  55. package/dist/api/server-middleware.js +3 -1
  56. package/dist/api/server-routes.d.ts +2 -1
  57. package/dist/api/server-wiring.js +6 -4
  58. package/dist/api/server.d.ts +2 -1
  59. package/dist/api/sse-route.d.ts +2 -1
  60. package/dist/api/tenant-scoped-secrets.d.ts +2 -0
  61. package/dist/api/tenant-scoped-secrets.js +13 -0
  62. package/dist/api/websocket-route.d.ts +1 -1
  63. package/dist/auth/index.d.ts +0 -1
  64. package/dist/auth/roles.d.ts +0 -5
  65. package/dist/compliance/duration-spec.d.ts +0 -1
  66. package/dist/compliance/duration-spec.js +0 -5
  67. package/dist/compliance/index.d.ts +4 -4
  68. package/dist/compliance/index.js +2 -2
  69. package/dist/compliance/profiles.d.ts +0 -15
  70. package/dist/compliance/profiles.js +0 -23
  71. package/dist/config/index.d.ts +10 -10
  72. package/dist/config/index.js +13 -1
  73. package/dist/config/internals.d.ts +9 -0
  74. package/dist/config/internals.js +1 -0
  75. package/dist/consumer-cli-internals.d.ts +4 -0
  76. package/dist/consumer-cli-internals.js +1 -0
  77. package/dist/consumer-cli.d.ts +1 -4
  78. package/dist/consumer-cli.js +5 -1
  79. package/dist/crypto/event-pii.js +1 -1
  80. package/dist/crypto/index.d.ts +8 -9
  81. package/dist/crypto/index.js +7 -8
  82. package/dist/crypto/pg-kms-adapter.js +6 -1
  83. package/dist/db/apply-entity-event.d.ts +1 -1
  84. package/dist/db/apply-entity-event.js +15 -47
  85. package/dist/db/blind-index-cleanup.js +91 -77
  86. package/dist/db/collect-table-metas.js +1 -1
  87. package/dist/db/compound-types.d.ts +1 -1
  88. package/dist/db/compound-types.js +0 -7
  89. package/dist/db/config-seed.d.ts +2 -1
  90. package/dist/db/config-seed.js +6 -1
  91. package/dist/db/connection.d.ts +3 -1
  92. package/dist/db/connection.js +15 -5
  93. package/dist/db/cross-tenant-reads.d.ts +1 -1
  94. package/dist/db/cross-tenant-reads.js +1 -1
  95. package/dist/db/dialect.d.ts +0 -5
  96. package/dist/db/dialect.js +0 -3
  97. package/dist/db/driver-value-preparation.js +23 -2
  98. package/dist/db/eagerload.d.ts +2 -1
  99. package/dist/db/entity-field-encryption.d.ts +1 -1
  100. package/dist/db/entity-table-meta.d.ts +1 -1
  101. package/dist/db/event-store-executor-context.d.ts +3 -1
  102. package/dist/db/event-store-executor-context.js +4 -3
  103. package/dist/db/event-store-executor-read-filter.d.ts +1 -1
  104. package/dist/db/event-store-executor-read-rows.d.ts +2 -1
  105. package/dist/db/event-store-executor-read-search.d.ts +2 -1
  106. package/dist/db/event-store-executor-read-sort.d.ts +2 -1
  107. package/dist/db/event-store-executor-read.js +2 -2
  108. package/dist/db/event-store-executor-write-atomic.js +8 -7
  109. package/dist/db/event-store-executor-write-steps.d.ts +3 -2
  110. package/dist/db/event-store-executor-write.js +7 -4
  111. package/dist/db/event-store-executor.d.ts +1 -1
  112. package/dist/db/executor-managed-tables.d.ts +7 -1
  113. package/dist/db/executor-managed-tables.js +11 -2
  114. package/dist/db/index.d.ts +29 -28
  115. package/dist/db/index.js +22 -20
  116. package/dist/db/known-table-names.d.ts +6 -0
  117. package/dist/db/known-table-names.js +21 -0
  118. package/dist/db/list-aggregate-labels.d.ts +1 -1
  119. package/dist/db/located-timestamp.d.ts +1 -1
  120. package/dist/db/located-timestamp.js +0 -5
  121. package/dist/db/migrate-generator.d.ts +17 -1
  122. package/dist/db/migrate-generator.js +50 -20
  123. package/dist/db/migrate-primary-key.d.ts +12 -0
  124. package/dist/db/migrate-primary-key.js +45 -0
  125. package/dist/db/migrate-rls-diff.d.ts +20 -0
  126. package/dist/db/migrate-rls-diff.js +61 -0
  127. package/dist/db/migrate-runner.js +4 -0
  128. package/dist/db/money.d.ts +1 -1
  129. package/dist/db/money.js +1 -1
  130. package/dist/db/parent-ref-clause.d.ts +2 -1
  131. package/dist/db/pg-error.d.ts +2 -0
  132. package/dist/db/pg-error.js +11 -0
  133. package/dist/db/queries/ddl.d.ts +3 -0
  134. package/dist/db/queries/ddl.js +34 -1
  135. package/dist/db/queries/event-store.js +4 -2
  136. package/dist/db/queries/event-tenants.d.ts +2 -0
  137. package/dist/db/queries/event-tenants.js +17 -0
  138. package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
  139. package/dist/db/queries/rebuild-rls-guard.js +29 -0
  140. package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
  141. package/dist/db/queries/rls-boot-catalog.js +39 -0
  142. package/dist/db/queries/rls-catalog.d.ts +6 -0
  143. package/dist/db/queries/rls-catalog.js +82 -0
  144. package/dist/db/queries/rls-scope.d.ts +3 -0
  145. package/dist/db/queries/rls-scope.js +17 -0
  146. package/dist/db/queries/rls-shape.d.ts +10 -0
  147. package/dist/db/queries/rls-shape.js +42 -0
  148. package/dist/db/queries/session-advisory-lock.d.ts +2 -0
  149. package/dist/db/queries/session-advisory-lock.js +23 -0
  150. package/dist/db/queries/shadow-swap.d.ts +1 -2
  151. package/dist/db/queries/shadow-swap.js +9 -25
  152. package/dist/db/queries/test-stack.d.ts +4 -1
  153. package/dist/db/queries/test-stack.js +84 -2
  154. package/dist/db/query.js +11 -7
  155. package/dist/db/reference-data.d.ts +1 -1
  156. package/dist/db/reference-data.js +6 -1
  157. package/dist/db/render-ddl.d.ts +6 -2
  158. package/dist/db/render-ddl.js +7 -7
  159. package/dist/db/render-rls-ddl.d.ts +35 -0
  160. package/dist/db/render-rls-ddl.js +127 -0
  161. package/dist/db/replay-migration-sql.d.ts +3 -1
  162. package/dist/db/replay-migration-sql.js +22 -5
  163. package/dist/db/replay-rls.d.ts +25 -0
  164. package/dist/db/replay-rls.js +156 -0
  165. package/dist/db/row-level-security-boot-check.d.ts +6 -0
  166. package/dist/db/row-level-security-boot-check.js +86 -0
  167. package/dist/db/row-level-security-connection.d.ts +3 -0
  168. package/dist/db/row-level-security-connection.js +213 -0
  169. package/dist/db/row-level-security-scope.d.ts +33 -0
  170. package/dist/db/row-level-security-scope.js +127 -0
  171. package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
  172. package/dist/db/scope-tenant-db-to-tenant.js +14 -0
  173. package/dist/db/sql-identifier.d.ts +1 -0
  174. package/dist/db/sql-identifier.js +3 -0
  175. package/dist/db/table-builder.d.ts +2 -1
  176. package/dist/db/table-builder.js +1 -1
  177. package/dist/db/table-info.js +1 -1
  178. package/dist/db/table-push.d.ts +11 -2
  179. package/dist/db/table-push.js +15 -2
  180. package/dist/db/tenant-db-runner.d.ts +3 -1
  181. package/dist/db/tenant-db-runner.js +4 -3
  182. package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
  183. package/dist/db/tenant-db-scoped-rebind.js +33 -0
  184. package/dist/db/tenant-db-statement-runner.d.ts +13 -0
  185. package/dist/db/tenant-db-statement-runner.js +48 -0
  186. package/dist/db/tenant-db.d.ts +17 -12
  187. package/dist/db/tenant-db.js +49 -120
  188. package/dist/db/tenant-id-filter.d.ts +3 -0
  189. package/dist/db/tenant-id-filter.js +30 -0
  190. package/dist/db/transaction-serialization.d.ts +6 -0
  191. package/dist/db/transaction-serialization.js +60 -0
  192. package/dist/derivatives/delete-stored-file.js +1 -1
  193. package/dist/derivatives/index.d.ts +2 -5
  194. package/dist/derivatives/index.js +2 -3
  195. package/dist/engine/access.d.ts +2 -1
  196. package/dist/engine/access.js +1 -1
  197. package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
  198. package/dist/engine/boot-validator/entity-handler.js +1 -1
  199. package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +1 -1
  200. package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +1 -1
  201. package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +2 -1
  202. package/dist/engine/boot-validator/nav.d.ts +3 -1
  203. package/dist/engine/boot-validator/nav.js +1 -1
  204. package/dist/engine/boot-validator/ownership.d.ts +2 -1
  205. package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
  206. package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
  207. package/dist/engine/boot-validator/query-refs.d.ts +2 -1
  208. package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
  209. package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
  210. package/dist/engine/boot-validator/screens.d.ts +2 -1
  211. package/dist/engine/boot-validator/workspaces.d.ts +3 -1
  212. package/dist/engine/bridge-stub.d.ts +5 -2
  213. package/dist/engine/bridge-stub.js +39 -24
  214. package/dist/engine/config-helpers.d.ts +2 -2
  215. package/dist/engine/config-helpers.js +0 -9
  216. package/dist/engine/constants.d.ts +0 -10
  217. package/dist/engine/constants.js +0 -8
  218. package/dist/engine/create-app.js +1 -1
  219. package/dist/engine/define-feature.d.ts +2 -1
  220. package/dist/engine/define-feature.js +1 -2
  221. package/dist/engine/define-handler.d.ts +1 -1
  222. package/dist/engine/define-step.d.ts +0 -1
  223. package/dist/engine/define-step.js +0 -3
  224. package/dist/engine/embedded-derived.d.ts +1 -1
  225. package/dist/engine/entity-handlers.d.ts +2 -1
  226. package/dist/engine/entity-handlers.js +7 -7
  227. package/dist/engine/entity-list-runtime-options.js +3 -1
  228. package/dist/engine/entity-list-searchability.d.ts +2 -1
  229. package/dist/engine/event-def.d.ts +2 -1
  230. package/dist/engine/event-helpers.d.ts +3 -1
  231. package/dist/engine/event-helpers.js +3 -3
  232. package/dist/engine/extension-names.d.ts +2 -8
  233. package/dist/engine/extension-names.js +2 -2
  234. package/dist/engine/extension-selector-plugins.d.ts +1 -1
  235. package/dist/engine/extensions/storage-provider.d.ts +1 -2
  236. package/dist/engine/extensions/user-data.d.ts +0 -8
  237. package/dist/engine/factories.d.ts +2 -1
  238. package/dist/engine/feature-builder-state.d.ts +8 -1
  239. package/dist/engine/feature-changelog.d.ts +1 -1
  240. package/dist/engine/feature-config-events-jobs.d.ts +4 -1
  241. package/dist/engine/feature-entity-handlers.d.ts +5 -1
  242. package/dist/engine/feature-manifest.js +1 -1
  243. package/dist/engine/feature-ui-extensions.d.ts +7 -1
  244. package/dist/engine/feature-ui-extensions.js +6 -4
  245. package/dist/engine/field-access.d.ts +2 -1
  246. package/dist/engine/handler-field-references.d.ts +0 -4
  247. package/dist/engine/index.d.ts +57 -54
  248. package/dist/engine/index.js +22 -27
  249. package/dist/engine/instruction-fields.d.ts +1 -1
  250. package/dist/engine/personal-data-fields.d.ts +1 -1
  251. package/dist/engine/qualified-name.d.ts +0 -1
  252. package/dist/engine/read-claim.d.ts +2 -1
  253. package/dist/engine/registry-facade.js +0 -3
  254. package/dist/engine/registry-ingest.d.ts +2 -1
  255. package/dist/engine/registry-ingest.js +1 -2
  256. package/dist/engine/registry-state.d.ts +12 -2
  257. package/dist/engine/registry-state.js +2 -3
  258. package/dist/engine/registry-validate.d.ts +3 -1
  259. package/dist/engine/registry-validate.js +7 -7
  260. package/dist/engine/run-in.d.ts +1 -1
  261. package/dist/engine/run-in.js +0 -1
  262. package/dist/engine/schema-builder.d.ts +1 -1
  263. package/dist/engine/schema-builder.js +1 -1
  264. package/dist/engine/screen-filter-ops.d.ts +2 -1
  265. package/dist/engine/screen-filter-ops.js +0 -5
  266. package/dist/engine/soft-delete-cleanup.d.ts +1 -1
  267. package/dist/engine/soft-delete-cleanup.js +4 -4
  268. package/dist/engine/state-machine.js +2 -1
  269. package/dist/engine/steps/_read-source.js +1 -1
  270. package/dist/engine/steps/aggregate-append-event.js +2 -2
  271. package/dist/engine/steps/call-feature.js +2 -2
  272. package/dist/engine/steps/mail-send.js +1 -1
  273. package/dist/engine/steps/retry.js +1 -1
  274. package/dist/engine/steps/wait-for-event.js +1 -1
  275. package/dist/engine/steps/wait.js +1 -1
  276. package/dist/engine/steps/webhook-send.js +1 -1
  277. package/dist/engine/template-variables.d.ts +2 -1
  278. package/dist/engine/transfer-adjacency.d.ts +1 -1
  279. package/dist/engine/types/index.d.ts +8 -31
  280. package/dist/engine/types/index.js +2 -10
  281. package/dist/engine/validation.d.ts +2 -1
  282. package/dist/entrypoint/index.d.ts +7 -35
  283. package/dist/entrypoint/index.js +7 -1
  284. package/dist/entrypoint/internals.d.ts +40 -0
  285. package/dist/entrypoint/internals.js +1 -0
  286. package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
  287. package/dist/entrypoint/row-level-security-mode-check.js +19 -0
  288. package/dist/env/dry-run-internals.d.ts +10 -0
  289. package/dist/env/dry-run-internals.js +1 -0
  290. package/dist/env/dry-run.d.ts +1 -10
  291. package/dist/env/dry-run.js +2 -1
  292. package/dist/env/index.d.ts +1 -85
  293. package/dist/env/index.js +6 -50
  294. package/dist/env/internals.d.ts +87 -0
  295. package/dist/env/internals.js +53 -0
  296. package/dist/errors/classes.js +2 -2
  297. package/dist/errors/index.d.ts +5 -14
  298. package/dist/errors/index.js +4 -9
  299. package/dist/errors/member-resolution.js +1 -1
  300. package/dist/errors/reasons.d.ts +0 -1
  301. package/dist/errors/reasons.js +7 -7
  302. package/dist/errors/serialize.d.ts +0 -18
  303. package/dist/errors/serialize.js +0 -27
  304. package/dist/es-ops/index.d.ts +4 -4
  305. package/dist/es-ops/index.js +2 -2
  306. package/dist/es-ops/operations-schema.d.ts +1 -1
  307. package/dist/es-ops/types.d.ts +4 -5
  308. package/dist/event-store/admin-api-internals.d.ts +14 -0
  309. package/dist/event-store/admin-api-internals.js +1 -0
  310. package/dist/event-store/admin-api.d.ts +1 -14
  311. package/dist/event-store/admin-api.js +11 -6
  312. package/dist/event-store/archive.js +4 -2
  313. package/dist/event-store/errors.js +2 -2
  314. package/dist/event-store/event-store.js +41 -34
  315. package/dist/event-store/events-schema.js +4 -1
  316. package/dist/event-store/index.d.ts +11 -13
  317. package/dist/event-store/index.js +7 -9
  318. package/dist/event-store/rebuild-dead-letter.js +4 -2
  319. package/dist/event-store/snapshot.js +4 -3
  320. package/dist/event-store/stream-scope.d.ts +2 -0
  321. package/dist/event-store/stream-scope.js +6 -0
  322. package/dist/event-store/upcaster-dead-letter.js +4 -2
  323. package/dist/event-store/upcaster.d.ts +2 -1
  324. package/dist/files/action-form-upload.d.ts +2 -1
  325. package/dist/files/action-form-upload.js +1 -1
  326. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
  327. package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
  328. package/dist/files/bind-pending-file-refs.d.ts +2 -1
  329. package/dist/files/bind-pending-file-refs.js +2 -1
  330. package/dist/files/bind-referenced-files.write.js +1 -1
  331. package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
  332. package/dist/files/create-file-ref-from-bytes.js +3 -3
  333. package/dist/files/create-file-ref.d.ts +3 -2
  334. package/dist/files/create-file-ref.js +2 -2
  335. package/dist/files/dispose-removed-file-refs.d.ts +2 -1
  336. package/dist/files/dispose-removed-file-refs.js +1 -1
  337. package/dist/files/feature.js +2 -2
  338. package/dist/files/file-handle.js +1 -1
  339. package/dist/files/file-routes.d.ts +1 -1
  340. package/dist/files/file-routes.js +12 -2
  341. package/dist/files/index.d.ts +11 -13
  342. package/dist/files/index.js +5 -7
  343. package/dist/files/load-save-file-refs.d.ts +2 -1
  344. package/dist/files/load-save-file-refs.js +1 -1
  345. package/dist/files/provider-resolver.d.ts +5 -4
  346. package/dist/files/provider-resolver.js +4 -4
  347. package/dist/files/storage-tracking.js +4 -2
  348. package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
  349. package/dist/files/sweep-orphaned-uploads.js +1 -1
  350. package/dist/i18n/index.d.ts +2 -8
  351. package/dist/i18n/index.js +1 -1
  352. package/dist/i18n/internals.d.ts +7 -0
  353. package/dist/i18n/internals.js +1 -0
  354. package/dist/i18n/required-surface-keys.d.ts +4 -1
  355. package/dist/internal/row-level-security.d.ts +3 -0
  356. package/dist/internal/row-level-security.js +3 -0
  357. package/dist/internal/stack-support.d.ts +1 -1
  358. package/dist/internal/stack-support.js +1 -1
  359. package/dist/internal/testing.d.ts +1 -0
  360. package/dist/internal/testing.js +9 -5
  361. package/dist/jobs/index.d.ts +1 -1
  362. package/dist/jobs/job-append-event.d.ts +12 -0
  363. package/dist/jobs/job-append-event.js +30 -0
  364. package/dist/jobs/job-runner-context.d.ts +2 -2
  365. package/dist/jobs/job-runner-context.js +46 -16
  366. package/dist/jobs/job-runner-execution.d.ts +1 -1
  367. package/dist/jobs/job-runner-execution.js +6 -4
  368. package/dist/jobs/job-runner-gates.d.ts +1 -1
  369. package/dist/jobs/job-runner-gates.js +0 -1
  370. package/dist/jobs/job-runner-helpers.d.ts +11 -4
  371. package/dist/jobs/job-runner-helpers.js +10 -1
  372. package/dist/jobs/job-runner-scope.d.ts +5 -2
  373. package/dist/jobs/job-runner-types.d.ts +2 -1
  374. package/dist/jobs/job-runner.js +19 -6
  375. package/dist/jobs/max-per-tenant.d.ts +1 -1
  376. package/dist/logging/index.d.ts +1 -2
  377. package/dist/logging/index.js +1 -1
  378. package/dist/logging/pino-logger.js +1 -1
  379. package/dist/logging/utils.d.ts +1 -0
  380. package/dist/logging/utils.js +6 -0
  381. package/dist/migrations/index.d.ts +3 -3
  382. package/dist/migrations/index.js +3 -3
  383. package/dist/migrations/pending-rebuilds.d.ts +1 -1
  384. package/dist/migrations/pending-rebuilds.js +1 -1
  385. package/dist/migrations/pii-event-backfill.js +4 -1
  386. package/dist/observability/escape-hatch-report.d.ts +2 -1
  387. package/dist/observability/index.d.ts +7 -15
  388. package/dist/observability/index.js +4 -12
  389. package/dist/observability/metric-validator.js +1 -1
  390. package/dist/observability/metrics-handle.d.ts +0 -1
  391. package/dist/observability/metrics-handle.js +2 -15
  392. package/dist/observability/recording-tracer.d.ts +1 -2
  393. package/dist/observability/recording-tracer.js +0 -6
  394. package/dist/observability/sensitive-filter.d.ts +0 -2
  395. package/dist/observability/sensitive-filter.js +0 -29
  396. package/dist/pipeline/active-membership.d.ts +2 -1
  397. package/dist/pipeline/active-membership.js +6 -2
  398. package/dist/pipeline/append-event-core.d.ts +2 -1
  399. package/dist/pipeline/append-event-core.js +2 -2
  400. package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
  401. package/dist/pipeline/attach-outside-transaction.js +13 -0
  402. package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
  403. package/dist/pipeline/cascade-handler.d.ts +2 -1
  404. package/dist/pipeline/cascade-handler.js +3 -2
  405. package/dist/pipeline/config-accessor-factory.d.ts +1 -1
  406. package/dist/pipeline/config-accessor-factory.js +1 -1
  407. package/dist/pipeline/context-services.d.ts +56 -0
  408. package/dist/pipeline/context-services.js +73 -0
  409. package/dist/pipeline/dispatch-batch.d.ts +2 -1
  410. package/dist/pipeline/dispatch-batch.js +31 -18
  411. package/dist/pipeline/dispatch-query.js +5 -4
  412. package/dist/pipeline/dispatch-scope.d.ts +6 -0
  413. package/dist/pipeline/dispatch-scope.js +27 -0
  414. package/dist/pipeline/dispatch-shared.d.ts +13 -9
  415. package/dist/pipeline/dispatch-shared.js +75 -198
  416. package/dist/pipeline/dispatch-stream.js +8 -4
  417. package/dist/pipeline/dispatch-write.d.ts +2 -1
  418. package/dist/pipeline/dispatch-write.js +10 -8
  419. package/dist/pipeline/dispatcher-utils.d.ts +3 -1
  420. package/dist/pipeline/dispatcher-utils.js +8 -2
  421. package/dist/pipeline/dispatcher.d.ts +3 -2
  422. package/dist/pipeline/dispatcher.js +4 -3
  423. package/dist/pipeline/event-consumer-state.d.ts +0 -1
  424. package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
  425. package/dist/pipeline/event-dispatcher-delivery.js +4 -2
  426. package/dist/pipeline/event-dispatcher.d.ts +2 -2
  427. package/dist/pipeline/event-dispatcher.js +7 -3
  428. package/dist/pipeline/event-retention.js +59 -56
  429. package/dist/pipeline/handler-access-error.js +2 -1
  430. package/dist/pipeline/handler-context-auth.d.ts +5 -6
  431. package/dist/pipeline/handler-context-auth.js +7 -4
  432. package/dist/pipeline/handler-context-config.d.ts +2 -5
  433. package/dist/pipeline/handler-context-config.js +2 -2
  434. package/dist/pipeline/handler-context-db.d.ts +32 -7
  435. package/dist/pipeline/handler-context-db.js +26 -17
  436. package/dist/pipeline/handler-context-dispatch.d.ts +13 -7
  437. package/dist/pipeline/handler-context-dispatch.js +9 -8
  438. package/dist/pipeline/handler-context-events.d.ts +22 -36
  439. package/dist/pipeline/handler-context-events.js +36 -31
  440. package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
  441. package/dist/pipeline/handler-context-member-resolution.js +110 -0
  442. package/dist/pipeline/handler-context-notify.d.ts +3 -2
  443. package/dist/pipeline/handler-context-notify.js +1 -1
  444. package/dist/pipeline/handler-context-observability.d.ts +2 -4
  445. package/dist/pipeline/handler-context-observability.js +7 -5
  446. package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
  447. package/dist/pipeline/handler-context-phase-denials.js +98 -0
  448. package/dist/pipeline/handler-context-scope.d.ts +7 -10
  449. package/dist/pipeline/handler-context-scope.js +18 -20
  450. package/dist/pipeline/index.d.ts +9 -21
  451. package/dist/pipeline/index.js +5 -7
  452. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  453. package/dist/pipeline/irreversible-operation-gate.js +2 -2
  454. package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
  455. package/dist/pipeline/lifecycle-pipeline.js +9 -15
  456. package/dist/pipeline/member-read-only-transaction.js +11 -3
  457. package/dist/pipeline/member-reader.d.ts +1 -1
  458. package/dist/pipeline/member-reader.js +2 -2
  459. package/dist/pipeline/msp-rebuild.js +5 -3
  460. package/dist/pipeline/multi-stream-apply-context.js +3 -2
  461. package/dist/pipeline/notify-scope.d.ts +2 -1
  462. package/dist/pipeline/pre-handler-gates.d.ts +2 -1
  463. package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
  464. package/dist/pipeline/pre-transaction-reservations.js +9 -7
  465. package/dist/pipeline/projection-rebuild.js +12 -5
  466. package/dist/pipeline/projection-state.d.ts +0 -6
  467. package/dist/pipeline/projection-state.js +0 -5
  468. package/dist/pipeline/projections-runner.d.ts +2 -1
  469. package/dist/pipeline/projections-runner.js +10 -6
  470. package/dist/pipeline/system-hooks.d.ts +3 -1
  471. package/dist/pipeline/system-hooks.js +6 -4
  472. package/dist/pipeline/system-identity-switch.d.ts +4 -2
  473. package/dist/pipeline/system-identity-switch.js +51 -36
  474. package/dist/pipeline/typed-append-event.d.ts +2 -0
  475. package/dist/pipeline/typed-append-event.js +4 -0
  476. package/dist/pipeline/write-origin.js +2 -2
  477. package/dist/pipeline/write-result-masking.d.ts +1 -1
  478. package/dist/random/index.d.ts +1 -2
  479. package/dist/random/index.js +1 -2
  480. package/dist/rate-limit/bucket.d.ts +2 -1
  481. package/dist/rate-limit/middleware.js +2 -1
  482. package/dist/redis/index.d.ts +3 -4
  483. package/dist/redis/index.js +2 -2
  484. package/dist/schema-cli/apply-command.js +5 -2
  485. package/dist/schema-cli/baseline-command.js +7 -2
  486. package/dist/schema-cli/generate-command.js +7 -9
  487. package/dist/schema-cli/shared.d.ts +12 -2
  488. package/dist/schema-cli/shared.js +24 -2
  489. package/dist/schema-cli/status-command.js +8 -2
  490. package/dist/schema-cli/validate-command.js +48 -4
  491. package/dist/schema-cli.d.ts +0 -1
  492. package/dist/search/configure-tenant-index.d.ts +1 -3
  493. package/dist/search/configure-tenant-index.js +0 -4
  494. package/dist/search/index.d.ts +1 -4
  495. package/dist/search/index.js +0 -2
  496. package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
  497. package/dist/search/meilisearch-adapter-internals.js +9 -0
  498. package/dist/search/meilisearch-adapter.d.ts +1 -8
  499. package/dist/search/meilisearch-adapter.js +6 -7
  500. package/dist/search/meilisearch-peer.d.ts +2 -0
  501. package/dist/search/meilisearch-peer.js +5 -0
  502. package/dist/search/reindex-entity.js +93 -87
  503. package/dist/secrets/index.d.ts +3 -4
  504. package/dist/secrets/index.js +2 -3
  505. package/dist/seeding/index.d.ts +2 -2
  506. package/dist/seeding/index.js +1 -2
  507. package/dist/time/index.d.ts +2 -2
  508. package/dist/time/index.js +1 -1
  509. package/dist/time/tz-context.d.ts +0 -5
  510. package/dist/time/tz-context.js +0 -9
  511. package/dist/ui-types/index.d.ts +8 -11
  512. package/dist/ui-types/index.js +3 -3
  513. package/dist/upgrade-changelog.d.ts +3 -2
  514. package/dist/upgrade-changelog.js +12 -8
  515. package/dist/upgrade-cli-internals.d.ts +8 -0
  516. package/dist/upgrade-cli-internals.js +63 -0
  517. package/dist/upgrade-cli.d.ts +2 -9
  518. package/dist/upgrade-cli.js +28 -70
  519. package/dist/utils/import-optional-peer.d.ts +6 -0
  520. package/dist/utils/import-optional-peer.js +19 -0
  521. package/dist/utils/index.d.ts +1 -4
  522. package/dist/utils/index.js +1 -4
  523. package/package.json +23 -19
  524. package/src/changes.json +236 -0
  525. package/dist/crypto/request-kms-cache.d.ts +0 -8
  526. package/dist/crypto/request-kms-cache.js +0 -21
  527. package/dist/engine/codemod/index.d.ts +0 -2
  528. package/dist/engine/codemod/index.js +0 -1
  529. package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
  530. package/dist/engine/codemod/pipeline-codemod.js +0 -536
  531. package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
  532. package/dist/engine/feature-ast/entity-field-types.js +0 -35
  533. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
  534. package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
  535. package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
  536. package/dist/engine/feature-ast/extractors/events.js +0 -275
  537. package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
  538. package/dist/engine/feature-ast/extractors/handlers.js +0 -358
  539. package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
  540. package/dist/engine/feature-ast/extractors/hooks.js +0 -248
  541. package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
  542. package/dist/engine/feature-ast/extractors/index.js +0 -13
  543. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
  544. package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
  545. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
  546. package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
  547. package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
  548. package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
  549. package/dist/engine/feature-ast/extractors/round1.d.ts +0 -11
  550. package/dist/engine/feature-ast/extractors/round1.js +0 -87
  551. package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
  552. package/dist/engine/feature-ast/extractors/round2.js +0 -191
  553. package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
  554. package/dist/engine/feature-ast/extractors/round3.js +0 -292
  555. package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
  556. package/dist/engine/feature-ast/extractors/round5.js +0 -68
  557. package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
  558. package/dist/engine/feature-ast/extractors/round6.js +0 -17
  559. package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
  560. package/dist/engine/feature-ast/extractors/shared.js +0 -343
  561. package/dist/engine/feature-ast/index.d.ts +0 -16
  562. package/dist/engine/feature-ast/index.js +0 -10
  563. package/dist/engine/feature-ast/parse.d.ts +0 -31
  564. package/dist/engine/feature-ast/parse.js +0 -485
  565. package/dist/engine/feature-ast/patch.d.ts +0 -212
  566. package/dist/engine/feature-ast/patch.js +0 -611
  567. package/dist/engine/feature-ast/patcher.d.ts +0 -217
  568. package/dist/engine/feature-ast/patcher.js +0 -281
  569. package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1238
  570. package/dist/engine/feature-ast/pattern-change-schema.js +0 -1072
  571. package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
  572. package/dist/engine/feature-ast/pattern-id-matchers.js +0 -211
  573. package/dist/engine/feature-ast/pattern-id-schema.d.ts +0 -251
  574. package/dist/engine/feature-ast/pattern-id-schema.js +0 -166
  575. package/dist/engine/feature-ast/patterns.d.ts +0 -322
  576. package/dist/engine/feature-ast/patterns.js +0 -107
  577. package/dist/engine/feature-ast/render.d.ts +0 -47
  578. package/dist/engine/feature-ast/render.js +0 -666
  579. package/dist/engine/feature-ast/source-location.d.ts +0 -17
  580. package/dist/engine/feature-ast/source-location.js +0 -27
  581. package/dist/engine/pattern-library/index.d.ts +0 -2
  582. package/dist/engine/pattern-library/index.js +0 -3
  583. package/dist/engine/pattern-library/library.d.ts +0 -14
  584. package/dist/engine/pattern-library/library.js +0 -94
  585. package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
  586. package/dist/engine/pattern-library/mixed-schemas.js +0 -559
  587. package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
  588. package/dist/engine/pattern-library/opaque-schemas.js +0 -115
  589. package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
  590. package/dist/engine/pattern-library/shared-fields.js +0 -88
  591. package/dist/engine/pattern-library/static-schemas.d.ts +0 -21
  592. package/dist/engine/pattern-library/static-schemas.js +0 -487
  593. package/dist/engine/pattern-library/types.d.ts +0 -158
  594. package/dist/engine/pattern-library/types.js +0 -36
  595. package/dist/engine/resolve-config-or-param.d.ts +0 -18
  596. package/dist/engine/resolve-config-or-param.js +0 -76
  597. package/src/scripts/codemod/README.md +0 -187
  598. package/src/scripts/codemod/codemod-support.ts +0 -334
  599. package/src/scripts/codemod/collect-source-files.ts +0 -48
  600. package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
  601. package/src/scripts/codemod/db-factory.ts +0 -810
  602. package/src/scripts/codemod/feature-factory.ts +0 -429
  603. package/src/scripts/codemod/feature-layout.ts +0 -424
  604. package/src/scripts/codemod/import-extensions.ts +0 -118
  605. package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
  606. package/src/scripts/codemod/migrate-db-raw.ts +0 -401
  607. package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
  608. package/src/scripts/codemod/object-form.ts +0 -746
  609. package/src/scripts/codemod/package-merge.ts +0 -299
  610. package/src/scripts/codemod/pii-personal-migration.ts +0 -816
  611. package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
  612. package/src/scripts/codemod/s3-imports.ts +0 -236
  613. package/src/scripts/codemod/tenant-db-options.ts +0 -454
  614. package/src/scripts/codemod/testing-injection.ts +0 -215
  615. package/src/scripts/codemod/testing-move-targets.ts +0 -161
  616. package/src/scripts/codemod/testing-move.ts +0 -542
  617. package/src/scripts/codemod/unprocessable-error-details-reason.ts +0 -411
@@ -1,6 +1,8 @@
1
1
  import { runInSavepoint, selectMany } from "../db/query.js";
2
+ import { runInSystemRowLevelSecurityScope } from "../db/row-level-security-scope.js";
2
3
  import { hasTenantColumn } from "../db/tenant-db.js";
3
- import { InternalError, memberResolutionReadOnlyDenied, VersionConflictError, } from "../errors/index.js";
4
+ import { InternalError, VersionConflictError } from "../errors/index.js";
5
+ import { memberResolutionReadOnlyDenied } from "../errors/member-resolution.js";
4
6
  import { archiveStream as archiveStreamHelper, isStreamArchived, restoreStream as restoreStreamHelper, } from "../event-store/archive.js";
5
7
  import { IdempotentAppendConflictError as EventStoreIdempotentAppendConflictError, VersionConflictError as EventStoreVersionConflictError, } from "../event-store/errors.js";
6
8
  import { loadAggregate, loadAggregateAsOf, loadAggregateForWriting, } from "../event-store/event-store.js";
@@ -9,6 +11,7 @@ import { upcastStoredEvent, upcastStoredEvents } from "../event-store/upcaster.j
9
11
  import { appendDomainEventCore } from "./append-event-core.js";
10
12
  import { isMemberResolutionPrincipal, resolveDbSource, } from "./dispatch-shared.js";
11
13
  import { createGatedProjectionReader } from "./system-identity-switch.js";
14
+ import { asTypedAppendEventFn } from "./typed-append-event.js";
12
15
  function requireDbSource(ctx, tx, surfaceCall) {
13
16
  const dbSource = resolveDbSource(ctx, tx);
14
17
  if (!dbSource) {
@@ -18,7 +21,7 @@ function requireDbSource(ctx, tx, surfaceCall) {
18
21
  }
19
22
  return dbSource;
20
23
  }
21
- // ctx.appendEvent — append a domain event onto a specific aggregate stream
24
+ // ctx.events.append — append a domain event onto a specific aggregate stream
22
25
  // in the current tx, then fire matching inline projections. Core logic
23
26
  // lives in appendDomainEventCore; this wrapper just locates dbSource +
24
27
  // stringifies the SessionUser id for the shared helper.
@@ -27,13 +30,13 @@ async function appendDomainEvent(ctx, args, user, tx, callerFeature) {
27
30
  if (isMemberResolutionPrincipal(user))
28
31
  throw memberResolutionReadOnlyDenied();
29
32
  const { registry } = ctx;
30
- const dbSource = requireDbSource(ctx, tx, `ctx.appendEvent("${args.type}")`);
33
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.append("${args.type}")`);
31
34
  await appendDomainEventCore({
32
35
  registry,
33
36
  db: dbSource,
34
37
  tenantId: user.tenantId,
35
38
  userId: String(user.id),
36
- callSiteLabel: "ctx.appendEvent",
39
+ callSiteLabel: "ctx.events.append",
37
40
  callerFeature,
38
41
  }, args);
39
42
  }
@@ -50,7 +53,7 @@ function buildTryAppendEvent(scope) {
50
53
  return async (args) => {
51
54
  if (!tx) {
52
55
  throw new InternalError({
53
- message: `ctx.tryAppendEvent("${args.type}") requires an active transaction — no tx is threaded through this call.`,
56
+ message: `ctx.events.tryAppend("${args.type}") requires an active transaction — no tx is threaded through this call.`,
54
57
  });
55
58
  }
56
59
  try {
@@ -59,7 +62,7 @@ function buildTryAppendEvent(scope) {
59
62
  db: sp,
60
63
  tenantId: user.tenantId,
61
64
  userId: String(user.id),
62
- callSiteLabel: "ctx.tryAppendEvent",
65
+ callSiteLabel: "ctx.events.tryAppend",
63
66
  callerFeature: registry.getHandlerFeature(type),
64
67
  }, args));
65
68
  return { ok: true, event };
@@ -78,7 +81,7 @@ function buildTryAppendEvent(scope) {
78
81
  function buildFetchForWriting(scope) {
79
82
  const { ctx, type, user, tx, registry } = scope;
80
83
  return async (args) => {
81
- const dbSource = requireDbSource(ctx, tx, `ctx.fetchForWriting("${args.aggregateId}")`);
84
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.fetchForWriting("${args.aggregateId}")`);
82
85
  // Stream-version authoritative (same policy as CRUD executor + Block 0), read together
83
86
  // with the events so the pinned version covers exactly what the handler's rules saw.
84
87
  const { events: storedEvents, streamVersion: fetchedVersion } = await loadAggregateForWriting(dbSource, args.aggregateId, user.tenantId, { aggregateType: args.aggregateType });
@@ -124,7 +127,7 @@ function buildFetchForWriting(scope) {
124
127
  function buildLoadAggregate(scope) {
125
128
  const { ctx, user, tx, registry } = scope;
126
129
  return async (aggregateId, loadOptions) => {
127
- const dbSource = requireDbSource(ctx, tx, `ctx.loadAggregate("${aggregateId}")`);
130
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.load("${aggregateId}")`);
128
131
  const events = loadOptions?.asOf
129
132
  ? await loadAggregateAsOf(dbSource, aggregateId, user.tenantId, loadOptions.asOf)
130
133
  : await loadAggregate(dbSource, aggregateId, user.tenantId, {
@@ -139,7 +142,7 @@ function buildLoadAggregate(scope) {
139
142
  function buildSnapshotAggregate(scope) {
140
143
  const { ctx, user, tx, registry } = scope;
141
144
  return async (snapshotArgs) => {
142
- const dbSource = requireDbSource(ctx, tx, `ctx.snapshotAggregate("${snapshotArgs.aggregateId}")`);
145
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.snapshot("${snapshotArgs.aggregateId}")`);
143
146
  await saveSnapshot(dbSource, {
144
147
  aggregateId: snapshotArgs.aggregateId,
145
148
  tenantId: user.tenantId,
@@ -153,7 +156,7 @@ function buildSnapshotAggregate(scope) {
153
156
  function buildLoadAggregateWithSnapshot(scope) {
154
157
  const { ctx, user, tx, registry } = scope;
155
158
  return async (aggregateId, reducer, initial, loadOptions) => {
156
- const dbSource = requireDbSource(ctx, tx, `ctx.loadAggregateWithSnapshot("${aggregateId}")`);
159
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.loadWithSnapshot("${aggregateId}")`);
157
160
  // Upcaster-aware: pass an upcastEvent callback so loadAggregateWithSnapshot
158
161
  // walks every delta through the registered chain before invoking the
159
162
  // user's (sync) reducer. Async upcasters (DB-enrichment) are awaited
@@ -182,15 +185,17 @@ function buildHandlerProjectionReader(scope) {
182
185
  const mspNames = [...registry.getAllMultiStreamProjections().keys()].filter((n) => registry.getAllMultiStreamProjections().get(n)?.table);
183
186
  const all = [...singleNames, ...mspNames];
184
187
  throw new InternalError({
185
- message: `ctx.queryProjection("${qualifiedName}") — projection not registered, or it is a ` +
188
+ message: `ctx.dispatch.queryProjection("${qualifiedName}") — projection not registered, or it is a ` +
186
189
  `table-less MSP (side-effect-only). Known queryable projections: ${all.join(", ") || "(none)"}`,
187
190
  });
188
191
  }
189
- const dbSource = requireDbSource(ctx, tx, `ctx.queryProjection("${qualifiedName}")`);
190
- const where = hasTenantColumn(projTable) && queryOptions?.unsafeAllTenants !== true
191
- ? { tenantId: user.tenantId }
192
- : undefined;
193
- const rows = await selectMany(dbSource, projTable, where);
192
+ const dbSource = requireDbSource(ctx, tx, `ctx.dispatch.queryProjection("${qualifiedName}")`);
193
+ const allTenants = queryOptions?.unsafeAllTenants === true;
194
+ const where = hasTenantColumn(projTable) && !allTenants ? { tenantId: user.tenantId } : undefined;
195
+ const read = () => selectMany(dbSource, projTable, where);
196
+ const rows = await (allTenants
197
+ ? runInSystemRowLevelSecurityScope("handler projection read with allTenants spans every tenant", read)
198
+ : read());
194
199
  return rows; // @cast-boundary engine-payload
195
200
  };
196
201
  return createGatedProjectionReader(`handler "${type}"`, hasIdentitySwitchGrant, ungatedQueryProjection, identitySwitchAudit, (qualifiedName) => {
@@ -201,21 +206,21 @@ function buildHandlerProjectionReader(scope) {
201
206
  }
202
207
  export function buildEventStoreFacet(scope) {
203
208
  const { ctx, type, user, tx, registry } = scope;
204
- return {
209
+ const events = {
205
210
  // Strict + unsafe share the same runtime — only the type-surface
206
211
  // differs. The strict signature is what's exposed to typed callers;
207
212
  // unsafe is the explicit escape-hatch for runtime-pluggable events.
208
- appendEvent: (async (args) => {
213
+ append: asTypedAppendEventFn(async (args) => {
209
214
  await appendDomainEvent(ctx, args, user, tx, registry.getHandlerFeature(type));
210
- }), // @cast-boundary engine-bridge
211
- unsafeAppendEvent: async (args) => {
215
+ }),
216
+ unsafeAppend: async (args) => {
212
217
  await appendDomainEvent(ctx, args, user, tx, registry.getHandlerFeature(type));
213
218
  },
214
- tryAppendEvent: buildTryAppendEvent(scope),
219
+ tryAppend: buildTryAppendEvent(scope),
215
220
  fetchForWriting: buildFetchForWriting(scope),
216
- loadAggregate: buildLoadAggregate(scope),
217
- archiveStream: async (aggregateId, archiveArgs) => {
218
- const dbSource = requireDbSource(ctx, tx, `ctx.archiveStream("${aggregateId}")`);
221
+ load: buildLoadAggregate(scope),
222
+ archive: async (aggregateId, archiveArgs) => {
223
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.archive("${aggregateId}")`);
219
224
  await archiveStreamHelper(dbSource, {
220
225
  tenantId: user.tenantId,
221
226
  aggregateId,
@@ -224,16 +229,16 @@ export function buildEventStoreFacet(scope) {
224
229
  reason: archiveArgs.reason,
225
230
  });
226
231
  },
227
- restoreStream: async (aggregateId) => {
228
- const dbSource = requireDbSource(ctx, tx, `ctx.restoreStream("${aggregateId}")`);
232
+ restore: async (aggregateId) => {
233
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.restore("${aggregateId}")`);
229
234
  await restoreStreamHelper(dbSource, user.tenantId, aggregateId);
230
235
  },
231
- isStreamArchived: async (aggregateId) => {
232
- const dbSource = requireDbSource(ctx, tx, `ctx.isStreamArchived("${aggregateId}")`);
236
+ isArchived: async (aggregateId) => {
237
+ const dbSource = requireDbSource(ctx, tx, `ctx.events.isArchived("${aggregateId}")`);
233
238
  return isStreamArchived(dbSource, user.tenantId, aggregateId);
234
239
  },
235
- snapshotAggregate: buildSnapshotAggregate(scope),
236
- loadAggregateWithSnapshot: buildLoadAggregateWithSnapshot(scope),
237
- queryProjection: buildHandlerProjectionReader(scope),
240
+ snapshot: buildSnapshotAggregate(scope),
241
+ loadWithSnapshot: buildLoadAggregateWithSnapshot(scope),
238
242
  };
243
+ return { events, queryProjection: buildHandlerProjectionReader(scope) };
239
244
  }
@@ -0,0 +1,2 @@
1
+ import type { HandlerContext } from "../engine/types/index.ts";
2
+ export declare function applyMemberResolutionReadOnly(handlerContext: HandlerContext): HandlerContext;
@@ -0,0 +1,110 @@
1
+ import { memberResolutionReadOnlyDenied } from "../errors/member-resolution.js";
2
+ import { denyingJobRunnerProxy, dropOutsideTransaction, withoutNotifyFactories, } from "./handler-context-phase-denials.js";
3
+ import { asTypedAppendEventFn } from "./typed-append-event.js";
4
+ async function denyMemberResolutionWrite() {
5
+ throw memberResolutionReadOnlyDenied();
6
+ }
7
+ function throwMemberResolutionDenied() {
8
+ throw memberResolutionReadOnlyDenied();
9
+ }
10
+ // Allowlist (not denylist): a method added to the target later stays denied
11
+ // until someone decides it is read-only.
12
+ function allowlistedReadOnlyProxy(target, allowedMethods) {
13
+ return new Proxy(target, {
14
+ get(inner, prop) {
15
+ if (typeof prop === "string" && allowedMethods.has(prop)) {
16
+ const method = Reflect.get(inner, prop, inner);
17
+ return typeof method === "function" ? method.bind(inner) : method;
18
+ }
19
+ // Symbol reads and "then" come from await/Promise.resolve/inspect, not from handler code.
20
+ if (typeof prop === "symbol" || prop === "then")
21
+ return undefined;
22
+ throw memberResolutionReadOnlyDenied();
23
+ },
24
+ });
25
+ }
26
+ const MEMBER_READ_SEARCH_METHODS = new Set(["search"]);
27
+ const MEMBER_READ_ENTITY_CACHE_METHODS = new Set(["get", "mget"]);
28
+ const MEMBER_READ_REDIS_METHODS = new Set([
29
+ "get",
30
+ "mget",
31
+ "exists",
32
+ "ttl",
33
+ "pttl",
34
+ "strlen",
35
+ "type",
36
+ "hget",
37
+ "hmget",
38
+ "hgetall",
39
+ "hexists",
40
+ "hlen",
41
+ "sismember",
42
+ "smembers",
43
+ "scard",
44
+ "llen",
45
+ "lrange",
46
+ "zscore",
47
+ "zcard",
48
+ "zrange",
49
+ ]);
50
+ function readOnlyServices(services) {
51
+ const { searchAdapter, redis, entityCache, jobRunner } = services;
52
+ // A read as a member gets no file storage, no notify factory and no job runner; the read-only
53
+ // proxies keep the rest. The resolver and factories would reopen what files/notify close.
54
+ const { files: _files, derivatives: _derivatives, _fileProviderResolver: _resolver, ...kept } = withoutNotifyFactories(services);
55
+ const runner = jobRunner && denyingJobRunnerProxy();
56
+ return {
57
+ ...kept,
58
+ ...(runner && { jobRunner: runner }),
59
+ ...(searchAdapter && {
60
+ searchAdapter: allowlistedReadOnlyProxy(searchAdapter, MEMBER_READ_SEARCH_METHODS),
61
+ }),
62
+ ...(redis && { redis: allowlistedReadOnlyProxy(redis, MEMBER_READ_REDIS_METHODS) }),
63
+ ...(entityCache && {
64
+ entityCache: allowlistedReadOnlyProxy(entityCache, MEMBER_READ_ENTITY_CACHE_METHODS),
65
+ }),
66
+ };
67
+ }
68
+ // Every write/side-effect surface throws, so "no writeAsMember" holds even
69
+ // if a handler tries ctx.dispatch.write directly on a resolved member principal.
70
+ // Deliberately open: `db` (guarded by the READ ONLY transaction + memberReadOnly grant),
71
+ // and read-only methods of searchAdapter / redis / entityCache (allowlisted).
72
+ export function applyMemberResolutionReadOnly(handlerContext) {
73
+ // `db` stays open — executeQuery runs the whole handler in a Postgres READ ONLY
74
+ // transaction, and its `memberReadOnly` grant denies every raw-runner handout.
75
+ dropOutsideTransaction(handlerContext);
76
+ const { systemDb: _systemDb, crossTenantReads: _crossTenantReads, ...kept } = handlerContext;
77
+ return {
78
+ ...kept,
79
+ dispatch: {
80
+ ...handlerContext.dispatch,
81
+ write: denyMemberResolutionWrite,
82
+ writeAs: denyMemberResolutionWrite,
83
+ // A resolved member cannot switch identity either — the target would get a normal, writable context.
84
+ queryAs: denyMemberResolutionWrite,
85
+ queryAsMember: denyMemberResolutionWrite,
86
+ },
87
+ events: {
88
+ ...handlerContext.events,
89
+ append: asTypedAppendEventFn(denyMemberResolutionWrite),
90
+ unsafeAppend: denyMemberResolutionWrite,
91
+ tryAppend: denyMemberResolutionWrite,
92
+ fetchForWriting: denyMemberResolutionWrite,
93
+ archive: denyMemberResolutionWrite,
94
+ restore: denyMemberResolutionWrite,
95
+ snapshot: denyMemberResolutionWrite,
96
+ },
97
+ auth: { ...handlerContext.auth, resolveActiveMembership: denyMemberResolutionWrite },
98
+ // A read as a member gets no system-scope DB, preSave pipeline or file storage.
99
+ lifecycle: {
100
+ afterCommit: throwMemberResolutionDenied,
101
+ afterRollback: throwMemberResolutionDenied,
102
+ ...(handlerContext.lifecycle.signal && { signal: handlerContext.lifecycle.signal }),
103
+ },
104
+ tenants: {
105
+ ...(handlerContext.tenants.config && { config: handlerContext.tenants.config }),
106
+ },
107
+ services: readOnlyServices(handlerContext.services),
108
+ ...(handlerContext.notify && { notify: denyMemberResolutionWrite }),
109
+ };
110
+ }
@@ -1,11 +1,12 @@
1
+ import type { NotifyFn } from "@cosmicdrift/kumiko-types/handlers";
1
2
  import type { DbConnection } from "../db/connection.ts";
2
3
  import type { TenantId } from "../engine/types/identifiers.ts";
3
- import type { NotifyFn, SessionUser } from "../engine/types/index.ts";
4
+ import type { SessionUser } from "../engine/types/index.ts";
4
5
  import type { CommitSinks } from "./handler-context-dispatch.ts";
5
6
  import type { HandlerContextScope } from "./handler-context-scope.ts";
6
7
  export declare function buildNotifyFacet(scope: HandlerContextScope, sinks: CommitSinks, outsideTxSource: DbConnection | undefined): {
7
8
  notify: NotifyFn | undefined;
8
- factoryFragment: {
9
+ factoryServices: {
9
10
  _notifyInTransactionFactory?: ((notifyUser: SessionUser, notifyTenantId: TenantId) => NotifyFn) | undefined;
10
11
  _notifyAfterCommitFactory?: ((notifyUser: SessionUser, notifyTenantId: TenantId) => NotifyFn) | undefined;
11
12
  };
@@ -45,7 +45,7 @@ export function buildNotifyFacet(scope, sinks, outsideTxSource) {
45
45
  const notify = buildNotify(scope, sinks, notifyAfterCommitFactory, notifyInTransactionFactory);
46
46
  return {
47
47
  notify,
48
- factoryFragment: {
48
+ factoryServices: {
49
49
  ...(notifyInTransactionFactory && {
50
50
  _notifyInTransactionFactory: notifyInTransactionFactory,
51
51
  }),
@@ -1,7 +1,5 @@
1
+ import type { HandlerObservability } from "../engine/types/index.ts";
1
2
  import type { HandlerContextScope } from "./handler-context-scope.ts";
2
3
  export declare function buildObservabilityFacet(scope: HandlerContextScope): {
3
- log: import("@cosmicdrift/kumiko-types/logger").Logger | undefined;
4
- tracer: import("@cosmicdrift/kumiko-types/observability/span").Tracer;
5
- metrics: import("@cosmicdrift/kumiko-types/observability/metric").MetricsHandle;
6
- metricsFor: (featureName: string) => import("@cosmicdrift/kumiko-types/observability/metric").MetricsHandle;
4
+ readonly obs: HandlerObservability;
7
5
  };
@@ -1,4 +1,6 @@
1
- import { createMetricsForFactory, createMetricsHandle, createNoopMetricsHandle, getFallbackTracer, } from "../observability/index.js";
1
+ import { createFallbackFullLogger } from "../logging/utils.js";
2
+ import { getFallbackTracer } from "../observability/fallback.js";
3
+ import { createMetricsForFactory, createMetricsHandle, createNoopMetricsHandle, } from "../observability/index.js";
2
4
  export function buildObservabilityFacet(scope) {
3
5
  const { type, user, context, reqCtx, featureName } = scope;
4
6
  const log = context.log?.child({
@@ -6,16 +8,16 @@ export function buildObservabilityFacet(scope) {
6
8
  tenantId: user.tenantId,
7
9
  userId: user.id,
8
10
  ...(reqCtx && { requestId: reqCtx.requestId }),
9
- });
10
- // Observability — feature-bound metrics handle, so ctx.metrics.inc("foo")
11
+ }) ?? createFallbackFullLogger("handler");
12
+ // Observability — feature-bound metrics handle, so ctx.obs.metrics.inc("foo")
11
13
  // resolves to kumiko_<feature>_foo. Unknown feature falls back to noop
12
14
  // so legacy internal handlers don't crash.
13
15
  const tracer = context.tracer ?? getFallbackTracer();
14
16
  const meter = context.meter;
15
17
  const metrics = meter && featureName ? createMetricsHandle(meter, featureName) : createNoopMetricsHandle();
16
- // ctx.metricsFor(featureName) — shared/library code binds to a feature
18
+ // obs.metricsFor(featureName) — shared/library code binds to a feature
17
19
  // name of its own choosing instead of the dispatching handler's.
18
20
  // Unregistered names no-op rather than throw.
19
21
  const metricsFor = createMetricsForFactory(meter);
20
- return { log, tracer, metrics, metricsFor };
22
+ return { obs: { log, tracer, metrics, metricsFor, ...(meter && { meter }) } };
21
23
  }
@@ -0,0 +1,11 @@
1
+ import type { JobRunnerRef } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type { HandlerContext } from "../engine/types/index.ts";
3
+ import { InternalError } from "../errors/index.ts";
4
+ export declare function denyingJobRunnerProxy(denied?: () => Error): JobRunnerRef;
5
+ export declare function dropOutsideTransaction(handlerContext: HandlerContext): void;
6
+ export declare function withoutTransactionDenied(surface: string): InternalError;
7
+ export declare function perCommandNestedDenied(targetType: string): InternalError;
8
+ export declare function denyEventStoreSurfaces(handlerContext: HandlerContext, buildError: (surface: string) => InternalError): HandlerContext;
9
+ export declare function denyTransactionBoundSurfaces(handlerContext: HandlerContext): HandlerContext;
10
+ export declare function withoutNotifyFactories(services: HandlerContext["services"]): HandlerContext["services"];
11
+ export declare function applyBeforeTransactionReadOnly(handlerContext: HandlerContext): HandlerContext;
@@ -0,0 +1,98 @@
1
+ import { InternalError } from "../errors/index.js";
2
+ import { memberResolutionReadOnlyDenied } from "../errors/member-resolution.js";
3
+ import { attachOutsideTransaction } from "./attach-outside-transaction.js";
4
+ // Phase denials of the write pipeline: member-resolution, without-transaction and the two
5
+ // pre-transaction phases each strip a different set of ctx surfaces.
6
+ // JobRunnerRef's declared type only carries handleEvent, but callers
7
+ // routinely bracket-access a fuller runner — a Proxy denies ANY property read.
8
+ export function denyingJobRunnerProxy(denied = memberResolutionReadOnlyDenied) {
9
+ const target = {
10
+ handleEvent: async () => {
11
+ throw denied();
12
+ },
13
+ };
14
+ return new Proxy(target, {
15
+ get() {
16
+ throw denied();
17
+ },
18
+ });
19
+ }
20
+ export function dropOutsideTransaction(handlerContext) {
21
+ if (handlerContext.db)
22
+ attachOutsideTransaction(handlerContext.db, undefined);
23
+ }
24
+ function beforeTransactionDenied(surface) {
25
+ return new InternalError({
26
+ message: `ctx.${surface} is not available before the transaction; move it into the handler`,
27
+ });
28
+ }
29
+ export function withoutTransactionDenied(surface) {
30
+ return new InternalError({
31
+ message: `ctx.${surface} is not available without an open transaction; run the write through ctx.dispatch.write so it gets its own transaction`,
32
+ });
33
+ }
34
+ export function perCommandNestedDenied(targetType) {
35
+ return new InternalError({
36
+ message: `handler "${targetType}" runs without a transaction (transaction: "perCommand") and cannot run as a nested write inside an open transaction`,
37
+ });
38
+ }
39
+ function denySurface(buildError, surface) {
40
+ return () => {
41
+ throw buildError(surface);
42
+ };
43
+ }
44
+ export function denyEventStoreSurfaces(handlerContext, buildError) {
45
+ const deny = (surface) => denySurface(buildError, `events.${surface}`);
46
+ return {
47
+ ...handlerContext,
48
+ events: {
49
+ ...handlerContext.events,
50
+ append: deny("append"),
51
+ unsafeAppend: deny("unsafeAppend"),
52
+ tryAppend: deny("tryAppend"),
53
+ fetchForWriting: deny("fetchForWriting"),
54
+ archive: deny("archive"),
55
+ restore: deny("restore"),
56
+ snapshot: deny("snapshot"),
57
+ },
58
+ };
59
+ }
60
+ // Reservations write on purpose through the outside-transaction handles, so they keep those but
61
+ // lose every surface bound to the not-yet-open transaction.
62
+ export function denyTransactionBoundSurfaces(handlerContext) {
63
+ const { lifecycle, services } = handlerContext;
64
+ return {
65
+ ...denyEventStoreSurfaces(handlerContext, beforeTransactionDenied),
66
+ dispatch: {
67
+ ...handlerContext.dispatch,
68
+ write: denySurface(beforeTransactionDenied, "dispatch.write"),
69
+ writeAs: denySurface(beforeTransactionDenied, "dispatch.writeAs"),
70
+ },
71
+ lifecycle: {
72
+ ...lifecycle,
73
+ afterCommit: denySurface(beforeTransactionDenied, "lifecycle.afterCommit"),
74
+ afterRollback: denySurface(beforeTransactionDenied, "lifecycle.afterRollback"),
75
+ },
76
+ ...(handlerContext.notify && { notify: denySurface(beforeTransactionDenied, "notify") }),
77
+ services: {
78
+ ...withoutNotifyFactories(services),
79
+ ...(services.jobRunner && {
80
+ jobRunner: denyingJobRunnerProxy(() => beforeTransactionDenied("services.jobRunner")),
81
+ }),
82
+ },
83
+ };
84
+ }
85
+ // A notify factory builds a working notify, so a phase that denies ctx.notify must drop them too.
86
+ export function withoutNotifyFactories(services) {
87
+ const { _notifyFactory: _factory, _notifyInTransactionFactory: _inTransaction, _notifyAfterCommitFactory: _afterCommit, ...rest } = services;
88
+ return rest;
89
+ }
90
+ // The beforeTransaction phase has no write need at all, so it also loses the outside-transaction
91
+ // handles. systemDb is mutated in place like db: its identity keys the unsafeRaw rebinders, so a
92
+ // spread or proxy would lose them. It is built per call, so no other context shares it.
93
+ export function applyBeforeTransactionReadOnly(handlerContext) {
94
+ dropOutsideTransaction(handlerContext);
95
+ if (handlerContext.systemDb)
96
+ attachOutsideTransaction(handlerContext.systemDb, undefined);
97
+ return denyTransactionBoundSurfaces(handlerContext);
98
+ }
@@ -1,7 +1,8 @@
1
1
  import { type EscapeHatchDeclaration, type EscapeHatchReporter } from "@cosmicdrift/kumiko-types/handlers";
2
- import { type RequestContextData } from "../api/request-context.ts";
2
+ import type { RequestContextData } from "../api/request-context-internals.ts";
3
3
  import type { DbConnection, DbTx } from "../db/connection.ts";
4
- import type { AppContext, Registry, SessionUser } from "../engine/types/index.ts";
4
+ import type { AppContext, HandlerContext, HandlerLifecycle, Registry, SessionUser } from "../engine/types/index.ts";
5
+ import type { ContextServiceOverrides } from "./context-services.ts";
5
6
  import { type DispatchContext, type HandlerTransactionScope } from "./dispatch-shared.ts";
6
7
  import type { WriteOrigin } from "./write-origin.ts";
7
8
  export type HandlerContextScope = {
@@ -37,12 +38,8 @@ export declare function resolveHandlerContextScope(input: {
37
38
  readonly tx: DbTx | undefined;
38
39
  readonly transactionScope: HandlerTransactionScope;
39
40
  }): HandlerContextScope;
40
- export declare function buildPreSaveFragment(scope: HandlerContextScope): {
41
- runPreSave?: ((handlerName: string, changes: Record<string, unknown>, previous: Readonly<Record<string, unknown>>, isNew: boolean) => Promise<Record<string, unknown>>) | undefined;
42
- };
43
- export declare function buildRuntimeFragment(scope: HandlerContextScope): {
44
- signal?: AbortSignal | undefined;
45
- effectiveFeatures?: import("@cosmicdrift/kumiko-framework/engine").EffectiveFeaturesResolver | undefined;
46
- cacheSync?: import("@cosmicdrift/kumiko-types/cache-sync-types").CacheSyncBus | undefined;
47
- jobRunner?: import("@cosmicdrift/kumiko-types/handlers").JobRunnerRef | undefined;
41
+ export declare function buildPreSave(scope: HandlerContextScope, finalContext: () => HandlerContext): HandlerLifecycle["runPreSave"];
42
+ export declare function buildRuntimeServices(scope: HandlerContextScope): ContextServiceOverrides;
43
+ export declare function buildLifecycleSignal(scope: HandlerContextScope): {
44
+ readonly signal?: AbortSignal;
48
45
  };
@@ -1,7 +1,7 @@
1
1
  import { escapeHatchFor, } from "@cosmicdrift/kumiko-types/handlers";
2
2
  import { requestContext } from "../api/request-context.js";
3
3
  import { createFallbackLogger } from "../logging/utils.js";
4
- import { createEscapeHatchReporter } from "../observability/index.js";
4
+ import { createEscapeHatchReporter } from "../observability/escape-hatch-report.js";
5
5
  import { resolveDbSource, } from "./dispatch-shared.js";
6
6
  export function resolveHandlerContextScope(input) {
7
7
  const { ctx, type, user, origin, tx, transactionScope } = input;
@@ -59,30 +59,28 @@ export function resolveHandlerContextScope(input) {
59
59
  }
60
60
  // preSave hooks need `changes`/`previous`/`isNew`, which only exist once
61
61
  // a handler actually starts building its write — bound here so entity
62
- // CRUD handlers (entity-handlers.ts) can forward it to the executor.
63
- export function buildPreSaveFragment(scope) {
62
+ // CRUD handlers (entity-handlers.ts) can forward it to the executor. The hooks receive the
63
+ // final, phase-wrapped context, so the context is resolved lazily at call time.
64
+ export function buildPreSave(scope, finalContext) {
64
65
  const { lifecycle } = scope.ctx;
65
- return {
66
- ...(lifecycle && {
67
- runPreSave: (handlerName, changes, previous, isNew) => lifecycle.runPreSave(handlerName, changes, previous, isNew, scope.context),
68
- }),
69
- };
66
+ if (!lifecycle)
67
+ return undefined;
68
+ return (handlerName, changes, previous, isNew) => lifecycle.runPreSave(handlerName, changes, previous, isNew, finalContext());
70
69
  }
71
- export function buildRuntimeFragment(scope) {
72
- const { ctx, reqCtx } = scope;
73
- const { effectiveFeatures, jobRunner } = ctx;
70
+ // Services the dispatcher resolves itself instead of copying from the boot context.
71
+ export function buildRuntimeServices(scope) {
72
+ const { effectiveFeatures, jobRunner, cacheSync } = scope.ctx;
74
73
  return {
75
- // Cancellation signal flows from the HTTP middleware via
76
- // requestContext. Conditional spread so non-HTTP entry-points
77
- // (jobs, dispatcher MSP-applies) don't get a phantom signal that
78
- // would always read aborted=false but feel meaningful.
79
- ...(reqCtx?.signal ? { signal: reqCtx.signal } : {}),
80
- // Propagate the feature-toggle resolver so the lifecycle pipeline,
81
- // MSP runner, and ctx.hasFeature all pull from the same source.
74
+ // One resolver for the lifecycle pipeline, MSP runner and ctx.hasFeature.
82
75
  ...(effectiveFeatures && { effectiveFeatures }),
83
- ...(ctx.cacheSync && { cacheSync: ctx.cacheSync }),
84
- // Lets write handlers call ctx.jobRunner.dispatch(...) directly, same
76
+ ...(cacheSync && { cacheSync }),
77
+ // Lets write handlers call ctx.services.jobRunner.dispatch(...) directly, same
85
78
  // as a follow-up job would (test-stack.ts wires the matching runner).
86
79
  ...(jobRunner && { jobRunner }),
87
80
  };
88
81
  }
82
+ // Cancellation signal flows from the HTTP middleware via requestContext. Absent for non-HTTP
83
+ // entry points (jobs, dispatcher MSP-applies) so it never reads as a phantom always-live signal.
84
+ export function buildLifecycleSignal(scope) {
85
+ return scope.reqCtx?.signal ? { signal: scope.reqCtx.signal } : {};
86
+ }
@@ -1,44 +1,32 @@
1
- export type { EscapeHatchReportWindow } from "../observability/escape-hatch-report.ts";
2
- export { createEscapeHatchReporter, createEscapeHatchReportWindow, ESCAPE_HATCH_USED_SIGNAL, fallbackEscapeHatchReporter, flushEscapeHatchAudits, reportEscapeHatchUse, UNATTRIBUTED_ACTOR, withEscapeHatchAuditScope, } from "../observability/escape-hatch-report.ts";
1
+ export { createEscapeHatchReporter, ESCAPE_HATCH_USED_SIGNAL, flushEscapeHatchAudits, UNATTRIBUTED_ACTOR, } from "../observability/escape-hatch-report.ts";
3
2
  export { normalizePayloadBucketValue } from "../rate-limit/bucket.ts";
4
3
  export { createUnlimitedRateLimitResolver } from "../rate-limit/unlimited-resolver.ts";
5
- export type { AppendDomainEventCoreDeps } from "./append-event-core.ts";
6
4
  export { appendDomainEventCore } from "./append-event-core.ts";
7
- export type { ResolveAuthClaimsArgs } from "./auth-claims-resolver.ts";
8
5
  export { resolveAuthClaims } from "./auth-claims-resolver.ts";
9
6
  export { createCascadeDeleteHook } from "./cascade-handler.ts";
10
7
  export type { Dispatcher } from "./dispatcher.ts";
11
8
  export { createDispatcher, dispatcherToWriteRef } from "./dispatcher.ts";
12
- export type { FailedWriteResult } from "./dispatcher-utils.ts";
13
- export { isFailedWriteResult } from "./dispatcher-utils.ts";
14
9
  export type { DistributedLock } from "./distributed-lock.ts";
15
10
  export { createDistributedLock } from "./distributed-lock.ts";
16
- export type { EntityCache, EntityCacheOptions } from "./entity-cache.ts";
17
11
  export { createEntityCache } from "./entity-cache.ts";
18
- export type { ConsumerStatus, PendingGapEntry } from "./event-consumer-state.ts";
19
12
  export { ConsumerStatuses, createEventConsumerStateTable, eventConsumerStateTable, SHARED_INSTANCE_SENTINEL, } from "./event-consumer-state.ts";
20
13
  export type { EventDedup } from "./event-dedup.ts";
21
14
  export { createEventDedup } from "./event-dedup.ts";
22
- export type { ConsumerProgress, ConsumerRecoveryState, ConsumerTransitionRejection, DispatcherPassResult, EventConsumer, EventConsumerBatchHandler, EventConsumerHandler, EventDispatcher, EventDispatcherOptions, } from "./event-dispatcher.ts";
23
- export { ConsumerTransitionError, createEventDispatcher, disableConsumer, enableConsumer, getAllConsumerProgress, getConsumerState, listConsumersWithState, restartConsumer, skipPoisonEvent, } from "./event-dispatcher.ts";
24
- export type { ConsumerCursor } from "./event-dispatcher-delivery.ts";
25
- export { selectConsumerCursorForUpdate } from "./event-dispatcher-delivery.ts";
26
- export type { PruneEventsOptions, PruneEventsResult } from "./event-retention.ts";
15
+ export type { ConsumerProgress, ConsumerRecoveryState, EventDispatcher, } from "./event-dispatcher.ts";
16
+ export { ConsumerTransitionError, disableConsumer, enableConsumer, getAllConsumerProgress, getConsumerState, listConsumersWithState, restartConsumer, skipPoisonEvent, } from "./event-dispatcher.ts";
17
+ export type { PruneEventsOptions } from "./event-retention.ts";
27
18
  export { ConsumerLagError, pruneEvents } from "./event-retention.ts";
28
19
  export type { IdempotencyGuard } from "./idempotency.ts";
29
20
  export { createIdempotencyGuard } from "./idempotency.ts";
30
- export { assertInstructionFieldWriteAllowed, assertIrreversibleOperationAllowed, isIrreversibleEntityVerb, } from "./irreversible-operation-gate.ts";
31
- export type { LifecycleHooks, SystemHookDef, SystemHooks } from "./lifecycle-pipeline.ts";
21
+ export { assertIrreversibleOperationAllowed } from "./irreversible-operation-gate.ts";
22
+ export type { SystemHooks } from "./lifecycle-pipeline.ts";
32
23
  export { createLifecycleHooks } from "./lifecycle-pipeline.ts";
33
- export type { MspRebuildDeps } from "./msp-rebuild.ts";
34
24
  export { rebuildMultiStreamProjection } from "./msp-rebuild.ts";
35
- export type { MultiStreamApplyContext, MultiStreamApplyContextDeps, } from "./multi-stream-apply-context.ts";
25
+ export type { MultiStreamApplyContext } from "./multi-stream-apply-context.ts";
36
26
  export { createMultiStreamApplyContext } from "./multi-stream-apply-context.ts";
37
27
  export { assertNotifyTargetsOwnTenant, createDeferringNotify } from "./notify-scope.ts";
38
- export type { ProjectionProgress, RebuildResult } from "./projection-rebuild.ts";
39
28
  export { getAllProjectionProgress, getProjectionState, listProjectionsWithState, rebuildProjection, } from "./projection-rebuild.ts";
40
- export type { ProjectionStatus } from "./projection-state.ts";
41
- export { createProjectionStateTable, ProjectionStatuses, projectionStateTable, } from "./projection-state.ts";
29
+ export { createProjectionStateTable, projectionStateTable, } from "./projection-state.ts";
42
30
  export { runProjectionsForEvent } from "./projections-runner.ts";
43
- export { ACCESS_INVALIDATION_CONSUMER_NAME, createAccessInvalidationEventConsumer, createSearchEventConsumer, createSseBroadcastEventConsumer, SEARCH_CONSUMER_NAME, SSE_BROADCAST_CONSUMER_NAME, } from "./system-hooks.ts";
31
+ export { SEARCH_CONSUMER_NAME, SSE_BROADCAST_CONSUMER_NAME, } from "./system-hooks.ts";
44
32
  export { TENANT_TIMEZONE_CONFIG_KEY } from "./tenant-timezone-config-key.ts";