@cosmicdrift/kumiko-framework 0.389.0 → 0.390.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) 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/eagerload.d.ts +2 -1
  98. package/dist/db/entity-field-encryption.d.ts +1 -1
  99. package/dist/db/entity-table-meta.d.ts +1 -1
  100. package/dist/db/event-store-executor-context.d.ts +3 -1
  101. package/dist/db/event-store-executor-context.js +4 -3
  102. package/dist/db/event-store-executor-read-filter.d.ts +1 -1
  103. package/dist/db/event-store-executor-read-rows.d.ts +2 -1
  104. package/dist/db/event-store-executor-read-search.d.ts +2 -1
  105. package/dist/db/event-store-executor-read-sort.d.ts +2 -1
  106. package/dist/db/event-store-executor-read.js +2 -2
  107. package/dist/db/event-store-executor-write-atomic.js +8 -7
  108. package/dist/db/event-store-executor-write-steps.d.ts +3 -2
  109. package/dist/db/event-store-executor-write.js +7 -4
  110. package/dist/db/event-store-executor.d.ts +1 -1
  111. package/dist/db/executor-managed-tables.d.ts +7 -1
  112. package/dist/db/executor-managed-tables.js +11 -2
  113. package/dist/db/index.d.ts +29 -28
  114. package/dist/db/index.js +22 -20
  115. package/dist/db/known-table-names.d.ts +6 -0
  116. package/dist/db/known-table-names.js +21 -0
  117. package/dist/db/list-aggregate-labels.d.ts +1 -1
  118. package/dist/db/located-timestamp.d.ts +1 -1
  119. package/dist/db/located-timestamp.js +0 -5
  120. package/dist/db/migrate-generator.d.ts +17 -1
  121. package/dist/db/migrate-generator.js +50 -20
  122. package/dist/db/migrate-primary-key.d.ts +12 -0
  123. package/dist/db/migrate-primary-key.js +45 -0
  124. package/dist/db/migrate-rls-diff.d.ts +20 -0
  125. package/dist/db/migrate-rls-diff.js +61 -0
  126. package/dist/db/migrate-runner.js +4 -0
  127. package/dist/db/money.d.ts +1 -1
  128. package/dist/db/money.js +1 -1
  129. package/dist/db/parent-ref-clause.d.ts +2 -1
  130. package/dist/db/pg-error.d.ts +2 -0
  131. package/dist/db/pg-error.js +11 -0
  132. package/dist/db/queries/ddl.d.ts +3 -0
  133. package/dist/db/queries/ddl.js +34 -1
  134. package/dist/db/queries/event-store.js +4 -2
  135. package/dist/db/queries/event-tenants.d.ts +2 -0
  136. package/dist/db/queries/event-tenants.js +17 -0
  137. package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
  138. package/dist/db/queries/rebuild-rls-guard.js +29 -0
  139. package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
  140. package/dist/db/queries/rls-boot-catalog.js +39 -0
  141. package/dist/db/queries/rls-catalog.d.ts +6 -0
  142. package/dist/db/queries/rls-catalog.js +82 -0
  143. package/dist/db/queries/rls-scope.d.ts +3 -0
  144. package/dist/db/queries/rls-scope.js +17 -0
  145. package/dist/db/queries/rls-shape.d.ts +10 -0
  146. package/dist/db/queries/rls-shape.js +42 -0
  147. package/dist/db/queries/session-advisory-lock.d.ts +2 -0
  148. package/dist/db/queries/session-advisory-lock.js +23 -0
  149. package/dist/db/queries/shadow-swap.d.ts +1 -2
  150. package/dist/db/queries/shadow-swap.js +9 -25
  151. package/dist/db/queries/test-stack.d.ts +4 -1
  152. package/dist/db/queries/test-stack.js +83 -2
  153. package/dist/db/query.js +11 -7
  154. package/dist/db/reference-data.d.ts +1 -1
  155. package/dist/db/reference-data.js +6 -1
  156. package/dist/db/render-ddl.d.ts +6 -2
  157. package/dist/db/render-ddl.js +7 -7
  158. package/dist/db/render-rls-ddl.d.ts +35 -0
  159. package/dist/db/render-rls-ddl.js +127 -0
  160. package/dist/db/replay-migration-sql.d.ts +3 -1
  161. package/dist/db/replay-migration-sql.js +22 -5
  162. package/dist/db/replay-rls.d.ts +25 -0
  163. package/dist/db/replay-rls.js +156 -0
  164. package/dist/db/row-level-security-boot-check.d.ts +5 -0
  165. package/dist/db/row-level-security-boot-check.js +85 -0
  166. package/dist/db/row-level-security-connection.d.ts +3 -0
  167. package/dist/db/row-level-security-connection.js +213 -0
  168. package/dist/db/row-level-security-scope.d.ts +33 -0
  169. package/dist/db/row-level-security-scope.js +127 -0
  170. package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
  171. package/dist/db/scope-tenant-db-to-tenant.js +14 -0
  172. package/dist/db/sql-identifier.d.ts +1 -0
  173. package/dist/db/sql-identifier.js +3 -0
  174. package/dist/db/table-builder.d.ts +2 -1
  175. package/dist/db/table-builder.js +1 -1
  176. package/dist/db/table-info.js +1 -1
  177. package/dist/db/table-push.d.ts +11 -2
  178. package/dist/db/table-push.js +15 -2
  179. package/dist/db/tenant-db-runner.d.ts +3 -1
  180. package/dist/db/tenant-db-runner.js +4 -3
  181. package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
  182. package/dist/db/tenant-db-scoped-rebind.js +33 -0
  183. package/dist/db/tenant-db-statement-runner.d.ts +13 -0
  184. package/dist/db/tenant-db-statement-runner.js +48 -0
  185. package/dist/db/tenant-db.d.ts +17 -12
  186. package/dist/db/tenant-db.js +49 -120
  187. package/dist/db/tenant-id-filter.d.ts +3 -0
  188. package/dist/db/tenant-id-filter.js +30 -0
  189. package/dist/db/transaction-serialization.d.ts +6 -0
  190. package/dist/db/transaction-serialization.js +60 -0
  191. package/dist/derivatives/delete-stored-file.js +1 -1
  192. package/dist/derivatives/index.d.ts +2 -5
  193. package/dist/derivatives/index.js +2 -3
  194. package/dist/engine/access.d.ts +2 -1
  195. package/dist/engine/access.js +1 -1
  196. package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
  197. package/dist/engine/boot-validator/entity-handler.js +1 -1
  198. package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +1 -1
  199. package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +1 -1
  200. package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +2 -1
  201. package/dist/engine/boot-validator/nav.d.ts +3 -1
  202. package/dist/engine/boot-validator/nav.js +1 -1
  203. package/dist/engine/boot-validator/ownership.d.ts +2 -1
  204. package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
  205. package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
  206. package/dist/engine/boot-validator/query-refs.d.ts +2 -1
  207. package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
  208. package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
  209. package/dist/engine/boot-validator/screens.d.ts +2 -1
  210. package/dist/engine/boot-validator/workspaces.d.ts +3 -1
  211. package/dist/engine/bridge-stub.d.ts +5 -2
  212. package/dist/engine/bridge-stub.js +39 -24
  213. package/dist/engine/config-helpers.d.ts +2 -2
  214. package/dist/engine/config-helpers.js +0 -9
  215. package/dist/engine/constants.d.ts +0 -10
  216. package/dist/engine/constants.js +0 -8
  217. package/dist/engine/create-app.js +1 -1
  218. package/dist/engine/define-feature.d.ts +2 -1
  219. package/dist/engine/define-feature.js +1 -2
  220. package/dist/engine/define-handler.d.ts +1 -1
  221. package/dist/engine/define-step.d.ts +0 -1
  222. package/dist/engine/define-step.js +0 -3
  223. package/dist/engine/embedded-derived.d.ts +1 -1
  224. package/dist/engine/entity-handlers.d.ts +2 -1
  225. package/dist/engine/entity-handlers.js +7 -7
  226. package/dist/engine/entity-list-runtime-options.js +3 -1
  227. package/dist/engine/entity-list-searchability.d.ts +2 -1
  228. package/dist/engine/event-def.d.ts +2 -1
  229. package/dist/engine/event-helpers.d.ts +3 -1
  230. package/dist/engine/event-helpers.js +3 -3
  231. package/dist/engine/extension-names.d.ts +2 -8
  232. package/dist/engine/extension-names.js +2 -2
  233. package/dist/engine/extension-selector-plugins.d.ts +1 -1
  234. package/dist/engine/extensions/storage-provider.d.ts +1 -2
  235. package/dist/engine/extensions/user-data.d.ts +0 -8
  236. package/dist/engine/factories.d.ts +2 -1
  237. package/dist/engine/feature-builder-state.d.ts +8 -1
  238. package/dist/engine/feature-changelog.d.ts +1 -1
  239. package/dist/engine/feature-config-events-jobs.d.ts +4 -1
  240. package/dist/engine/feature-entity-handlers.d.ts +5 -1
  241. package/dist/engine/feature-manifest.js +1 -1
  242. package/dist/engine/feature-ui-extensions.d.ts +7 -1
  243. package/dist/engine/feature-ui-extensions.js +6 -4
  244. package/dist/engine/field-access.d.ts +2 -1
  245. package/dist/engine/handler-field-references.d.ts +0 -4
  246. package/dist/engine/index.d.ts +57 -54
  247. package/dist/engine/index.js +22 -27
  248. package/dist/engine/instruction-fields.d.ts +1 -1
  249. package/dist/engine/personal-data-fields.d.ts +1 -1
  250. package/dist/engine/qualified-name.d.ts +0 -1
  251. package/dist/engine/read-claim.d.ts +2 -1
  252. package/dist/engine/registry-facade.js +0 -3
  253. package/dist/engine/registry-ingest.d.ts +2 -1
  254. package/dist/engine/registry-ingest.js +1 -2
  255. package/dist/engine/registry-state.d.ts +12 -2
  256. package/dist/engine/registry-state.js +2 -3
  257. package/dist/engine/registry-validate.d.ts +3 -1
  258. package/dist/engine/registry-validate.js +7 -7
  259. package/dist/engine/run-in.d.ts +1 -1
  260. package/dist/engine/run-in.js +0 -1
  261. package/dist/engine/schema-builder.d.ts +1 -1
  262. package/dist/engine/schema-builder.js +1 -1
  263. package/dist/engine/screen-filter-ops.d.ts +2 -1
  264. package/dist/engine/screen-filter-ops.js +0 -5
  265. package/dist/engine/soft-delete-cleanup.d.ts +1 -1
  266. package/dist/engine/soft-delete-cleanup.js +4 -4
  267. package/dist/engine/state-machine.js +2 -1
  268. package/dist/engine/steps/_read-source.js +1 -1
  269. package/dist/engine/steps/aggregate-append-event.js +2 -2
  270. package/dist/engine/steps/call-feature.js +2 -2
  271. package/dist/engine/steps/mail-send.js +1 -1
  272. package/dist/engine/steps/retry.js +1 -1
  273. package/dist/engine/steps/wait-for-event.js +1 -1
  274. package/dist/engine/steps/wait.js +1 -1
  275. package/dist/engine/steps/webhook-send.js +1 -1
  276. package/dist/engine/template-variables.d.ts +2 -1
  277. package/dist/engine/transfer-adjacency.d.ts +1 -1
  278. package/dist/engine/types/index.d.ts +8 -31
  279. package/dist/engine/types/index.js +2 -10
  280. package/dist/engine/validation.d.ts +2 -1
  281. package/dist/entrypoint/index.d.ts +7 -35
  282. package/dist/entrypoint/index.js +7 -1
  283. package/dist/entrypoint/internals.d.ts +40 -0
  284. package/dist/entrypoint/internals.js +1 -0
  285. package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
  286. package/dist/entrypoint/row-level-security-mode-check.js +19 -0
  287. package/dist/env/dry-run-internals.d.ts +10 -0
  288. package/dist/env/dry-run-internals.js +1 -0
  289. package/dist/env/dry-run.d.ts +1 -10
  290. package/dist/env/dry-run.js +2 -1
  291. package/dist/env/index.d.ts +1 -85
  292. package/dist/env/index.js +6 -50
  293. package/dist/env/internals.d.ts +87 -0
  294. package/dist/env/internals.js +53 -0
  295. package/dist/errors/classes.js +2 -2
  296. package/dist/errors/index.d.ts +5 -14
  297. package/dist/errors/index.js +4 -9
  298. package/dist/errors/member-resolution.js +1 -1
  299. package/dist/errors/reasons.d.ts +0 -1
  300. package/dist/errors/reasons.js +7 -7
  301. package/dist/errors/serialize.d.ts +0 -18
  302. package/dist/errors/serialize.js +0 -27
  303. package/dist/es-ops/index.d.ts +4 -4
  304. package/dist/es-ops/index.js +2 -2
  305. package/dist/es-ops/operations-schema.d.ts +1 -1
  306. package/dist/es-ops/types.d.ts +4 -5
  307. package/dist/event-store/admin-api-internals.d.ts +14 -0
  308. package/dist/event-store/admin-api-internals.js +1 -0
  309. package/dist/event-store/admin-api.d.ts +1 -14
  310. package/dist/event-store/admin-api.js +11 -6
  311. package/dist/event-store/archive.js +4 -2
  312. package/dist/event-store/errors.js +2 -2
  313. package/dist/event-store/event-store.js +41 -34
  314. package/dist/event-store/events-schema.js +4 -1
  315. package/dist/event-store/index.d.ts +11 -13
  316. package/dist/event-store/index.js +7 -9
  317. package/dist/event-store/rebuild-dead-letter.js +4 -2
  318. package/dist/event-store/snapshot.js +4 -3
  319. package/dist/event-store/stream-scope.d.ts +2 -0
  320. package/dist/event-store/stream-scope.js +6 -0
  321. package/dist/event-store/upcaster-dead-letter.js +4 -2
  322. package/dist/event-store/upcaster.d.ts +2 -1
  323. package/dist/files/action-form-upload.d.ts +2 -1
  324. package/dist/files/action-form-upload.js +1 -1
  325. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
  326. package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
  327. package/dist/files/bind-pending-file-refs.d.ts +2 -1
  328. package/dist/files/bind-pending-file-refs.js +2 -1
  329. package/dist/files/bind-referenced-files.write.js +1 -1
  330. package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
  331. package/dist/files/create-file-ref-from-bytes.js +3 -3
  332. package/dist/files/create-file-ref.d.ts +3 -2
  333. package/dist/files/create-file-ref.js +2 -2
  334. package/dist/files/dispose-removed-file-refs.d.ts +2 -1
  335. package/dist/files/dispose-removed-file-refs.js +1 -1
  336. package/dist/files/feature.js +2 -2
  337. package/dist/files/file-handle.js +1 -1
  338. package/dist/files/file-routes.d.ts +1 -1
  339. package/dist/files/file-routes.js +12 -2
  340. package/dist/files/index.d.ts +11 -13
  341. package/dist/files/index.js +5 -7
  342. package/dist/files/load-save-file-refs.d.ts +2 -1
  343. package/dist/files/load-save-file-refs.js +1 -1
  344. package/dist/files/provider-resolver.d.ts +5 -4
  345. package/dist/files/provider-resolver.js +4 -4
  346. package/dist/files/storage-tracking.js +4 -2
  347. package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
  348. package/dist/files/sweep-orphaned-uploads.js +1 -1
  349. package/dist/i18n/index.d.ts +2 -8
  350. package/dist/i18n/index.js +1 -1
  351. package/dist/i18n/internals.d.ts +7 -0
  352. package/dist/i18n/internals.js +1 -0
  353. package/dist/i18n/required-surface-keys.d.ts +4 -1
  354. package/dist/internal/row-level-security.d.ts +3 -0
  355. package/dist/internal/row-level-security.js +3 -0
  356. package/dist/internal/stack-support.d.ts +1 -1
  357. package/dist/internal/stack-support.js +1 -1
  358. package/dist/internal/testing.d.ts +1 -0
  359. package/dist/internal/testing.js +9 -5
  360. package/dist/jobs/index.d.ts +1 -1
  361. package/dist/jobs/job-append-event.d.ts +12 -0
  362. package/dist/jobs/job-append-event.js +30 -0
  363. package/dist/jobs/job-runner-context.d.ts +2 -2
  364. package/dist/jobs/job-runner-context.js +46 -16
  365. package/dist/jobs/job-runner-execution.d.ts +1 -1
  366. package/dist/jobs/job-runner-execution.js +6 -4
  367. package/dist/jobs/job-runner-gates.d.ts +1 -1
  368. package/dist/jobs/job-runner-gates.js +0 -1
  369. package/dist/jobs/job-runner-helpers.d.ts +11 -4
  370. package/dist/jobs/job-runner-helpers.js +10 -1
  371. package/dist/jobs/job-runner-scope.d.ts +5 -2
  372. package/dist/jobs/job-runner-types.d.ts +2 -1
  373. package/dist/jobs/job-runner.js +19 -6
  374. package/dist/jobs/max-per-tenant.d.ts +1 -1
  375. package/dist/logging/index.d.ts +1 -2
  376. package/dist/logging/index.js +1 -1
  377. package/dist/logging/pino-logger.js +1 -1
  378. package/dist/logging/utils.d.ts +1 -0
  379. package/dist/logging/utils.js +6 -0
  380. package/dist/migrations/index.d.ts +3 -3
  381. package/dist/migrations/index.js +3 -3
  382. package/dist/migrations/pending-rebuilds.d.ts +1 -1
  383. package/dist/migrations/pending-rebuilds.js +1 -1
  384. package/dist/migrations/pii-event-backfill.js +4 -1
  385. package/dist/observability/escape-hatch-report.d.ts +2 -1
  386. package/dist/observability/index.d.ts +7 -15
  387. package/dist/observability/index.js +4 -12
  388. package/dist/observability/metric-validator.js +1 -1
  389. package/dist/observability/metrics-handle.d.ts +0 -1
  390. package/dist/observability/metrics-handle.js +2 -15
  391. package/dist/observability/recording-tracer.d.ts +1 -2
  392. package/dist/observability/recording-tracer.js +0 -6
  393. package/dist/observability/sensitive-filter.d.ts +0 -2
  394. package/dist/observability/sensitive-filter.js +0 -29
  395. package/dist/pipeline/active-membership.d.ts +2 -1
  396. package/dist/pipeline/active-membership.js +6 -2
  397. package/dist/pipeline/append-event-core.d.ts +2 -1
  398. package/dist/pipeline/append-event-core.js +2 -2
  399. package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
  400. package/dist/pipeline/attach-outside-transaction.js +13 -0
  401. package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
  402. package/dist/pipeline/cascade-handler.d.ts +2 -1
  403. package/dist/pipeline/cascade-handler.js +3 -2
  404. package/dist/pipeline/config-accessor-factory.d.ts +1 -1
  405. package/dist/pipeline/config-accessor-factory.js +1 -1
  406. package/dist/pipeline/context-services.d.ts +56 -0
  407. package/dist/pipeline/context-services.js +73 -0
  408. package/dist/pipeline/dispatch-batch.d.ts +2 -1
  409. package/dist/pipeline/dispatch-batch.js +31 -18
  410. package/dist/pipeline/dispatch-query.js +5 -4
  411. package/dist/pipeline/dispatch-scope.d.ts +6 -0
  412. package/dist/pipeline/dispatch-scope.js +27 -0
  413. package/dist/pipeline/dispatch-shared.d.ts +13 -9
  414. package/dist/pipeline/dispatch-shared.js +75 -198
  415. package/dist/pipeline/dispatch-stream.js +8 -4
  416. package/dist/pipeline/dispatch-write.d.ts +2 -1
  417. package/dist/pipeline/dispatch-write.js +10 -8
  418. package/dist/pipeline/dispatcher-utils.d.ts +3 -1
  419. package/dist/pipeline/dispatcher-utils.js +8 -2
  420. package/dist/pipeline/dispatcher.d.ts +3 -2
  421. package/dist/pipeline/dispatcher.js +4 -3
  422. package/dist/pipeline/event-consumer-state.d.ts +0 -1
  423. package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
  424. package/dist/pipeline/event-dispatcher-delivery.js +4 -2
  425. package/dist/pipeline/event-dispatcher.d.ts +2 -2
  426. package/dist/pipeline/event-dispatcher.js +7 -3
  427. package/dist/pipeline/event-retention.js +59 -56
  428. package/dist/pipeline/handler-access-error.js +2 -1
  429. package/dist/pipeline/handler-context-auth.d.ts +5 -6
  430. package/dist/pipeline/handler-context-auth.js +7 -4
  431. package/dist/pipeline/handler-context-config.d.ts +2 -5
  432. package/dist/pipeline/handler-context-config.js +2 -2
  433. package/dist/pipeline/handler-context-db.d.ts +32 -7
  434. package/dist/pipeline/handler-context-db.js +26 -17
  435. package/dist/pipeline/handler-context-dispatch.d.ts +13 -7
  436. package/dist/pipeline/handler-context-dispatch.js +9 -8
  437. package/dist/pipeline/handler-context-events.d.ts +22 -36
  438. package/dist/pipeline/handler-context-events.js +36 -31
  439. package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
  440. package/dist/pipeline/handler-context-member-resolution.js +110 -0
  441. package/dist/pipeline/handler-context-notify.d.ts +3 -2
  442. package/dist/pipeline/handler-context-notify.js +1 -1
  443. package/dist/pipeline/handler-context-observability.d.ts +2 -4
  444. package/dist/pipeline/handler-context-observability.js +7 -5
  445. package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
  446. package/dist/pipeline/handler-context-phase-denials.js +98 -0
  447. package/dist/pipeline/handler-context-scope.d.ts +7 -10
  448. package/dist/pipeline/handler-context-scope.js +18 -20
  449. package/dist/pipeline/index.d.ts +9 -21
  450. package/dist/pipeline/index.js +5 -7
  451. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  452. package/dist/pipeline/irreversible-operation-gate.js +2 -2
  453. package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
  454. package/dist/pipeline/lifecycle-pipeline.js +9 -15
  455. package/dist/pipeline/member-read-only-transaction.js +11 -3
  456. package/dist/pipeline/member-reader.d.ts +1 -1
  457. package/dist/pipeline/member-reader.js +2 -2
  458. package/dist/pipeline/msp-rebuild.js +5 -3
  459. package/dist/pipeline/multi-stream-apply-context.js +3 -2
  460. package/dist/pipeline/notify-scope.d.ts +2 -1
  461. package/dist/pipeline/pre-handler-gates.d.ts +2 -1
  462. package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
  463. package/dist/pipeline/pre-transaction-reservations.js +9 -7
  464. package/dist/pipeline/projection-rebuild.js +12 -5
  465. package/dist/pipeline/projection-state.d.ts +0 -6
  466. package/dist/pipeline/projection-state.js +0 -5
  467. package/dist/pipeline/projections-runner.d.ts +2 -1
  468. package/dist/pipeline/projections-runner.js +10 -6
  469. package/dist/pipeline/system-hooks.d.ts +3 -1
  470. package/dist/pipeline/system-hooks.js +6 -4
  471. package/dist/pipeline/system-identity-switch.d.ts +4 -2
  472. package/dist/pipeline/system-identity-switch.js +51 -36
  473. package/dist/pipeline/typed-append-event.d.ts +2 -0
  474. package/dist/pipeline/typed-append-event.js +4 -0
  475. package/dist/pipeline/write-origin.js +2 -2
  476. package/dist/pipeline/write-result-masking.d.ts +1 -1
  477. package/dist/random/index.d.ts +1 -2
  478. package/dist/random/index.js +1 -2
  479. package/dist/rate-limit/bucket.d.ts +2 -1
  480. package/dist/rate-limit/middleware.js +2 -1
  481. package/dist/redis/index.d.ts +3 -4
  482. package/dist/redis/index.js +2 -2
  483. package/dist/schema-cli/apply-command.js +5 -2
  484. package/dist/schema-cli/baseline-command.js +7 -2
  485. package/dist/schema-cli/generate-command.js +7 -9
  486. package/dist/schema-cli/shared.d.ts +4 -0
  487. package/dist/schema-cli/shared.js +21 -2
  488. package/dist/schema-cli/status-command.js +8 -2
  489. package/dist/schema-cli/validate-command.js +52 -4
  490. package/dist/schema-cli.d.ts +0 -1
  491. package/dist/search/configure-tenant-index.d.ts +1 -3
  492. package/dist/search/configure-tenant-index.js +0 -4
  493. package/dist/search/index.d.ts +1 -4
  494. package/dist/search/index.js +0 -2
  495. package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
  496. package/dist/search/meilisearch-adapter-internals.js +9 -0
  497. package/dist/search/meilisearch-adapter.d.ts +1 -8
  498. package/dist/search/meilisearch-adapter.js +6 -7
  499. package/dist/search/meilisearch-peer.d.ts +2 -0
  500. package/dist/search/meilisearch-peer.js +5 -0
  501. package/dist/search/reindex-entity.js +93 -87
  502. package/dist/secrets/index.d.ts +3 -4
  503. package/dist/secrets/index.js +2 -3
  504. package/dist/seeding/index.d.ts +2 -2
  505. package/dist/seeding/index.js +1 -2
  506. package/dist/time/index.d.ts +2 -2
  507. package/dist/time/index.js +1 -1
  508. package/dist/time/tz-context.d.ts +0 -5
  509. package/dist/time/tz-context.js +0 -9
  510. package/dist/ui-types/index.d.ts +8 -11
  511. package/dist/ui-types/index.js +3 -3
  512. package/dist/upgrade-changelog.d.ts +3 -2
  513. package/dist/upgrade-changelog.js +12 -8
  514. package/dist/upgrade-cli-internals.d.ts +8 -0
  515. package/dist/upgrade-cli-internals.js +63 -0
  516. package/dist/upgrade-cli.d.ts +1 -9
  517. package/dist/upgrade-cli.js +10 -64
  518. package/dist/utils/import-optional-peer.d.ts +6 -0
  519. package/dist/utils/import-optional-peer.js +19 -0
  520. package/dist/utils/index.d.ts +1 -4
  521. package/dist/utils/index.js +1 -4
  522. package/package.json +22 -18
  523. package/src/changes.json +206 -0
  524. package/dist/crypto/request-kms-cache.d.ts +0 -8
  525. package/dist/crypto/request-kms-cache.js +0 -21
  526. package/dist/engine/codemod/index.d.ts +0 -2
  527. package/dist/engine/codemod/index.js +0 -1
  528. package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
  529. package/dist/engine/codemod/pipeline-codemod.js +0 -536
  530. package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
  531. package/dist/engine/feature-ast/entity-field-types.js +0 -35
  532. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
  533. package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
  534. package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
  535. package/dist/engine/feature-ast/extractors/events.js +0 -275
  536. package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
  537. package/dist/engine/feature-ast/extractors/handlers.js +0 -358
  538. package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
  539. package/dist/engine/feature-ast/extractors/hooks.js +0 -248
  540. package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
  541. package/dist/engine/feature-ast/extractors/index.js +0 -13
  542. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
  543. package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
  544. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
  545. package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
  546. package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
  547. package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
  548. package/dist/engine/feature-ast/extractors/round1.d.ts +0 -11
  549. package/dist/engine/feature-ast/extractors/round1.js +0 -87
  550. package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
  551. package/dist/engine/feature-ast/extractors/round2.js +0 -191
  552. package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
  553. package/dist/engine/feature-ast/extractors/round3.js +0 -292
  554. package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
  555. package/dist/engine/feature-ast/extractors/round5.js +0 -68
  556. package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
  557. package/dist/engine/feature-ast/extractors/round6.js +0 -17
  558. package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
  559. package/dist/engine/feature-ast/extractors/shared.js +0 -343
  560. package/dist/engine/feature-ast/index.d.ts +0 -16
  561. package/dist/engine/feature-ast/index.js +0 -10
  562. package/dist/engine/feature-ast/parse.d.ts +0 -31
  563. package/dist/engine/feature-ast/parse.js +0 -485
  564. package/dist/engine/feature-ast/patch.d.ts +0 -212
  565. package/dist/engine/feature-ast/patch.js +0 -611
  566. package/dist/engine/feature-ast/patcher.d.ts +0 -217
  567. package/dist/engine/feature-ast/patcher.js +0 -281
  568. package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1238
  569. package/dist/engine/feature-ast/pattern-change-schema.js +0 -1072
  570. package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
  571. package/dist/engine/feature-ast/pattern-id-matchers.js +0 -211
  572. package/dist/engine/feature-ast/pattern-id-schema.d.ts +0 -251
  573. package/dist/engine/feature-ast/pattern-id-schema.js +0 -166
  574. package/dist/engine/feature-ast/patterns.d.ts +0 -322
  575. package/dist/engine/feature-ast/patterns.js +0 -107
  576. package/dist/engine/feature-ast/render.d.ts +0 -47
  577. package/dist/engine/feature-ast/render.js +0 -666
  578. package/dist/engine/feature-ast/source-location.d.ts +0 -17
  579. package/dist/engine/feature-ast/source-location.js +0 -27
  580. package/dist/engine/pattern-library/index.d.ts +0 -2
  581. package/dist/engine/pattern-library/index.js +0 -3
  582. package/dist/engine/pattern-library/library.d.ts +0 -14
  583. package/dist/engine/pattern-library/library.js +0 -94
  584. package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
  585. package/dist/engine/pattern-library/mixed-schemas.js +0 -559
  586. package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
  587. package/dist/engine/pattern-library/opaque-schemas.js +0 -115
  588. package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
  589. package/dist/engine/pattern-library/shared-fields.js +0 -88
  590. package/dist/engine/pattern-library/static-schemas.d.ts +0 -21
  591. package/dist/engine/pattern-library/static-schemas.js +0 -487
  592. package/dist/engine/pattern-library/types.d.ts +0 -158
  593. package/dist/engine/pattern-library/types.js +0 -36
  594. package/dist/engine/resolve-config-or-param.d.ts +0 -18
  595. package/dist/engine/resolve-config-or-param.js +0 -76
  596. package/src/scripts/codemod/README.md +0 -187
  597. package/src/scripts/codemod/codemod-support.ts +0 -334
  598. package/src/scripts/codemod/collect-source-files.ts +0 -48
  599. package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
  600. package/src/scripts/codemod/db-factory.ts +0 -810
  601. package/src/scripts/codemod/feature-factory.ts +0 -429
  602. package/src/scripts/codemod/feature-layout.ts +0 -424
  603. package/src/scripts/codemod/import-extensions.ts +0 -118
  604. package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
  605. package/src/scripts/codemod/migrate-db-raw.ts +0 -401
  606. package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
  607. package/src/scripts/codemod/object-form.ts +0 -746
  608. package/src/scripts/codemod/package-merge.ts +0 -299
  609. package/src/scripts/codemod/pii-personal-migration.ts +0 -816
  610. package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
  611. package/src/scripts/codemod/s3-imports.ts +0 -236
  612. package/src/scripts/codemod/tenant-db-options.ts +0 -454
  613. package/src/scripts/codemod/testing-injection.ts +0 -215
  614. package/src/scripts/codemod/testing-move-targets.ts +0 -161
  615. package/src/scripts/codemod/testing-move.ts +0 -542
  616. package/src/scripts/codemod/unprocessable-error-details-reason.ts +0 -411
@@ -1,5 +1,5 @@
1
+ import type { EntityDefinition, FieldDefinition } from "@cosmicdrift/kumiko-types/fields";
1
2
  import * as z from "zod";
2
- import type { EntityDefinition, FieldDefinition } from "./types/index.ts";
3
3
  export declare function isRepresentableAtScale(n: number, scale: number): boolean;
4
4
  export declare function fieldToZod(field: FieldDefinition, currencies: readonly string[], opts?: {
5
5
  readonly applyDefaults?: boolean;
@@ -3,8 +3,8 @@ import { moneyPayloadToMinorUnits } from "../db/money.js";
3
3
  import { isValidIanaTimeZone } from "../time/index.js";
4
4
  import { assertUnreachable } from "../utils/index.js";
5
5
  import { withDerivedCells } from "./embedded-derived.js";
6
+ import { DEFAULT_CURRENCIES } from "./field-helpers.js";
6
7
  import { isValidIban } from "./iban.js";
7
- import { DEFAULT_CURRENCIES } from "./types/index.js";
8
8
  const MONTH_PATTERN = /^\d{4}-(0[1-9]|1[0-2])$/;
9
9
  // True if `n` carries at most `scale` decimal places. A relative epsilon
10
10
  // tolerates float artifacts (`0.1 + 0.2 = 0.30000000000000004` is accepted at
@@ -1,3 +1,4 @@
1
- import type { FieldDefinition, ScreenFilterOp } from "./types/index.ts";
1
+ import type { FieldDefinition } from "@cosmicdrift/kumiko-types/fields";
2
+ import type { ScreenFilterOp } from "@cosmicdrift/kumiko-types/screen";
2
3
  export declare function getAllowedFilterOps(field: FieldDefinition): readonly ScreenFilterOp[];
3
4
  export declare function isFieldFilterable(field: FieldDefinition): boolean;
@@ -1,8 +1,3 @@
1
- // Screen-Filter — operator-to-field-type compatibility.
2
- //
3
- // Allowed operators depend on the field type:
4
- // - text/select/multiSelect: equality operators only (eq, ne, in). lt/gt
5
- // on strings are usually accidental; authors can simply omit the filter.
6
1
  // - boolean: eq, ne (in/lt/gt are meaningless for a two-value type).
7
2
  // - number/money/decimal/date/timestamp/locatedTimestamp: all 7 operators,
8
3
  // because these fields are naturally comparable.
@@ -1,5 +1,5 @@
1
+ import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
1
2
  import type { ConfigKeyDefinition, JobDefinition, JobHandlerFn } from "./types/config.ts";
2
- import type { EntityDefinition } from "./types/index.ts";
3
3
  export declare const SOFT_DELETE_CLEANUP_JOB = "soft-delete:job:cleanup";
4
4
  export declare const SOFT_DELETE_CLEANUP_SYSTEM_JOB = "soft-delete:job:cleanup-system";
5
5
  export declare const SOFT_DELETE_GRACE_DAYS_KEY = "soft-delete:config:grace-days";
@@ -49,7 +49,7 @@ function isGlobalTenancyTable(table) {
49
49
  return asEntityTableMeta(table)?.tenancy === "global";
50
50
  }
51
51
  async function resolveGraceDays(ctx, tenantId, db) {
52
- const resolved = await ctx.configResolver?.get(SOFT_DELETE_GRACE_DAYS_KEY, softDeleteGraceDaysConfig, tenantId, SYSTEM_USER_ID, db);
52
+ const resolved = await ctx.services.configResolver?.get(SOFT_DELETE_GRACE_DAYS_KEY, softDeleteGraceDaysConfig, tenantId, SYSTEM_USER_ID, db);
53
53
  return typeof resolved === "number" && resolved >= 1 ? resolved : DEFAULT_GRACE_DAYS;
54
54
  }
55
55
  export const softDeleteCleanupJob = async (_payload, ctx) => {
@@ -102,8 +102,8 @@ async function purgeExpiredRows(writer, source, table, where, cutoff, ctx, readD
102
102
  table,
103
103
  where,
104
104
  expiredBefore: cutoff,
105
- files: ctx.files,
106
- log: ctx.log,
105
+ files: ctx.services.files,
106
+ log: ctx.obs.log,
107
107
  forgetRow: (id) => forgetRow(writer, id),
108
108
  });
109
109
  }
@@ -122,7 +122,7 @@ async function forgetExpiredPages(writer, source, table, where, ctx, readDb) {
122
122
  await forgetRow(writer, row.id);
123
123
  }
124
124
  catch (err) {
125
- ctx.log?.warn(`[soft-delete-cleanup] ${source} ${row.id} not purged: ${err instanceof Error ? err.message : String(err)}`);
125
+ ctx.obs.log.warn(`[soft-delete-cleanup] ${source} ${row.id} not purged: ${err instanceof Error ? err.message : String(err)}`);
126
126
  }
127
127
  }
128
128
  afterId = last.id;
@@ -1,4 +1,5 @@
1
- import { buildInvalidTransitionDetails, FrameworkReasons, UnprocessableError, } from "../errors/index.js";
1
+ import { FrameworkReasons, UnprocessableError } from "../errors/index.js";
2
+ import { buildInvalidTransitionDetails } from "../errors/transition-details.js";
2
3
  /**
3
4
  * Defines allowed state transitions. Returns a typed graph (see
4
5
  * TransitionGraph), not a Map. This makes `transitions[x]` access a
@@ -34,7 +34,7 @@ export function warnOnNarrowedForeignTenantFilter(ctx, stepKind, stepName, where
34
34
  // skip: every requested tenant is within the caller's scope.
35
35
  if (requestedList.every((t) => typeof t === "string" && allowed.includes(t)))
36
36
  return;
37
- ctx.log?.warn(`${stepKind} "${stepName}": where.tenantId is outside the caller's tenant scope and was narrowed`, {
37
+ ctx.obs.log.warn(`${stepKind} "${stepName}": where.tenantId is outside the caller's tenant scope and was narrowed`, {
38
38
  step: stepKind,
39
39
  name: stepName,
40
40
  hint: "pass unsafeAllTenants: { reason } (with an escapeHatch on the handler) to read across tenants",
@@ -1,7 +1,7 @@
1
1
  // r.step.aggregate.appendEvent — write an additional domain-event onto
2
2
  // an existing aggregate stream.
3
3
  //
4
- // Wraps ctx.unsafeAppendEvent: the event lands on the named aggregate
4
+ // Wraps ctx.events.unsafeAppend: the event lands on the named aggregate
5
5
  // stream in the active TX, downstream projections (multiStreamProjection)
6
6
  // fire, audit-trail captures it. Used when a write-handler needs to
7
7
  // record a domain event that's NOT one of the auto-generated CRUD
@@ -29,7 +29,7 @@ defineStep({
29
29
  const aggregateId = resolveRequired(args.aggregateId, ctx);
30
30
  const payload = resolveRequired(args.payload, ctx);
31
31
  const headers = resolveOptional(args.headers, ctx);
32
- await ctx.unsafeAppendEvent({
32
+ await ctx.events.unsafeAppend({
33
33
  aggregateId,
34
34
  aggregateType: args.aggregateType,
35
35
  type: args.type,
@@ -11,8 +11,8 @@ defineStep({
11
11
  run: async (args, ctx) => {
12
12
  const payload = resolveRequired(args.payload, ctx);
13
13
  const result = args.as
14
- ? await ctx.writeAs(args.as, args.handler, payload)
15
- : await ctx.write(args.handler, payload);
14
+ ? await ctx.dispatch.writeAs(args.as, args.handler, payload)
15
+ : await ctx.dispatch.write(args.handler, payload);
16
16
  if (!result.isSuccess) {
17
17
  // Preserve the structured WriteFailure as `cause` so the
18
18
  // dispatcher's catch maps it back to a typed error response
@@ -13,7 +13,7 @@ defineStep({
13
13
  const subject = resolveRequired(args.subject, ctx);
14
14
  const body = resolveRequired(args.body, ctx);
15
15
  const from = resolveOptional(args.from, ctx);
16
- await ctx.unsafeAppendEvent({
16
+ await ctx.events.unsafeAppend({
17
17
  aggregateId: randomUUID(),
18
18
  aggregateType: STEP_DISPATCH_AGGREGATE_TYPE,
19
19
  type: STEP_DISPATCH_REQUESTED_TYPE,
@@ -43,7 +43,7 @@ defineStep({
43
43
  });
44
44
  const backoffMs = calculateBackoff(attempt, args.backoff);
45
45
  const wakeAt = Temporal.Now.instant().add({ milliseconds: backoffMs }).toString();
46
- await ctx.unsafeAppendEvent({
46
+ await ctx.events.unsafeAppend({
47
47
  aggregateId: ctx.workflow.runId,
48
48
  aggregateType: WORKFLOW_AGGREGATE_TYPE,
49
49
  type: WORKFLOW_RETRY_SCHEDULED_TYPE,
@@ -38,7 +38,7 @@ defineStep({
38
38
  const resolvedMatch = resolveOptional(args.match, ctx);
39
39
  const now = Temporal.Now.instant().toString();
40
40
  const timeoutAt = timeout.startsWith("P") || timeout.startsWith("PT") ? addDuration(now, timeout) : timeout;
41
- await ctx.unsafeAppendEvent({
41
+ await ctx.events.unsafeAppend({
42
42
  aggregateId: ctx.workflow.runId,
43
43
  aggregateType: WORKFLOW_AGGREGATE_TYPE,
44
44
  type: WORKFLOW_WAITING_FOR_EVENT_TYPE,
@@ -24,7 +24,7 @@ defineStep({
24
24
  const duration = resolveRequired(args.for, ctx);
25
25
  const now = Temporal.Now.instant().toString();
26
26
  const wakeAt = duration.startsWith("P") || duration.startsWith("PT") ? addDuration(now, duration) : duration;
27
- await ctx.unsafeAppendEvent({
27
+ await ctx.events.unsafeAppend({
28
28
  aggregateId: ctx.workflow.runId,
29
29
  aggregateType: WORKFLOW_AGGREGATE_TYPE,
30
30
  type: WORKFLOW_WAITING_TYPE,
@@ -18,7 +18,7 @@ defineStep({
18
18
  const url = resolveRequired(args.url, ctx);
19
19
  const headers = resolveOptional(args.headers, ctx) ?? {};
20
20
  const body = resolveOptional(args.body, ctx);
21
- await ctx.unsafeAppendEvent({
21
+ await ctx.events.unsafeAppend({
22
22
  aggregateId: randomUUID(),
23
23
  aggregateType: STEP_DISPATCH_AGGREGATE_TYPE,
24
24
  type: STEP_DISPATCH_REQUESTED_TYPE,
@@ -1,5 +1,6 @@
1
+ import type { TemplateImagesVariableDef, TemplateListVariableDef, TemplateScalarVariableDef, TemplateVariables } from "@cosmicdrift/kumiko-types/config";
1
2
  import * as z from "zod";
2
- import type { Registry, TemplateImagesVariableDef, TemplateListVariableDef, TemplateScalarVariableDef, TemplateVariables } from "./types/index.ts";
3
+ import type { Registry } from "./types/index.ts";
3
4
  type CommonOptions = {
4
5
  readonly label?: string;
5
6
  readonly required?: boolean;
@@ -1,4 +1,4 @@
1
- import type { EntityDefinition } from "./types/index.ts";
1
+ import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
2
2
  export declare const MAX_TRANSFER_DEPTH = 5;
3
3
  export type TransferEdgeLink = {
4
4
  readonly kind: "parentRef";
@@ -1,31 +1,8 @@
1
- export { isAgentVisibleScreen, resolveAgentExposure, } from "@cosmicdrift/kumiko-types/agent-exposure";
2
- export type { ConfigAccessor, ConfigAccessorFactory, ConfigBacking, ConfigBounds, ConfigCascade, ConfigCascadeLevel, ConfigComputedContext, ConfigComputedFn, ConfigDefinition, ConfigKeyAccess, ConfigKeyDefinition, ConfigKeyHandle, ConfigKeyType, ConfigMask, ConfigResolver, ConfigSecretsReader, ConfigSeedDef, ConfigStoredRow, ConfigStoredRowWithSource, ConfigValidateContext, ConfigValidateFn, ConfigValue, ConfigValueSource, ConfigValueWithSource, CreateSeedOptions, CreateTenantSeedOptions, CreateUserSeedOptions, ExtensionSelectorDef, ExtensionSelectorPanel, JobBackoff, JobBackoffStrategy, JobDefinition, JobHandlerFn, JobRunIn, JobTrigger, MaxPerTenantOptions, NotificationDataFn, NotificationDefinition, NotificationLocalizedTemplate, NotificationRecipientFn, NotificationRecordMapping, NotificationTemplateBody, NotificationTemplateFn, NotificationTemplateMeta, PluralForms, ReferenceDataDef, RegistrarExtensionDef, RegistrarExtensionHooks, RegistrarExtensionRegistration, RunIn, TemplateImagesVariableDef, TemplateListVariableDef, TemplateScalarVariableDef, TemplateVariableDef, TemplateVariables, TranslationEntry, TranslationKeys, TranslationsDef, TranslationValue, UiExtensionDef, } from "@cosmicdrift/kumiko-types/config";
3
- export type { QueryHandlerDefinition, StreamHandlerDefinition, WriteHandlerDefinition, WriteHandlerInput, } from "@cosmicdrift/kumiko-types/define-handler";
4
- export type { EntityCrudRegistrar, EntityCrudVerb, EntityHandlerOptions, EntityQueryHandlerOptions, EntityWriteHandlerOptions, RegisterEntityCrudOptions, } from "@cosmicdrift/kumiko-types/entity-handlers";
5
- export type { KumikoEntityTypeMap, KumikoEventTypeMap, KumikoHandlerPayloadMap, KumikoHandlerResultMap, } from "@cosmicdrift/kumiko-types/event-type-map";
6
- export type { ExtensionOptionsArgs, ExtensionOptionsFor, KumikoExtensionOptionsMap, } from "@cosmicdrift/kumiko-types/extension-options-map";
7
- export type { BootCheckContext, BootCheckFn, BootOptionName, FeatureDefinition, FeatureMetricDef, FeatureMetricType, MetricOptions, Registry, SecretKeyDefinition, SecretKeyHandle, SecretNamespaceDefinition, SecretNamespaceHandle, SecretNamespaceOptions, SecretOptions, StackBootRequirement, StoreTableDef, StoreTableEntry, StoreTableOptions, UiHintOption, UiHints, } from "@cosmicdrift/kumiko-types/feature";
8
- export type { EntityObjectDefinition, FeatureRegistrar, HookDefinition, } from "@cosmicdrift/kumiko-types/feature-registrar";
9
- export type { FieldIconKey } from "@cosmicdrift/kumiko-types/field-icon";
10
- export type { AnyFileFieldDef, BigIntFieldDef, BooleanFieldDef, ClientDerivedFieldDef, DateFieldDef, DecimalFieldDef, DefaultCurrency, DeriveContext, DerivedFieldDef, DerivedFieldsMap, DerivedValueType, EmbeddedDerivedCellDef, EmbeddedFieldDef, EmbeddedSubFieldDef, EntityDefinition, EntityEventMigration, EntityFieldDefinition, EntityIndexDef, EntityLongTextFieldDef, EntityTextFieldDef, FieldAccess, FieldDefinition, FieldsMap, FileFieldDef, FilesFieldDef, Findability, ImageFieldDef, ImagesFieldDef, JsonbFieldDef, LocatedTimestampFieldDef, LongTextFieldDef, LongTextFindability, MoneyCurrencySource, MoneyFieldDef, MultiSelectFieldDef, NumberFieldDef, OptionsQueryPayload, OptionsQueryPayloadValue, ParentRefDef, PersonalAnnotations, PersonalAnnotationsLongText, PersonalAnnotationsNoFind, PersonalSubject, ReferenceFieldDef, ResolvedPiiFlags, ResolvedPiiStance, RetentionDef, SelectFieldDef, SelectOptionTone, TextFieldDef, TimestampFieldDef, TransitionMap, TzFieldDef, } from "@cosmicdrift/kumiko-types/fields";
11
- export type { AccessRule, ActiveMembership, ActiveMembershipRejection, ActiveMembershipResult, AgentExposure, AgentHandlerHints, AgentRisk, AggregateStreamHandle, AppContext, AppendEventArgs, AppendEventFn, AuthClaimsContext, AuthClaimsFn, AuthClaimsHookDef, BeforeTransactionPhase, BeforeTransactionResult, CamelToKebab, ChatSendFailureCode, ClaimKeyDefinition, ClaimKeyHandle, ClaimKeyJsType, ClaimKeyType, DeclarativeEventMigration, DeliveryErrorCode, DeliveryFailureCode, DeliverySkipReason, DispatchWriteRef, EntityRef, EscapeHatchAuditSink, EscapeHatchDeclaration, EscapeHatchKind, EscapeHatchReporter, EscapeHatchTarget, EscapeHatchUseEvent, EventDef, EventMigrationDef, EventPiiFields, EventPiiStance, EventUpcastCtx, EventUpcastFn, FetchForWritingArgs, HandlerContext, HandlerRef, JobContext, JobDeferral, JobRunnerRef, JobTriggerEvent, MemberReader, NameOrRef, NotifyDeferred, NotifyDelivery, NotifyDeliveryStatus, NotifyDispatched, NotifyFactory, NotifyFn, NotifyJobDispatcher, NotifyOptions, NotifyPriority, NotifyResult, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, PayloadBucketNormalization, PayloadRateLimitOption, PreparedWriteEvent, QualifiedEventName, QueryEvent, QueryHandlerDef, QueryHandlerFn, RateLimitDeclaration, RateLimitDisabled, RateLimitOption, RateLimitOptions, RateLimitPer, RoleAccessPersonalData, RoleAccessRule, SessionUser, SessionUserOrigin, StreamHandlerDef, StreamHandlerFn, TenantWriteTarget, TryAppendEventFn, TryAppendEventResult, UnsafeAppendEventFn, WriteEvent, WriteHandlerDef, WriteHandlerFn, WriteResult, } from "@cosmicdrift/kumiko-types/handlers";
12
- export { DELIVERY_FAILURE_CODES, DELIVERY_SKIP_REASONS, declaredRateLimitOptions, HTTP_ERROR_CODE_PATTERN, isDeliveryErrorCode, isOpenToAllGranted, isRateLimitDisabled, isRateLimitOption, isUiAccessGranted, } from "@cosmicdrift/kumiko-types/handlers";
13
- export type { DeleteContext, EntityHookMap, HookMap, HookOwner, HookPhase, LifecycleHookFn, LifecycleResult, OwnedFn, PhasedHook, PostDeleteBatchHookFn, PostDeleteHookFn, PostQueryHookFn, PostSaveBatchHookFn, PostSaveHookFn, PreDeleteHookFn, PreQueryHookFn, PreSaveHookFn, SaveContext, SearchPayloadContributorFn, ValidationError, ValidationHookFn, } from "@cosmicdrift/kumiko-types/hooks";
14
- export type { HttpRouteDefinition, HttpRouteHandler, HttpRouteHandlerDeps, HttpRouteMethod, } from "@cosmicdrift/kumiko-types/http-route";
15
- export type { EntityId, TenantId } from "@cosmicdrift/kumiko-types/identifiers";
16
- export { isSystemTenant, isUuid, parseTenantId, SYSTEM_TENANT_ID, } from "@cosmicdrift/kumiko-types/identifiers";
17
- export type { ContentCollectionDefinition, NavDefinition, NavIconKey, } from "@cosmicdrift/kumiko-types/nav";
18
- export type { FromRule, FromRuleKind, OwnershipClause, OwnershipMap, OwnershipRef, OwnershipRule, SqlFragment, WhereRule, WhereRuleContext, } from "@cosmicdrift/kumiko-types/ownership";
19
- export type { EntityProjectionExtension, MspErrorMode, MspErrorPolicy, MultiStreamApplyFn, MultiStreamProjectionDefinition, ProjectionDefinition, ProjectionRowIdOf, ProjectionTable, SingleStreamApplyFn, } from "@cosmicdrift/kumiko-types/projection";
20
- export type { BelongsToRelation, EntityRelations, HasManyRelation, ManyToManyRelation, RelationDefinition, } from "@cosmicdrift/kumiko-types/relations";
21
- export type { ActionFormScreenDefinition, BundledListsOptions, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardCurrencyFormat, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelGate, DashboardPanelVisibility, DashboardProgressListPanel, DashboardProgressTone, DashboardRecordBinding, DashboardRefresh, DashboardRelativeTimeFormat, DashboardRelativeTimeParam, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardText, DashboardTextBlock, DashboardTextPanel, DashboardTextParam, DashboardValueFormat, EditExtensionSection, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityListExpandableRow, EntityListScreenDefinition, ExpandableRowGrouping, FieldCondition, FieldFormatRegistry, FieldRenderer, FormatSpec, FormFieldDerivation, FormWidth, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListPaginationMode, ListSortDir, ListSortSpec, ListTableOptions, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSpec, RecordHeaderSubtitlePart, RowAction, RowActionNavigate, RowActionNavigateBase, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenNavSugar, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, UnitKey, } from "@cosmicdrift/kumiko-types/screen";
22
- export { relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
23
- export type { TargetRef } from "@cosmicdrift/kumiko-types/target-ref";
24
- export type { Subscribe, TreeAction, TreeActionDef, TreeActionsHandle, TreeChildrenSubscribe, TreeNode, TreeNodeState, } from "@cosmicdrift/kumiko-types/tree-node";
25
- export type { WebSocketConnection, WebSocketMessageData, WebSocketRouteConnectDeps, WebSocketRouteDefinition, WebSocketSessionHandlers, } from "@cosmicdrift/kumiko-types/websocket-route";
26
- export type { WorkspaceDefinition } from "@cosmicdrift/kumiko-types/workspace";
27
- export type { ConcurrencyMode, ConfigScope, LifecycleHookType, OnDeleteStrategy, } from "../constants.ts";
28
- export { DEFAULT_CURRENCIES, DEFAULT_LOCALES, isFileField } from "../field-helpers.ts";
29
- export { resolveName, withResponseData } from "../handler-helpers.ts";
30
- export { HookPhases } from "../hook-helpers.ts";
31
- export { isExtensionEditSection, isFormatSpec, normalizeEditField, normalizeListColumn, } from "../screen-helpers.ts";
1
+ export type { JobRunIn } from "@cosmicdrift/kumiko-types/config";
2
+ export type { FeatureDefinition, Registry, } from "@cosmicdrift/kumiko-types/feature";
3
+ export type { ReferenceFieldDef, TextFieldDef, } from "@cosmicdrift/kumiko-types/fields";
4
+ export type { AppContext, BeforeTransactionContext, ContextServices, EventPiiStance, HandlerAuth, HandlerContext, HandlerDb, HandlerDispatch, HandlerEvents, HandlerLifecycle, HandlerObservability, HandlerTenants, JobDispatch, JobEvents, JobLifecycle, JobObservability, QueryEvent, ReservationContext, SessionUser, } from "@cosmicdrift/kumiko-types/handlers";
5
+ export type { TenantId } from "@cosmicdrift/kumiko-types/identifiers";
6
+ export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-types/identifiers";
7
+ export type { WhereRule } from "@cosmicdrift/kumiko-types/ownership";
8
+ export type { WebSocketConnection, WebSocketRouteDefinition, } from "@cosmicdrift/kumiko-types/websocket-route";
@@ -1,10 +1,2 @@
1
- // Barrel: re-exports all types from @cosmicdrift/kumiko-types, plus the
2
- // runtime helpers below that stay framework-side.
3
- export { isAgentVisibleScreen, resolveAgentExposure, } from "@cosmicdrift/kumiko-types/agent-exposure";
4
- export { DELIVERY_FAILURE_CODES, DELIVERY_SKIP_REASONS, declaredRateLimitOptions, HTTP_ERROR_CODE_PATTERN, isDeliveryErrorCode, isOpenToAllGranted, isRateLimitDisabled, isRateLimitOption, isUiAccessGranted, } from "@cosmicdrift/kumiko-types/handlers";
5
- export { isSystemTenant, isUuid, parseTenantId, SYSTEM_TENANT_ID, } from "@cosmicdrift/kumiko-types/identifiers";
6
- export { relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
7
- export { DEFAULT_CURRENCIES, DEFAULT_LOCALES, isFileField } from "../field-helpers.js";
8
- export { resolveName, withResponseData } from "../handler-helpers.js";
9
- export { HookPhases } from "../hook-helpers.js";
10
- export { isExtensionEditSection, isFormatSpec, normalizeEditField, normalizeListColumn, } from "../screen-helpers.js";
1
+ export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-types/identifiers";
2
+ // Re-export types that were duplicated in types.ts but are canonical in constants.ts
@@ -1,3 +1,4 @@
1
- import type { Registry, ValidationError } from "./types/index.ts";
1
+ import type { ValidationError } from "@cosmicdrift/kumiko-types/hooks";
2
+ import type { Registry } from "./types/index.ts";
2
3
  export type { ValidationError };
3
4
  export declare function runValidation(registry: Registry, hookName: string, data: Readonly<Record<string, unknown>>): readonly ValidationError[] | null;
@@ -1,39 +1,16 @@
1
1
  import type { Hono } from "hono";
2
2
  import type { AuthRoutesConfig } from "../api/auth-routes.ts";
3
- import type { JwtHelper, JwtKeyring } from "../api/jwt.ts";
3
+ import type { JwtHelper } from "../api/jwt.ts";
4
4
  import type { ServerOptions } from "../api/server.ts";
5
5
  import type { SseBroker } from "../api/sse-broker.ts";
6
- import type { PgClient, PgListenClient } from "../db/connection.ts";
7
- import type { AppContext, Registry } from "../engine/types/index.ts";
8
- import type { JobRunner, JobRunnerOptions } from "../jobs/job-runner.ts";
6
+ import type { AppContext } from "../engine/types/index.ts";
7
+ import type { JobRunner } from "../jobs/job-runner.ts";
9
8
  import type { Lifecycle } from "../lifecycle/index.ts";
10
9
  import type { ObservabilityProvider } from "../observability/index.ts";
11
- import type { Dispatcher, DispatcherOptions } from "../pipeline/dispatcher.ts";
12
- import type { EventDedup, EventDispatcher } from "../pipeline/index.ts";
13
- import type { LifecycleHooks, SystemHooks } from "../pipeline/lifecycle-pipeline.ts";
14
- export type BaseEntrypointOptions = {
15
- readonly registry: Registry;
16
- readonly context: AppContext;
17
- readonly jwtSecret: string | JwtKeyring;
18
- readonly jwtIssuer?: string;
19
- readonly observability?: ObservabilityProvider;
20
- readonly dispatcherOptions?: Omit<DispatcherOptions, "lifecycle">;
21
- readonly systemHooks?: SystemHooks;
22
- readonly eventDedup?: EventDedup;
23
- readonly lifecycle?: Lifecycle;
24
- readonly instanceId?: ServerOptions["instanceId"];
25
- };
26
- type JobsBlock = {
27
- readonly redisUrl: string;
28
- readonly queueNamePrefix?: string;
29
- readonly getActiveTenantIds?: JobRunnerOptions["getActiveTenantIds"];
30
- readonly onJobStart?: JobRunnerOptions["onJobStart"];
31
- readonly onJobComplete?: JobRunnerOptions["onJobComplete"];
32
- readonly onJobFailed?: JobRunnerOptions["onJobFailed"];
33
- readonly onJobDeferred?: JobRunnerOptions["onJobDeferred"];
34
- readonly onJobQueued?: JobRunnerOptions["onJobQueued"];
35
- readonly onJobDropped?: JobRunnerOptions["onJobDropped"];
36
- };
10
+ import type { Dispatcher } from "../pipeline/dispatcher.ts";
11
+ import type { EventDispatcher } from "../pipeline/index.ts";
12
+ import type { LifecycleHooks } from "../pipeline/lifecycle-pipeline.ts";
13
+ import type { AllInOneEntrypointOptions, BaseEntrypointOptions, JobsBlock, WorkerEntrypointOptions } from "./internals.ts";
37
14
  export type ApiEntrypointOptions = BaseEntrypointOptions & {
38
15
  readonly auth?: AuthRoutesConfig;
39
16
  readonly anonymousAccess?: ServerOptions["anonymousAccess"];
@@ -52,10 +29,6 @@ export type ApiEntrypointOptions = BaseEntrypointOptions & {
52
29
  readonly trustedProxyHops?: ServerOptions["trustedProxyHops"];
53
30
  readonly errorDocs?: ServerOptions["errorDocs"];
54
31
  };
55
- export type WorkerEntrypointOptions = BaseEntrypointOptions & JobsBlock & {
56
- readonly eventDispatcher?: ServerOptions["eventDispatcher"];
57
- };
58
- export type AllInOneEntrypointOptions = ApiEntrypointOptions & WorkerEntrypointOptions;
59
32
  export type ApiEntrypoint = {
60
33
  readonly app: Hono;
61
34
  readonly jwt: JwtHelper;
@@ -87,4 +60,3 @@ export type AllInOneEntrypoint = Omit<ApiEntrypoint, "mode"> & Omit<WorkerEntryp
87
60
  export declare function createApiEntrypoint(options: ApiEntrypointOptions): ApiEntrypoint;
88
61
  export declare function createWorkerEntrypoint(options: WorkerEntrypointOptions): WorkerEntrypoint;
89
62
  export declare function createAllInOneEntrypoint(options: AllInOneEntrypointOptions): AllInOneEntrypoint;
90
- export type { PgClient, PgListenClient };
@@ -47,6 +47,7 @@ import { createLifecycle } from "../lifecycle/index.js";
47
47
  import { createNoopProvider } from "../observability/index.js";
48
48
  import { dispatcherToWriteRef } from "../pipeline/dispatcher.js";
49
49
  import { resolveCacheSyncBus } from "../redis/cache-sync-bus.js";
50
+ import { assertEntrypointRowLevelSecurityMode } from "./row-level-security-mode-check.js";
50
51
  // --- Shared builders ------------------------------------------------------
51
52
  //
52
53
  // Three factories, three near-identical buildServer() + createJobRunner()
@@ -95,7 +96,7 @@ function contextWithObservability(context, observability, effectiveFeatures) {
95
96
  return {
96
97
  ...context,
97
98
  // Same source of truth as buildServer's contextWithObservability
98
- // (api/server.ts) — job handlers reading ctx.effectiveFeatures should
99
+ // (api/server.ts) — job handlers reading ctx.services.effectiveFeatures should
99
100
  // see the same resolver as command handlers, not just dispatcherOptions.
100
101
  ...(effectiveFeatures && { effectiveFeatures }),
101
102
  tracer: observability.tracer,
@@ -199,6 +200,7 @@ function requireDispatcher(server, mode) {
199
200
  }
200
201
  // --- API entrypoint -------------------------------------------------------
201
202
  export function createApiEntrypoint(options) {
203
+ assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
202
204
  const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
203
205
  const observability = resolveObservability(options.observability);
204
206
  const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
@@ -267,6 +269,7 @@ export function createApiEntrypoint(options) {
267
269
  }
268
270
  // --- Worker entrypoint ----------------------------------------------------
269
271
  export function createWorkerEntrypoint(options) {
272
+ assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
270
273
  const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
271
274
  const observability = resolveObservability(options.observability);
272
275
  const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
@@ -293,6 +296,7 @@ export function createWorkerEntrypoint(options) {
293
296
  }
294
297
  // --- All-in-one entrypoint ------------------------------------------------
295
298
  export function createAllInOneEntrypoint(options) {
299
+ assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
296
300
  const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
297
301
  const observability = resolveObservability(options.observability);
298
302
  const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
@@ -339,3 +343,5 @@ export function createAllInOneEntrypoint(options) {
339
343
  },
340
344
  };
341
345
  }
346
+ // Re-exported so callers of ServerOptions.eventDispatcher can name the
347
+ // LISTEN client type it references.
@@ -0,0 +1,40 @@
1
+ import type { JwtKeyring } from "../api/jwt.ts";
2
+ import type { ServerOptions } from "../api/server.ts";
3
+ import type { RowLevelSecurityMode } from "../db/render-rls-ddl.ts";
4
+ import type { AppContext, Registry } from "../engine/types/index.ts";
5
+ import type { JobRunnerOptions } from "../jobs/job-runner.ts";
6
+ import type { Lifecycle } from "../lifecycle/index.ts";
7
+ import type { ObservabilityProvider } from "../observability/index.ts";
8
+ import type { DispatcherOptions } from "../pipeline/dispatcher.ts";
9
+ import type { EventDedup } from "../pipeline/event-dedup.ts";
10
+ import type { SystemHooks } from "../pipeline/lifecycle-pipeline.ts";
11
+ import type { ApiEntrypointOptions } from "./index.ts";
12
+ export type BaseEntrypointOptions = {
13
+ readonly registry: Registry;
14
+ readonly context: AppContext;
15
+ readonly jwtSecret: string | JwtKeyring;
16
+ readonly jwtIssuer?: string;
17
+ readonly observability?: ObservabilityProvider;
18
+ readonly dispatcherOptions?: Omit<DispatcherOptions, "lifecycle">;
19
+ readonly systemHooks?: SystemHooks;
20
+ readonly eventDedup?: EventDedup;
21
+ readonly lifecycle?: Lifecycle;
22
+ readonly instanceId?: ServerOptions["instanceId"];
23
+ /** Must equal the mode of `context.db`; default "off". */
24
+ readonly rowLevelSecurity?: RowLevelSecurityMode;
25
+ };
26
+ export type JobsBlock = {
27
+ readonly redisUrl: string;
28
+ readonly queueNamePrefix?: string;
29
+ readonly getActiveTenantIds?: JobRunnerOptions["getActiveTenantIds"];
30
+ readonly onJobStart?: JobRunnerOptions["onJobStart"];
31
+ readonly onJobComplete?: JobRunnerOptions["onJobComplete"];
32
+ readonly onJobFailed?: JobRunnerOptions["onJobFailed"];
33
+ readonly onJobDeferred?: JobRunnerOptions["onJobDeferred"];
34
+ readonly onJobQueued?: JobRunnerOptions["onJobQueued"];
35
+ readonly onJobDropped?: JobRunnerOptions["onJobDropped"];
36
+ };
37
+ export type WorkerEntrypointOptions = BaseEntrypointOptions & JobsBlock & {
38
+ readonly eventDispatcher?: ServerOptions["eventDispatcher"];
39
+ };
40
+ export type AllInOneEntrypointOptions = ApiEntrypointOptions & WorkerEntrypointOptions;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import { type RowLevelSecurityMode } from "../db/render-rls-ddl.ts";
2
+ import type { AppContext } from "../engine/types/index.ts";
3
+ export declare function assertEntrypointRowLevelSecurityMode(context: AppContext, declared: RowLevelSecurityMode | undefined): void;
@@ -0,0 +1,19 @@
1
+ import { DEFAULT_ROW_LEVEL_SECURITY_MODE, } from "../db/render-rls-ddl.js";
2
+ import { rowLevelSecurityModeOf } from "../db/row-level-security-connection.js";
3
+ import { InternalError } from "../errors/index.js";
4
+ // The mode lives on the connection; the option states what the app config declared.
5
+ // A mismatch means the pools were opened for a different mode than the one the
6
+ // schema was applied for, which silently drops or over-applies tenant isolation.
7
+ export function assertEntrypointRowLevelSecurityMode(context, declared) {
8
+ // skip: entrypoint has no db to check
9
+ if (context.db === undefined)
10
+ return;
11
+ const expected = declared ?? DEFAULT_ROW_LEVEL_SECURITY_MODE;
12
+ const actual = rowLevelSecurityModeOf(context.db);
13
+ if (actual !== expected) {
14
+ throw new InternalError({
15
+ message: `Entrypoint rowLevelSecurity is "${expected}" but the database connection runs in "${actual}" mode; open the pools with the same mode`,
16
+ details: { expected, actual },
17
+ });
18
+ }
19
+ }
@@ -0,0 +1,10 @@
1
+ export type DryRunOptions = {
2
+ /** From composeEnvSchema. Drives the per-row feature-attribution. */
3
+ readonly sources?: Readonly<Record<string, string>>;
4
+ /** Prefix for `pulumi config set <prefix>…` keys. Default "". */
5
+ readonly pulumiPrefix?: string;
6
+ /** k8s Secret name. Default "kumiko-env". */
7
+ readonly k8sName?: string;
8
+ /** k8s namespace. Default "default". */
9
+ readonly k8sNamespace?: string;
10
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,4 @@
1
+ import type { DryRunOptions } from "./dry-run-internals.ts";
1
2
  import { type ComposedEnvSchema, type EnvFieldInspection } from "./index.ts";
2
3
  export type DryRunMode = "human" | "json" | "pulumi" | "k8s";
3
4
  /** `boot` runs the boot validators without connecting anywhere; the other
@@ -10,16 +11,6 @@ export declare function parseDryRunEnvMode(raw: string | undefined): DryRunEnvMo
10
11
  /** True while any dry-run mode is requested, for code that runs at module
11
12
  * load (key providers, secret derivation) and must not throw on missing env. */
12
13
  export declare function isDryRunEnvActive(env: Readonly<Record<string, string | undefined>>): boolean;
13
- export type DryRunOptions = {
14
- /** From composeEnvSchema. Drives the per-row feature-attribution. */
15
- readonly sources?: Readonly<Record<string, string>>;
16
- /** Prefix for `pulumi config set <prefix>…` keys. Default "". */
17
- readonly pulumiPrefix?: string;
18
- /** k8s Secret name. Default "kumiko-env". */
19
- readonly k8sName?: string;
20
- /** k8s namespace. Default "default". */
21
- readonly k8sNamespace?: string;
22
- };
23
14
  export declare function renderDryRun(composed: ComposedEnvSchema, mode: DryRunMode, options?: DryRunOptions): string;
24
15
  /** Table for `KUMIKO_DRY_RUN_ENV=boot`: one row per variable with its source,
25
16
  * whether it is required, and whether it is set. Values are never printed. */
@@ -8,7 +8,8 @@
8
8
  // The same schema introspection (`classifyField`, `readKumikoMeta`) used
9
9
  // by parseEnv drives the output here — single source of truth.
10
10
  import { zodShape } from "./_zod-introspect.js";
11
- import { classifyField, getDefaultValue, getFieldDescription, pulumiConfigKey, readKumikoMeta, } from "./index.js";
11
+ import { classifyField, readKumikoMeta, } from "./index.js";
12
+ import { getDefaultValue, getFieldDescription, pulumiConfigKey } from "./internals.js";
12
13
  export const DRY_RUN_ENV_VAR = "KUMIKO_DRY_RUN_ENV";
13
14
  /** Reads `KUMIKO_DRY_RUN_ENV`. `1` and `true` mean `human`; an unknown value
14
15
  * returns undefined, so the caller decides whether to warn or boot. */