@cosmicdrift/kumiko-framework 0.369.0 → 0.370.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 (449) hide show
  1. package/AGENTS.md +14 -1
  2. package/agents/examples/apex-surface-auth.md +2 -1
  3. package/agents/examples/app-config.md +98 -0
  4. package/agents/examples/auth-mfa.md +72 -0
  5. package/agents/examples/compose-stacks.md +188 -0
  6. package/agents/examples/env-composition.md +268 -0
  7. package/agents/examples/host-routing.md +181 -0
  8. package/agents/examples/legal-pages.md +52 -3
  9. package/agents/examples/managed-config.md +1 -0
  10. package/agents/examples/managed-pages.md +1 -0
  11. package/agents/examples/prod-boot-options.md +180 -0
  12. package/agents/examples/relations.md +4 -0
  13. package/agents/examples/secrets-demo.md +4 -2
  14. package/agents/examples/security-baseline.md +20 -17
  15. package/agents/examples.md +6 -1
  16. package/agents/features.md +14 -2
  17. package/dist/api/anonymous-cookie.d.ts +1 -1
  18. package/dist/api/anonymous-live-entities.d.ts +1 -1
  19. package/dist/api/auth-middleware.d.ts +2 -2
  20. package/dist/api/auth-routes.d.ts +7 -7
  21. package/dist/api/extra-route.d.ts +2 -2
  22. package/dist/api/index.d.ts +37 -37
  23. package/dist/api/jwt.d.ts +1 -1
  24. package/dist/api/observability-middleware.d.ts +1 -1
  25. package/dist/api/readiness.d.ts +1 -1
  26. package/dist/api/redis-sse-broker.d.ts +2 -2
  27. package/dist/api/request-context.d.ts +1 -1
  28. package/dist/api/request-id-middleware.d.ts +3 -3
  29. package/dist/api/route-registrars.d.ts +4 -4
  30. package/dist/api/routes.d.ts +1 -1
  31. package/dist/api/server.d.ts +16 -16
  32. package/dist/api/sse-broker.d.ts +1 -1
  33. package/dist/api/sse-route.d.ts +1 -1
  34. package/dist/api/websocket-route.d.ts +3 -3
  35. package/dist/auth/index.d.ts +2 -2
  36. package/dist/compliance/duration-spec.d.ts +2 -2
  37. package/dist/compliance/index.d.ts +6 -6
  38. package/dist/compliance/profiles.d.ts +1 -1
  39. package/dist/config/index.d.ts +44 -0
  40. package/dist/config/index.js +61 -0
  41. package/dist/crypto/blind-index.d.ts +1 -1
  42. package/dist/crypto/event-pii.d.ts +1 -1
  43. package/dist/crypto/in-memory-kms-adapter.d.ts +1 -1
  44. package/dist/crypto/index.d.ts +11 -11
  45. package/dist/crypto/is-self-pii-field.d.ts +1 -1
  46. package/dist/crypto/kms-wiring.d.ts +2 -2
  47. package/dist/crypto/owner-transition-rekey.d.ts +1 -1
  48. package/dist/crypto/pg-kms-adapter.d.ts +1 -1
  49. package/dist/crypto/pii-field-encryption.d.ts +4 -4
  50. package/dist/crypto/request-kms-cache.d.ts +1 -1
  51. package/dist/crypto/subject-resolver.d.ts +3 -3
  52. package/dist/db/apply-entity-event.d.ts +4 -4
  53. package/dist/db/assert-exists-in.d.ts +4 -4
  54. package/dist/db/blind-index-cleanup.d.ts +2 -2
  55. package/dist/db/collect-table-metas.d.ts +2 -2
  56. package/dist/db/compound-types.d.ts +1 -1
  57. package/dist/db/config-seed.d.ts +5 -5
  58. package/dist/db/connection.d.ts +1 -6
  59. package/dist/db/connection.js +15 -4
  60. package/dist/db/dialect.d.ts +1 -1
  61. package/dist/db/eagerload.d.ts +3 -3
  62. package/dist/db/entity-field-encryption.d.ts +3 -3
  63. package/dist/db/entity-field-encryption.js +3 -1
  64. package/dist/db/entity-table-from-registry.d.ts +3 -3
  65. package/dist/db/entity-table-meta.d.ts +3 -3
  66. package/dist/db/event-store-executor-context.d.ts +9 -9
  67. package/dist/db/event-store-executor-read.d.ts +2 -2
  68. package/dist/db/event-store-executor-write.d.ts +2 -2
  69. package/dist/db/event-store-executor.d.ts +8 -8
  70. package/dist/db/feature-table-sources.d.ts +1 -1
  71. package/dist/db/index.d.ts +39 -39
  72. package/dist/db/located-timestamp.d.ts +1 -1
  73. package/dist/db/lock-guard.d.ts +2 -2
  74. package/dist/db/migrate-generator.d.ts +2 -2
  75. package/dist/db/migrate-runner.d.ts +1 -1
  76. package/dist/db/money.d.ts +1 -1
  77. package/dist/db/parent-ref-clause.d.ts +4 -4
  78. package/dist/db/projection-registry-binding.d.ts +1 -1
  79. package/dist/db/queries/advisory-lock.d.ts +1 -1
  80. package/dist/db/queries/backfill-pii.d.ts +2 -2
  81. package/dist/db/queries/ddl.d.ts +1 -1
  82. package/dist/db/queries/entity-read.d.ts +1 -1
  83. package/dist/db/queries/es-ops.d.ts +1 -1
  84. package/dist/db/queries/event-consumer.d.ts +2 -2
  85. package/dist/db/queries/event-store-admin.d.ts +1 -1
  86. package/dist/db/queries/event-store-transfer.d.ts +1 -1
  87. package/dist/db/queries/event-store.d.ts +1 -1
  88. package/dist/db/queries/pii-backfill-state.d.ts +1 -1
  89. package/dist/db/queries/projection-rebuild.d.ts +1 -1
  90. package/dist/db/queries/raw-sql.d.ts +1 -1
  91. package/dist/db/queries/seed-context.d.ts +2 -2
  92. package/dist/db/queries/shadow-swap.d.ts +3 -3
  93. package/dist/db/queries/table-ops.d.ts +1 -1
  94. package/dist/db/queries/test-stack.d.ts +2 -2
  95. package/dist/db/query.d.ts +3 -3
  96. package/dist/db/rebuild-marker.d.ts +1 -1
  97. package/dist/db/reference-data.d.ts +3 -3
  98. package/dist/db/render-ddl.d.ts +1 -1
  99. package/dist/db/replay-migration-sql.d.ts +1 -1
  100. package/dist/db/retired-framework-tables.d.ts +1 -1
  101. package/dist/db/schema-inspection.d.ts +1 -1
  102. package/dist/db/table-builder.d.ts +4 -4
  103. package/dist/db/table-push.d.ts +3 -3
  104. package/dist/db/tenant-db-runner.d.ts +2 -2
  105. package/dist/db/tenant-db.d.ts +7 -9
  106. package/dist/db/tenant-db.js +2 -12
  107. package/dist/derivatives/derivatives-context.d.ts +3 -3
  108. package/dist/derivatives/field-variants.d.ts +1 -1
  109. package/dist/derivatives/index.d.ts +6 -6
  110. package/dist/engine/access.d.ts +1 -1
  111. package/dist/engine/active-membership.d.ts +2 -2
  112. package/dist/engine/boot-validator/access-declarations.d.ts +1 -1
  113. package/dist/engine/boot-validator/access-roles.d.ts +1 -1
  114. package/dist/engine/boot-validator/action-wiring.d.ts +1 -1
  115. package/dist/engine/boot-validator/api-ext.d.ts +1 -1
  116. package/dist/engine/boot-validator/boot-check.d.ts +1 -1
  117. package/dist/engine/boot-validator/card-meta-overflow.d.ts +1 -1
  118. package/dist/engine/boot-validator/config-deps.d.ts +1 -1
  119. package/dist/engine/boot-validator/detail-screens.d.ts +2 -2
  120. package/dist/engine/boot-validator/entity-handler.d.ts +1 -1
  121. package/dist/engine/boot-validator/entity-list-screens.d.ts +1 -1
  122. package/dist/engine/boot-validator/gdpr-storage.d.ts +1 -1
  123. package/dist/engine/boot-validator/global-tenancy.d.ts +1 -1
  124. package/dist/engine/boot-validator/handler-field-references.d.ts +1 -1
  125. package/dist/engine/boot-validator/i18n-keys.d.ts +1 -1
  126. package/dist/engine/boot-validator/index.d.ts +7 -7
  127. package/dist/engine/boot-validator/nav.d.ts +1 -1
  128. package/dist/engine/boot-validator/ownership.d.ts +2 -2
  129. package/dist/engine/boot-validator/parent-ref.d.ts +1 -1
  130. package/dist/engine/boot-validator/pii-retention.d.ts +2 -2
  131. package/dist/engine/boot-validator/projection-list-screens.d.ts +1 -1
  132. package/dist/engine/boot-validator/query-output-columns.d.ts +1 -1
  133. package/dist/engine/boot-validator/query-refs.d.ts +1 -1
  134. package/dist/engine/boot-validator/record-owned.d.ts +1 -1
  135. package/dist/engine/boot-validator/screens.d.ts +2 -2
  136. package/dist/engine/boot-validator/security-baseline.d.ts +1 -1
  137. package/dist/engine/boot-validator/selector-owner-panels.d.ts +1 -1
  138. package/dist/engine/boot-validator/transfer-graph.d.ts +2 -2
  139. package/dist/engine/boot-validator/url-prefill-fields.d.ts +1 -1
  140. package/dist/engine/boot-validator/workspaces.d.ts +1 -1
  141. package/dist/engine/boot-validator.d.ts +1 -1
  142. package/dist/engine/bridge-stub.d.ts +1 -1
  143. package/dist/engine/build-app-schema.d.ts +2 -2
  144. package/dist/engine/build-config-feature-schema.d.ts +5 -5
  145. package/dist/engine/build-target.d.ts +2 -2
  146. package/dist/engine/changeset-changes.d.ts +1 -1
  147. package/dist/engine/codemod/index.d.ts +2 -2
  148. package/dist/engine/config-helpers.d.ts +1 -1
  149. package/dist/engine/constants.d.ts +1 -1
  150. package/dist/engine/create-app.d.ts +2 -2
  151. package/dist/engine/cross-tenant.d.ts +2 -2
  152. package/dist/engine/dedupe-features.d.ts +1 -1
  153. package/dist/engine/define-feature.d.ts +1 -1
  154. package/dist/engine/define-feature.js +2 -2
  155. package/dist/engine/define-handler.d.ts +4 -4
  156. package/dist/engine/define-step.d.ts +1 -1
  157. package/dist/engine/define-workflow.d.ts +2 -2
  158. package/dist/engine/effective-features.d.ts +1 -1
  159. package/dist/engine/embedded-derived.d.ts +1 -1
  160. package/dist/engine/entity-handlers.d.ts +6 -5
  161. package/dist/engine/entity-handlers.js +6 -3
  162. package/dist/engine/event-def.d.ts +15 -0
  163. package/dist/engine/event-def.js +123 -0
  164. package/dist/engine/event-helpers.d.ts +1 -1
  165. package/dist/engine/extension-names.d.ts +8 -8
  166. package/dist/engine/extension-selector-plugins.d.ts +2 -2
  167. package/dist/engine/extensions/escape-hatch-usage.d.ts +1 -1
  168. package/dist/engine/extensions/storage-provider.d.ts +1 -1
  169. package/dist/engine/extensions/tenant-data.d.ts +3 -3
  170. package/dist/engine/extensions/tenant-resource.d.ts +2 -2
  171. package/dist/engine/extensions/user-data.d.ts +2 -2
  172. package/dist/engine/factories.d.ts +1 -1
  173. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +2 -2
  174. package/dist/engine/feature-ast/extractors/events.d.ts +2 -2
  175. package/dist/engine/feature-ast/extractors/handlers.d.ts +4 -4
  176. package/dist/engine/feature-ast/extractors/hooks.d.ts +5 -5
  177. package/dist/engine/feature-ast/extractors/index.d.ts +14 -14
  178. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +3 -3
  179. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +3 -3
  180. package/dist/engine/feature-ast/extractors/round1.d.ts +2 -2
  181. package/dist/engine/feature-ast/extractors/round2.d.ts +2 -2
  182. package/dist/engine/feature-ast/extractors/round3.d.ts +4 -4
  183. package/dist/engine/feature-ast/extractors/round5.d.ts +2 -2
  184. package/dist/engine/feature-ast/extractors/round6.d.ts +2 -2
  185. package/dist/engine/feature-ast/extractors/shared.d.ts +2 -2
  186. package/dist/engine/feature-ast/index.d.ts +16 -16
  187. package/dist/engine/feature-ast/parse.d.ts +2 -2
  188. package/dist/engine/feature-ast/patch.d.ts +1 -1
  189. package/dist/engine/feature-ast/patcher.d.ts +15 -15
  190. package/dist/engine/feature-ast/pattern-change-schema.d.ts +10 -10
  191. package/dist/engine/feature-ast/patterns.d.ts +15 -15
  192. package/dist/engine/feature-ast/render.d.ts +1 -1
  193. package/dist/engine/feature-builder-state.d.ts +5 -5
  194. package/dist/engine/feature-config-events-jobs.d.ts +3 -3
  195. package/dist/engine/feature-config-events-jobs.js +8 -130
  196. package/dist/engine/feature-entity-handlers.d.ts +4 -4
  197. package/dist/engine/feature-entity-handlers.js +11 -5
  198. package/dist/engine/feature-manifest.d.ts +1 -1
  199. package/dist/engine/feature-ui-extensions.d.ts +7 -7
  200. package/dist/engine/feature-ui-extensions.js +2 -2
  201. package/dist/engine/field-access.d.ts +1 -1
  202. package/dist/engine/field-helpers.d.ts +1 -1
  203. package/dist/engine/handler-helpers.d.ts +1 -1
  204. package/dist/engine/index.d.ts +89 -88
  205. package/dist/engine/index.js +1 -0
  206. package/dist/engine/instruction-fields.d.ts +1 -1
  207. package/dist/engine/object-form.d.ts +1 -1
  208. package/dist/engine/object-form.js +5 -6
  209. package/dist/engine/ownership.d.ts +3 -3
  210. package/dist/engine/pattern-library/index.d.ts +2 -2
  211. package/dist/engine/pattern-library/library.d.ts +2 -2
  212. package/dist/engine/pattern-library/mixed-schemas.d.ts +1 -1
  213. package/dist/engine/pattern-library/opaque-schemas.d.ts +1 -1
  214. package/dist/engine/pattern-library/shared-fields.d.ts +1 -1
  215. package/dist/engine/pattern-library/static-schemas.d.ts +1 -1
  216. package/dist/engine/pattern-library/types.d.ts +1 -1
  217. package/dist/engine/personal-data-fields.d.ts +2 -2
  218. package/dist/engine/pipeline.d.ts +2 -2
  219. package/dist/engine/project-app-schema-for-roles.d.ts +1 -1
  220. package/dist/engine/projection-helpers.d.ts +4 -4
  221. package/dist/engine/read-claim.d.ts +1 -1
  222. package/dist/engine/registry-facade.d.ts +2 -2
  223. package/dist/engine/registry-ingest.d.ts +2 -2
  224. package/dist/engine/registry-state.d.ts +2 -2
  225. package/dist/engine/registry-validate.d.ts +3 -3
  226. package/dist/engine/registry.d.ts +1 -1
  227. package/dist/engine/resolve-config-or-param.d.ts +2 -2
  228. package/dist/engine/role-assignment.d.ts +1 -1
  229. package/dist/engine/run-in.d.ts +1 -1
  230. package/dist/engine/run-pipeline.d.ts +3 -3
  231. package/dist/engine/schema-builder.d.ts +1 -1
  232. package/dist/engine/screen-filter-ops.d.ts +1 -1
  233. package/dist/engine/screen-helpers.d.ts +2 -2
  234. package/dist/engine/soft-delete-cleanup.d.ts +2 -2
  235. package/dist/engine/steps/_event-match.d.ts +1 -1
  236. package/dist/engine/steps/_no-return-guard.d.ts +1 -1
  237. package/dist/engine/steps/_read-source.d.ts +4 -4
  238. package/dist/engine/steps/_resolver-utils.d.ts +1 -1
  239. package/dist/engine/steps/aggregate-append-event.d.ts +1 -1
  240. package/dist/engine/steps/aggregate-create.d.ts +2 -2
  241. package/dist/engine/steps/aggregate-update.d.ts +3 -3
  242. package/dist/engine/steps/branch.d.ts +1 -1
  243. package/dist/engine/steps/call-feature.d.ts +2 -2
  244. package/dist/engine/steps/compute.d.ts +1 -1
  245. package/dist/engine/steps/for-each.d.ts +1 -1
  246. package/dist/engine/steps/mail-send.d.ts +1 -1
  247. package/dist/engine/steps/read-find-many.d.ts +2 -2
  248. package/dist/engine/steps/read-find-one.d.ts +2 -2
  249. package/dist/engine/steps/retry.d.ts +1 -1
  250. package/dist/engine/steps/return.d.ts +2 -2
  251. package/dist/engine/steps/unsafe-projection-delete.d.ts +2 -2
  252. package/dist/engine/steps/unsafe-projection-upsert.d.ts +1 -1
  253. package/dist/engine/steps/wait-for-event.d.ts +1 -1
  254. package/dist/engine/steps/wait.d.ts +1 -1
  255. package/dist/engine/steps/webhook-send.d.ts +1 -1
  256. package/dist/engine/strip-disabled-features-from-app-schema.d.ts +4 -4
  257. package/dist/engine/system-user.d.ts +2 -2
  258. package/dist/engine/template-variables.d.ts +1 -1
  259. package/dist/engine/tier-resolver-extension.d.ts +4 -4
  260. package/dist/engine/transfer-adjacency.d.ts +1 -1
  261. package/dist/engine/types/index.d.ts +6 -6
  262. package/dist/engine/validate-projection-allowlist.d.ts +1 -1
  263. package/dist/engine/validation.d.ts +1 -1
  264. package/dist/entrypoint/index.d.ts +12 -12
  265. package/dist/env/dry-run.d.ts +14 -1
  266. package/dist/env/dry-run.js +50 -0
  267. package/dist/env/index.d.ts +54 -16
  268. package/dist/env/index.js +60 -6
  269. package/dist/errors/classes.d.ts +3 -3
  270. package/dist/errors/docs-url.d.ts +1 -1
  271. package/dist/errors/index.d.ts +18 -18
  272. package/dist/errors/member-resolution.d.ts +1 -1
  273. package/dist/errors/serialize.d.ts +2 -2
  274. package/dist/errors/subject-erased.d.ts +1 -1
  275. package/dist/errors/to-kumiko-error.d.ts +1 -1
  276. package/dist/errors/write-error-info.d.ts +1 -1
  277. package/dist/errors/zod-bridge.d.ts +1 -1
  278. package/dist/es-ops/context.d.ts +4 -4
  279. package/dist/es-ops/index.d.ts +4 -4
  280. package/dist/es-ops/operations-schema.d.ts +1 -1
  281. package/dist/es-ops/runner.d.ts +3 -3
  282. package/dist/es-ops/runner.js +9 -1
  283. package/dist/es-ops/types.d.ts +2 -2
  284. package/dist/event-store/admin-api.d.ts +3 -3
  285. package/dist/event-store/archive.d.ts +2 -2
  286. package/dist/event-store/event-store.d.ts +2 -2
  287. package/dist/event-store/events-schema.d.ts +1 -1
  288. package/dist/event-store/index.d.ts +15 -15
  289. package/dist/event-store/provenance-append.d.ts +3 -3
  290. package/dist/event-store/rebuild-dead-letter.d.ts +2 -2
  291. package/dist/event-store/row-to-stored-event.d.ts +2 -2
  292. package/dist/event-store/snapshot.d.ts +2 -2
  293. package/dist/event-store/tenant-db-append.d.ts +2 -2
  294. package/dist/event-store/transfer.d.ts +3 -3
  295. package/dist/event-store/upcaster-dead-letter.d.ts +2 -2
  296. package/dist/event-store/upcaster.d.ts +3 -3
  297. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -2
  298. package/dist/files/bind-pending-file-refs.d.ts +3 -3
  299. package/dist/files/create-file-ref-from-bytes.d.ts +4 -4
  300. package/dist/files/create-file-ref.d.ts +3 -3
  301. package/dist/files/dispose-removed-file-refs.d.ts +2 -2
  302. package/dist/files/feature.d.ts +3 -3
  303. package/dist/files/file-handle.d.ts +1 -1
  304. package/dist/files/file-ref-entity.d.ts +1 -1
  305. package/dist/files/file-ref-table.d.ts +1 -1
  306. package/dist/files/file-routes.d.ts +5 -5
  307. package/dist/files/in-memory-provider.d.ts +1 -1
  308. package/dist/files/index.d.ts +20 -20
  309. package/dist/files/load-save-file-refs.d.ts +2 -2
  310. package/dist/files/local-provider.d.ts +1 -1
  311. package/dist/files/provider-resolver.d.ts +5 -5
  312. package/dist/files/purge-expired-file-ref-bytes.d.ts +2 -2
  313. package/dist/files/record-read-check.d.ts +1 -1
  314. package/dist/files/record-write-check.d.ts +3 -3
  315. package/dist/files/storage-tracking.d.ts +2 -2
  316. package/dist/files/types.d.ts +1 -1
  317. package/dist/files/zip-stream.d.ts +1 -1
  318. package/dist/i18n/index.d.ts +4 -4
  319. package/dist/i18n/mail-registry.d.ts +1 -1
  320. package/dist/i18n/required-surface-keys.d.ts +1 -1
  321. package/dist/i18n/settings-hub-keys.d.ts +1 -1
  322. package/dist/internal/stack-support.d.ts +12 -12
  323. package/dist/internal/testing.d.ts +4 -4
  324. package/dist/jobs/index.d.ts +2 -2
  325. package/dist/jobs/job-runner.d.ts +1 -1
  326. package/dist/jobs/max-per-tenant.d.ts +1 -1
  327. package/dist/lifecycle/index.d.ts +2 -2
  328. package/dist/lifecycle/lifecycle.d.ts +1 -1
  329. package/dist/lifecycle/signal-handlers.d.ts +1 -1
  330. package/dist/logging/index.d.ts +4 -4
  331. package/dist/logging/pino-logger.d.ts +1 -1
  332. package/dist/logging/utils.d.ts +1 -1
  333. package/dist/migrations/index.d.ts +4 -4
  334. package/dist/migrations/kumiko-drift.d.ts +1 -1
  335. package/dist/migrations/pending-rebuilds.d.ts +5 -5
  336. package/dist/migrations/pii-event-backfill.d.ts +4 -4
  337. package/dist/migrations/projection-table-index.d.ts +1 -1
  338. package/dist/observability/console-provider.d.ts +1 -1
  339. package/dist/observability/context.d.ts +1 -1
  340. package/dist/observability/escape-hatch-report.d.ts +3 -3
  341. package/dist/observability/fallback.d.ts +1 -1
  342. package/dist/observability/index.d.ts +16 -16
  343. package/dist/observability/metric-validator.d.ts +1 -1
  344. package/dist/observability/metrics-handle.d.ts +1 -1
  345. package/dist/observability/metrics-wiring.d.ts +2 -2
  346. package/dist/observability/noop-provider.d.ts +1 -1
  347. package/dist/observability/prometheus-meter.d.ts +1 -1
  348. package/dist/observability/recording-meter.d.ts +1 -1
  349. package/dist/observability/recording-tracer.d.ts +1 -1
  350. package/dist/observability/redis-wrapper.d.ts +1 -1
  351. package/dist/observability/sensitive-filter.d.ts +1 -1
  352. package/dist/observability/standard-metrics.d.ts +1 -1
  353. package/dist/pipeline/active-membership.d.ts +4 -4
  354. package/dist/pipeline/append-event-core.d.ts +3 -3
  355. package/dist/pipeline/auth-claims-resolver.d.ts +2 -2
  356. package/dist/pipeline/cascade-handler.d.ts +3 -3
  357. package/dist/pipeline/dispatch-batch.d.ts +2 -2
  358. package/dist/pipeline/dispatch-query.d.ts +4 -4
  359. package/dist/pipeline/dispatch-shared.d.ts +17 -17
  360. package/dist/pipeline/dispatch-stream.d.ts +2 -2
  361. package/dist/pipeline/dispatch-write.d.ts +4 -4
  362. package/dist/pipeline/dispatcher-utils.d.ts +2 -2
  363. package/dist/pipeline/dispatcher.d.ts +12 -12
  364. package/dist/pipeline/event-consumer-state.d.ts +1 -1
  365. package/dist/pipeline/event-dispatcher-admin.d.ts +1 -1
  366. package/dist/pipeline/event-dispatcher-delivery.d.ts +7 -7
  367. package/dist/pipeline/event-dispatcher.d.ts +7 -7
  368. package/dist/pipeline/event-retention.d.ts +1 -1
  369. package/dist/pipeline/handler-access-error.d.ts +2 -2
  370. package/dist/pipeline/index.d.ts +42 -42
  371. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  372. package/dist/pipeline/lifecycle-pipeline.d.ts +2 -2
  373. package/dist/pipeline/member-read-only-transaction.d.ts +2 -2
  374. package/dist/pipeline/member-reader.d.ts +5 -5
  375. package/dist/pipeline/msp-rebuild.d.ts +4 -4
  376. package/dist/pipeline/multi-stream-apply-context.d.ts +3 -3
  377. package/dist/pipeline/notify-scope.d.ts +3 -3
  378. package/dist/pipeline/pending-gap-ranges.d.ts +2 -2
  379. package/dist/pipeline/pre-handler-gates.d.ts +3 -3
  380. package/dist/pipeline/pre-transaction-reservations.d.ts +4 -4
  381. package/dist/pipeline/projection-rebuild.d.ts +3 -3
  382. package/dist/pipeline/projection-state.d.ts +1 -1
  383. package/dist/pipeline/projections-runner.d.ts +3 -3
  384. package/dist/pipeline/projections-runner.js +3 -4
  385. package/dist/pipeline/system-hooks.d.ts +4 -4
  386. package/dist/pipeline/system-identity-switch.d.ts +3 -3
  387. package/dist/pipeline/tenant-timezone-cache.d.ts +1 -1
  388. package/dist/pipeline/write-origin.d.ts +3 -3
  389. package/dist/pipeline/write-result-masking.d.ts +2 -2
  390. package/dist/random/index.d.ts +2 -2
  391. package/dist/rate-limit/bucket.d.ts +1 -1
  392. package/dist/rate-limit/index.d.ts +3 -3
  393. package/dist/rate-limit/middleware.d.ts +3 -3
  394. package/dist/redis/cache-sync-bus.d.ts +2 -2
  395. package/dist/redis/cache-sync-topics.d.ts +1 -1
  396. package/dist/redis/index.d.ts +8 -8
  397. package/dist/redis/pubsub-signal.d.ts +1 -1
  398. package/dist/schema-cli.d.ts +1 -1
  399. package/dist/schema-cli.js +9 -1
  400. package/dist/search/derive-search-adapter-config.d.ts +2 -2
  401. package/dist/search/in-memory-adapter.d.ts +1 -1
  402. package/dist/search/index.d.ts +6 -6
  403. package/dist/search/meilisearch-adapter.d.ts +2 -2
  404. package/dist/search/purge-subject.d.ts +4 -4
  405. package/dist/search/reindex-entity.d.ts +3 -3
  406. package/dist/secrets/dek-cache.d.ts +1 -1
  407. package/dist/secrets/env-master-key-provider.d.ts +1 -1
  408. package/dist/secrets/env-master-key-provider.js +26 -11
  409. package/dist/secrets/envelope-cipher.d.ts +2 -2
  410. package/dist/secrets/envelope.d.ts +1 -1
  411. package/dist/secrets/index.d.ts +9 -9
  412. package/dist/secrets/rotation.d.ts +1 -1
  413. package/dist/secrets/stored-envelope.d.ts +1 -1
  414. package/dist/seeding/entity-seed.d.ts +1 -1
  415. package/dist/seeding/index.d.ts +3 -3
  416. package/dist/seeding/seed-users.d.ts +1 -1
  417. package/dist/time/index.d.ts +6 -6
  418. package/dist/ui-types/app-schema.d.ts +5 -5
  419. package/dist/ui-types/index.d.ts +23 -23
  420. package/dist/upgrade-cli.js +13 -3
  421. package/dist/utils/index.d.ts +9 -9
  422. package/package.json +19 -66
  423. package/presets/biome-app.json +80 -0
  424. package/presets/tsconfig.app.json +19 -0
  425. package/src/changes.json +78 -2
  426. package/src/scripts/codemod/README.md +18 -0
  427. package/src/scripts/codemod/codemod-support.ts +1 -1
  428. package/src/scripts/codemod/db-factory.ts +1 -1
  429. package/src/scripts/codemod/feature-factory.ts +1 -1
  430. package/src/scripts/codemod/import-extensions.ts +118 -0
  431. package/src/scripts/codemod/migrate-cross-tenant.ts +2 -2
  432. package/src/scripts/codemod/migrate-db-raw.ts +1 -1
  433. package/src/scripts/codemod/migrate-open-to-all.ts +1 -1
  434. package/src/scripts/codemod/object-form.ts +1 -1
  435. package/src/scripts/codemod/s3-imports.ts +1 -1
  436. package/src/scripts/codemod/tenant-db-options.ts +1 -1
  437. package/src/scripts/codemod/testing-move.ts +2 -2
  438. package/dist/db/bun-db-deprecated.d.ts +0 -10
  439. package/dist/db/bun-db-deprecated.js +0 -5
  440. package/dist/stack/index.d.ts +0 -10
  441. package/dist/stack/index.js +0 -11
  442. package/dist/testing/e2e-generator.d.ts +0 -5
  443. package/dist/testing/e2e-generator.js +0 -5
  444. package/dist/testing/handler-context.d.ts +0 -5
  445. package/dist/testing/handler-context.js +0 -5
  446. package/dist/testing/index.d.ts +0 -10
  447. package/dist/testing/index.js +0 -10
  448. package/dist/testing/real-providers.d.ts +0 -5
  449. package/dist/testing/real-providers.js +0 -5
@@ -1,3 +1,3 @@
1
- import type { SessionUser } from "../engine/types/index.js";
2
- import { type KumikoError } from "../errors/index.js";
1
+ import type { SessionUser } from "../engine/types/index.ts";
2
+ import { type KumikoError } from "../errors/index.ts";
3
3
  export declare function handlerAccessError(user: Pick<SessionUser, "roles">, type: string): KumikoError;
@@ -1,42 +1,42 @@
1
- export type { EscapeHatchReportWindow } from "../observability/escape-hatch-report.js";
2
- export { createEscapeHatchReporter, createEscapeHatchReportWindow, ESCAPE_HATCH_USED_SIGNAL, fallbackEscapeHatchReporter, flushEscapeHatchAudits, reportEscapeHatchUse, UNATTRIBUTED_ACTOR, withEscapeHatchAuditScope, } from "../observability/escape-hatch-report.js";
3
- export { normalizePayloadBucketValue } from "../rate-limit/bucket.js";
4
- export type { AppendDomainEventCoreDeps } from "./append-event-core.js";
5
- export { appendDomainEventCore } from "./append-event-core.js";
6
- export type { ResolveAuthClaimsArgs } from "./auth-claims-resolver.js";
7
- export { resolveAuthClaims } from "./auth-claims-resolver.js";
8
- export { createCascadeDeleteHook } from "./cascade-handler.js";
9
- export type { Dispatcher } from "./dispatcher.js";
10
- export { createDispatcher, dispatcherToWriteRef } from "./dispatcher.js";
11
- export type { FailedWriteResult } from "./dispatcher-utils.js";
12
- export { isFailedWriteResult } from "./dispatcher-utils.js";
13
- export type { DistributedLock } from "./distributed-lock.js";
14
- export { createDistributedLock } from "./distributed-lock.js";
15
- export type { EntityCache, EntityCacheOptions } from "./entity-cache.js";
16
- export { createEntityCache } from "./entity-cache.js";
17
- export type { ConsumerStatus, PendingGapEntry } from "./event-consumer-state.js";
18
- export { ConsumerStatuses, createEventConsumerStateTable, eventConsumerStateTable, SHARED_INSTANCE_SENTINEL, } from "./event-consumer-state.js";
19
- export type { EventDedup } from "./event-dedup.js";
20
- export { createEventDedup } from "./event-dedup.js";
21
- export type { ConsumerProgress, ConsumerRecoveryState, DispatcherPassResult, EventConsumer, EventConsumerBatchHandler, EventConsumerHandler, EventDispatcher, EventDispatcherOptions, } from "./event-dispatcher.js";
22
- export { createEventDispatcher, disableConsumer, enableConsumer, getAllConsumerProgress, getConsumerState, listConsumersWithState, restartConsumer, skipPoisonEvent, } from "./event-dispatcher.js";
23
- export type { ConsumerCursor } from "./event-dispatcher-delivery.js";
24
- export { selectConsumerCursorForUpdate } from "./event-dispatcher-delivery.js";
25
- export type { PruneEventsOptions, PruneEventsResult } from "./event-retention.js";
26
- export { ConsumerLagError, pruneEvents } from "./event-retention.js";
27
- export type { IdempotencyGuard } from "./idempotency.js";
28
- export { createIdempotencyGuard } from "./idempotency.js";
29
- export { assertInstructionFieldWriteAllowed, assertIrreversibleOperationAllowed, isIrreversibleEntityVerb, } from "./irreversible-operation-gate.js";
30
- export type { LifecycleHooks, SystemHookDef, SystemHooks } from "./lifecycle-pipeline.js";
31
- export { createLifecycleHooks } from "./lifecycle-pipeline.js";
32
- export type { MspRebuildDeps } from "./msp-rebuild.js";
33
- export { rebuildMultiStreamProjection } from "./msp-rebuild.js";
34
- export type { MultiStreamApplyContext, MultiStreamApplyContextDeps, } from "./multi-stream-apply-context.js";
35
- export { createMultiStreamApplyContext } from "./multi-stream-apply-context.js";
36
- export { assertNotifyTargetsOwnTenant, createDeferringNotify } from "./notify-scope.js";
37
- export type { ProjectionProgress, RebuildResult } from "./projection-rebuild.js";
38
- export { getAllProjectionProgress, getProjectionState, listProjectionsWithState, rebuildProjection, } from "./projection-rebuild.js";
39
- export type { ProjectionStatus } from "./projection-state.js";
40
- export { createProjectionStateTable, ProjectionStatuses, projectionStateTable, } from "./projection-state.js";
41
- export { runProjectionsForEvent } from "./projections-runner.js";
42
- export { ACCESS_INVALIDATION_CONSUMER_NAME, createAccessInvalidationEventConsumer, createSearchEventConsumer, createSseBroadcastEventConsumer, SEARCH_CONSUMER_NAME, SSE_BROADCAST_CONSUMER_NAME, } from "./system-hooks.js";
1
+ export type { EscapeHatchReportWindow } from "../observability/escape-hatch-report.ts";
2
+ export { createEscapeHatchReporter, createEscapeHatchReportWindow, ESCAPE_HATCH_USED_SIGNAL, fallbackEscapeHatchReporter, flushEscapeHatchAudits, reportEscapeHatchUse, UNATTRIBUTED_ACTOR, withEscapeHatchAuditScope, } from "../observability/escape-hatch-report.ts";
3
+ export { normalizePayloadBucketValue } from "../rate-limit/bucket.ts";
4
+ export type { AppendDomainEventCoreDeps } from "./append-event-core.ts";
5
+ export { appendDomainEventCore } from "./append-event-core.ts";
6
+ export type { ResolveAuthClaimsArgs } from "./auth-claims-resolver.ts";
7
+ export { resolveAuthClaims } from "./auth-claims-resolver.ts";
8
+ export { createCascadeDeleteHook } from "./cascade-handler.ts";
9
+ export type { Dispatcher } from "./dispatcher.ts";
10
+ export { createDispatcher, dispatcherToWriteRef } from "./dispatcher.ts";
11
+ export type { FailedWriteResult } from "./dispatcher-utils.ts";
12
+ export { isFailedWriteResult } from "./dispatcher-utils.ts";
13
+ export type { DistributedLock } from "./distributed-lock.ts";
14
+ export { createDistributedLock } from "./distributed-lock.ts";
15
+ export type { EntityCache, EntityCacheOptions } from "./entity-cache.ts";
16
+ export { createEntityCache } from "./entity-cache.ts";
17
+ export type { ConsumerStatus, PendingGapEntry } from "./event-consumer-state.ts";
18
+ export { ConsumerStatuses, createEventConsumerStateTable, eventConsumerStateTable, SHARED_INSTANCE_SENTINEL, } from "./event-consumer-state.ts";
19
+ export type { EventDedup } from "./event-dedup.ts";
20
+ export { createEventDedup } from "./event-dedup.ts";
21
+ export type { ConsumerProgress, ConsumerRecoveryState, DispatcherPassResult, EventConsumer, EventConsumerBatchHandler, EventConsumerHandler, EventDispatcher, EventDispatcherOptions, } from "./event-dispatcher.ts";
22
+ export { createEventDispatcher, disableConsumer, enableConsumer, getAllConsumerProgress, getConsumerState, listConsumersWithState, restartConsumer, skipPoisonEvent, } from "./event-dispatcher.ts";
23
+ export type { ConsumerCursor } from "./event-dispatcher-delivery.ts";
24
+ export { selectConsumerCursorForUpdate } from "./event-dispatcher-delivery.ts";
25
+ export type { PruneEventsOptions, PruneEventsResult } from "./event-retention.ts";
26
+ export { ConsumerLagError, pruneEvents } from "./event-retention.ts";
27
+ export type { IdempotencyGuard } from "./idempotency.ts";
28
+ export { createIdempotencyGuard } from "./idempotency.ts";
29
+ export { assertInstructionFieldWriteAllowed, assertIrreversibleOperationAllowed, isIrreversibleEntityVerb, } from "./irreversible-operation-gate.ts";
30
+ export type { LifecycleHooks, SystemHookDef, SystemHooks } from "./lifecycle-pipeline.ts";
31
+ export { createLifecycleHooks } from "./lifecycle-pipeline.ts";
32
+ export type { MspRebuildDeps } from "./msp-rebuild.ts";
33
+ export { rebuildMultiStreamProjection } from "./msp-rebuild.ts";
34
+ export type { MultiStreamApplyContext, MultiStreamApplyContextDeps, } from "./multi-stream-apply-context.ts";
35
+ export { createMultiStreamApplyContext } from "./multi-stream-apply-context.ts";
36
+ export { assertNotifyTargetsOwnTenant, createDeferringNotify } from "./notify-scope.ts";
37
+ export type { ProjectionProgress, RebuildResult } from "./projection-rebuild.ts";
38
+ export { getAllProjectionProgress, getProjectionState, listProjectionsWithState, rebuildProjection, } from "./projection-rebuild.ts";
39
+ export type { ProjectionStatus } from "./projection-state.ts";
40
+ export { createProjectionStateTable, ProjectionStatuses, projectionStateTable, } from "./projection-state.ts";
41
+ export { runProjectionsForEvent } from "./projections-runner.ts";
42
+ export { ACCESS_INVALIDATION_CONSUMER_NAME, createAccessInvalidationEventConsumer, createSearchEventConsumer, createSseBroadcastEventConsumer, SEARCH_CONSUMER_NAME, SSE_BROADCAST_CONSUMER_NAME, } from "./system-hooks.ts";
@@ -1,4 +1,4 @@
1
- import type { EntityDefinition } from "../engine/types/index.js";
1
+ import type { EntityDefinition } from "../engine/types/index.ts";
2
2
  export declare function isIrreversibleEntityVerb(verb: "delete" | "forget", entity: EntityDefinition): boolean;
3
3
  export declare function assertIrreversibleOperationAllowed(operation: string): void;
4
4
  export declare function assertInstructionFieldWriteAllowed(entityName: string, verb: "create" | "update", writtenFieldNames: readonly string[], instructionFieldNames: readonly string[]): void;
@@ -1,5 +1,5 @@
1
- import type { AppContext, DeleteContext, HookPhase, PostDeleteBatchHookFn, PostDeleteHookFn, PostSaveBatchHookFn, PostSaveHookFn, PreDeleteHookFn, PreSaveHookFn, Registry, SaveContext } from "../engine/types/index.js";
2
- import type { EventDedup } from "./event-dedup.js";
1
+ import type { AppContext, DeleteContext, HookPhase, PostDeleteBatchHookFn, PostDeleteHookFn, PostSaveBatchHookFn, PostSaveHookFn, PreDeleteHookFn, PreSaveHookFn, Registry, SaveContext } from "../engine/types/index.ts";
2
+ import type { EventDedup } from "./event-dedup.ts";
3
3
  export type SystemHookDef<TFn> = {
4
4
  readonly name: string;
5
5
  readonly priority: number;
@@ -1,3 +1,3 @@
1
- import type { DbTx } from "../db/connection.js";
2
- import { type DispatchContext } from "./dispatch-shared.js";
1
+ import type { DbTx } from "../db/connection.ts";
2
+ import { type DispatchContext } from "./dispatch-shared.ts";
3
3
  export declare function runInMemberReadOnlyTransaction<T>(ctx: DispatchContext, tx: DbTx | undefined, fn: (readOnlyTx: DbTx) => Promise<T>): Promise<T>;
@@ -1,7 +1,7 @@
1
- import type { DbTx } from "../db/connection.js";
2
- import type { TenantId } from "../engine/types/identifiers.js";
3
- import type { MemberReader } from "../engine/types/index.js";
4
- import { type ActiveMembershipPolicy } from "./active-membership.js";
5
- import { type DispatchContext } from "./dispatch-shared.js";
1
+ import type { DbTx } from "../db/connection.ts";
2
+ import type { TenantId } from "../engine/types/identifiers.ts";
3
+ import type { MemberReader } from "../engine/types/index.ts";
4
+ import { type ActiveMembershipPolicy } from "./active-membership.ts";
5
+ import { type DispatchContext } from "./dispatch-shared.ts";
6
6
  export declare const BACKGROUND_READ_POLICY: ActiveMembershipPolicy;
7
7
  export declare function createMemberReaderFn(ctx: DispatchContext, tenantId: TenantId, tx?: DbTx): MemberReader;
@@ -1,7 +1,7 @@
1
- import type { DbConnection } from "../db/connection.js";
2
- import type { Registry } from "../engine/types/index.js";
3
- import type { Meter } from "../observability/types/metric.js";
4
- import type { RebuildResult } from "./projection-rebuild.js";
1
+ import type { DbConnection } from "../db/connection.ts";
2
+ import type { Registry } from "../engine/types/index.ts";
3
+ import type { Meter } from "../observability/types/metric.ts";
4
+ import type { RebuildResult } from "./projection-rebuild.ts";
5
5
  export type MspRebuildDeps = {
6
6
  readonly db: DbConnection;
7
7
  readonly registry: Registry;
@@ -1,9 +1,9 @@
1
1
  import type { DerivativesContext } from "@cosmicdrift/kumiko-types/derivatives-types";
2
2
  import type { MultiStreamApplyContext } from "@cosmicdrift/kumiko-types/multi-stream-apply-context-types";
3
3
  import type { SecretsContext } from "@cosmicdrift/kumiko-types/secrets-types";
4
- import type { DbRunner } from "../db/connection.js";
5
- import type { Registry, TenantId } from "../engine/types/index.js";
6
- import type { FileContext } from "../files/file-handle.js";
4
+ import type { DbRunner } from "../db/connection.ts";
5
+ import type { Registry, TenantId } from "../engine/types/index.ts";
6
+ import type { FileContext } from "../files/file-handle.ts";
7
7
  export type { MultiStreamApplyContext } from "@cosmicdrift/kumiko-types/multi-stream-apply-context-types";
8
8
  export type MultiStreamApplyContextDeps = {
9
9
  readonly registry: Registry;
@@ -1,6 +1,6 @@
1
- import type { TenantId } from "../engine/types/identifiers.js";
2
- import type { NotifyFn, NotifyOptions, Registry } from "../engine/types/index.js";
3
- import type { AfterCommitHook } from "./dispatcher-utils.js";
1
+ import type { TenantId } from "../engine/types/identifiers.ts";
2
+ import type { NotifyFn, NotifyOptions, Registry } from "../engine/types/index.ts";
3
+ import type { AfterCommitHook } from "./dispatcher-utils.ts";
4
4
  export declare function assertNotifyTargetsOwnTenant(options: NotifyOptions, tenantId: TenantId): void;
5
5
  type DeferringNotifyDeps = {
6
6
  readonly registry: Pick<Registry, "getAllNotifications"> | undefined;
@@ -1,5 +1,5 @@
1
- import type { PendingIdRange } from "../db/queries/event-store.js";
2
- import type { PendingGapEntry } from "./event-consumer-state.js";
1
+ import type { PendingIdRange } from "../db/queries/event-store.ts";
2
+ import type { PendingGapEntry } from "./event-consumer-state.ts";
3
3
  export declare function toIdRanges(gaps: readonly PendingGapEntry[]): PendingIdRange[];
4
4
  export declare function rangeContainsId(range: PendingGapEntry, id: bigint): boolean;
5
5
  export declare function isRangeFullyCoveredByFetch(range: PendingGapEntry, truncated: boolean, maxFetchedId: bigint | null): boolean;
@@ -1,6 +1,6 @@
1
- import type { SessionUser, WriteHandlerDef } from "../engine/types/index.js";
2
- import { type WriteFailure } from "../errors/index.js";
3
- import type { DispatchContext } from "./dispatch-shared.js";
1
+ import type { SessionUser, WriteHandlerDef } from "../engine/types/index.ts";
2
+ import { type WriteFailure } from "../errors/index.ts";
3
+ import type { DispatchContext } from "./dispatch-shared.ts";
4
4
  export type PreHandlerGateMode = "charge" | "recheck";
5
5
  export type PreHandlerGateResult = {
6
6
  readonly isSuccess: true;
@@ -1,8 +1,8 @@
1
1
  import type { ReservationHandle } from "@cosmicdrift/kumiko-types/handlers";
2
- import type { SessionUser, WriteHandlerDef } from "../engine/types/index.js";
3
- import { type WriteErrorInfo } from "../errors/index.js";
4
- import type { BatchCommand, DispatchContext } from "./dispatch-shared.js";
5
- import type { WriteOrigin } from "./write-origin.js";
2
+ import type { SessionUser, WriteHandlerDef } from "../engine/types/index.ts";
3
+ import { type WriteErrorInfo } from "../errors/index.ts";
4
+ import type { BatchCommand, DispatchContext } from "./dispatch-shared.ts";
5
+ import type { WriteOrigin } from "./write-origin.ts";
6
6
  type ReservationConfirm = ReservationHandle["confirmInTransaction"];
7
7
  export type ConsumedReservation = {
8
8
  readonly confirmInTransaction: ReservationConfirm | undefined;
@@ -1,7 +1,7 @@
1
1
  /// <reference types="temporal-polyfill/global" preserve="true" />
2
- import type { DbConnection } from "../db/connection.js";
3
- import type { Registry } from "../engine/types/index.js";
4
- import type { Meter } from "../observability/types/metric.js";
2
+ import type { DbConnection } from "../db/connection.ts";
3
+ import type { Registry } from "../engine/types/index.ts";
4
+ import type { Meter } from "../observability/types/metric.ts";
5
5
  export declare const REBUILD_BATCH_SIZE = 1000;
6
6
  export type RebuildResult = {
7
7
  readonly projection: string;
@@ -1,4 +1,4 @@
1
- import type { DbConnection } from "../db/connection.js";
1
+ import type { DbConnection } from "../db/connection.ts";
2
2
  export declare const projectionStateTable: import("@cosmicdrift/kumiko-types/schema-table-types").SchemaTable;
3
3
  export declare const ProjectionStatuses: {
4
4
  readonly idle: "idle";
@@ -1,6 +1,6 @@
1
- import type { DbRunner } from "../db/index.js";
2
- import type { LifecycleResult, Registry } from "../engine/types/index.js";
3
- import type { StoredEvent } from "../event-store/index.js";
1
+ import type { DbRunner } from "../db/index.ts";
2
+ import type { LifecycleResult, Registry } from "../engine/types/index.ts";
3
+ import type { StoredEvent } from "../event-store/index.ts";
4
4
  export declare function runProjections(result: LifecycleResult, registry: Registry, runner: DbRunner | undefined): Promise<void>;
5
5
  export declare function hasLiveProjectionsForEvent(event: StoredEvent, registry: Registry): boolean;
6
6
  export declare function runProjectionsForEvent(event: StoredEvent, registry: Registry, tx: DbRunner): Promise<void>;
@@ -12,16 +12,15 @@ import { InternalError } from "../errors/index.js";
12
12
  // through the dispatcher gets its projections, no opt-in needed.
13
13
  //
14
14
  // Contracts:
15
- // - Projections receive the exact StoredEvent from the executor. If you
16
- // hand-craft a SaveContext (tests, non-executor writes), just don't set
17
- // `event` and the runner no-ops.
15
+ // - Projections receive the exact StoredEvent from the executor.
18
16
  // - `runner` is the caller's already-resolved DbRunner — projections-runner
19
17
  // has no TenantDb access of its own to derive one from.
20
18
  // - Apply-function throws bubble up unchanged. The dispatcher wraps the
21
19
  // whole lifecycle in a try/catch that rolls the tx back; the event is
22
20
  // gone from the events table just like a rolled-back state change.
23
21
  export async function runProjections(result, registry, runner) {
24
- // skip: hand-crafted result with no event — nothing to project
22
+ // skip: isLifecycleResult only checks `kind`, so an untyped handler result
23
+ // shaped like a lifecycle result can still arrive without its event
25
24
  if (!result.event)
26
25
  return;
27
26
  if (!runner) {
@@ -1,7 +1,7 @@
1
- import { type SseBroker } from "../api/sse-broker.js";
2
- import type { EntityId, JobRunnerRef, Registry, TenantId } from "../engine/types/index.js";
3
- import type { SearchAdapter, SearchDocument } from "../search/types.js";
4
- import type { EventConsumer } from "./event-dispatcher.js";
1
+ import { type SseBroker } from "../api/sse-broker.ts";
2
+ import type { EntityId, JobRunnerRef, Registry, TenantId } from "../engine/types/index.ts";
3
+ import type { SearchAdapter, SearchDocument } from "../search/types.ts";
4
+ import type { EventConsumer } from "./event-dispatcher.ts";
5
5
  export declare const SEARCH_CONSUMER_NAME = "system:consumer:search";
6
6
  export type SearchOperation = {
7
7
  readonly kind: "index";
@@ -1,6 +1,6 @@
1
- import type { TenantId } from "../engine/types/identifiers.js";
2
- import type { ActiveMembershipResult, EscapeHatchDeclaration, EscapeHatchReporter, HandlerContext, LifecycleHookFn, MemberReader, SessionUser, WriteResult } from "../engine/types/index.js";
3
- import { AccessDeniedError } from "../errors/index.js";
1
+ import type { TenantId } from "../engine/types/identifiers.ts";
2
+ import type { ActiveMembershipResult, EscapeHatchDeclaration, EscapeHatchReporter, HandlerContext, LifecycleHookFn, MemberReader, SessionUser, WriteResult } from "../engine/types/index.ts";
3
+ import { AccessDeniedError } from "../errors/index.ts";
4
4
  export type QueryAsFn = (user: SessionUser, qn: string, payload: unknown) => Promise<unknown>;
5
5
  export type WriteAsFn = (user: SessionUser, qn: string, payload: unknown) => Promise<WriteResult>;
6
6
  export type ResolveActiveMembershipFn = (userId: string, tenantId: TenantId) => Promise<ActiveMembershipResult>;
@@ -1,4 +1,4 @@
1
- import type { TenantId } from "../engine/types/identifiers.js";
1
+ import type { TenantId } from "../engine/types/identifiers.ts";
2
2
  export type TenantTimezoneCacheOptions = {
3
3
  readonly ttlMs?: number;
4
4
  readonly maxEntries?: number;
@@ -1,7 +1,7 @@
1
1
  import { isPersonalDataGated, type WriteOrigin } from "@cosmicdrift/kumiko-types/event-store-types";
2
- import { type PersonalDataGate } from "../db/tenant-db.js";
3
- import type { Registry, SessionUser } from "../engine/types/index.js";
4
- import { AccessDeniedError } from "../errors/index.js";
2
+ import { type PersonalDataGate } from "../db/tenant-db.ts";
3
+ import type { Registry, SessionUser } from "../engine/types/index.ts";
4
+ import { AccessDeniedError } from "../errors/index.ts";
5
5
  export { isPersonalDataGated, type WriteOrigin };
6
6
  export declare function effectiveWriteOrigin(root: WriteOrigin, inherited?: WriteOrigin): WriteOrigin;
7
7
  export declare function parseWriteOrigin(value: unknown): WriteOrigin | undefined;
@@ -1,5 +1,5 @@
1
- import type { WriteResult } from "../engine/types/index.js";
2
- import type { BatchCommand, BatchResult, DispatchContext } from "./dispatch-shared.js";
1
+ import type { WriteResult } from "../engine/types/index.ts";
2
+ import type { BatchCommand, BatchResult, DispatchContext } from "./dispatch-shared.ts";
3
3
  type EntityLookup = Pick<DispatchContext["registry"], "getHandlerEntity" | "getEntity">;
4
4
  export declare function maskWriteResultForClient(registry: EntityLookup, handlerType: string, result: WriteResult): WriteResult;
5
5
  export declare function maskBatchResultForClient(registry: EntityLookup, commands: readonly BatchCommand[], batch: BatchResult): BatchResult;
@@ -1,2 +1,2 @@
1
- export { type AdjNounNameOptions, type GenerateUniqueNameOptions, generateAdjNounName, generateNoConfusableId, generateUniqueName, } from "./generate.js";
2
- export { ADJECTIVES, NOUNS } from "./words.js";
1
+ export { type AdjNounNameOptions, type GenerateUniqueNameOptions, generateAdjNounName, generateNoConfusableId, generateUniqueName, } from "./generate.ts";
2
+ export { ADJECTIVES, NOUNS } from "./words.ts";
@@ -1,4 +1,4 @@
1
- import type { PayloadBucketNormalization, RateLimitOption, SessionUser } from "../engine/types/index.js";
1
+ import type { PayloadBucketNormalization, RateLimitOption, SessionUser } from "../engine/types/index.ts";
2
2
  export type BucketContext = {
3
3
  readonly handlerName: string;
4
4
  readonly user: SessionUser;
@@ -1,3 +1,3 @@
1
- export { type BucketContext, type BucketResult, buildBucketKey, buildPayloadBucketKey, createPayloadDigest, normalizePayloadBucketValue, } from "./bucket.js";
2
- export { type AuthEndpointRateLimitOptions, authEndpointRateLimit, type GlobalIpRateLimitOptions, globalIpRateLimit, type HttpRouteRateLimitOptions, httpRouteRateLimit, } from "./middleware.js";
3
- export { createRateLimitResolver, type RateLimitConfig, type RateLimitDecision, type RateLimitResolver, type RateLimitResolverOptions, } from "./resolver.js";
1
+ export { type BucketContext, type BucketResult, buildBucketKey, buildPayloadBucketKey, createPayloadDigest, normalizePayloadBucketValue, } from "./bucket.ts";
2
+ export { type AuthEndpointRateLimitOptions, authEndpointRateLimit, type GlobalIpRateLimitOptions, globalIpRateLimit, type HttpRouteRateLimitOptions, httpRouteRateLimit, } from "./middleware.ts";
3
+ export { createRateLimitResolver, type RateLimitConfig, type RateLimitDecision, type RateLimitResolver, type RateLimitResolverOptions, } from "./resolver.ts";
@@ -1,7 +1,7 @@
1
1
  import type { Context, MiddlewareHandler } from "hono";
2
- import { type ClientIpResolver } from "../api/client-ip.js";
3
- import type { HttpRouteRateLimit } from "../engine/types/http-route.js";
4
- import type { RateLimitResolver } from "./resolver.js";
2
+ import { type ClientIpResolver } from "../api/client-ip.ts";
3
+ import type { HttpRouteRateLimit } from "../engine/types/http-route.ts";
4
+ import type { RateLimitResolver } from "./resolver.ts";
5
5
  export type GlobalIpRateLimitOptions = {
6
6
  readonly resolver: RateLimitResolver;
7
7
  readonly limit?: number;
@@ -1,6 +1,6 @@
1
1
  import type { CacheSyncBus, ClosableCacheSyncBus } from "@cosmicdrift/kumiko-types/cache-sync-types";
2
- import { type RedisClientOptions } from "./client.js";
3
- import { type PubSubSignal } from "./pubsub-signal.js";
2
+ import { type RedisClientOptions } from "./client.ts";
3
+ import { type PubSubSignal } from "./pubsub-signal.ts";
4
4
  export type { CacheSyncBus, ClosableCacheSyncBus };
5
5
  export declare function createLocalCacheSyncBus(): ClosableCacheSyncBus;
6
6
  export type CacheSyncBusOverSignalOptions = {
@@ -1,4 +1,4 @@
1
- import type { TenantId } from "../engine/types/identifiers.js";
1
+ import type { TenantId } from "../engine/types/identifiers.ts";
2
2
  export declare const CACHE_SYNC_TOPICS: {
3
3
  readonly tenantConfig: "tenant-config";
4
4
  readonly tierAssignment: "tier-assignment";
@@ -1,8 +1,8 @@
1
- export type { CacheSyncBus, CacheSyncBusOverSignalOptions, ClosableCacheSyncBus, RedisCacheSyncBusOptions, ResolvedCacheSyncBus, } from "./cache-sync-bus.js";
2
- export { createCacheSyncBusOverSignal, createDefaultCacheSyncBus, createLocalCacheSyncBus, createRedisCacheSyncBus, resolveCacheSyncBus, } from "./cache-sync-bus.js";
3
- export type { TenantConfigSyncMessage, TierAssignmentSyncMessage } from "./cache-sync-topics.js";
4
- export { CACHE_SYNC_TOPICS, isTenantConfigSyncMessage, isTierAssignmentSyncMessage, } from "./cache-sync-topics.js";
5
- export type { RedisClientOptions } from "./client.js";
6
- export { createRedisClient, redisChannelPrefixFromEnv, redisClientOptionsFromEnv, } from "./client.js";
7
- export type { PubSubSignal, PubSubSignalOptions } from "./pubsub-signal.js";
8
- export { createRedisPubSubSignal } from "./pubsub-signal.js";
1
+ export type { CacheSyncBus, CacheSyncBusOverSignalOptions, ClosableCacheSyncBus, RedisCacheSyncBusOptions, ResolvedCacheSyncBus, } from "./cache-sync-bus.ts";
2
+ export { createCacheSyncBusOverSignal, createDefaultCacheSyncBus, createLocalCacheSyncBus, createRedisCacheSyncBus, resolveCacheSyncBus, } from "./cache-sync-bus.ts";
3
+ export type { TenantConfigSyncMessage, TierAssignmentSyncMessage } from "./cache-sync-topics.ts";
4
+ export { CACHE_SYNC_TOPICS, isTenantConfigSyncMessage, isTierAssignmentSyncMessage, } from "./cache-sync-topics.ts";
5
+ export type { RedisClientOptions } from "./client.ts";
6
+ export { createRedisClient, redisChannelPrefixFromEnv, redisClientOptionsFromEnv, } from "./client.ts";
7
+ export type { PubSubSignal, PubSubSignalOptions } from "./pubsub-signal.ts";
8
+ export { createRedisPubSubSignal } from "./pubsub-signal.ts";
@@ -1,4 +1,4 @@
1
- import { type RedisClientOptions } from "./client.js";
1
+ import { type RedisClientOptions } from "./client.ts";
2
2
  export type PubSubSignal = {
3
3
  publish(channel: string, payload: unknown): void;
4
4
  publishConfirmed(channel: string, payload: unknown): Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { FeatureDefinition } from "./engine/types/feature.js";
1
+ import type { FeatureDefinition } from "./engine/types/feature.ts";
2
2
  export type SchemaCliOut = {
3
3
  readonly log: (line: string) => void;
4
4
  readonly err: (line: string) => void;
@@ -7,6 +7,14 @@
7
7
  // NO-MAGIC-ON-DATA: reads only checked-in artifacts (kumiko/schema.ts →
8
8
  // ENTITY_METAS, kumiko/migrations/*.sql). Never auto-generates at runtime,
9
9
  // never applies on app-boot — apply/baseline are explicit deploy-steps.
10
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
11
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
12
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
13
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
14
+ });
15
+ }
16
+ return path;
17
+ };
10
18
  import { existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
11
19
  import { join, resolve as resolvePath } from "node:path";
12
20
  import { configureBlindIndexKey, configurePiiSubjectKms, resolveKmsWiringAsync, } from "./crypto/index.js";
@@ -25,7 +33,7 @@ const SNAPSHOT_FILENAME = ".snapshot.json";
25
33
  // want a graceful exit code (validate) catch it themselves.
26
34
  async function loadSchemaModFromApp(schemaFile) {
27
35
  // bun imports TS directly — no spawn needed.
28
- const mod = (await import(schemaFile));
36
+ const mod = (await import(__rewriteRelativeImportExtension(schemaFile)));
29
37
  if (!Array.isArray(mod.ENTITY_METAS)) {
30
38
  throw new Error(`Schema file ${schemaFile} muss \`export const ENTITY_METAS: EntityTableMeta[]\` haben.`);
31
39
  }
@@ -1,3 +1,3 @@
1
- import type { Registry } from "../engine/types/index.js";
2
- import type { SearchAdapterConfig } from "./types.js";
1
+ import type { Registry } from "../engine/types/index.ts";
2
+ import type { SearchAdapterConfig } from "./types.ts";
3
3
  export declare function deriveSearchAdapterConfig(registry: Registry): SearchAdapterConfig | undefined;
@@ -1,2 +1,2 @@
1
- import type { SearchAdapter } from "./types.js";
1
+ import type { SearchAdapter } from "./types.ts";
2
2
  export declare function createInMemorySearchAdapter(): SearchAdapter;
@@ -1,6 +1,6 @@
1
- export { deriveSearchAdapterConfig } from "./derive-search-adapter-config.js";
2
- export { createInMemorySearchAdapter } from "./in-memory-adapter.js";
3
- export { purgeSearchDocumentsForSubject } from "./purge-subject.js";
4
- export type { ReindexEntityFailure, ReindexEntityOptions, ReindexEntityResult, } from "./reindex-entity.js";
5
- export { reindexEntity } from "./reindex-entity.js";
6
- export type { SearchAdapter, SearchAdapterConfig, SearchDocument, SearchOptions, SearchResult, } from "./types.js";
1
+ export { deriveSearchAdapterConfig } from "./derive-search-adapter-config.ts";
2
+ export { createInMemorySearchAdapter } from "./in-memory-adapter.ts";
3
+ export { purgeSearchDocumentsForSubject } from "./purge-subject.ts";
4
+ export type { ReindexEntityFailure, ReindexEntityOptions, ReindexEntityResult, } from "./reindex-entity.ts";
5
+ export { reindexEntity } from "./reindex-entity.ts";
6
+ export type { SearchAdapter, SearchAdapterConfig, SearchDocument, SearchOptions, SearchResult, } from "./types.ts";
@@ -1,5 +1,5 @@
1
- import type { EntityId, TenantId } from "../engine/types/identifiers.js";
2
- import type { SearchAdapter } from "./types.js";
1
+ import type { EntityId, TenantId } from "../engine/types/identifiers.ts";
2
+ import type { SearchAdapter } from "./types.ts";
3
3
  export type MeilisearchAdapterOptions = {
4
4
  url: string;
5
5
  apiKey: string;
@@ -1,7 +1,7 @@
1
- import type { SubjectId } from "../crypto/kms-adapter.js";
2
- import type { DbRunner } from "../db/connection.js";
3
- import type { FeatureDefinition } from "../engine/types/index.js";
4
- import type { SearchAdapter } from "./types.js";
1
+ import type { SubjectId } from "../crypto/kms-adapter.ts";
2
+ import type { DbRunner } from "../db/connection.ts";
3
+ import type { FeatureDefinition } from "../engine/types/index.ts";
4
+ import type { SearchAdapter } from "./types.ts";
5
5
  export declare function purgeSearchDocumentsForSubject(db: DbRunner, features: ReadonlyMap<string, FeatureDefinition>, search: SearchAdapter, subjectKey: string,
6
6
  /** When set, also match rows by ownership — needed after anonymize rewrites ciphertext. */
7
7
  subject?: SubjectId): Promise<void>;
@@ -1,6 +1,6 @@
1
- import type { DbRunner } from "../db/connection.js";
2
- import type { Registry, TenantId } from "../engine/types/index.js";
3
- import type { SearchAdapter } from "./types.js";
1
+ import type { DbRunner } from "../db/connection.ts";
2
+ import type { Registry, TenantId } from "../engine/types/index.ts";
3
+ import type { SearchAdapter } from "./types.ts";
4
4
  export type ReindexEntityFailure = {
5
5
  readonly entityId: string;
6
6
  readonly reason: string;
@@ -1,4 +1,4 @@
1
- import type { KeyScope, MasterKeyProvider } from "./types.js";
1
+ import type { KeyScope, MasterKeyProvider } from "./types.ts";
2
2
  export type DekCacheOptions = {
3
3
  readonly ttlMs?: number;
4
4
  readonly maxEntries?: number;
@@ -1,4 +1,4 @@
1
- import type { MasterKeyProvider } from "./types.js";
1
+ import type { MasterKeyProvider } from "./types.ts";
2
2
  export type EnvMasterKeyProviderOptions = {
3
3
  readonly env?: Readonly<Record<string, string | undefined>>;
4
4
  };
@@ -3,6 +3,7 @@
3
3
  // without a maintenance window. See loadKeyring + resolveCurrentVersion at
4
4
  // the bottom for the env contract.
5
5
  import { createCipheriv, createDecipheriv, randomBytes } from "node:crypto";
6
+ import { isDryRunEnvActive } from "../env/dry-run.js";
6
7
  import { InternalError } from "../errors/index.js";
7
8
  const ALGORITHM = "aes-256-gcm";
8
9
  const KEK_LENGTH = 32; // AES-256
@@ -10,21 +11,22 @@ const IV_LENGTH = 12;
10
11
  const TAG_LENGTH = 16;
11
12
  export function createEnvMasterKeyProvider(opts = {}) {
12
13
  const env = opts.env ?? process.env;
13
- const keyring = loadKeyring(env);
14
- const current = resolveCurrentVersion(env);
15
- // --- Boot validation (after keyring + current are known) -------------
16
- if (!keyring.has(current)) {
17
- throw new InternalError({
18
- message: `[secrets] currentVersion=${current} not present in keyring ` +
19
- `(have versions: ${[...keyring.keys()].sort().join(",")}). ` +
20
- `Check KUMIKO_SECRETS_MASTER_KEY_V${current} is set.`,
21
- });
22
- }
14
+ let loaded;
15
+ const keyringState = () => {
16
+ loaded ??= loadValidatedKeyring(env);
17
+ return loaded;
18
+ };
19
+ // Apps build this provider at module load, before runProdApp runs. A dry
20
+ // run inspects an env that may hold no key yet, so the check moves to the
21
+ // first key operation there; a real boot still fails here, at construction.
22
+ if (!isDryRunEnvActive(env) && !isDryRunEnvActive(process.env))
23
+ keyringState();
23
24
  // --- KEK-wrap / unwrap boilerplate (AES-256-GCM) ---------------------
24
25
  // The DEK is the plaintext here; we encrypt it with the KEK. Same
25
26
  // algorithm as the value encryption, just a different role.
26
27
  return {
27
28
  async wrapDek(dek) {
29
+ const { keyring, current } = keyringState();
28
30
  const kek = keyring.get(current);
29
31
  if (!kek) {
30
32
  // Should never reach here — boot validation above guarantees the
@@ -47,6 +49,7 @@ export function createEnvMasterKeyProvider(opts = {}) {
47
49
  };
48
50
  },
49
51
  async unwrapDek(encryptedDek, kekVersion) {
52
+ const { keyring } = keyringState();
50
53
  const kek = keyring.get(kekVersion);
51
54
  if (!kek) {
52
55
  throw new InternalError({
@@ -63,7 +66,7 @@ export function createEnvMasterKeyProvider(opts = {}) {
63
66
  return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
64
67
  },
65
68
  currentVersion() {
66
- return current;
69
+ return keyringState().current;
67
70
  },
68
71
  async isAvailable() {
69
72
  // Env-backed provider is always "available" once boot passed — the
@@ -73,6 +76,18 @@ export function createEnvMasterKeyProvider(opts = {}) {
73
76
  },
74
77
  };
75
78
  }
79
+ function loadValidatedKeyring(env) {
80
+ const keyring = loadKeyring(env);
81
+ const current = resolveCurrentVersion(env);
82
+ if (!keyring.has(current)) {
83
+ throw new InternalError({
84
+ message: `[secrets] currentVersion=${current} not present in keyring ` +
85
+ `(have versions: ${[...keyring.keys()].sort().join(",")}). ` +
86
+ `Check KUMIKO_SECRETS_MASTER_KEY_V${current} is set.`,
87
+ });
88
+ }
89
+ return { keyring, current };
90
+ }
76
91
  // ENV schema (Decision 1 — per-version variables):
77
92
  // KUMIKO_SECRETS_MASTER_KEY_V1=<base64 32 bytes>
78
93
  // KUMIKO_SECRETS_MASTER_KEY_V2=<base64 32 bytes>
@@ -1,6 +1,6 @@
1
1
  import type { EnvelopeCipher } from "@cosmicdrift/kumiko-types/envelope-cipher-types";
2
- import type { DekCache } from "./dek-cache.js";
3
- import type { MasterKeyProvider } from "./types.js";
2
+ import type { DekCache } from "./dek-cache.ts";
3
+ import type { MasterKeyProvider } from "./types.ts";
4
4
  export type { EnvelopeCipher } from "@cosmicdrift/kumiko-types/envelope-cipher-types";
5
5
  export type EnvelopeCipherOptions = {
6
6
  readonly dekCache?: DekCache;
@@ -1,3 +1,3 @@
1
- import type { Envelope, KeyScope, MasterKeyProvider } from "./types.js";
1
+ import type { Envelope, KeyScope, MasterKeyProvider } from "./types.ts";
2
2
  export declare function encryptValue(plaintext: string, provider: MasterKeyProvider, scope?: KeyScope): Promise<Envelope>;
3
3
  export declare function decryptValue(envelope: Envelope, provider: MasterKeyProvider, scope?: KeyScope): Promise<string>;