@cosmicdrift/kumiko-framework 0.368.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 (453) 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 +17 -5
  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/screens.js +29 -0
  137. package/dist/engine/boot-validator/security-baseline.d.ts +1 -1
  138. package/dist/engine/boot-validator/selector-owner-panels.d.ts +1 -1
  139. package/dist/engine/boot-validator/transfer-graph.d.ts +2 -2
  140. package/dist/engine/boot-validator/url-prefill-fields.d.ts +1 -1
  141. package/dist/engine/boot-validator/workspaces.d.ts +1 -1
  142. package/dist/engine/boot-validator.d.ts +1 -1
  143. package/dist/engine/bridge-stub.d.ts +1 -1
  144. package/dist/engine/build-app-schema.d.ts +2 -2
  145. package/dist/engine/build-config-feature-schema.d.ts +5 -5
  146. package/dist/engine/build-config-feature-schema.js +197 -65
  147. package/dist/engine/build-target.d.ts +2 -2
  148. package/dist/engine/changeset-changes.d.ts +1 -1
  149. package/dist/engine/codemod/index.d.ts +2 -2
  150. package/dist/engine/config-helpers.d.ts +1 -1
  151. package/dist/engine/constants.d.ts +1 -1
  152. package/dist/engine/create-app.d.ts +2 -2
  153. package/dist/engine/cross-tenant.d.ts +2 -2
  154. package/dist/engine/dedupe-features.d.ts +1 -1
  155. package/dist/engine/define-feature.d.ts +1 -1
  156. package/dist/engine/define-feature.js +2 -2
  157. package/dist/engine/define-handler.d.ts +4 -4
  158. package/dist/engine/define-step.d.ts +1 -1
  159. package/dist/engine/define-workflow.d.ts +2 -2
  160. package/dist/engine/effective-features.d.ts +1 -1
  161. package/dist/engine/embedded-derived.d.ts +1 -1
  162. package/dist/engine/entity-handlers.d.ts +6 -5
  163. package/dist/engine/entity-handlers.js +6 -3
  164. package/dist/engine/event-def.d.ts +15 -0
  165. package/dist/engine/event-def.js +123 -0
  166. package/dist/engine/event-helpers.d.ts +1 -1
  167. package/dist/engine/extension-names.d.ts +8 -8
  168. package/dist/engine/extension-selector-plugins.d.ts +4 -1
  169. package/dist/engine/extension-selector-plugins.js +14 -0
  170. package/dist/engine/extensions/escape-hatch-usage.d.ts +1 -1
  171. package/dist/engine/extensions/storage-provider.d.ts +1 -1
  172. package/dist/engine/extensions/tenant-data.d.ts +3 -3
  173. package/dist/engine/extensions/tenant-resource.d.ts +2 -2
  174. package/dist/engine/extensions/user-data.d.ts +2 -2
  175. package/dist/engine/factories.d.ts +1 -1
  176. package/dist/engine/feature-ast/extractors/ai-steps.d.ts +2 -2
  177. package/dist/engine/feature-ast/extractors/events.d.ts +2 -2
  178. package/dist/engine/feature-ast/extractors/handlers.d.ts +4 -4
  179. package/dist/engine/feature-ast/extractors/hooks.d.ts +5 -5
  180. package/dist/engine/feature-ast/extractors/index.d.ts +14 -14
  181. package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +3 -3
  182. package/dist/engine/feature-ast/extractors/projections-screens.d.ts +3 -3
  183. package/dist/engine/feature-ast/extractors/round1.d.ts +2 -2
  184. package/dist/engine/feature-ast/extractors/round2.d.ts +2 -2
  185. package/dist/engine/feature-ast/extractors/round3.d.ts +4 -4
  186. package/dist/engine/feature-ast/extractors/round5.d.ts +2 -2
  187. package/dist/engine/feature-ast/extractors/round6.d.ts +2 -2
  188. package/dist/engine/feature-ast/extractors/shared.d.ts +2 -2
  189. package/dist/engine/feature-ast/index.d.ts +16 -16
  190. package/dist/engine/feature-ast/parse.d.ts +2 -2
  191. package/dist/engine/feature-ast/patch.d.ts +1 -1
  192. package/dist/engine/feature-ast/patcher.d.ts +15 -15
  193. package/dist/engine/feature-ast/pattern-change-schema.d.ts +10 -10
  194. package/dist/engine/feature-ast/patterns.d.ts +15 -15
  195. package/dist/engine/feature-ast/render.d.ts +1 -1
  196. package/dist/engine/feature-builder-state.d.ts +5 -5
  197. package/dist/engine/feature-config-events-jobs.d.ts +5 -3
  198. package/dist/engine/feature-config-events-jobs.js +9 -130
  199. package/dist/engine/feature-entity-handlers.d.ts +4 -4
  200. package/dist/engine/feature-entity-handlers.js +11 -5
  201. package/dist/engine/feature-manifest.d.ts +1 -1
  202. package/dist/engine/feature-ui-extensions.d.ts +7 -7
  203. package/dist/engine/feature-ui-extensions.js +2 -2
  204. package/dist/engine/field-access.d.ts +1 -1
  205. package/dist/engine/field-helpers.d.ts +1 -1
  206. package/dist/engine/handler-helpers.d.ts +1 -1
  207. package/dist/engine/index.d.ts +89 -88
  208. package/dist/engine/index.js +1 -0
  209. package/dist/engine/instruction-fields.d.ts +1 -1
  210. package/dist/engine/object-form.d.ts +1 -1
  211. package/dist/engine/object-form.js +5 -6
  212. package/dist/engine/ownership.d.ts +3 -3
  213. package/dist/engine/pattern-library/index.d.ts +2 -2
  214. package/dist/engine/pattern-library/library.d.ts +2 -2
  215. package/dist/engine/pattern-library/mixed-schemas.d.ts +1 -1
  216. package/dist/engine/pattern-library/opaque-schemas.d.ts +1 -1
  217. package/dist/engine/pattern-library/shared-fields.d.ts +1 -1
  218. package/dist/engine/pattern-library/static-schemas.d.ts +1 -1
  219. package/dist/engine/pattern-library/types.d.ts +1 -1
  220. package/dist/engine/personal-data-fields.d.ts +2 -2
  221. package/dist/engine/pipeline.d.ts +2 -2
  222. package/dist/engine/project-app-schema-for-roles.d.ts +1 -1
  223. package/dist/engine/projection-helpers.d.ts +4 -4
  224. package/dist/engine/read-claim.d.ts +1 -1
  225. package/dist/engine/registry-facade.d.ts +2 -2
  226. package/dist/engine/registry-ingest.d.ts +2 -2
  227. package/dist/engine/registry-state.d.ts +2 -2
  228. package/dist/engine/registry-validate.d.ts +3 -3
  229. package/dist/engine/registry.d.ts +1 -1
  230. package/dist/engine/resolve-config-or-param.d.ts +2 -2
  231. package/dist/engine/role-assignment.d.ts +1 -1
  232. package/dist/engine/run-in.d.ts +1 -1
  233. package/dist/engine/run-pipeline.d.ts +3 -3
  234. package/dist/engine/schema-builder.d.ts +1 -1
  235. package/dist/engine/screen-filter-ops.d.ts +1 -1
  236. package/dist/engine/screen-helpers.d.ts +2 -2
  237. package/dist/engine/soft-delete-cleanup.d.ts +2 -2
  238. package/dist/engine/steps/_event-match.d.ts +1 -1
  239. package/dist/engine/steps/_no-return-guard.d.ts +1 -1
  240. package/dist/engine/steps/_read-source.d.ts +4 -4
  241. package/dist/engine/steps/_resolver-utils.d.ts +1 -1
  242. package/dist/engine/steps/aggregate-append-event.d.ts +1 -1
  243. package/dist/engine/steps/aggregate-create.d.ts +2 -2
  244. package/dist/engine/steps/aggregate-update.d.ts +3 -3
  245. package/dist/engine/steps/branch.d.ts +1 -1
  246. package/dist/engine/steps/call-feature.d.ts +2 -2
  247. package/dist/engine/steps/compute.d.ts +1 -1
  248. package/dist/engine/steps/for-each.d.ts +1 -1
  249. package/dist/engine/steps/mail-send.d.ts +1 -1
  250. package/dist/engine/steps/read-find-many.d.ts +2 -2
  251. package/dist/engine/steps/read-find-one.d.ts +2 -2
  252. package/dist/engine/steps/retry.d.ts +1 -1
  253. package/dist/engine/steps/return.d.ts +2 -2
  254. package/dist/engine/steps/unsafe-projection-delete.d.ts +2 -2
  255. package/dist/engine/steps/unsafe-projection-upsert.d.ts +1 -1
  256. package/dist/engine/steps/wait-for-event.d.ts +1 -1
  257. package/dist/engine/steps/wait.d.ts +1 -1
  258. package/dist/engine/steps/webhook-send.d.ts +1 -1
  259. package/dist/engine/strip-disabled-features-from-app-schema.d.ts +4 -4
  260. package/dist/engine/system-user.d.ts +2 -2
  261. package/dist/engine/template-variables.d.ts +1 -1
  262. package/dist/engine/tier-resolver-extension.d.ts +4 -4
  263. package/dist/engine/transfer-adjacency.d.ts +1 -1
  264. package/dist/engine/types/index.d.ts +6 -6
  265. package/dist/engine/validate-projection-allowlist.d.ts +1 -1
  266. package/dist/engine/validation.d.ts +1 -1
  267. package/dist/entrypoint/index.d.ts +12 -12
  268. package/dist/env/dry-run.d.ts +14 -1
  269. package/dist/env/dry-run.js +50 -0
  270. package/dist/env/index.d.ts +54 -16
  271. package/dist/env/index.js +60 -6
  272. package/dist/errors/classes.d.ts +3 -3
  273. package/dist/errors/docs-url.d.ts +1 -1
  274. package/dist/errors/index.d.ts +18 -18
  275. package/dist/errors/member-resolution.d.ts +1 -1
  276. package/dist/errors/serialize.d.ts +2 -2
  277. package/dist/errors/subject-erased.d.ts +1 -1
  278. package/dist/errors/to-kumiko-error.d.ts +1 -1
  279. package/dist/errors/write-error-info.d.ts +1 -1
  280. package/dist/errors/zod-bridge.d.ts +1 -1
  281. package/dist/es-ops/context.d.ts +4 -4
  282. package/dist/es-ops/index.d.ts +4 -4
  283. package/dist/es-ops/operations-schema.d.ts +1 -1
  284. package/dist/es-ops/runner.d.ts +3 -3
  285. package/dist/es-ops/runner.js +9 -1
  286. package/dist/es-ops/types.d.ts +2 -2
  287. package/dist/event-store/admin-api.d.ts +3 -3
  288. package/dist/event-store/archive.d.ts +2 -2
  289. package/dist/event-store/event-store.d.ts +2 -2
  290. package/dist/event-store/events-schema.d.ts +1 -1
  291. package/dist/event-store/index.d.ts +15 -15
  292. package/dist/event-store/provenance-append.d.ts +3 -3
  293. package/dist/event-store/rebuild-dead-letter.d.ts +2 -2
  294. package/dist/event-store/row-to-stored-event.d.ts +2 -2
  295. package/dist/event-store/snapshot.d.ts +2 -2
  296. package/dist/event-store/tenant-db-append.d.ts +2 -2
  297. package/dist/event-store/transfer.d.ts +3 -3
  298. package/dist/event-store/upcaster-dead-letter.d.ts +2 -2
  299. package/dist/event-store/upcaster.d.ts +3 -3
  300. package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -2
  301. package/dist/files/bind-pending-file-refs.d.ts +3 -3
  302. package/dist/files/create-file-ref-from-bytes.d.ts +4 -4
  303. package/dist/files/create-file-ref.d.ts +3 -3
  304. package/dist/files/dispose-removed-file-refs.d.ts +2 -2
  305. package/dist/files/feature.d.ts +3 -3
  306. package/dist/files/file-handle.d.ts +1 -1
  307. package/dist/files/file-ref-entity.d.ts +1 -1
  308. package/dist/files/file-ref-table.d.ts +1 -1
  309. package/dist/files/file-routes.d.ts +5 -5
  310. package/dist/files/in-memory-provider.d.ts +1 -1
  311. package/dist/files/index.d.ts +20 -20
  312. package/dist/files/load-save-file-refs.d.ts +2 -2
  313. package/dist/files/local-provider.d.ts +1 -1
  314. package/dist/files/provider-resolver.d.ts +5 -5
  315. package/dist/files/purge-expired-file-ref-bytes.d.ts +2 -2
  316. package/dist/files/record-read-check.d.ts +1 -1
  317. package/dist/files/record-write-check.d.ts +3 -3
  318. package/dist/files/storage-tracking.d.ts +2 -2
  319. package/dist/files/types.d.ts +1 -1
  320. package/dist/files/zip-stream.d.ts +1 -1
  321. package/dist/i18n/index.d.ts +4 -4
  322. package/dist/i18n/mail-registry.d.ts +1 -1
  323. package/dist/i18n/required-surface-keys.d.ts +1 -1
  324. package/dist/i18n/settings-hub-keys.d.ts +1 -1
  325. package/dist/i18n/settings-hub-keys.js +1 -2
  326. package/dist/internal/stack-support.d.ts +12 -12
  327. package/dist/internal/testing.d.ts +4 -4
  328. package/dist/jobs/index.d.ts +2 -2
  329. package/dist/jobs/job-runner.d.ts +1 -1
  330. package/dist/jobs/max-per-tenant.d.ts +1 -1
  331. package/dist/lifecycle/index.d.ts +2 -2
  332. package/dist/lifecycle/lifecycle.d.ts +1 -1
  333. package/dist/lifecycle/signal-handlers.d.ts +1 -1
  334. package/dist/logging/index.d.ts +4 -4
  335. package/dist/logging/pino-logger.d.ts +1 -1
  336. package/dist/logging/utils.d.ts +1 -1
  337. package/dist/migrations/index.d.ts +4 -4
  338. package/dist/migrations/kumiko-drift.d.ts +1 -1
  339. package/dist/migrations/pending-rebuilds.d.ts +5 -5
  340. package/dist/migrations/pii-event-backfill.d.ts +4 -4
  341. package/dist/migrations/projection-table-index.d.ts +1 -1
  342. package/dist/observability/console-provider.d.ts +1 -1
  343. package/dist/observability/context.d.ts +1 -1
  344. package/dist/observability/escape-hatch-report.d.ts +3 -3
  345. package/dist/observability/fallback.d.ts +1 -1
  346. package/dist/observability/index.d.ts +16 -16
  347. package/dist/observability/metric-validator.d.ts +1 -1
  348. package/dist/observability/metrics-handle.d.ts +1 -1
  349. package/dist/observability/metrics-wiring.d.ts +2 -2
  350. package/dist/observability/noop-provider.d.ts +1 -1
  351. package/dist/observability/prometheus-meter.d.ts +1 -1
  352. package/dist/observability/recording-meter.d.ts +1 -1
  353. package/dist/observability/recording-tracer.d.ts +1 -1
  354. package/dist/observability/redis-wrapper.d.ts +1 -1
  355. package/dist/observability/sensitive-filter.d.ts +1 -1
  356. package/dist/observability/standard-metrics.d.ts +1 -1
  357. package/dist/pipeline/active-membership.d.ts +4 -4
  358. package/dist/pipeline/append-event-core.d.ts +3 -3
  359. package/dist/pipeline/auth-claims-resolver.d.ts +2 -2
  360. package/dist/pipeline/cascade-handler.d.ts +3 -3
  361. package/dist/pipeline/dispatch-batch.d.ts +2 -2
  362. package/dist/pipeline/dispatch-query.d.ts +4 -4
  363. package/dist/pipeline/dispatch-shared.d.ts +17 -17
  364. package/dist/pipeline/dispatch-stream.d.ts +2 -2
  365. package/dist/pipeline/dispatch-write.d.ts +4 -4
  366. package/dist/pipeline/dispatcher-utils.d.ts +2 -2
  367. package/dist/pipeline/dispatcher.d.ts +12 -12
  368. package/dist/pipeline/event-consumer-state.d.ts +1 -1
  369. package/dist/pipeline/event-dispatcher-admin.d.ts +1 -1
  370. package/dist/pipeline/event-dispatcher-delivery.d.ts +7 -7
  371. package/dist/pipeline/event-dispatcher.d.ts +7 -7
  372. package/dist/pipeline/event-retention.d.ts +1 -1
  373. package/dist/pipeline/handler-access-error.d.ts +2 -2
  374. package/dist/pipeline/index.d.ts +42 -42
  375. package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
  376. package/dist/pipeline/lifecycle-pipeline.d.ts +2 -2
  377. package/dist/pipeline/member-read-only-transaction.d.ts +2 -2
  378. package/dist/pipeline/member-reader.d.ts +5 -5
  379. package/dist/pipeline/msp-rebuild.d.ts +4 -4
  380. package/dist/pipeline/multi-stream-apply-context.d.ts +3 -3
  381. package/dist/pipeline/notify-scope.d.ts +3 -3
  382. package/dist/pipeline/pending-gap-ranges.d.ts +2 -2
  383. package/dist/pipeline/pre-handler-gates.d.ts +3 -3
  384. package/dist/pipeline/pre-transaction-reservations.d.ts +4 -4
  385. package/dist/pipeline/projection-rebuild.d.ts +3 -3
  386. package/dist/pipeline/projection-state.d.ts +1 -1
  387. package/dist/pipeline/projections-runner.d.ts +3 -3
  388. package/dist/pipeline/projections-runner.js +3 -4
  389. package/dist/pipeline/system-hooks.d.ts +4 -4
  390. package/dist/pipeline/system-identity-switch.d.ts +3 -3
  391. package/dist/pipeline/tenant-timezone-cache.d.ts +1 -1
  392. package/dist/pipeline/write-origin.d.ts +3 -3
  393. package/dist/pipeline/write-result-masking.d.ts +2 -2
  394. package/dist/random/index.d.ts +2 -2
  395. package/dist/rate-limit/bucket.d.ts +1 -1
  396. package/dist/rate-limit/index.d.ts +3 -3
  397. package/dist/rate-limit/middleware.d.ts +3 -3
  398. package/dist/redis/cache-sync-bus.d.ts +2 -2
  399. package/dist/redis/cache-sync-topics.d.ts +1 -1
  400. package/dist/redis/index.d.ts +8 -8
  401. package/dist/redis/pubsub-signal.d.ts +1 -1
  402. package/dist/schema-cli.d.ts +1 -1
  403. package/dist/schema-cli.js +9 -1
  404. package/dist/search/derive-search-adapter-config.d.ts +2 -2
  405. package/dist/search/in-memory-adapter.d.ts +1 -1
  406. package/dist/search/index.d.ts +6 -6
  407. package/dist/search/meilisearch-adapter.d.ts +2 -2
  408. package/dist/search/purge-subject.d.ts +4 -4
  409. package/dist/search/reindex-entity.d.ts +3 -3
  410. package/dist/secrets/dek-cache.d.ts +1 -1
  411. package/dist/secrets/env-master-key-provider.d.ts +1 -1
  412. package/dist/secrets/env-master-key-provider.js +26 -11
  413. package/dist/secrets/envelope-cipher.d.ts +2 -2
  414. package/dist/secrets/envelope.d.ts +1 -1
  415. package/dist/secrets/index.d.ts +9 -9
  416. package/dist/secrets/rotation.d.ts +1 -1
  417. package/dist/secrets/stored-envelope.d.ts +1 -1
  418. package/dist/seeding/entity-seed.d.ts +1 -1
  419. package/dist/seeding/index.d.ts +3 -3
  420. package/dist/seeding/seed-users.d.ts +1 -1
  421. package/dist/time/index.d.ts +6 -6
  422. package/dist/ui-types/app-schema.d.ts +5 -5
  423. package/dist/ui-types/index.d.ts +23 -23
  424. package/dist/upgrade-cli.js +18 -6
  425. package/dist/utils/index.d.ts +9 -9
  426. package/package.json +19 -66
  427. package/presets/biome-app.json +80 -0
  428. package/presets/tsconfig.app.json +19 -0
  429. package/src/changes.json +84 -2
  430. package/src/scripts/codemod/README.md +18 -0
  431. package/src/scripts/codemod/codemod-support.ts +1 -1
  432. package/src/scripts/codemod/db-factory.ts +1 -1
  433. package/src/scripts/codemod/feature-factory.ts +1 -1
  434. package/src/scripts/codemod/import-extensions.ts +118 -0
  435. package/src/scripts/codemod/migrate-cross-tenant.ts +2 -2
  436. package/src/scripts/codemod/migrate-db-raw.ts +1 -1
  437. package/src/scripts/codemod/migrate-open-to-all.ts +1 -1
  438. package/src/scripts/codemod/object-form.ts +1 -1
  439. package/src/scripts/codemod/s3-imports.ts +1 -1
  440. package/src/scripts/codemod/tenant-db-options.ts +1 -1
  441. package/src/scripts/codemod/testing-move.ts +2 -2
  442. package/dist/db/bun-db-deprecated.d.ts +0 -10
  443. package/dist/db/bun-db-deprecated.js +0 -5
  444. package/dist/stack/index.d.ts +0 -10
  445. package/dist/stack/index.js +0 -11
  446. package/dist/testing/e2e-generator.d.ts +0 -5
  447. package/dist/testing/e2e-generator.js +0 -5
  448. package/dist/testing/handler-context.d.ts +0 -5
  449. package/dist/testing/handler-context.js +0 -5
  450. package/dist/testing/index.d.ts +0 -10
  451. package/dist/testing/index.js +0 -10
  452. package/dist/testing/real-providers.d.ts +0 -5
  453. package/dist/testing/real-providers.js +0 -5
@@ -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>;
@@ -1,9 +1,9 @@
1
- export { createDekCache, type DekCache, type DekCacheOptions, withDekCache } from "./dek-cache.js";
2
- export { derivePurposeSecret } from "./derive-purpose-secret.js";
3
- export { createEnvMasterKeyProvider, type EnvMasterKeyProviderOptions, type Keyring, } from "./env-master-key-provider.js";
4
- export { decryptValue, encryptValue } from "./envelope.js";
5
- export { createEnvelopeCipher, type EnvelopeCipher, type EnvelopeCipherOptions, } from "./envelope-cipher.js";
6
- export { assertNoSecretLeak } from "./leak-guard.js";
7
- export { rewrapDek } from "./rotation.js";
8
- export { decodeStoredEnvelope, encodeStoredEnvelope, isStoredEnvelope, type StoredEnvelope, } from "./stored-envelope.js";
9
- export { type ContainsSecret, createSecret, type Envelope, isSecret, type KeyScope, type MasterKeyProvider, type Secret, type SecretAuditContext, type SecretKeyRef, type SecretsContext, } from "./types.js";
1
+ export { createDekCache, type DekCache, type DekCacheOptions, withDekCache } from "./dek-cache.ts";
2
+ export { derivePurposeSecret } from "./derive-purpose-secret.ts";
3
+ export { createEnvMasterKeyProvider, type EnvMasterKeyProviderOptions, type Keyring, } from "./env-master-key-provider.ts";
4
+ export { decryptValue, encryptValue } from "./envelope.ts";
5
+ export { createEnvelopeCipher, type EnvelopeCipher, type EnvelopeCipherOptions, } from "./envelope-cipher.ts";
6
+ export { assertNoSecretLeak } from "./leak-guard.ts";
7
+ export { rewrapDek } from "./rotation.ts";
8
+ export { decodeStoredEnvelope, encodeStoredEnvelope, isStoredEnvelope, type StoredEnvelope, } from "./stored-envelope.ts";
9
+ export { type ContainsSecret, createSecret, type Envelope, isSecret, type KeyScope, type MasterKeyProvider, type Secret, type SecretAuditContext, type SecretKeyRef, type SecretsContext, } from "./types.ts";
@@ -1,2 +1,2 @@
1
- import type { Envelope, MasterKeyProvider } from "./types.js";
1
+ import type { Envelope, MasterKeyProvider } from "./types.ts";
2
2
  export declare function rewrapDek(envelope: Envelope, provider: MasterKeyProvider): Promise<Envelope>;
@@ -1,4 +1,4 @@
1
- import type { Envelope } from "./types.js";
1
+ import type { Envelope } from "./types.ts";
2
2
  export type StoredEnvelope = {
3
3
  readonly ciphertext: string;
4
4
  readonly iv: string;
@@ -1,4 +1,4 @@
1
- import { type SeedIfExists } from "./types.js";
1
+ import { type SeedIfExists } from "./types.ts";
2
2
  export type EventStoreSeedExisting<TId extends string | number = string> = {
3
3
  readonly id: TId;
4
4
  readonly version: number;
@@ -1,3 +1,3 @@
1
- export { type EventStoreSeedExisting, type RunEventStoreSeedOptions, runEventStoreSeed, } from "./entity-seed.js";
2
- export { createTestUser, TestUsers, testTenantId, testUserId } from "./seed-users.js";
3
- export { DEFAULT_SEED_IF_EXISTS, type SeedIfExists } from "./types.js";
1
+ export { type EventStoreSeedExisting, type RunEventStoreSeedOptions, runEventStoreSeed, } from "./entity-seed.ts";
2
+ export { createTestUser, TestUsers, testTenantId, testUserId } from "./seed-users.ts";
3
+ export { DEFAULT_SEED_IF_EXISTS, type SeedIfExists } from "./types.ts";
@@ -1,4 +1,4 @@
1
- import type { SessionUser, TenantId } from "../engine/types/index.js";
1
+ import type { SessionUser, TenantId } from "../engine/types/index.ts";
2
2
  export declare function testTenantId(n: number): TenantId;
3
3
  export declare function testUserId(n: number): string;
4
4
  export declare const TestUsers: {
@@ -1,6 +1,6 @@
1
- export { warnIfNonUtcServerTimeZone } from "./boot-tz-warning.js";
2
- export type { GeoAddress, GeoCoordinates, GeoTzProvider } from "./geo-tz.js";
3
- export { isValidIanaTimeZone } from "./iana.js";
4
- export { instantToLegacyDate, legacyDateToInstant } from "./legacy-date.js";
5
- export { ensureTemporalPolyfill, getTemporal } from "./polyfill.js";
6
- export { type Clock, createTzContext, createTzContextAsync, type LocatedTimestampJson, type TzContext, type TzContextOptions, } from "./tz-context.js";
1
+ export { warnIfNonUtcServerTimeZone } from "./boot-tz-warning.ts";
2
+ export type { GeoAddress, GeoCoordinates, GeoTzProvider } from "./geo-tz.ts";
3
+ export { isValidIanaTimeZone } from "./iana.ts";
4
+ export { instantToLegacyDate, legacyDateToInstant } from "./legacy-date.ts";
5
+ export { ensureTemporalPolyfill, getTemporal } from "./polyfill.ts";
6
+ export { type Clock, createTzContext, createTzContextAsync, type LocatedTimestampJson, type TzContext, type TzContextOptions, } from "./tz-context.ts";
@@ -1,8 +1,8 @@
1
- import type { TranslationKeys } from "../engine/types/config.js";
2
- import type { EntityDefinition } from "../engine/types/fields.js";
3
- import type { ContentCollectionDefinition, NavDefinition } from "../engine/types/nav.js";
4
- import type { ScreenDefinition } from "../engine/types/screen.js";
5
- import type { WorkspaceDefinition } from "../engine/types/workspace.js";
1
+ import type { TranslationKeys } from "../engine/types/config.ts";
2
+ import type { EntityDefinition } from "../engine/types/fields.ts";
3
+ import type { ContentCollectionDefinition, NavDefinition } from "../engine/types/nav.ts";
4
+ import type { ScreenDefinition } from "../engine/types/screen.ts";
5
+ import type { WorkspaceDefinition } from "../engine/types/workspace.ts";
6
6
  export type FeatureSchema = {
7
7
  readonly featureName: string;
8
8
  readonly entities: Readonly<Record<string, EntityDefinition>>;
@@ -1,24 +1,24 @@
1
1
  export { NO_WIDGET_FIELD_TYPES } from "@cosmicdrift/kumiko-types/fields";
2
- export type { DerivedCellRoundingTarget } from "../engine/embedded-derived.js";
3
- export { computeDerivedCellValue, roundDerivedCellValue } from "../engine/embedded-derived.js";
4
- export type { ParsedRefTarget } from "../engine/parse-ref-target.js";
5
- export { parseRefTarget } from "../engine/parse-ref-target.js";
6
- export type { FieldsOrGroupsSection, UnavailableSelectOption } from "../engine/screen-helpers.js";
7
- export { availableSelectOptions, evalFieldCondition, explicitListScreenId, findUnavailableSelectOptions, isExtensionEditSection, isFieldsEditSection, isFormatSpec, isRecordLocked, isUnchangedValue, isWriteFormEditSection, normalizeEditField, normalizeListColumn, resolveNavParentScreen, sectionFieldSpecs, } from "../engine/screen-helpers.js";
8
- export type { BooleanFieldDef, DateFieldDef, EmbeddedDerivedCellDef, EntityDefinition, FieldDefinition, FileFieldDef, FilesFieldDef, ImageFieldDef, ImagesFieldDef, NumberFieldDef, OptionsQueryPayload, OptionsQueryPayloadValue, SelectFieldDef, SelectOptionTone, TextFieldDef, } from "../engine/types/fields.js";
9
- export type { AccessRule, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, RoleAccessPersonalData, RoleAccessRule, } from "../engine/types/handlers.js";
10
- export { isOpenToAllGranted, isUiAccessGranted } from "../engine/types/handlers.js";
11
- export type { IconKey, NavDefinition, NavIconKey } from "../engine/types/nav.js";
12
- export type { ActionFormFooterAction, ActionFormRedirect, ActionFormScreenDefinition, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardText, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, EditExtensionSection, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityListExpandableRow, EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, EntityWriteExcludedFields, FieldCondition, FieldIconKey, FieldRenderer, FormWidth, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListSortSpec, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSubtitlePart, RelatedListGroupBy, RelatedListRowTone, RelatedListToolbarAction, RowAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, } from "../engine/types/screen.js";
13
- export { metricField, relatedListGroupHeaderLabel, relatedListGroupKey, } from "../engine/types/screen.js";
14
- export type { TargetRef } from "../engine/types/target-ref.js";
15
- export type { TreeAction, TreeNode, TreeNodeState } from "../engine/types/tree-node.js";
16
- export type { WorkspaceDefinition } from "../engine/types/workspace.js";
17
- export { ACTION_FORM_ENTITY, handlerFieldLabelKey, handlerTitleKey, PROJECTION_DETAIL_ENTITY, WRITE_FORM_SECTION_ENTITY, } from "../i18n/required-surface-keys.js";
18
- export type { AppSchema, FeatureSchema, QualifiedContentCollection, WorkspaceSchema, } from "./app-schema.js";
19
- export type { CardColumnRoles, CardRoleColumn } from "./card-column-roles.js";
20
- export { CARD_META_MAX, cardColumnRoles, cardFileDisplayKind } from "./card-column-roles.js";
21
- export { type Formality, formalLocaleTag } from "./formality.js";
22
- export type { ListRowMetaColumnType, ListRowMetaReference, ReferenceLookupSource, SystemReferenceLabel, } from "./list-row-meta.js";
23
- export { LIST_ROW_META_COLUMNS, LIST_ROW_META_REFERENCES, REFERENCE_LOOKUP_SOURCES, SYSTEM_REFERENCE_LABELS, } from "./list-row-meta.js";
24
- export { type PluralForms, resolveTranslationValue, type TranslationValue, translationValueOtherText, } from "./plural.js";
2
+ export type { DerivedCellRoundingTarget } from "../engine/embedded-derived.ts";
3
+ export { computeDerivedCellValue, roundDerivedCellValue } from "../engine/embedded-derived.ts";
4
+ export type { ParsedRefTarget } from "../engine/parse-ref-target.ts";
5
+ export { parseRefTarget } from "../engine/parse-ref-target.ts";
6
+ export type { FieldsOrGroupsSection, UnavailableSelectOption } from "../engine/screen-helpers.ts";
7
+ export { availableSelectOptions, evalFieldCondition, explicitListScreenId, findUnavailableSelectOptions, isExtensionEditSection, isFieldsEditSection, isFormatSpec, isRecordLocked, isUnchangedValue, isWriteFormEditSection, normalizeEditField, normalizeListColumn, resolveNavParentScreen, sectionFieldSpecs, } from "../engine/screen-helpers.ts";
8
+ export type { BooleanFieldDef, DateFieldDef, EmbeddedDerivedCellDef, EntityDefinition, FieldDefinition, FileFieldDef, FilesFieldDef, ImageFieldDef, ImagesFieldDef, NumberFieldDef, OptionsQueryPayload, OptionsQueryPayloadValue, SelectFieldDef, SelectOptionTone, TextFieldDef, } from "../engine/types/fields.ts";
9
+ export type { AccessRule, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, RoleAccessPersonalData, RoleAccessRule, } from "../engine/types/handlers.ts";
10
+ export { isOpenToAllGranted, isUiAccessGranted } from "../engine/types/handlers.ts";
11
+ export type { IconKey, NavDefinition, NavIconKey } from "../engine/types/nav.ts";
12
+ export type { ActionFormFooterAction, ActionFormRedirect, ActionFormScreenDefinition, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartKind, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardChartTone, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelEmptyState, DashboardPanelGate, DashboardPanelQueryOptions, DashboardPanelSpan, DashboardPanelVisibility, DashboardProgressListPanel, DashboardScopeDefinition, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardText, DashboardTextParam, DashboardTimeRangeDefinition, DashboardValueFormat, EditExtensionSection, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityListExpandableRow, EntityListFacetConfig, EntityListFacetExtraOption, EntityListScreenDefinition, EntityWriteExcludedFields, FieldCondition, FieldIconKey, FieldRenderer, FormWidth, ListBadgeTone, ListColumnDisplay, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListSortSpec, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSubtitlePart, RelatedListGroupBy, RelatedListRowTone, RelatedListToolbarAction, RowAction, RowActionDisplay, RowActionDrawer, RowActionMode, RowActionNavigate, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, } from "../engine/types/screen.ts";
13
+ export { metricField, relatedListGroupHeaderLabel, relatedListGroupKey, } from "../engine/types/screen.ts";
14
+ export type { TargetRef } from "../engine/types/target-ref.ts";
15
+ export type { TreeAction, TreeNode, TreeNodeState } from "../engine/types/tree-node.ts";
16
+ export type { WorkspaceDefinition } from "../engine/types/workspace.ts";
17
+ export { ACTION_FORM_ENTITY, handlerFieldLabelKey, handlerTitleKey, PROJECTION_DETAIL_ENTITY, WRITE_FORM_SECTION_ENTITY, } from "../i18n/required-surface-keys.ts";
18
+ export type { AppSchema, FeatureSchema, QualifiedContentCollection, WorkspaceSchema, } from "./app-schema.ts";
19
+ export type { CardColumnRoles, CardRoleColumn } from "./card-column-roles.ts";
20
+ export { CARD_META_MAX, cardColumnRoles, cardFileDisplayKind } from "./card-column-roles.ts";
21
+ export { type Formality, formalLocaleTag } from "./formality.ts";
22
+ export type { ListRowMetaColumnType, ListRowMetaReference, ReferenceLookupSource, SystemReferenceLabel, } from "./list-row-meta.ts";
23
+ export { LIST_ROW_META_COLUMNS, LIST_ROW_META_REFERENCES, REFERENCE_LOOKUP_SOURCES, SYSTEM_REFERENCE_LABELS, } from "./list-row-meta.ts";
24
+ export { type PluralForms, resolveTranslationValue, type TranslationValue, translationValueOtherText, } from "./plural.ts";
@@ -284,6 +284,18 @@ async function runCodemodScript(scriptPath, targetDir, repoRoot, dryRun) {
284
284
  ]);
285
285
  return { ok: exitCode === 0, output: `${stdout}${stderr}`.trim() };
286
286
  }
287
+ // One codemod can back the breaking entries of many features in the same release
288
+ // (each feature's changelog names its own removed export); it runs once per version.
289
+ function uniqueCodemodRunsPerVersion(entries) {
290
+ const seenRuns = new Set();
291
+ return entries.filter((e) => {
292
+ const runKey = `${e.version}\0${e.codemod}`;
293
+ if (seenRuns.has(runKey))
294
+ return false;
295
+ seenRuns.add(runKey);
296
+ return true;
297
+ });
298
+ }
287
299
  function hasCodemod(e) {
288
300
  return typeof e.codemod === "string" && e.codemod.length > 0;
289
301
  }
@@ -446,7 +458,7 @@ function writePartialMarker(out, targetDir, pending, manualEntries, failedVersio
446
458
  });
447
459
  out.err(` ⚠ ${ran.length} codemod(s) already applied; wrote marker at ${version} so a re-run resumes at the failed one.`);
448
460
  }
449
- // Runs every pending breaking entry's codemod, oldest version first (so a
461
+ // Runs every pending entry's codemod, oldest version first (so a
450
462
  // later codemod can assume an earlier one already ran). Stops on the first
451
463
  // failure; codemods that already ran are kept in a partial marker. Writes the
452
464
  // marker whenever dryRun is false —
@@ -474,9 +486,9 @@ markerVersion, previous) {
474
486
  return 0;
475
487
  }
476
488
  const breaking = pending.filter((e) => e.type === "breaking");
477
- const codemodEntries = breaking
478
- .filter(hasCodemod)
479
- .sort((a, b) => compareVersions(a.version, b.version));
489
+ // A codemod is worth running whatever the entry's type: an improvement that
490
+ // moves a module ships one too, and skipping it leaves the deprecated path in place.
491
+ const codemodEntries = uniqueCodemodRunsPerVersion(pending.filter(hasCodemod).sort((a, b) => compareVersions(a.version, b.version)));
480
492
  const manualEntries = breaking.filter(needsManualMigration);
481
493
  for (const e of manualEntries) {
482
494
  out.log(hasCodemod(e)
@@ -485,7 +497,7 @@ markerVersion, previous) {
485
497
  }
486
498
  if (codemodEntries.length === 0) {
487
499
  out.log(breaking.length > 0
488
- ? " No automatable codemods among the pending breaking changes."
500
+ ? " No automatable codemods among the pending changes."
489
501
  : " ✓ No breaking changes pending.");
490
502
  if (!dryRun) {
491
503
  const carried = carryOverManual(previous, manualEntries.map(toMarkerManual));
@@ -636,7 +648,7 @@ kumiko-upgrade --resolve <id|version>[,<id|version>...] --reason "<text>" [--not
636
648
  --dir <path> target directory to check/apply against (default: cwd)
637
649
  --json machine-readable output
638
650
  --verbose include full migration details for each pending entry
639
- --apply run codemods for pending breaking changes and write the upgrade marker
651
+ --apply run codemods for pending changes and write the upgrade marker
640
652
  (one run moves the marker to the installed version; manual migrations stay listed as open)
641
653
  --resolve <refs> mark open manual migrations as done; ref = full id or a version with exactly one open entry
642
654
  --reason <text> required with --resolve, max 500 characters
@@ -1,9 +1,9 @@
1
- export { assertUnreachable } from "./assert.js";
2
- export { toSnakeCase } from "./case.js";
3
- export { compareByCodepoint } from "./compare.js";
4
- export { readPositiveIntEnv } from "./env-parse.js";
5
- export { generateDeterministicId, generateId } from "./ids.js";
6
- export { isPlainObject } from "./is-plain-object.js";
7
- export { parseStringArrayJson } from "./parse-string-array-json.js";
8
- export { parseJsonOrThrow, parseJsonSafe, stringifyJson } from "./safe-json.js";
9
- export { parseRoles } from "./serialization.js";
1
+ export { assertUnreachable } from "./assert.ts";
2
+ export { toSnakeCase } from "./case.ts";
3
+ export { compareByCodepoint } from "./compare.ts";
4
+ export { readPositiveIntEnv } from "./env-parse.ts";
5
+ export { generateDeterministicId, generateId } from "./ids.ts";
6
+ export { isPlainObject } from "./is-plain-object.ts";
7
+ export { parseStringArrayJson } from "./parse-string-array-json.ts";
8
+ export { parseJsonOrThrow, parseJsonSafe, stringifyJson } from "./safe-json.ts";
9
+ export { parseRoles } from "./serialization.ts";