@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,7 +1,8 @@
1
1
  import { Hono } from "hono";
2
2
  import * as z from "zod";
3
- import { toKumikoError } from "../../errors/index.js";
4
- import { createI18n, DEFAULT_LOCALE } from "../../i18n/index.js";
3
+ import { toKumikoError } from "../../errors/to-kumiko-error.js";
4
+ import { createI18n } from "../../i18n/index.js";
5
+ import { DEFAULT_LOCALE } from "../../i18n/request-locale.js";
5
6
  import { isValidIanaTimeZone } from "../../time/index.js";
6
7
  import { Routes } from "../api-constants.js";
7
8
  import { getUser } from "../auth-middleware.js";
@@ -1,4 +1,5 @@
1
- import type { Registry, ScreenFilter, SessionUser } from "../../engine/types/index.ts";
1
+ import type { ScreenFilter } from "@cosmicdrift/kumiko-types/screen";
2
+ import type { Registry, SessionUser } from "../../engine/types/index.ts";
2
3
  import { type ExportColumn } from "./export-columns.ts";
3
4
  export type ExportPlan = {
4
5
  readonly screenShortId: string;
@@ -1,5 +1,7 @@
1
+ import type { WriteResult } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type { HttpRouteMethod } from "@cosmicdrift/kumiko-types/http-route";
1
3
  import type { Context, Hono } from "hono";
2
- import type { HttpRouteMethod, Registry, SessionUser, TenantId, WriteResult } from "../engine/types/index.ts";
4
+ import type { Registry, SessionUser, TenantId } from "../engine/types/index.ts";
3
5
  import type { SecretsContext } from "../secrets/index.ts";
4
6
  export declare const ExtraRouteEntries: {
5
7
  readonly anonymous: "anonymous";
@@ -1,40 +1,36 @@
1
1
  export { DEFAULT_GLOBAL_RATE_LIMIT } from "../rate-limit/middleware.ts";
2
- export type { SetTenantCookieOptions } from "./anonymous-cookie.ts";
3
- export { deleteTenantCookie, setTenantCookie } from "./anonymous-cookie.ts";
2
+ export { setTenantCookie } from "./anonymous-cookie.ts";
4
3
  export { collectAnonymousLiveEntities } from "./anonymous-live-entities.ts";
5
4
  export { LOCALE_HEADER_NAME, NO_ROUTE_MATCH_HEADER_NAME } from "./api-constants.ts";
6
- export type { AnonymousAccessConfig, AnonymousAccessResolved, AuthMiddlewareOptions, AuthSessionChecker, AuthSessionCheckResult, AuthSessionStatus, TenantExists, TenantLifecycleStatusResolver, TenantResolver, TokenVerifier, } from "./auth-middleware.ts";
7
- export { authMiddleware, CSRF_HEADER_NAME, getUser, PAT_TOKEN_PREFIX, sessionCheckStatus, } from "./auth-middleware.ts";
5
+ export type { AnonymousAccessConfig, AnonymousAccessResolved, AuthSessionCheckResult, TokenVerifier, } from "./auth-middleware.ts";
6
+ export { CSRF_HEADER_NAME, PAT_TOKEN_PREFIX, } from "./auth-middleware.ts";
8
7
  export type { AuthRoutesConfig, LoginRateLimiter, SessionChecker, SessionCreator, SessionMassRevoker, SessionMetadata, SessionRevoker, } from "./auth-routes.ts";
9
- export { createAuthRoutes, createInMemoryLoginRateLimiter, createRedisLoginRateLimiter, } from "./auth-routes.ts";
10
- export type { ClientIpHeaderSource, ClientIpResolver } from "./client-ip.ts";
11
- export { assertValidTrustedProxyHops, clientIpSourceFromHonoContext, createClientIpResolver, extractSocketAddress, parseTrustedProxyHopsEnv, TRUSTED_PROXY_HOPS_ENV, UNKNOWN_CLIENT_IP, } from "./client-ip.ts";
12
- export type { AnonymousExtraRoute, AnonymousExtraRouteDeps, ExtraRouteDefinition, ExtraRouteEntry, ExtraRouteRejectionOptions, ExtraRouteRejectionStatus, RoleDispatchArgs, SignatureExtraRoute, SignatureExtraRouteDeps, SignatureExtraRouteVerifyDeps, SignatureExtraRouteVerifyRequest, SystemDispatchArgs, UserExtraRoute, UserExtraRouteDeps, } from "./extra-route.ts";
13
- export { ExtraRouteEntries, ExtraRouteRejection, signatureRoute } from "./extra-route.ts";
14
- export type { CachedResponseInit, CachePolicy } from "./http-cache.ts";
15
- export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches, parseIfNoneMatch, } from "./http-cache.ts";
16
- export type { JwtHelper, JwtKeyring, JwtPayload } from "./jwt.ts";
17
- export { createJwtHelper, loadJwtSecretOrKeyring } from "./jwt.ts";
8
+ export { createInMemoryLoginRateLimiter, createRedisLoginRateLimiter, } from "./auth-routes.ts";
9
+ export type { ClientIpResolver } from "./client-ip.ts";
10
+ export { createClientIpResolver, parseTrustedProxyHopsEnv, TRUSTED_PROXY_HOPS_ENV, UNKNOWN_CLIENT_IP, } from "./client-ip.ts";
11
+ export type { AnonymousExtraRoute, AnonymousExtraRouteDeps, ExtraRouteDefinition, RoleDispatchArgs, SignatureExtraRouteDeps, SignatureExtraRouteVerifyRequest, SystemDispatchArgs, UserExtraRouteDeps, } from "./extra-route.ts";
12
+ export { ExtraRouteRejection, signatureRoute } from "./extra-route.ts";
13
+ export type { CachePolicy } from "./http-cache.ts";
14
+ export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches, } from "./http-cache.ts";
15
+ export type { JwtHelper } from "./jwt.ts";
16
+ export { loadJwtSecretOrKeyring } from "./jwt.ts";
18
17
  export { publicOriginOf } from "./origin-middleware.ts";
19
- export { patAllows, qnMatches } from "./pat-scope.ts";
20
- export type { PostAuthLandingArgs, PostAuthLandingFlow, PostAuthLandingResolver, } from "./post-auth-landing.ts";
21
- export { isSafeLandingPath } from "./post-auth-landing.ts";
22
- export type { RedisSseBroker, RedisSseBrokerOptions } from "./redis-sse-broker.ts";
18
+ export type { PostAuthLandingArgs, PostAuthLandingResolver, } from "./post-auth-landing.ts";
19
+ export type { RedisSseBroker } from "./redis-sse-broker.ts";
23
20
  export { createDefaultSseBroker, createRedisSseBroker, isRedisSseBroker, } from "./redis-sse-broker.ts";
24
- export { type RequestContextData, readonlyRequestContext as requestContext, } from "./request-context.ts";
25
- export { buildRequestContextDataFromRequest, requestIdMiddleware, } from "./request-id-middleware.ts";
21
+ export { readonlyRequestContext as requestContext } from "./request-context-scopes.ts";
22
+ export { buildRequestContextDataFromRequest } from "./request-id-middleware.ts";
26
23
  export type { MetricsRouteOptions } from "./route-registrars.ts";
27
24
  export { createMetricsApp, DEFAULT_MAX_REQUEST_BYTES, isPrometheusMeter, } from "./route-registrars.ts";
28
- export { createApiRoutes } from "./routes.ts";
29
- export type { KumikoServer, ServerOptions } from "./server.ts";
25
+ export type { ServerOptions } from "./server.ts";
30
26
  export { buildServer } from "./server.ts";
27
+ export { resolveBaseDbAndSearchAdapter } from "./server-event-dispatcher.ts";
31
28
  export { makeDispatchSystemQuery, makeDispatchSystemWrite, makeDispatchWriteAs, } from "./server-extra-routes.ts";
32
29
  export { withFileProviderResolver } from "./server-wiring.ts";
33
- export type { ResolvedSessionCookies, SessionCookieBase, SessionCookieNames, } from "./session-cookies.ts";
34
- export { AUTH_COOKIE_BASE, CSRF_COOKIE_BASE, getSessionCookies, HOST_COOKIE_PREFIX, isHostPrefixedCookieName, resolveSessionCookieNames, resolveSessionCookies, sessionCookieName, sessionCookiesMiddleware, TENANT_COOKIE_BASE, } from "./session-cookies.ts";
35
- export type { SseBroker, SseClient, SseEvent } from "./sse-broker.ts";
30
+ export { AUTH_COOKIE_BASE, CSRF_COOKIE_BASE, getSessionCookies, sessionCookieName, } from "./session-cookies.ts";
31
+ export type { SseBroker, SseEvent } from "./sse-broker.ts";
36
32
  export { createSseBroker } from "./sse-broker.ts";
37
- export { createSseRoute, SSE_HEARTBEAT_INTERVAL_MS, type SseRouteOptions } from "./sse-route.ts";
33
+ export { SSE_HEARTBEAT_INTERVAL_MS } from "./sse-route.ts";
38
34
  export { generateToken } from "./tokens.ts";
39
- export type { KumikoServeEnv, KumikoServerWebSocket, KumikoWebSocketData, WebSocketUpgradeServer, } from "./websocket-route.ts";
40
- export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest, kumikoWebSocketHandler, WEBSOCKET_BACKPRESSURE_LIMIT_BYTES, WEBSOCKET_DEFAULT_MAX_CONNECTIONS_PER_USER, WEBSOCKET_HEARTBEAT_INTERVAL_MS, WEBSOCKET_MAX_PAYLOAD_BYTES, WEBSOCKET_PENDING_BUFFER_LIMIT_BYTES, WEBSOCKET_REVALIDATION_FAILURE_LIMIT, WEBSOCKET_ROUTE_PATH_PREFIX, } from "./websocket-route.ts";
35
+ export type { KumikoServeEnv, KumikoWebSocketData, } from "./websocket-route.ts";
36
+ export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest, WEBSOCKET_BACKPRESSURE_LIMIT_BYTES, WEBSOCKET_HEARTBEAT_INTERVAL_MS, WEBSOCKET_MAX_PAYLOAD_BYTES, WEBSOCKET_PENDING_BUFFER_LIMIT_BYTES, WEBSOCKET_ROUTE_PATH_PREFIX, } from "./websocket-route.ts";
package/dist/api/index.js CHANGED
@@ -1,26 +1,24 @@
1
1
  export { DEFAULT_GLOBAL_RATE_LIMIT } from "../rate-limit/middleware.js";
2
- export { deleteTenantCookie, setTenantCookie } from "./anonymous-cookie.js";
2
+ export { setTenantCookie } from "./anonymous-cookie.js";
3
3
  export { collectAnonymousLiveEntities } from "./anonymous-live-entities.js";
4
4
  export { LOCALE_HEADER_NAME, NO_ROUTE_MATCH_HEADER_NAME } from "./api-constants.js";
5
- export { authMiddleware, CSRF_HEADER_NAME, getUser, PAT_TOKEN_PREFIX, sessionCheckStatus, } from "./auth-middleware.js";
6
- export { createAuthRoutes, createInMemoryLoginRateLimiter, createRedisLoginRateLimiter, } from "./auth-routes.js";
7
- export { assertValidTrustedProxyHops, clientIpSourceFromHonoContext, createClientIpResolver, extractSocketAddress, parseTrustedProxyHopsEnv, TRUSTED_PROXY_HOPS_ENV, UNKNOWN_CLIENT_IP, } from "./client-ip.js";
8
- export { ExtraRouteEntries, ExtraRouteRejection, signatureRoute } from "./extra-route.js";
9
- export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches, parseIfNoneMatch, } from "./http-cache.js";
10
- export { createJwtHelper, loadJwtSecretOrKeyring } from "./jwt.js";
5
+ export { CSRF_HEADER_NAME, PAT_TOKEN_PREFIX, } from "./auth-middleware.js";
6
+ export { createInMemoryLoginRateLimiter, createRedisLoginRateLimiter, } from "./auth-routes.js";
7
+ export { createClientIpResolver, parseTrustedProxyHopsEnv, TRUSTED_PROXY_HOPS_ENV, UNKNOWN_CLIENT_IP, } from "./client-ip.js";
8
+ export { ExtraRouteRejection, signatureRoute } from "./extra-route.js";
9
+ export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches, } from "./http-cache.js";
10
+ export { loadJwtSecretOrKeyring } from "./jwt.js";
11
11
  export { publicOriginOf } from "./origin-middleware.js";
12
- export { patAllows, qnMatches } from "./pat-scope.js";
13
- export { isSafeLandingPath } from "./post-auth-landing.js";
14
12
  export { createDefaultSseBroker, createRedisSseBroker, isRedisSseBroker, } from "./redis-sse-broker.js";
15
- export { readonlyRequestContext as requestContext, } from "./request-context.js";
16
- export { buildRequestContextDataFromRequest, requestIdMiddleware, } from "./request-id-middleware.js";
13
+ export { readonlyRequestContext as requestContext } from "./request-context-scopes.js";
14
+ export { buildRequestContextDataFromRequest } from "./request-id-middleware.js";
17
15
  export { createMetricsApp, DEFAULT_MAX_REQUEST_BYTES, isPrometheusMeter, } from "./route-registrars.js";
18
- export { createApiRoutes } from "./routes.js";
19
16
  export { buildServer } from "./server.js";
17
+ export { resolveBaseDbAndSearchAdapter } from "./server-event-dispatcher.js";
20
18
  export { makeDispatchSystemQuery, makeDispatchSystemWrite, makeDispatchWriteAs, } from "./server-extra-routes.js";
21
19
  export { withFileProviderResolver } from "./server-wiring.js";
22
- export { AUTH_COOKIE_BASE, CSRF_COOKIE_BASE, getSessionCookies, HOST_COOKIE_PREFIX, isHostPrefixedCookieName, resolveSessionCookieNames, resolveSessionCookies, sessionCookieName, sessionCookiesMiddleware, TENANT_COOKIE_BASE, } from "./session-cookies.js";
20
+ export { AUTH_COOKIE_BASE, CSRF_COOKIE_BASE, getSessionCookies, sessionCookieName, } from "./session-cookies.js";
23
21
  export { createSseBroker } from "./sse-broker.js";
24
- export { createSseRoute, SSE_HEARTBEAT_INTERVAL_MS } from "./sse-route.js";
22
+ export { SSE_HEARTBEAT_INTERVAL_MS } from "./sse-route.js";
25
23
  export { generateToken } from "./tokens.js";
26
- export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest, kumikoWebSocketHandler, WEBSOCKET_BACKPRESSURE_LIMIT_BYTES, WEBSOCKET_DEFAULT_MAX_CONNECTIONS_PER_USER, WEBSOCKET_HEARTBEAT_INTERVAL_MS, WEBSOCKET_MAX_PAYLOAD_BYTES, WEBSOCKET_PENDING_BUFFER_LIMIT_BYTES, WEBSOCKET_REVALIDATION_FAILURE_LIMIT, WEBSOCKET_ROUTE_PATH_PREFIX, } from "./websocket-route.js";
24
+ export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest, WEBSOCKET_BACKPRESSURE_LIMIT_BYTES, WEBSOCKET_HEARTBEAT_INTERVAL_MS, WEBSOCKET_MAX_PAYLOAD_BYTES, WEBSOCKET_PENDING_BUFFER_LIMIT_BYTES, WEBSOCKET_ROUTE_PATH_PREFIX, } from "./websocket-route.js";
package/dist/api/jwt.js CHANGED
@@ -1,6 +1,6 @@
1
+ import { parseTenantId } from "@cosmicdrift/kumiko-types/identifiers";
1
2
  import * as jose from "jose";
2
3
  import { stripReservedTokenRoles } from "../engine/membership-roles.js";
3
- import { parseTenantId } from "../engine/types/index.js";
4
4
  import { InternalError } from "../errors/index.js";
5
5
  function normalizeKeyring(secretOrKeyring) {
6
6
  if (typeof secretOrKeyring === "string") {
@@ -1,5 +1,5 @@
1
+ import type { Meter, Tracer } from "@cosmicdrift/kumiko-types/observability";
1
2
  import type { Context, Next } from "hono";
2
- import { type Meter, type Tracer } from "../observability/index.ts";
3
3
  export type ObservabilityMiddlewareOptions = {
4
4
  readonly tracer: Tracer;
5
5
  readonly meter: Meter;
@@ -1,4 +1,5 @@
1
- import { emitHttpRequest, observabilityContext, } from "../observability/index.js";
1
+ import { observabilityContext } from "../observability/context.js";
2
+ import { emitHttpRequest } from "../observability/standard-metrics.js";
2
3
  import { getUser } from "./auth-middleware.js";
3
4
  import { requestContext } from "./request-context.js";
4
5
  import { resolveRouteLabel } from "./route-label.js";
@@ -0,0 +1,31 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import type { WriteOrigin } from "@cosmicdrift/kumiko-types/event-store-types";
3
+ import type { AgentRisk } from "@cosmicdrift/kumiko-types/handlers";
4
+ import type { ErrorDocsConfig } from "../errors/docs-url.ts";
5
+ export type RequestContextData = {
6
+ readonly requestId: string;
7
+ readonly correlationId: string;
8
+ readonly causationId?: string;
9
+ readonly signal?: AbortSignal;
10
+ readonly errorDocs?: ErrorDocsConfig;
11
+ readonly ip?: string;
12
+ readonly userAgent?: string;
13
+ readonly locale?: string;
14
+ readonly feature?: string;
15
+ readonly handler?: string;
16
+ tenantId?: string;
17
+ userId?: string;
18
+ readonly startedAt?: number;
19
+ readonly writeOrigin?: WriteOrigin;
20
+ readonly entryHandler?: {
21
+ readonly qn: string;
22
+ readonly risk: AgentRisk;
23
+ };
24
+ readonly chargedRateLimitBuckets?: Set<string>;
25
+ readonly agentToolCall?: true;
26
+ };
27
+ export declare const storage: AsyncLocalStorage<RequestContextData>;
28
+ export declare function setRequestIdentity(identity: {
29
+ tenantId: string;
30
+ userId?: string;
31
+ }): void;
@@ -0,0 +1,11 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ export const storage = new AsyncLocalStorage();
3
+ export function setRequestIdentity(identity) {
4
+ const store = storage.getStore();
5
+ // skip: outside a request scope there is no log context to enrich
6
+ if (!store)
7
+ return;
8
+ store.tenantId = identity.tenantId;
9
+ if (identity.userId !== undefined)
10
+ store.userId = identity.userId;
11
+ }
@@ -0,0 +1,14 @@
1
+ import { type WriteOrigin } from "@cosmicdrift/kumiko-types/event-store-types";
2
+ import type { AgentRisk } from "@cosmicdrift/kumiko-types/handlers";
3
+ import { requestContext } from "./request-context.ts";
4
+ export declare const readonlyRequestContext: Pick<typeof requestContext, "get">;
5
+ export declare function runWithOrigin<T>(origin: {
6
+ readonly feature?: string;
7
+ readonly handler?: string;
8
+ readonly entryHandler?: {
9
+ readonly qn: string;
10
+ readonly risk: AgentRisk;
11
+ };
12
+ }, fn: () => T): T;
13
+ export declare function isAgentToolCallScope(): boolean;
14
+ export declare function runWithWriteOrigin<T>(origin: WriteOrigin, fn: () => T): T;
@@ -0,0 +1,69 @@
1
+ import { isPersonalDataGated } from "@cosmicdrift/kumiko-types/event-store-types";
2
+ import { requestContext } from "./request-context.js";
3
+ // Request-scoped propagation. Populated by the HTTP middleware and by the
4
+ // event-dispatcher when it runs an MSP-apply, so ctx.events.append downstream
5
+ // automatically stamps the right provenance on every event it writes.
6
+ //
7
+ // requestId — unique per HTTP request (or Job run). Log correlation.
8
+ // correlationId — the end-to-end business operation id; propagates across
9
+ // service boundaries and MSP causation chains. Comes from
10
+ // the `x-correlation-id` header if set, otherwise mirrors
11
+ // requestId (clients that don't set the header pay no
12
+ // penalty — a single HTTP call == one correlation).
13
+ // causationId — the events.id that triggered THIS execution. Null for
14
+ // root HTTP commands; set when an MSP-apply is running
15
+ // (event-dispatcher wraps the handler call). Together
16
+ // with correlationId, forms a causal DAG across streams.
17
+ // signal — AbortSignal from the underlying HTTP request. Aborts
18
+ // when the client disconnects (mobile back-press, tab
19
+ // close). Query/stream handlers check signal.aborted at
20
+ // chunk or query boundaries; runBatch (write dispatch)
21
+ // strips it before executing so a disconnect can't abort
22
+ // a transaction mid-commit. Undefined for non-HTTP
23
+ // entry-points (jobs, MSP-applies) and inside write batches.
24
+ // Public view: `run` would let a caller replace the request scope (entryHandler,
25
+ // writeOrigin), so only the read side is exposed through the /api barrel.
26
+ export const readonlyRequestContext = {
27
+ get: requestContext.get,
28
+ };
29
+ // Enter a scope that attributes every event written inside it. Keeps the
30
+ // surrounding request's ids so correlation survives, and mints fresh ones
31
+ // when there is no surrounding request (job-runner, event-dispatcher) —
32
+ // requestId/correlationId are mandatory, `get()` may be undefined.
33
+ export function runWithOrigin(origin, fn) {
34
+ const current = requestContext.get();
35
+ const requestId = current?.requestId ?? requestContext.generateId();
36
+ return requestContext.run({
37
+ ...current,
38
+ requestId,
39
+ correlationId: current?.correlationId ?? requestId,
40
+ feature: origin.feature,
41
+ handler: origin.handler,
42
+ // The outermost dispatch wins — a nested ctx.dispatch.write/writeAs must not
43
+ // overwrite the entry handler that the irreversible-operation gate reads.
44
+ entryHandler: current?.entryHandler ?? origin.entryHandler,
45
+ chargedRateLimitBuckets: current?.entryHandler
46
+ ? current.chargedRateLimitBuckets
47
+ : new Set(),
48
+ }, fn);
49
+ }
50
+ export function isAgentToolCallScope() {
51
+ return requestContext.get()?.agentToolCall === true;
52
+ }
53
+ // An ungated origin never mints a scope: seeds and boot writes keep their missing context.
54
+ export function runWithWriteOrigin(origin, fn) {
55
+ const current = requestContext.get();
56
+ if (!isPersonalDataGated(origin)) {
57
+ if (!current?.writeOrigin)
58
+ return fn();
59
+ const { writeOrigin: _writeOrigin, ...rest } = current;
60
+ return requestContext.run(rest, fn);
61
+ }
62
+ const requestId = current?.requestId ?? requestContext.generateId();
63
+ return requestContext.run({
64
+ ...current,
65
+ requestId,
66
+ correlationId: current?.correlationId ?? requestId,
67
+ writeOrigin: origin,
68
+ }, fn);
69
+ }
@@ -1,46 +1,7 @@
1
- import { type WriteOrigin } from "@cosmicdrift/kumiko-types/event-store-types";
2
- import type { AgentRisk } from "@cosmicdrift/kumiko-types/handlers";
3
- import type { ErrorDocsConfig } from "../errors/docs-url.ts";
4
- export type RequestContextData = {
5
- readonly requestId: string;
6
- readonly correlationId: string;
7
- readonly causationId?: string;
8
- readonly signal?: AbortSignal;
9
- readonly errorDocs?: ErrorDocsConfig;
10
- readonly ip?: string;
11
- readonly userAgent?: string;
12
- readonly locale?: string;
13
- readonly feature?: string;
14
- readonly handler?: string;
15
- tenantId?: string;
16
- userId?: string;
17
- readonly startedAt?: number;
18
- readonly writeOrigin?: WriteOrigin;
19
- readonly entryHandler?: {
20
- readonly qn: string;
21
- readonly risk: AgentRisk;
22
- };
23
- readonly chargedRateLimitBuckets?: Set<string>;
24
- readonly agentToolCall?: true;
25
- };
1
+ import { type RequestContextData } from "./request-context-internals.ts";
26
2
  export declare const requestContext: {
27
3
  run<T>(data: RequestContextData, fn: () => T): T;
28
4
  get(): RequestContextData | undefined;
29
5
  generateId(): string;
30
6
  };
31
- export declare function setRequestIdentity(identity: {
32
- tenantId: string;
33
- userId?: string;
34
- }): void;
35
- export declare const readonlyRequestContext: Pick<typeof requestContext, "get">;
36
- export declare function runWithOrigin<T>(origin: {
37
- readonly feature?: string;
38
- readonly handler?: string;
39
- readonly entryHandler?: {
40
- readonly qn: string;
41
- readonly risk: AgentRisk;
42
- };
43
- }, fn: () => T): T;
44
7
  export declare function runAsAgentToolCallEntry<T>(fn: () => T): T;
45
- export declare function isAgentToolCallScope(): boolean;
46
- export declare function runWithWriteOrigin<T>(origin: WriteOrigin, fn: () => T): T;
@@ -1,7 +1,26 @@
1
- import { AsyncLocalStorage } from "node:async_hooks";
2
- import { isPersonalDataGated } from "@cosmicdrift/kumiko-types/event-store-types";
3
1
  import { generateId } from "../utils/index.js";
4
- const storage = new AsyncLocalStorage();
2
+ import { storage } from "./request-context-internals.js";
3
+ // Request-scoped propagation. Populated by the HTTP middleware and by the
4
+ // event-dispatcher when it runs an MSP-apply, so ctx.events.append downstream
5
+ // automatically stamps the right provenance on every event it writes.
6
+ //
7
+ // requestId — unique per HTTP request (or Job run). Log correlation.
8
+ // correlationId — the end-to-end business operation id; propagates across
9
+ // service boundaries and MSP causation chains. Comes from
10
+ // the `x-correlation-id` header if set, otherwise mirrors
11
+ // requestId (clients that don't set the header pay no
12
+ // penalty — a single HTTP call == one correlation).
13
+ // causationId — the events.id that triggered THIS execution. Null for
14
+ // root HTTP commands; set when an MSP-apply is running
15
+ // (event-dispatcher wraps the handler call). Together
16
+ // with correlationId, forms a causal DAG across streams.
17
+ // signal — AbortSignal from the underlying HTTP request. Aborts
18
+ // when the client disconnects (mobile back-press, tab
19
+ // close). Query/stream handlers check signal.aborted at
20
+ // chunk or query boundaries; runBatch (write dispatch)
21
+ // strips it before executing so a disconnect can't abort
22
+ // a transaction mid-commit. Undefined for non-HTTP
23
+ // entry-points (jobs, MSP-applies) and inside write batches.
5
24
  export const requestContext = {
6
25
  run(data, fn) {
7
26
  return storage.run(data, fn);
@@ -13,41 +32,12 @@ export const requestContext = {
13
32
  return generateId();
14
33
  },
15
34
  };
16
- export function setRequestIdentity(identity) {
17
- const store = storage.getStore();
18
- // skip: outside a request scope there is no log context to enrich
19
- if (!store)
20
- return;
21
- store.tenantId = identity.tenantId;
22
- if (identity.userId !== undefined)
23
- store.userId = identity.userId;
24
- }
25
35
  // Public view: `run` would let a caller replace the request scope (entryHandler,
26
36
  // writeOrigin), so only the read side is exposed through the /api barrel.
27
- export const readonlyRequestContext = {
28
- get: requestContext.get,
29
- };
30
37
  // Enter a scope that attributes every event written inside it. Keeps the
31
38
  // surrounding request's ids so correlation survives, and mints fresh ones
32
39
  // when there is no surrounding request (job-runner, event-dispatcher) —
33
40
  // requestId/correlationId are mandatory, `get()` may be undefined.
34
- export function runWithOrigin(origin, fn) {
35
- const current = requestContext.get();
36
- const requestId = current?.requestId ?? requestContext.generateId();
37
- return requestContext.run({
38
- ...current,
39
- requestId,
40
- correlationId: current?.correlationId ?? requestId,
41
- feature: origin.feature,
42
- handler: origin.handler,
43
- // The outermost dispatch wins — a nested ctx.write/writeAs must not
44
- // overwrite the entry handler that the irreversible-operation gate reads.
45
- entryHandler: current?.entryHandler ?? origin.entryHandler,
46
- chargedRateLimitBuckets: current?.entryHandler
47
- ? current.chargedRateLimitBuckets
48
- : new Set(),
49
- }, fn);
50
- }
51
41
  // Clears entryHandler so the next dispatch inside fn becomes the new entry, letting
52
42
  // the irreversible-operation gate see the invoked tool handler instead of the
53
43
  // surrounding turn/approve handler. Reserved for dispatchToolCall, so it also marks
@@ -64,23 +54,4 @@ export function runAsAgentToolCallEntry(fn) {
64
54
  agentToolCall: true,
65
55
  }, fn);
66
56
  }
67
- export function isAgentToolCallScope() {
68
- return requestContext.get()?.agentToolCall === true;
69
- }
70
57
  // An ungated origin never mints a scope: seeds and boot writes keep their missing context.
71
- export function runWithWriteOrigin(origin, fn) {
72
- const current = requestContext.get();
73
- if (!isPersonalDataGated(origin)) {
74
- if (!current?.writeOrigin)
75
- return fn();
76
- const { writeOrigin: _writeOrigin, ...rest } = current;
77
- return requestContext.run(rest, fn);
78
- }
79
- const requestId = current?.requestId ?? requestContext.generateId();
80
- return requestContext.run({
81
- ...current,
82
- requestId,
83
- correlationId: current?.correlationId ?? requestId,
84
- writeOrigin: origin,
85
- }, fn);
86
- }
@@ -1,7 +1,7 @@
1
1
  import type { Context, Next } from "hono";
2
2
  import type { ErrorDocsConfig } from "../errors/docs-url.ts";
3
3
  import { type ClientIpResolver } from "./client-ip.ts";
4
- import { type RequestContextData } from "./request-context.ts";
4
+ import type { RequestContextData } from "./request-context-internals.ts";
5
5
  /**
6
6
  * Builds the RequestContextData record for a raw Fetch Request — requestId
7
7
  * (client-supplied + sanitized, or generated), correlationId (mirrors
@@ -1,7 +1,8 @@
1
+ import type { Meter } from "@cosmicdrift/kumiko-types/observability";
1
2
  import { Hono, type MiddlewareHandler } from "hono";
2
3
  import type { DbConnection } from "../db/connection.ts";
3
4
  import type { Lifecycle } from "../lifecycle/index.ts";
4
- import type { Meter, PrometheusMeter } from "../observability/index.ts";
5
+ import type { PrometheusMeter } from "../observability/prometheus-meter.ts";
5
6
  import type { EventConsumer } from "../pipeline/event-dispatcher.ts";
6
7
  export declare const DEFAULT_MAX_REQUEST_BYTES = 1048576;
7
8
  export declare function registerBodyLimit(app: Hono, maxBytes: number): void;
@@ -5,7 +5,7 @@
5
5
  // helpers exist to make each step's dependencies visible at the call-site.
6
6
  import { Hono } from "hono";
7
7
  import { bodyLimit } from "hono/body-limit";
8
- import { serializeOpenMetrics } from "../observability/index.js";
8
+ import { serializeOpenMetrics } from "../observability/prometheus-meter.js";
9
9
  import { BODY_LIMIT_OPT_OUT_PATHS, Routes } from "./api-constants.js";
10
10
  import { createReadinessProbe, dbPingCheck, dispatcherLagCheck, redisPingCheck, } from "./readiness.js";
11
11
  // --- Body size limit ------------------------------------------------------
@@ -1,8 +1,11 @@
1
1
  import { Hono } from "hono";
2
2
  import { HTTPException } from "hono/http-exception";
3
3
  import { streamSSE } from "hono/streaming";
4
- import { AccessDeniedError, reraiseAsKumikoError, serializeError, toKumikoError, ValidationError, } from "../errors/index.js";
5
- import { createFallbackLogger, scrubLogText, scrubLogValue } from "../logging/index.js";
4
+ import { AccessDeniedError, reraiseAsKumikoError, ValidationError, } from "../errors/index.js";
5
+ import { serializeError } from "../errors/serialize.js";
6
+ import { createFallbackLogger, scrubLogText } from "../logging/index.js";
7
+ import { scrubLogValue } from "../logging/scrub.js";
8
+ import { wrapToKumiko } from "../pipeline/dispatcher-utils.js";
6
9
  import { isPlainObject } from "../utils/is-plain-object.js";
7
10
  import { stringifyJson } from "../utils/safe-json.js";
8
11
  import { Routes } from "./api-constants.js";
@@ -241,7 +244,8 @@ firstPull) {
241
244
  function jsonResponse(c, body, status = 200) {
242
245
  return c.body(stringifyJson(body), status, { "Content-Type": "application/json" });
243
246
  }
244
- const toKumiko = toKumikoError;
247
+ // Query filters with an impossible date fail in Postgres (22007/22008); same 400 as on writes.
248
+ const toKumiko = wrapToKumiko;
245
249
  // Nesting cap for request payloads — an object-walk, not a string/byte
246
250
  // check, since an attacker fully controls whitespace/formatting and a
247
251
  // minified deeply-nested payload can stay well under the byte limit while
@@ -1,4 +1,4 @@
1
- import { type AppContext, type Registry } from "../engine/types/index.ts";
1
+ import type { AppContext, Registry } from "../engine/types/index.ts";
2
2
  import type { createFallbackLogger } from "../logging/index.ts";
3
3
  import type { AuthRoutesConfig } from "./auth-routes.ts";
4
4
  export type BootLogger = ReturnType<typeof createFallbackLogger>;
@@ -1,5 +1,5 @@
1
1
  import { EXT_FILE_PROVIDER, EXT_PRINCIPAL_STATUS } from "../engine/extension-names.js";
2
- import { isFileField } from "../engine/types/index.js";
2
+ import { isFileField } from "../engine/field-helpers.js";
3
3
  import { SHARED_INSTANCE_SENTINEL } from "../pipeline/event-consumer-state.js";
4
4
  import { generateId } from "../utils/index.js";
5
5
  // A payload-bucket handler without a resolver would answer every call with a
@@ -23,7 +23,7 @@ export function assertNoPayloadRateLimitsWithoutResolver(registry) {
23
23
  export function assertFileStorageProviderForFileFields(registry, context) {
24
24
  // File-storage is resolved per-tenant through file-foundation: a mounted
25
25
  // `file-provider-*` plugin (inmemory/s3/s3-env) is the single source for
26
- // uploads, ctx.files and the GDPR jobs.
26
+ // uploads, ctx.services.files and the GDPR jobs.
27
27
  const hasFileProvider = registry.getExtensionUsages(EXT_FILE_PROVIDER).length > 0;
28
28
  // A test/advanced caller may inject the resolver directly on the context
29
29
  // (e.g. a static in-memory provider) instead of mounting a provider plugin.
@@ -1,9 +1,10 @@
1
1
  import type { DbConnection } from "../db/connection.ts";
2
- import type { AppContext } from "../engine/types/index.ts";
2
+ import type { AppContext, Registry } from "../engine/types/index.ts";
3
3
  import type { Lifecycle } from "../lifecycle/index.ts";
4
4
  import type { ObservabilityProvider } from "../observability/index.ts";
5
5
  import { type EventConsumer, type EventDispatcher } from "../pipeline/event-dispatcher.ts";
6
6
  import type { ResolvedCacheSyncBus } from "../redis/cache-sync-bus.ts";
7
+ import type { SearchAdapter } from "../search/types.ts";
7
8
  import type { RedisSseBroker } from "./redis-sse-broker.ts";
8
9
  import type { ServerOptions } from "./server.ts";
9
10
  import type { SseBroker } from "./sse-broker.ts";
@@ -19,6 +20,10 @@ export declare function createServerEventDispatcher(deps: {
19
20
  readonly consumers: readonly EventConsumer[];
20
21
  readonly eventDispatcher: EventDispatcher | undefined;
21
22
  };
23
+ export declare function resolveBaseDbAndSearchAdapter(context: AppContext, registry: Registry): {
24
+ readonly baseDb: DbConnection | undefined;
25
+ readonly searchAdapter: SearchAdapter | undefined;
26
+ };
22
27
  export declare function registerOwnedShutdownHooks(lifecycle: Lifecycle | undefined, owned: {
23
28
  readonly eventDispatcher: EventDispatcher | undefined;
24
29
  readonly ownedRedisSseBroker: RedisSseBroker | undefined;
@@ -43,10 +43,9 @@ export function createServerEventDispatcher(deps) {
43
43
  }
44
44
  return { baseDb, consumers, eventDispatcher };
45
45
  }
46
- function resolveBaseDbAndSearchAdapter(context, registry) {
46
+ export function resolveBaseDbAndSearchAdapter(context, registry) {
47
47
  // @cast-boundary engine-bridge — context.db union narrows to DbConnection here
48
48
  const baseDb = context.db;
49
- // @cast-boundary engine-bridge — searchAdapter is an optional context-extension
50
49
  const searchAdapter = context.searchAdapter;
51
50
  // Adapter is built before the registry exists (app boot order) — hand it
52
51
  // the registry-derived default config here so it can lazily configure
@@ -145,12 +144,12 @@ function buildMultiStreamProjectionConsumer(msp, deps) {
145
144
  // production. Defensive return for the type-narrowing path.
146
145
  return;
147
146
  }
148
- // Saga/process-manager ctx: apply can call ctx.appendEvent to cascade
147
+ // Saga/process-manager ctx: apply can call ctx.events.append to cascade
149
148
  // a follow-up event onto another aggregate. Uses the triggering event's
150
149
  // tenantId + userId so the causal chain stays tenant-consistent.
151
150
  // MSP qualified names are "<feature>:projection:<short>" — the
152
151
  // prefix before the first ":" owns the MSP. Used to reject
153
- // cross-feature ctx.appendEvent calls at emit-site.
152
+ // cross-feature ctx.events.append calls at emit-site.
154
153
  const mspOwner = msp.name.split(":")[0];
155
154
  const mspFiles = fileProviderResolver
156
155
  ? createTenantFileContext(fileProviderResolver, event.tenantId)
@@ -1,5 +1,5 @@
1
+ import type { WriteResult } from "@cosmicdrift/kumiko-types/handlers";
1
2
  import type { Context, Hono } from "hono";
2
- import type { WriteResult } from "../engine/types/index.ts";
3
3
  import type { Dispatcher } from "../pipeline/dispatcher.ts";
4
4
  import { type ExtraRouteDefinition, type RoleDispatchArgs, type SystemDispatchArgs } from "./extra-route.ts";
5
5
  import type { ServerWiring } from "./server-wiring.ts";
@@ -8,6 +8,7 @@ import { clientIpSourceFromHonoContext } from "./client-ip.js";
8
8
  import { ExtraRouteEntries, ExtraRouteRejection, } from "./extra-route.js";
9
9
  import { bodyLimitForRoutePath, DEFAULT_MAX_REQUEST_BYTES } from "./route-registrars.js";
10
10
  import { isMissingOrAnonymousUser, makeSystemQuery, mountHonoRoute, unauthenticatedResponse, } from "./server-routes.js";
11
+ import { tenantScopedSecrets } from "./tenant-scoped-secrets.js";
11
12
  // Only entry:"signature" bypasses jwtGuard (verify() authenticates
12
13
  // itself); entry:"anonymous" still needs the anonymousAccess fallthrough
13
14
  // (tenant-by-host), entry:"user" needs c.get("user") populated.
@@ -40,7 +41,7 @@ export function mountExtraRoutes(app, wiring) {
40
41
  app,
41
42
  dispatcher,
42
43
  registry: options.registry,
43
- secrets: context.secrets,
44
+ secrets: context.secrets && tenantScopedSecrets(context.secrets),
44
45
  dispatchSystemWrite,
45
46
  dispatchSystemQuery,
46
47
  dispatchWriteAs,
@@ -1,3 +1,4 @@
1
+ import { runInSystemRowLevelSecurityScope } from "../db/row-level-security-scope.js";
1
2
  import { resolveTenantLifecyclePlugin } from "../pipeline/active-membership.js";
2
3
  import { authEndpointRateLimit, globalIpRateLimit } from "../rate-limit/index.js";
3
4
  import { authMiddleware, getUser } from "./auth-middleware.js";
@@ -207,5 +208,6 @@ function deriveTenantLifecycleResolver(registry, db) {
207
208
  "missing — the request-level teardown gate needs a DbConnection. Pass context.db, or wire " +
208
209
  "auth.resolveTenantLifecycleStatus explicitly.");
209
210
  }
210
- return (tenantId) => plugin.resolveStatus(tenantId, { db });
211
+ // Runs before any tenant context exists and reads the tenant row itself, so it needs system scope.
212
+ return (tenantId) => runInSystemRowLevelSecurityScope("tenant lifecycle status is resolved before a tenant scope exists", () => plugin.resolveStatus(tenantId, { db }));
211
213
  }
@@ -1,5 +1,6 @@
1
+ import type { HttpRouteMethod } from "@cosmicdrift/kumiko-types/http-route";
1
2
  import type { Hono, MiddlewareHandler } from "hono";
2
- import type { HttpRouteMethod, SessionUser, TenantId } from "../engine/types/index.ts";
3
+ import type { SessionUser, TenantId } from "../engine/types/index.ts";
3
4
  import type { Dispatcher } from "../pipeline/dispatcher.ts";
4
5
  import { type ClientIpResolver } from "./client-ip.ts";
5
6
  import type { ServerOptions } from "./server.ts";