@cosmicdrift/kumiko-framework 0.388.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 (711) hide show
  1. package/AGENTS.md +12 -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/golden-path.md +13 -1
  13. package/agents/examples/inbound-mail-triage.md +1 -0
  14. package/agents/examples/lane-routing.md +2 -1
  15. package/agents/examples/legal-pages.md +2 -2
  16. package/agents/examples/lifecycle-hooks.md +55 -2
  17. package/agents/examples/list-table-options.md +466 -0
  18. package/agents/examples/managed-config.md +4 -4
  19. package/agents/examples/managed-pages.md +1 -1
  20. package/agents/examples/pdf-audit-export.md +4 -2
  21. package/agents/examples/relations.md +19 -4
  22. package/agents/examples/search.md +4 -4
  23. package/agents/examples/secrets-demo.md +9 -6
  24. package/agents/examples/state-machine.md +5 -4
  25. package/agents/examples/tenant-isolation.md +73 -1
  26. package/agents/examples/tenant-settings.md +1 -1
  27. package/agents/examples/user-data-rights.md +3 -6
  28. package/agents/examples/workflow-engine.md +53 -47
  29. package/agents/examples.md +5 -4
  30. package/agents/features.md +1 -1
  31. package/agents/widgets.md +1 -0
  32. package/dist/api/api-constants.d.ts +1 -0
  33. package/dist/api/api-constants.js +2 -0
  34. package/dist/api/auth-middleware.js +1 -1
  35. package/dist/api/auth-routes-invite.js +2 -1
  36. package/dist/api/auth-routes-shared.d.ts +2 -0
  37. package/dist/api/auth-routes-shared.js +5 -0
  38. package/dist/api/client-error-route.js +2 -3
  39. package/dist/api/entity-read-access.d.ts +4 -1
  40. package/dist/api/entity-read-access.js +14 -0
  41. package/dist/api/export/export-cells-reference.d.ts +9 -0
  42. package/dist/api/export/export-cells-reference.js +21 -0
  43. package/dist/api/export/export-cells.d.ts +11 -0
  44. package/dist/api/export/export-cells.js +136 -0
  45. package/dist/api/export/export-ciphertext-guard.d.ts +2 -0
  46. package/dist/api/export/export-ciphertext-guard.js +27 -0
  47. package/dist/api/export/export-columns.d.ts +31 -0
  48. package/dist/api/export/export-columns.js +85 -0
  49. package/dist/api/export/export-errors.d.ts +4 -0
  50. package/dist/api/export/export-errors.js +14 -0
  51. package/dist/api/export/export-route.d.ts +4 -0
  52. package/dist/api/export/export-route.js +75 -0
  53. package/dist/api/export/export-rows.d.ts +13 -0
  54. package/dist/api/export/export-rows.js +62 -0
  55. package/dist/api/export/export-screen.d.ts +13 -0
  56. package/dist/api/export/export-screen.js +47 -0
  57. package/dist/api/export/export-xlsx-writer.d.ts +4 -0
  58. package/dist/api/export/export-xlsx-writer.js +21 -0
  59. package/dist/api/extra-route.d.ts +7 -1
  60. package/dist/api/index.d.ts +23 -27
  61. package/dist/api/index.js +13 -15
  62. package/dist/api/jwt.js +1 -1
  63. package/dist/api/observability-middleware.d.ts +1 -1
  64. package/dist/api/observability-middleware.js +2 -1
  65. package/dist/api/pii-leak-guard.d.ts +3 -0
  66. package/dist/api/pii-leak-guard.js +3 -2
  67. package/dist/api/request-context-internals.d.ts +31 -0
  68. package/dist/api/request-context-internals.js +11 -0
  69. package/dist/api/request-context-scopes.d.ts +14 -0
  70. package/dist/api/request-context-scopes.js +69 -0
  71. package/dist/api/request-context.d.ts +1 -40
  72. package/dist/api/request-context.js +22 -51
  73. package/dist/api/request-id-middleware.d.ts +1 -1
  74. package/dist/api/route-registrars.d.ts +2 -1
  75. package/dist/api/route-registrars.js +1 -1
  76. package/dist/api/routes.d.ts +16 -0
  77. package/dist/api/routes.js +9 -5
  78. package/dist/api/server-boot-checks.d.ts +1 -1
  79. package/dist/api/server-boot-checks.js +2 -2
  80. package/dist/api/server-event-dispatcher.d.ts +6 -1
  81. package/dist/api/server-event-dispatcher.js +3 -4
  82. package/dist/api/server-extra-routes.d.ts +1 -1
  83. package/dist/api/server-extra-routes.js +5 -1
  84. package/dist/api/server-middleware.js +3 -1
  85. package/dist/api/server-routes.d.ts +3 -2
  86. package/dist/api/server-routes.js +8 -2
  87. package/dist/api/server-wiring.js +8 -4
  88. package/dist/api/server.d.ts +2 -1
  89. package/dist/api/sse-route.d.ts +3 -1
  90. package/dist/api/sse-route.js +11 -1
  91. package/dist/api/tenant-scoped-secrets.d.ts +2 -0
  92. package/dist/api/tenant-scoped-secrets.js +13 -0
  93. package/dist/api/websocket-route.d.ts +1 -1
  94. package/dist/auth/index.d.ts +0 -1
  95. package/dist/auth/roles.d.ts +0 -5
  96. package/dist/compliance/duration-spec.d.ts +0 -1
  97. package/dist/compliance/duration-spec.js +0 -5
  98. package/dist/compliance/index.d.ts +4 -4
  99. package/dist/compliance/index.js +2 -2
  100. package/dist/compliance/profiles.d.ts +0 -15
  101. package/dist/compliance/profiles.js +0 -23
  102. package/dist/config/index.d.ts +11 -9
  103. package/dist/config/index.js +13 -1
  104. package/dist/config/internals.d.ts +9 -0
  105. package/dist/config/internals.js +1 -0
  106. package/dist/consumer-cli-internals.d.ts +4 -0
  107. package/dist/consumer-cli-internals.js +1 -0
  108. package/dist/consumer-cli.d.ts +1 -4
  109. package/dist/consumer-cli.js +5 -1
  110. package/dist/crypto/event-pii.js +1 -1
  111. package/dist/crypto/index.d.ts +8 -9
  112. package/dist/crypto/index.js +7 -8
  113. package/dist/crypto/pg-kms-adapter.d.ts +1 -0
  114. package/dist/crypto/pg-kms-adapter.js +17 -18
  115. package/dist/db/aggregate-sql.d.ts +2 -0
  116. package/dist/db/aggregate-sql.js +10 -0
  117. package/dist/db/apply-entity-event.d.ts +1 -1
  118. package/dist/db/apply-entity-event.js +15 -47
  119. package/dist/db/blind-index-cleanup.js +91 -77
  120. package/dist/db/closed-connection.js +12 -19
  121. package/dist/db/collect-table-metas.js +1 -1
  122. package/dist/db/compound-types.d.ts +1 -1
  123. package/dist/db/compound-types.js +0 -7
  124. package/dist/db/config-seed.d.ts +2 -1
  125. package/dist/db/config-seed.js +6 -1
  126. package/dist/db/connection.d.ts +7 -6
  127. package/dist/db/connection.js +43 -24
  128. package/dist/db/cross-tenant-reads.d.ts +1 -1
  129. package/dist/db/cross-tenant-reads.js +1 -1
  130. package/dist/db/dialect.d.ts +0 -5
  131. package/dist/db/dialect.js +0 -3
  132. package/dist/db/driver-row-coercion.js +4 -4
  133. package/dist/db/driver-value-preparation.js +6 -4
  134. package/dist/db/eagerload.d.ts +2 -1
  135. package/dist/db/entity-field-encryption.d.ts +1 -1
  136. package/dist/db/entity-table-meta.d.ts +1 -1
  137. package/dist/db/event-store-executor-context.d.ts +3 -1
  138. package/dist/db/event-store-executor-context.js +4 -3
  139. package/dist/db/event-store-executor-read-aggregate-currencies.d.ts +17 -0
  140. package/dist/db/event-store-executor-read-aggregate-currencies.js +40 -0
  141. package/dist/db/event-store-executor-read-aggregate.js +36 -5
  142. package/dist/db/event-store-executor-read-filter.d.ts +1 -1
  143. package/dist/db/event-store-executor-read-filter.js +6 -3
  144. package/dist/db/event-store-executor-read-rows.d.ts +2 -1
  145. package/dist/db/event-store-executor-read-search.d.ts +2 -1
  146. package/dist/db/event-store-executor-read-sort.d.ts +2 -1
  147. package/dist/db/event-store-executor-read.js +2 -2
  148. package/dist/db/event-store-executor-write-atomic.d.ts +4 -0
  149. package/dist/db/event-store-executor-write-atomic.js +42 -0
  150. package/dist/db/event-store-executor-write-steps.d.ts +3 -5
  151. package/dist/db/event-store-executor-write-steps.js +0 -5
  152. package/dist/db/event-store-executor-write.js +22 -19
  153. package/dist/db/event-store-executor.d.ts +1 -1
  154. package/dist/db/event-store-executor.js +2 -1
  155. package/dist/db/executor-managed-tables.d.ts +7 -1
  156. package/dist/db/executor-managed-tables.js +12 -3
  157. package/dist/db/index.d.ts +29 -28
  158. package/dist/db/index.js +22 -20
  159. package/dist/db/known-table-names.d.ts +6 -0
  160. package/dist/db/known-table-names.js +21 -0
  161. package/dist/db/list-aggregate-labels.d.ts +1 -1
  162. package/dist/db/located-timestamp.d.ts +1 -1
  163. package/dist/db/located-timestamp.js +0 -5
  164. package/dist/db/migrate-generator.d.ts +17 -1
  165. package/dist/db/migrate-generator.js +50 -20
  166. package/dist/db/migrate-primary-key.d.ts +12 -0
  167. package/dist/db/migrate-primary-key.js +45 -0
  168. package/dist/db/migrate-rls-diff.d.ts +20 -0
  169. package/dist/db/migrate-rls-diff.js +61 -0
  170. package/dist/db/migrate-runner.js +7 -3
  171. package/dist/db/money.d.ts +1 -1
  172. package/dist/db/money.js +1 -1
  173. package/dist/db/parent-ref-clause.d.ts +2 -1
  174. package/dist/db/pg-error.d.ts +2 -0
  175. package/dist/db/pg-error.js +37 -21
  176. package/dist/db/queries/backfill-pii.js +3 -6
  177. package/dist/db/queries/database-now.js +2 -1
  178. package/dist/db/queries/ddl.d.ts +3 -0
  179. package/dist/db/queries/ddl.js +34 -1
  180. package/dist/db/queries/event-store.js +4 -2
  181. package/dist/db/queries/event-tenants.d.ts +2 -0
  182. package/dist/db/queries/event-tenants.js +17 -0
  183. package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
  184. package/dist/db/queries/rebuild-rls-guard.js +29 -0
  185. package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
  186. package/dist/db/queries/rls-boot-catalog.js +39 -0
  187. package/dist/db/queries/rls-catalog.d.ts +6 -0
  188. package/dist/db/queries/rls-catalog.js +82 -0
  189. package/dist/db/queries/rls-scope.d.ts +3 -0
  190. package/dist/db/queries/rls-scope.js +17 -0
  191. package/dist/db/queries/rls-shape.d.ts +10 -0
  192. package/dist/db/queries/rls-shape.js +42 -0
  193. package/dist/db/queries/session-advisory-lock.d.ts +2 -0
  194. package/dist/db/queries/session-advisory-lock.js +23 -0
  195. package/dist/db/queries/shadow-swap.d.ts +1 -2
  196. package/dist/db/queries/shadow-swap.js +11 -28
  197. package/dist/db/queries/test-stack.d.ts +4 -1
  198. package/dist/db/queries/test-stack.js +83 -2
  199. package/dist/db/query.d.ts +14 -0
  200. package/dist/db/query.js +77 -48
  201. package/dist/db/reference-data.d.ts +1 -1
  202. package/dist/db/reference-data.js +20 -3
  203. package/dist/db/render-ddl.d.ts +6 -2
  204. package/dist/db/render-ddl.js +7 -7
  205. package/dist/db/render-rls-ddl.d.ts +35 -0
  206. package/dist/db/render-rls-ddl.js +127 -0
  207. package/dist/db/replay-migration-sql.d.ts +3 -1
  208. package/dist/db/replay-migration-sql.js +22 -5
  209. package/dist/db/replay-rls.d.ts +25 -0
  210. package/dist/db/replay-rls.js +156 -0
  211. package/dist/db/row-level-security-boot-check.d.ts +5 -0
  212. package/dist/db/row-level-security-boot-check.js +85 -0
  213. package/dist/db/row-level-security-connection.d.ts +3 -0
  214. package/dist/db/row-level-security-connection.js +213 -0
  215. package/dist/db/row-level-security-scope.d.ts +33 -0
  216. package/dist/db/row-level-security-scope.js +127 -0
  217. package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
  218. package/dist/db/scope-tenant-db-to-tenant.js +14 -0
  219. package/dist/db/sql-identifier.d.ts +1 -0
  220. package/dist/db/sql-identifier.js +3 -0
  221. package/dist/db/statement-timeout.js +2 -1
  222. package/dist/db/table-builder.d.ts +2 -1
  223. package/dist/db/table-builder.js +1 -1
  224. package/dist/db/table-info.js +1 -1
  225. package/dist/db/table-push.d.ts +11 -2
  226. package/dist/db/table-push.js +15 -2
  227. package/dist/db/tenant-db-runner.d.ts +3 -1
  228. package/dist/db/tenant-db-runner.js +4 -3
  229. package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
  230. package/dist/db/tenant-db-scoped-rebind.js +33 -0
  231. package/dist/db/tenant-db-statement-runner.d.ts +13 -0
  232. package/dist/db/tenant-db-statement-runner.js +48 -0
  233. package/dist/db/tenant-db-upsert.d.ts +5 -0
  234. package/dist/db/tenant-db-upsert.js +91 -0
  235. package/dist/db/tenant-db.d.ts +17 -12
  236. package/dist/db/tenant-db.js +60 -121
  237. package/dist/db/tenant-id-filter.d.ts +3 -0
  238. package/dist/db/tenant-id-filter.js +30 -0
  239. package/dist/db/transaction-serialization.d.ts +6 -0
  240. package/dist/db/transaction-serialization.js +60 -0
  241. package/dist/derivatives/delete-stored-file.js +1 -1
  242. package/dist/derivatives/index.d.ts +2 -5
  243. package/dist/derivatives/index.js +2 -3
  244. package/dist/engine/access.d.ts +2 -1
  245. package/dist/engine/access.js +1 -1
  246. package/dist/engine/boot-validator/bundled-lists-table.d.ts +2 -0
  247. package/dist/engine/boot-validator/bundled-lists-table.js +36 -0
  248. package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
  249. package/dist/engine/boot-validator/entity-handler.js +1 -1
  250. package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +3 -0
  251. package/dist/engine/boot-validator/entity-list-aggregate-options.js +23 -0
  252. package/dist/engine/boot-validator/list-bulk-actions.d.ts +3 -0
  253. package/dist/engine/boot-validator/list-bulk-actions.js +49 -0
  254. package/dist/engine/boot-validator/list-column-layout.d.ts +8 -0
  255. package/dist/engine/boot-validator/list-column-layout.js +41 -0
  256. package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +24 -0
  257. package/dist/engine/boot-validator/list-table-aggregate-options.js +145 -0
  258. package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +11 -0
  259. package/dist/engine/boot-validator/list-table-aggregate-query.js +31 -0
  260. package/dist/engine/boot-validator/list-table-export-options.d.ts +1 -0
  261. package/dist/engine/boot-validator/list-table-export-options.js +27 -0
  262. package/dist/engine/boot-validator/list-table-options.d.ts +3 -0
  263. package/dist/engine/boot-validator/list-table-options.js +77 -0
  264. package/dist/engine/boot-validator/list-table-reject-unknown-keys.d.ts +1 -0
  265. package/dist/engine/boot-validator/list-table-reject-unknown-keys.js +7 -0
  266. package/dist/engine/boot-validator/nav.d.ts +3 -1
  267. package/dist/engine/boot-validator/nav.js +1 -1
  268. package/dist/engine/boot-validator/ownership.d.ts +2 -1
  269. package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
  270. package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
  271. package/dist/engine/boot-validator/projection-list-screens.js +3 -13
  272. package/dist/engine/boot-validator/query-refs.d.ts +2 -1
  273. package/dist/engine/boot-validator/related-list-table-rules.d.ts +4 -0
  274. package/dist/engine/boot-validator/related-list-table-rules.js +42 -0
  275. package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
  276. package/dist/engine/boot-validator/screens-kind-entity-list.js +7 -0
  277. package/dist/engine/boot-validator/screens-kind-projection-list.js +4 -0
  278. package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
  279. package/dist/engine/boot-validator/screens-lists.js +12 -2
  280. package/dist/engine/boot-validator/screens.d.ts +2 -1
  281. package/dist/engine/boot-validator/workspaces.d.ts +3 -1
  282. package/dist/engine/bridge-stub.d.ts +5 -2
  283. package/dist/engine/bridge-stub.js +39 -24
  284. package/dist/engine/build-app-schema.d.ts +2 -1
  285. package/dist/engine/build-app-schema.js +9 -1
  286. package/dist/engine/build-config-feature-schema.js +6 -1
  287. package/dist/engine/config-helpers.d.ts +2 -2
  288. package/dist/engine/config-helpers.js +0 -9
  289. package/dist/engine/constants.d.ts +0 -10
  290. package/dist/engine/constants.js +0 -8
  291. package/dist/engine/create-app.js +1 -1
  292. package/dist/engine/define-feature.d.ts +2 -1
  293. package/dist/engine/define-feature.js +5 -2
  294. package/dist/engine/define-handler.d.ts +1 -1
  295. package/dist/engine/define-step.d.ts +0 -1
  296. package/dist/engine/define-step.js +0 -3
  297. package/dist/engine/embedded-derived.d.ts +1 -1
  298. package/dist/engine/entity-handlers.d.ts +2 -1
  299. package/dist/engine/entity-handlers.js +7 -7
  300. package/dist/engine/entity-list-runtime-options.js +3 -1
  301. package/dist/engine/entity-list-searchability.d.ts +2 -1
  302. package/dist/engine/event-def.d.ts +2 -1
  303. package/dist/engine/event-helpers.d.ts +3 -1
  304. package/dist/engine/event-helpers.js +3 -3
  305. package/dist/engine/extension-names.d.ts +2 -8
  306. package/dist/engine/extension-names.js +2 -2
  307. package/dist/engine/extension-selector-plugins.d.ts +1 -1
  308. package/dist/engine/extensions/storage-provider.d.ts +1 -2
  309. package/dist/engine/extensions/user-data.d.ts +0 -8
  310. package/dist/engine/factories.d.ts +2 -1
  311. package/dist/engine/feature-builder-state.d.ts +9 -1
  312. package/dist/engine/feature-builder-state.js +1 -0
  313. package/dist/engine/feature-changelog.d.ts +1 -1
  314. package/dist/engine/feature-config-events-jobs.d.ts +4 -1
  315. package/dist/engine/feature-entity-handlers.d.ts +5 -1
  316. package/dist/engine/feature-manifest.d.ts +1 -0
  317. package/dist/engine/feature-manifest.js +2 -1
  318. package/dist/engine/feature-ui-extensions.d.ts +7 -1
  319. package/dist/engine/feature-ui-extensions.js +6 -4
  320. package/dist/engine/field-access.d.ts +3 -1
  321. package/dist/engine/field-access.js +12 -0
  322. package/dist/engine/handler-field-references.d.ts +0 -4
  323. package/dist/engine/index.d.ts +58 -55
  324. package/dist/engine/index.js +23 -28
  325. package/dist/engine/instruction-fields.d.ts +1 -1
  326. package/dist/engine/personal-data-fields.d.ts +1 -1
  327. package/dist/engine/qualified-name.d.ts +0 -1
  328. package/dist/engine/read-claim.d.ts +2 -1
  329. package/dist/engine/registry-facade.js +0 -3
  330. package/dist/engine/registry-ingest.d.ts +2 -1
  331. package/dist/engine/registry-ingest.js +1 -2
  332. package/dist/engine/registry-state.d.ts +12 -2
  333. package/dist/engine/registry-state.js +2 -3
  334. package/dist/engine/registry-validate.d.ts +3 -1
  335. package/dist/engine/registry-validate.js +7 -7
  336. package/dist/engine/run-in.d.ts +1 -1
  337. package/dist/engine/run-in.js +0 -1
  338. package/dist/engine/schema-builder.d.ts +1 -1
  339. package/dist/engine/schema-builder.js +1 -1
  340. package/dist/engine/screen-filter-ops.d.ts +2 -1
  341. package/dist/engine/screen-filter-ops.js +2 -5
  342. package/dist/engine/soft-delete-cleanup.d.ts +1 -1
  343. package/dist/engine/soft-delete-cleanup.js +4 -4
  344. package/dist/engine/state-machine.js +2 -1
  345. package/dist/engine/steps/_read-source.js +1 -1
  346. package/dist/engine/steps/aggregate-append-event.js +2 -2
  347. package/dist/engine/steps/call-feature.js +2 -2
  348. package/dist/engine/steps/mail-send.js +1 -1
  349. package/dist/engine/steps/retry.js +1 -1
  350. package/dist/engine/steps/wait-for-event.js +1 -1
  351. package/dist/engine/steps/wait.js +1 -1
  352. package/dist/engine/steps/webhook-send.js +1 -1
  353. package/dist/engine/strip-disabled-features-from-app-schema.js +7 -3
  354. package/dist/engine/template-variables.d.ts +2 -1
  355. package/dist/engine/transfer-adjacency.d.ts +1 -1
  356. package/dist/engine/types/feature.d.ts +1 -0
  357. package/dist/engine/types/index.d.ts +8 -30
  358. package/dist/engine/types/index.js +2 -10
  359. package/dist/engine/types/screen.d.ts +1 -1
  360. package/dist/engine/types/screen.js +1 -1
  361. package/dist/engine/validation.d.ts +2 -1
  362. package/dist/entrypoint/index.d.ts +9 -35
  363. package/dist/entrypoint/index.js +10 -1
  364. package/dist/entrypoint/internals.d.ts +40 -0
  365. package/dist/entrypoint/internals.js +1 -0
  366. package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
  367. package/dist/entrypoint/row-level-security-mode-check.js +19 -0
  368. package/dist/env/dry-run-internals.d.ts +10 -0
  369. package/dist/env/dry-run-internals.js +1 -0
  370. package/dist/env/dry-run.d.ts +1 -10
  371. package/dist/env/dry-run.js +2 -1
  372. package/dist/env/index.d.ts +1 -85
  373. package/dist/env/index.js +6 -50
  374. package/dist/env/internals.d.ts +87 -0
  375. package/dist/env/internals.js +53 -0
  376. package/dist/errors/classes.js +2 -2
  377. package/dist/errors/index.d.ts +5 -14
  378. package/dist/errors/index.js +4 -9
  379. package/dist/errors/member-resolution.js +1 -1
  380. package/dist/errors/reasons.d.ts +0 -1
  381. package/dist/errors/reasons.js +7 -7
  382. package/dist/errors/serialize.d.ts +0 -18
  383. package/dist/errors/serialize.js +0 -27
  384. package/dist/es-ops/index.d.ts +4 -4
  385. package/dist/es-ops/index.js +2 -2
  386. package/dist/es-ops/operations-schema.d.ts +1 -1
  387. package/dist/es-ops/types.d.ts +4 -5
  388. package/dist/event-store/admin-api-internals.d.ts +14 -0
  389. package/dist/event-store/admin-api-internals.js +1 -0
  390. package/dist/event-store/admin-api.d.ts +1 -14
  391. package/dist/event-store/admin-api.js +11 -6
  392. package/dist/event-store/archive.js +4 -2
  393. package/dist/event-store/errors.js +2 -2
  394. package/dist/event-store/event-store.d.ts +1 -0
  395. package/dist/event-store/event-store.js +42 -32
  396. package/dist/event-store/events-schema.js +4 -1
  397. package/dist/event-store/index.d.ts +11 -13
  398. package/dist/event-store/index.js +7 -9
  399. package/dist/event-store/provenance-append.js +1 -1
  400. package/dist/event-store/rebuild-dead-letter.js +4 -2
  401. package/dist/event-store/snapshot.js +4 -3
  402. package/dist/event-store/stream-scope.d.ts +2 -0
  403. package/dist/event-store/stream-scope.js +6 -0
  404. package/dist/event-store/upcaster-dead-letter.js +4 -2
  405. package/dist/event-store/upcaster.d.ts +2 -1
  406. package/dist/files/action-form-upload.d.ts +2 -1
  407. package/dist/files/action-form-upload.js +1 -1
  408. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
  409. package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
  410. package/dist/files/bind-pending-file-refs.d.ts +2 -1
  411. package/dist/files/bind-pending-file-refs.js +2 -1
  412. package/dist/files/bind-referenced-files.write.js +1 -1
  413. package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
  414. package/dist/files/create-file-ref-from-bytes.js +6 -3
  415. package/dist/files/create-file-ref.d.ts +6 -2
  416. package/dist/files/create-file-ref.js +13 -4
  417. package/dist/files/dispose-removed-file-refs.d.ts +2 -1
  418. package/dist/files/dispose-removed-file-refs.js +1 -1
  419. package/dist/files/feature.js +2 -2
  420. package/dist/files/file-handle.js +1 -1
  421. package/dist/files/file-routes.d.ts +3 -1
  422. package/dist/files/file-routes.js +41 -4
  423. package/dist/files/index.d.ts +11 -13
  424. package/dist/files/index.js +5 -7
  425. package/dist/files/load-save-file-refs.d.ts +2 -1
  426. package/dist/files/load-save-file-refs.js +1 -1
  427. package/dist/files/provider-resolver.d.ts +6 -4
  428. package/dist/files/provider-resolver.js +5 -5
  429. package/dist/files/record-write-check.d.ts +6 -0
  430. package/dist/files/record-write-check.js +13 -0
  431. package/dist/files/storage-tracking.js +4 -2
  432. package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
  433. package/dist/files/sweep-orphaned-uploads.js +1 -1
  434. package/dist/files/upload-ledger.d.ts +2 -2
  435. package/dist/files/upload-ledger.js +4 -4
  436. package/dist/i18n/index.d.ts +2 -8
  437. package/dist/i18n/index.js +1 -1
  438. package/dist/i18n/internals.d.ts +7 -0
  439. package/dist/i18n/internals.js +1 -0
  440. package/dist/i18n/required-surface-keys.d.ts +4 -1
  441. package/dist/i18n/required-surface-keys.js +7 -2
  442. package/dist/internal/row-level-security.d.ts +3 -0
  443. package/dist/internal/row-level-security.js +3 -0
  444. package/dist/internal/stack-support.d.ts +1 -1
  445. package/dist/internal/stack-support.js +1 -1
  446. package/dist/internal/testing.d.ts +1 -0
  447. package/dist/internal/testing.js +10 -6
  448. package/dist/jobs/index.d.ts +1 -1
  449. package/dist/jobs/job-append-event.d.ts +12 -0
  450. package/dist/jobs/job-append-event.js +30 -0
  451. package/dist/jobs/job-runner-context.d.ts +2 -2
  452. package/dist/jobs/job-runner-context.js +46 -16
  453. package/dist/jobs/job-runner-execution.d.ts +1 -1
  454. package/dist/jobs/job-runner-execution.js +6 -4
  455. package/dist/jobs/job-runner-gates.d.ts +1 -1
  456. package/dist/jobs/job-runner-gates.js +0 -1
  457. package/dist/jobs/job-runner-helpers.d.ts +11 -4
  458. package/dist/jobs/job-runner-helpers.js +10 -1
  459. package/dist/jobs/job-runner-scope.d.ts +5 -2
  460. package/dist/jobs/job-runner-scope.js +6 -6
  461. package/dist/jobs/job-runner-types.d.ts +2 -1
  462. package/dist/jobs/job-runner.js +22 -6
  463. package/dist/jobs/max-per-tenant.d.ts +1 -1
  464. package/dist/logging/index.d.ts +1 -2
  465. package/dist/logging/index.js +1 -1
  466. package/dist/logging/pino-logger.js +1 -1
  467. package/dist/logging/utils.d.ts +1 -0
  468. package/dist/logging/utils.js +6 -0
  469. package/dist/migrations/index.d.ts +3 -3
  470. package/dist/migrations/index.js +3 -3
  471. package/dist/migrations/pending-rebuilds.d.ts +1 -1
  472. package/dist/migrations/pending-rebuilds.js +1 -1
  473. package/dist/migrations/pii-event-backfill.js +4 -1
  474. package/dist/observability/escape-hatch-report.d.ts +2 -1
  475. package/dist/observability/escape-hatch-report.js +9 -2
  476. package/dist/observability/index.d.ts +7 -15
  477. package/dist/observability/index.js +4 -12
  478. package/dist/observability/metric-validator.js +1 -1
  479. package/dist/observability/metrics-handle.d.ts +0 -1
  480. package/dist/observability/metrics-handle.js +2 -15
  481. package/dist/observability/recording-tracer.d.ts +1 -2
  482. package/dist/observability/recording-tracer.js +0 -6
  483. package/dist/observability/sensitive-filter.d.ts +0 -2
  484. package/dist/observability/sensitive-filter.js +0 -29
  485. package/dist/pipeline/active-membership.d.ts +2 -1
  486. package/dist/pipeline/active-membership.js +6 -2
  487. package/dist/pipeline/after-rollback-sink.d.ts +6 -0
  488. package/dist/pipeline/after-rollback-sink.js +32 -0
  489. package/dist/pipeline/append-event-core.d.ts +2 -1
  490. package/dist/pipeline/append-event-core.js +2 -2
  491. package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
  492. package/dist/pipeline/attach-outside-transaction.js +13 -0
  493. package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
  494. package/dist/pipeline/cascade-handler.d.ts +2 -1
  495. package/dist/pipeline/cascade-handler.js +3 -2
  496. package/dist/pipeline/config-accessor-factory.d.ts +1 -1
  497. package/dist/pipeline/config-accessor-factory.js +1 -1
  498. package/dist/pipeline/context-services.d.ts +56 -0
  499. package/dist/pipeline/context-services.js +73 -0
  500. package/dist/pipeline/dispatch-batch.d.ts +2 -1
  501. package/dist/pipeline/dispatch-batch.js +39 -19
  502. package/dist/pipeline/dispatch-query.js +5 -4
  503. package/dist/pipeline/dispatch-scope.d.ts +6 -0
  504. package/dist/pipeline/dispatch-scope.js +27 -0
  505. package/dist/pipeline/dispatch-shared.d.ts +13 -9
  506. package/dist/pipeline/dispatch-shared.js +75 -194
  507. package/dist/pipeline/dispatch-stream.js +8 -4
  508. package/dist/pipeline/dispatch-write.d.ts +2 -1
  509. package/dist/pipeline/dispatch-write.js +10 -8
  510. package/dist/pipeline/dispatcher-utils.d.ts +3 -1
  511. package/dist/pipeline/dispatcher-utils.js +8 -2
  512. package/dist/pipeline/dispatcher.d.ts +3 -2
  513. package/dist/pipeline/dispatcher.js +4 -3
  514. package/dist/pipeline/event-consumer-state.d.ts +0 -1
  515. package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
  516. package/dist/pipeline/event-dispatcher-delivery.js +7 -3
  517. package/dist/pipeline/event-dispatcher.d.ts +3 -2
  518. package/dist/pipeline/event-dispatcher.js +13 -12
  519. package/dist/pipeline/event-retention.js +59 -56
  520. package/dist/pipeline/handler-access-error.js +2 -1
  521. package/dist/pipeline/handler-context-auth.d.ts +5 -6
  522. package/dist/pipeline/handler-context-auth.js +7 -4
  523. package/dist/pipeline/handler-context-config.d.ts +2 -5
  524. package/dist/pipeline/handler-context-config.js +2 -2
  525. package/dist/pipeline/handler-context-db.d.ts +32 -7
  526. package/dist/pipeline/handler-context-db.js +26 -17
  527. package/dist/pipeline/handler-context-dispatch.d.ts +14 -6
  528. package/dist/pipeline/handler-context-dispatch.js +18 -5
  529. package/dist/pipeline/handler-context-events.d.ts +22 -38
  530. package/dist/pipeline/handler-context-events.js +42 -35
  531. package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
  532. package/dist/pipeline/handler-context-member-resolution.js +110 -0
  533. package/dist/pipeline/handler-context-notify.d.ts +3 -2
  534. package/dist/pipeline/handler-context-notify.js +1 -1
  535. package/dist/pipeline/handler-context-observability.d.ts +2 -4
  536. package/dist/pipeline/handler-context-observability.js +7 -5
  537. package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
  538. package/dist/pipeline/handler-context-phase-denials.js +98 -0
  539. package/dist/pipeline/handler-context-scope.d.ts +7 -10
  540. package/dist/pipeline/handler-context-scope.js +18 -20
  541. package/dist/pipeline/index.d.ts +9 -21
  542. package/dist/pipeline/index.js +5 -7
  543. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  544. package/dist/pipeline/irreversible-operation-gate.js +2 -2
  545. package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
  546. package/dist/pipeline/lifecycle-pipeline.js +9 -15
  547. package/dist/pipeline/member-read-only-transaction.js +11 -3
  548. package/dist/pipeline/member-reader.d.ts +1 -1
  549. package/dist/pipeline/member-reader.js +2 -2
  550. package/dist/pipeline/msp-rebuild.js +5 -3
  551. package/dist/pipeline/multi-stream-apply-context.js +3 -2
  552. package/dist/pipeline/notify-scope.d.ts +2 -1
  553. package/dist/pipeline/pre-handler-gates.d.ts +2 -1
  554. package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
  555. package/dist/pipeline/pre-transaction-reservations.js +9 -7
  556. package/dist/pipeline/projection-rebuild.js +12 -5
  557. package/dist/pipeline/projection-state.d.ts +0 -6
  558. package/dist/pipeline/projection-state.js +0 -5
  559. package/dist/pipeline/projections-runner.d.ts +2 -1
  560. package/dist/pipeline/projections-runner.js +10 -6
  561. package/dist/pipeline/system-hooks.d.ts +6 -2
  562. package/dist/pipeline/system-hooks.js +61 -10
  563. package/dist/pipeline/system-identity-switch.d.ts +4 -2
  564. package/dist/pipeline/system-identity-switch.js +51 -36
  565. package/dist/pipeline/typed-append-event.d.ts +2 -0
  566. package/dist/pipeline/typed-append-event.js +4 -0
  567. package/dist/pipeline/write-origin.js +2 -2
  568. package/dist/pipeline/write-result-masking.d.ts +1 -1
  569. package/dist/pipeline/write-result-masking.js +13 -10
  570. package/dist/random/index.d.ts +1 -2
  571. package/dist/random/index.js +1 -2
  572. package/dist/rate-limit/bucket.d.ts +2 -1
  573. package/dist/rate-limit/middleware.js +2 -1
  574. package/dist/redis/index.d.ts +3 -4
  575. package/dist/redis/index.js +2 -2
  576. package/dist/schema-cli/apply-command.js +5 -2
  577. package/dist/schema-cli/baseline-command.js +7 -2
  578. package/dist/schema-cli/generate-command.js +7 -9
  579. package/dist/schema-cli/shared.d.ts +4 -0
  580. package/dist/schema-cli/shared.js +21 -2
  581. package/dist/schema-cli/status-command.js +8 -2
  582. package/dist/schema-cli/validate-command.js +52 -4
  583. package/dist/schema-cli.d.ts +0 -1
  584. package/dist/search/configure-tenant-index.d.ts +1 -3
  585. package/dist/search/configure-tenant-index.js +0 -4
  586. package/dist/search/index.d.ts +1 -4
  587. package/dist/search/index.js +0 -2
  588. package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
  589. package/dist/search/meilisearch-adapter-internals.js +9 -0
  590. package/dist/search/meilisearch-adapter.d.ts +1 -8
  591. package/dist/search/meilisearch-adapter.js +6 -7
  592. package/dist/search/meilisearch-peer.d.ts +2 -0
  593. package/dist/search/meilisearch-peer.js +5 -0
  594. package/dist/search/reindex-entity.js +107 -91
  595. package/dist/secrets/index.d.ts +3 -4
  596. package/dist/secrets/index.js +2 -3
  597. package/dist/seeding/index.d.ts +2 -2
  598. package/dist/seeding/index.js +1 -2
  599. package/dist/time/index.d.ts +2 -2
  600. package/dist/time/index.js +1 -1
  601. package/dist/time/tz-context.d.ts +0 -5
  602. package/dist/time/tz-context.js +0 -9
  603. package/dist/ui-types/index.d.ts +8 -11
  604. package/dist/ui-types/index.js +3 -3
  605. package/dist/upgrade-changelog.d.ts +3 -0
  606. package/dist/upgrade-changelog.js +18 -0
  607. package/dist/upgrade-cli-internals.d.ts +8 -0
  608. package/dist/upgrade-cli-internals.js +63 -0
  609. package/dist/upgrade-cli.d.ts +1 -18
  610. package/dist/upgrade-cli.js +29 -137
  611. package/dist/upgrade-marker-parse.d.ts +32 -0
  612. package/dist/upgrade-marker-parse.js +73 -0
  613. package/dist/utils/import-optional-peer.d.ts +6 -0
  614. package/dist/utils/import-optional-peer.js +19 -0
  615. package/dist/utils/index.d.ts +1 -4
  616. package/dist/utils/index.js +1 -4
  617. package/package.json +27 -20
  618. package/src/changes.json +451 -0
  619. package/dist/crypto/request-kms-cache.d.ts +0 -8
  620. package/dist/crypto/request-kms-cache.js +0 -21
  621. package/dist/engine/codemod/index.d.ts +0 -2
  622. package/dist/engine/codemod/index.js +0 -1
  623. package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
  624. package/dist/engine/codemod/pipeline-codemod.js +0 -536
  625. package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
  626. package/dist/engine/feature-ast/entity-field-types.js +0 -35
  627. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
  628. package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
  629. package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
  630. package/dist/engine/feature-ast/extractors/events.js +0 -275
  631. package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
  632. package/dist/engine/feature-ast/extractors/handlers.js +0 -358
  633. package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
  634. package/dist/engine/feature-ast/extractors/hooks.js +0 -248
  635. package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
  636. package/dist/engine/feature-ast/extractors/index.js +0 -13
  637. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
  638. package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
  639. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
  640. package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
  641. package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
  642. package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
  643. package/dist/engine/feature-ast/extractors/round1.d.ts +0 -10
  644. package/dist/engine/feature-ast/extractors/round1.js +0 -81
  645. package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
  646. package/dist/engine/feature-ast/extractors/round2.js +0 -191
  647. package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
  648. package/dist/engine/feature-ast/extractors/round3.js +0 -292
  649. package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
  650. package/dist/engine/feature-ast/extractors/round5.js +0 -68
  651. package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
  652. package/dist/engine/feature-ast/extractors/round6.js +0 -17
  653. package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
  654. package/dist/engine/feature-ast/extractors/shared.js +0 -343
  655. package/dist/engine/feature-ast/index.d.ts +0 -16
  656. package/dist/engine/feature-ast/index.js +0 -10
  657. package/dist/engine/feature-ast/parse.d.ts +0 -31
  658. package/dist/engine/feature-ast/parse.js +0 -483
  659. package/dist/engine/feature-ast/patch.d.ts +0 -210
  660. package/dist/engine/feature-ast/patch.js +0 -610
  661. package/dist/engine/feature-ast/patcher.d.ts +0 -217
  662. package/dist/engine/feature-ast/patcher.js +0 -281
  663. package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1476
  664. package/dist/engine/feature-ast/pattern-change-schema.js +0 -1226
  665. package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
  666. package/dist/engine/feature-ast/pattern-id-matchers.js +0 -210
  667. package/dist/engine/feature-ast/patterns.d.ts +0 -318
  668. package/dist/engine/feature-ast/patterns.js +0 -106
  669. package/dist/engine/feature-ast/render.d.ts +0 -47
  670. package/dist/engine/feature-ast/render.js +0 -662
  671. package/dist/engine/feature-ast/source-location.d.ts +0 -17
  672. package/dist/engine/feature-ast/source-location.js +0 -27
  673. package/dist/engine/pattern-library/index.d.ts +0 -2
  674. package/dist/engine/pattern-library/index.js +0 -3
  675. package/dist/engine/pattern-library/library.d.ts +0 -14
  676. package/dist/engine/pattern-library/library.js +0 -93
  677. package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
  678. package/dist/engine/pattern-library/mixed-schemas.js +0 -559
  679. package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
  680. package/dist/engine/pattern-library/opaque-schemas.js +0 -115
  681. package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
  682. package/dist/engine/pattern-library/shared-fields.js +0 -88
  683. package/dist/engine/pattern-library/static-schemas.d.ts +0 -20
  684. package/dist/engine/pattern-library/static-schemas.js +0 -478
  685. package/dist/engine/pattern-library/types.d.ts +0 -158
  686. package/dist/engine/pattern-library/types.js +0 -36
  687. package/dist/engine/provider-plugin-context.d.ts +0 -3
  688. package/dist/engine/provider-plugin-context.js +0 -28
  689. package/dist/engine/resolve-config-or-param.d.ts +0 -18
  690. package/dist/engine/resolve-config-or-param.js +0 -76
  691. package/src/scripts/codemod/README.md +0 -187
  692. package/src/scripts/codemod/codemod-support.ts +0 -334
  693. package/src/scripts/codemod/collect-source-files.ts +0 -48
  694. package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
  695. package/src/scripts/codemod/db-factory.ts +0 -810
  696. package/src/scripts/codemod/feature-factory.ts +0 -429
  697. package/src/scripts/codemod/feature-layout.ts +0 -424
  698. package/src/scripts/codemod/import-extensions.ts +0 -118
  699. package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
  700. package/src/scripts/codemod/migrate-db-raw.ts +0 -401
  701. package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
  702. package/src/scripts/codemod/object-form.ts +0 -746
  703. package/src/scripts/codemod/package-merge.ts +0 -299
  704. package/src/scripts/codemod/pii-personal-migration.ts +0 -816
  705. package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
  706. package/src/scripts/codemod/s3-imports.ts +0 -236
  707. package/src/scripts/codemod/tenant-db-options.ts +0 -454
  708. package/src/scripts/codemod/testing-injection.ts +0 -215
  709. package/src/scripts/codemod/testing-move-targets.ts +0 -161
  710. package/src/scripts/codemod/testing-move.ts +0 -542
  711. package/src/scripts/codemod/unprocessable-error-details-reason.ts +0 -411
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";
@@ -1,2 +1,5 @@
1
1
  import type { MiddlewareHandler } from "hono";
2
+ export declare const CIPHERTEXT_RE: RegExp;
3
+ export declare const CIPHERTEXT_REDACT_RE: RegExp;
4
+ export declare const CIPHERTEXT_REDACTION = "[pii-redacted]";
2
5
  export declare function piiCiphertextResponseGuard(): MiddlewareHandler;
@@ -8,8 +8,9 @@ const isProductionEnv = () => process.env["NODE_ENV"] === "production";
8
8
  // Bound to the full ciphertext shape (prefix, "<kind>:<id>" subject key, base64
9
9
  // blob of at least IV + GCM tag = 28 bytes) so a user-typed "kumiko-pii:v" in a
10
10
  // note or name field cannot turn every read of that record into a 500.
11
- const CIPHERTEXT_RE = /kumiko-pii:v\d+:[^:"\s<>\\]+:[^:"\s<>\\]+:[A-Za-z0-9+/=]{40,}/;
12
- const CIPHERTEXT_REDACT_RE = new RegExp(CIPHERTEXT_RE.source, "g");
11
+ export const CIPHERTEXT_RE = /kumiko-pii:v\d+:[^:"\s<>\\]+:[^:"\s<>\\]+:[A-Za-z0-9+/=]{40,}/;
12
+ export const CIPHERTEXT_REDACT_RE = new RegExp(CIPHERTEXT_RE.source, "g");
13
+ export const CIPHERTEXT_REDACTION = "[pii-redacted]";
13
14
  // A PII subject ciphertext never belongs in an API response — its presence
14
15
  // means a raw DB read (fetchOne/selectMany) leaked to the surface. Dev/test
15
16
  // fail loud (500) so a forgotten decrypt turns the first integration test
@@ -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,4 +1,5 @@
1
1
  import { type Context, Hono } from "hono";
2
+ import { type KumikoError } from "../errors/index.ts";
2
3
  import type { Dispatcher } from "../pipeline/dispatcher.ts";
3
4
  export declare const StreamFrame: {
4
5
  readonly chunk: "chunk";
@@ -18,4 +19,19 @@ export type SseWriter = {
18
19
  };
19
20
  export declare function pumpStream(stream: SseWriter, generator: AsyncGenerator<unknown>, heartbeatMs: number, firstPull?: Promise<IteratorResult<unknown>>): Promise<void>;
20
21
  export declare const MAX_PAYLOAD_DEPTH = 20;
22
+ export declare function assertPayloadDepthAllowed(payload: unknown): void;
23
+ export declare function queryErrorResponse(c: Context, err: KumikoError, type?: unknown): (Response & import("hono").TypedResponse<{
24
+ readonly error: {
25
+ readonly code: string;
26
+ readonly i18nKey: string;
27
+ readonly i18nParams?: {
28
+ readonly [x: string]: import("hono/utils/types").JSONValue;
29
+ } | undefined;
30
+ readonly message: string;
31
+ readonly details?: import("hono/utils/types").JSONValue | undefined;
32
+ readonly docsUrl?: string;
33
+ readonly requestId?: string;
34
+ readonly timestamp: string;
35
+ };
36
+ }, -1 | 100 | 102 | 103 | 200 | 201 | 202 | 203 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 305 | 306 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511, "json">) | (Response & import("hono").TypedResponse<null, -1 | 100 | 102 | 103 | 200 | 201 | 202 | 203 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 305 | 306 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 421 | 422 | 423 | 424 | 425 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511, "body">);
21
37
  export declare function handleUncaughtRouteError(err: Error, c: Context): Response | Promise<Response>;
@@ -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
@@ -312,7 +316,7 @@ async function readDispatchBody(c) {
312
316
  // jsonb serialization of custom-fields payloads) walks the same object
313
317
  // graph an attacker controls, so an uncapped depth is a stack-overflow /
314
318
  // CPU-DoS vector even under the 1MB body-byte limit.
315
- function assertPayloadDepthAllowed(payload) {
319
+ export function assertPayloadDepthAllowed(payload) {
316
320
  if (payloadDepth(payload, 0) > MAX_PAYLOAD_DEPTH) {
317
321
  throw new ValidationError({
318
322
  fields: [
@@ -428,7 +432,7 @@ function clientAbortResponse(c, requestId, type) {
428
432
  }
429
433
  // For /query + /command: no isSuccess on success (just { data } / {ok}), so we
430
434
  // keep the same lean shape on failure — only the `error` key.
431
- function queryErrorResponse(c, err, type) {
435
+ export function queryErrorResponse(c, err, type) {
432
436
  const requestId = requestContext.get()?.requestId;
433
437
  if (isClientAbort(err))
434
438
  return clientAbortResponse(c, requestId, type);
@@ -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.
@@ -34,14 +35,16 @@ export function mountExtraRoutes(app, wiring) {
34
35
  }
35
36
  const dispatchSystemWrite = makeDispatchSystemWrite(dispatcher);
36
37
  const dispatchSystemQuery = makeDispatchSystemQuery(dispatcher);
38
+ const dispatchWriteAs = makeDispatchWriteAs(dispatcher);
37
39
  for (const route of options.extraRoutes) {
38
40
  const honoHandler = buildExtraRouteHonoHandler(route, {
39
41
  app,
40
42
  dispatcher,
41
43
  registry: options.registry,
42
- secrets: context.secrets,
44
+ secrets: context.secrets && tenantScopedSecrets(context.secrets),
43
45
  dispatchSystemWrite,
44
46
  dispatchSystemQuery,
47
+ dispatchWriteAs,
45
48
  clientIpResolver,
46
49
  });
47
50
  mountHonoRoute(app, route.method, route.path, honoHandler, bodyLimitForRoutePath(route.path, options.maxRequestBytes ?? DEFAULT_MAX_REQUEST_BYTES));
@@ -195,6 +198,7 @@ function buildExtraRouteHonoHandler(route, shared) {
195
198
  systemQuery: makeSystemQuery(c, shared.dispatcher, shared.clientIpResolver),
196
199
  dispatchSystemWrite: shared.dispatchSystemWrite,
197
200
  dispatchSystemQuery: shared.dispatchSystemQuery,
201
+ dispatchWriteAs: shared.dispatchWriteAs,
198
202
  });
199
203
  };
200
204
  default:
@@ -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";
@@ -10,7 +11,7 @@ export declare function mountAuthRoutes(app: Hono, wiring: Pick<ServerWiring, "o
10
11
  export declare function mountClientErrorRoute(app: Hono, wiring: Pick<ServerWiring, "rateLimitResolver" | "tracedRedis" | "clientIpResolver" | "observability" | "jwt">): void;
11
12
  export declare function mountDispatcherRoutes(app: Hono, wiring: Pick<ServerWiring, "options" | "dispatcher" | "sseBroker">): void;
12
13
  export declare function mountSchemaRoute(app: Hono, options: Pick<ServerOptions, "registry" | "dispatcherOptions" | "context">): void;
13
- export declare function mountFileRoutes(app: Hono, wiring: Pick<ServerWiring, "options" | "dispatcher" | "fileProviderResolver">): void;
14
+ export declare function mountFileRoutes(app: Hono, wiring: Pick<ServerWiring, "options" | "dispatcher" | "fileProviderResolver" | "rateLimitResolver" | "tracedRedis">): void;
14
15
  export declare function mountFeatureHttpRoutes(app: Hono, wiring: Pick<ServerWiring, "options" | "dispatcher" | "clientIpResolver" | "rateLimitResolver" | "observability">, sessionOnlyHttpRouteGuards: readonly MiddlewareHandler[]): void;
15
16
  export declare function installNoRouteMatchMarker(app: Hono): void;
16
17
  export declare function mountHonoRoute(app: Hono, method: HttpRouteMethod, path: string, handler: (c: import("hono").Context<any, any>) => Response | Promise<Response>, middlewares?: readonly MiddlewareHandler[]): void;