@cosmicdrift/kumiko-samples 0.367.0 → 0.369.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 (406) hide show
  1. package/package.json +1 -1
  2. package/packages/bundled-features/package.json +16 -2
  3. package/packages/bundled-features/src/audit/handlers/details.query.ts +1 -1
  4. package/packages/bundled-features/src/audit/handlers/list.query.ts +1 -1
  5. package/packages/bundled-features/src/audit/run-escape-hatch-retention.ts +5 -5
  6. package/packages/bundled-features/src/auth-email-password/bootstrap.ts +1 -1
  7. package/packages/bundled-features/src/auth-email-password/handlers/invite-accept-with-login.write.ts +10 -3
  8. package/packages/bundled-features/src/auth-email-password/handlers/invite-accept.write.ts +10 -3
  9. package/packages/bundled-features/src/auth-email-password/handlers/invite-info.query.ts +1 -1
  10. package/packages/bundled-features/src/auth-email-password/handlers/invite-signup-complete.write.ts +6 -2
  11. package/packages/bundled-features/src/auth-email-password/handlers/signup-confirm.write.ts +1 -1
  12. package/packages/bundled-features/src/auth-email-password/seeding.ts +2 -2
  13. package/packages/bundled-features/src/auth-foundation/feature.ts +43 -34
  14. package/packages/bundled-features/src/auth-foundation/index.ts +1 -0
  15. package/packages/bundled-features/src/auth-mfa/db/queries.ts +5 -2
  16. package/packages/bundled-features/src/auth-mfa/handlers/enable-confirm-preauth.write.ts +1 -1
  17. package/packages/bundled-features/src/auth-mfa/handlers/enable-start-preauth.write.ts +1 -1
  18. package/packages/bundled-features/src/auth-mfa/handlers/reencrypt.job.ts +2 -2
  19. package/packages/bundled-features/src/auth-mfa/handlers/status.query.ts +1 -1
  20. package/packages/bundled-features/src/auth-mfa/handlers/verify.write.ts +1 -1
  21. package/packages/bundled-features/src/auth-mfa/mfa-code-verifier.ts +1 -1
  22. package/packages/bundled-features/src/auth-mfa/mfa-status-checker.ts +1 -1
  23. package/packages/bundled-features/src/auth-mfa-user-data/index.ts +19 -10
  24. package/packages/bundled-features/src/billing-foundation/billing-info-query.ts +1 -1
  25. package/packages/bundled-features/src/billing-foundation/feature.ts +138 -135
  26. package/packages/bundled-features/src/billing-foundation/handlers/create-portal-session.write.ts +1 -1
  27. package/packages/bundled-features/src/billing-foundation/projection.ts +3 -2
  28. package/packages/bundled-features/src/cap-counter/calendar-cap-usage-reservation.ts +52 -1
  29. package/packages/bundled-features/src/cap-counter/cap-reservation.ts +203 -15
  30. package/packages/bundled-features/src/cap-counter/changes.json +13 -0
  31. package/packages/bundled-features/src/cap-counter/feature.ts +84 -73
  32. package/packages/bundled-features/src/cap-counter/handlers/increment-rolling.write.ts +3 -4
  33. package/packages/bundled-features/src/cap-counter/index.ts +9 -1
  34. package/packages/bundled-features/src/cap-counter/tables.ts +10 -3
  35. package/packages/bundled-features/src/cap-overview/handlers/caps-usage.query.ts +1 -2
  36. package/packages/bundled-features/src/cap-overview/handlers/tenant-caps-list.query.ts +6 -2
  37. package/packages/bundled-features/src/cap-overview/handlers/tenant-options.query.ts +1 -1
  38. package/packages/bundled-features/src/channel-email/changes.json +7 -0
  39. package/packages/bundled-features/src/channel-email/email-channel.ts +39 -8
  40. package/packages/bundled-features/src/channel-email/feature.ts +1 -1
  41. package/packages/bundled-features/src/channel-email/index.ts +5 -1
  42. package/packages/bundled-features/src/channel-in-app/handlers/inbox.query.ts +1 -1
  43. package/packages/bundled-features/src/channel-in-app/handlers/mark-all-read.write.ts +1 -1
  44. package/packages/bundled-features/src/channel-in-app/handlers/mark-read.write.ts +1 -1
  45. package/packages/bundled-features/src/channel-in-app/handlers/unread-count.query.ts +1 -1
  46. package/packages/bundled-features/src/channel-in-app/tables.ts +1 -1
  47. package/packages/bundled-features/src/compliance-profiles/handlers/for-tenant.query.ts +1 -1
  48. package/packages/bundled-features/src/compliance-profiles/handlers/needs-profile.query.ts +1 -1
  49. package/packages/bundled-features/src/compliance-profiles/handlers/set-profile.write.ts +1 -2
  50. package/packages/bundled-features/src/compliance-profiles/resolve-for-tenant.ts +1 -1
  51. package/packages/bundled-features/src/compliance-profiles/seeding.ts +8 -4
  52. package/packages/bundled-features/src/compliance-profiles-ops/index.ts +26 -17
  53. package/packages/bundled-features/src/config/db/queries/resolver.ts +1 -1
  54. package/packages/bundled-features/src/config/handlers/reencrypt.job.ts +2 -2
  55. package/packages/bundled-features/src/config/resolver.ts +1 -1
  56. package/packages/bundled-features/src/config/web/i18n.ts +1 -2
  57. package/packages/bundled-features/src/config/write-helpers.ts +1 -1
  58. package/packages/bundled-features/src/crypto-shredding/changes.json +6 -0
  59. package/packages/bundled-features/src/crypto-shredding/handlers/forget-subject.write.ts +9 -7
  60. package/packages/bundled-features/src/custom-fields/db/queries/field-access.ts +1 -1
  61. package/packages/bundled-features/src/custom-fields/db/queries/projection.ts +1 -1
  62. package/packages/bundled-features/src/custom-fields/db/queries/quota.ts +1 -1
  63. package/packages/bundled-features/src/custom-fields/db/queries/retention.ts +6 -2
  64. package/packages/bundled-features/src/custom-fields/db/queries/user-data-rights.ts +1 -1
  65. package/packages/bundled-features/src/custom-fields/feature.ts +11 -14
  66. package/packages/bundled-features/src/custom-fields/handlers/clear-custom-field.write.ts +2 -2
  67. package/packages/bundled-features/src/custom-fields/handlers/delete-system-field.write.ts +2 -2
  68. package/packages/bundled-features/src/custom-fields/handlers/delete-tenant-field.write.ts +2 -2
  69. package/packages/bundled-features/src/custom-fields/handlers/set-custom-field.write.ts +2 -2
  70. package/packages/bundled-features/src/custom-fields/wire-for-entity.ts +4 -4
  71. package/packages/bundled-features/src/data-retention/resolve-for-tenant.ts +1 -1
  72. package/packages/bundled-features/src/data-retention/run-retention-cleanup.ts +16 -10
  73. package/packages/bundled-features/src/delivery/address-opt-out.ts +5 -2
  74. package/packages/bundled-features/src/delivery/attempt-log-retention.ts +1 -1
  75. package/packages/bundled-features/src/delivery/changes.json +6 -0
  76. package/packages/bundled-features/src/delivery/channel-context.ts +1 -1
  77. package/packages/bundled-features/src/delivery/db/queries/address-opt-outs.ts +1 -1
  78. package/packages/bundled-features/src/delivery/db/queries/preferences.ts +1 -1
  79. package/packages/bundled-features/src/delivery/delivery-service.ts +16 -6
  80. package/packages/bundled-features/src/delivery/feature.ts +2 -2
  81. package/packages/bundled-features/src/delivery/handlers/log.query.ts +3 -2
  82. package/packages/bundled-features/src/delivery/handlers/preferences.query.ts +1 -1
  83. package/packages/bundled-features/src/delivery/index.ts +8 -1
  84. package/packages/bundled-features/src/delivery/unsubscribe.ts +66 -37
  85. package/packages/bundled-features/src/delivery/upsert-preference.ts +5 -2
  86. package/packages/bundled-features/src/derivatives-sharp/feature.ts +21 -12
  87. package/packages/bundled-features/src/derivatives-sharp/index.ts +1 -1
  88. package/packages/bundled-features/src/document-ingest-foundation/feature.ts +112 -103
  89. package/packages/bundled-features/src/document-ingest-foundation/forget-extract-with-file-ref.ts +3 -3
  90. package/packages/bundled-features/src/document-ingest-foundation/index.ts +4 -1
  91. package/packages/bundled-features/src/feature-toggles/global-feature-state-table.ts +1 -1
  92. package/packages/bundled-features/src/feature-toggles/handlers/set.write.ts +3 -5
  93. package/packages/bundled-features/src/feature-toggles/toggle-runtime.ts +1 -1
  94. package/packages/bundled-features/src/file-derivatives/feature.ts +134 -129
  95. package/packages/bundled-features/src/file-derivatives/handlers/public-variant-by-file-ref.query.ts +1 -1
  96. package/packages/bundled-features/src/file-derivatives/handlers/public-variant.query.ts +1 -1
  97. package/packages/bundled-features/src/file-foundation/feature.ts +38 -29
  98. package/packages/bundled-features/src/file-foundation/index.ts +1 -0
  99. package/packages/bundled-features/src/file-foundation/read-file-ref-content.ts +1 -1
  100. package/packages/bundled-features/src/file-provider-inmemory/feature.ts +32 -21
  101. package/packages/bundled-features/src/file-provider-inmemory/index.ts +6 -1
  102. package/packages/bundled-features/src/file-provider-s3/changes.json +10 -1
  103. package/packages/bundled-features/src/file-provider-s3/env-feature.ts +62 -0
  104. package/packages/bundled-features/src/file-provider-s3/feature.ts +107 -73
  105. package/packages/bundled-features/src/file-provider-s3/index.ts +6 -1
  106. package/packages/bundled-features/src/file-provider-s3/lib/index.ts +3 -0
  107. package/packages/bundled-features/src/{files-provider-s3 → file-provider-s3/lib}/s3-provider.ts +19 -19
  108. package/packages/bundled-features/src/file-provider-s3-env/index.ts +7 -2
  109. package/packages/bundled-features/src/files-provider-s3/index.ts +11 -3
  110. package/packages/bundled-features/src/files-tenant-data/handlers/sweep-orphaned-derivatives.job.ts +1 -1
  111. package/packages/bundled-features/src/files-tenant-data/hooks.ts +1 -2
  112. package/packages/bundled-features/src/folders/feature.ts +8 -3
  113. package/packages/bundled-features/src/folders-user-data/index.ts +27 -18
  114. package/packages/bundled-features/src/form-draft/db/queries/cleanup.ts +1 -1
  115. package/packages/bundled-features/src/form-draft/db/queries/draft-count.ts +1 -1
  116. package/packages/bundled-features/src/form-draft/db/queries/owned-file-refs.ts +3 -2
  117. package/packages/bundled-features/src/form-draft/feature.ts +6 -1
  118. package/packages/bundled-features/src/form-draft/handlers/cleanup.job.ts +2 -2
  119. package/packages/bundled-features/src/form-draft/index.ts +1 -1
  120. package/packages/bundled-features/src/form-draft/lookup.ts +1 -1
  121. package/packages/bundled-features/src/form-draft-user-data/index.ts +19 -10
  122. package/packages/bundled-features/src/inbound-mail-foundation/feature.ts +165 -154
  123. package/packages/bundled-features/src/inbound-mail-foundation/handlers/ingest-message.write.ts +1 -2
  124. package/packages/bundled-features/src/inbound-mail-foundation/index.ts +1 -1
  125. package/packages/bundled-features/src/inbound-mail-foundation/oauth-access-token.ts +5 -2
  126. package/packages/bundled-features/src/inbound-mail-foundation/projection.ts +3 -2
  127. package/packages/bundled-features/src/inbound-mail-foundation/watch-supervisor.ts +1 -1
  128. package/packages/bundled-features/src/inbound-provider-imap/feature.ts +22 -13
  129. package/packages/bundled-features/src/inbound-provider-imap/index.ts +6 -1
  130. package/packages/bundled-features/src/inbound-provider-inmemory/feature.ts +20 -12
  131. package/packages/bundled-features/src/inbound-provider-inmemory/index.ts +1 -0
  132. package/packages/bundled-features/src/jobs/db/queries/retention.ts +1 -1
  133. package/packages/bundled-features/src/jobs/db/queries/stale-run-sweep.ts +1 -1
  134. package/packages/bundled-features/src/jobs/handlers/detail.query.ts +1 -1
  135. package/packages/bundled-features/src/jobs/handlers/list.query.ts +7 -2
  136. package/packages/bundled-features/src/jobs/handlers/retry.write.ts +1 -1
  137. package/packages/bundled-features/src/jobs/handlers/tenant-failures.query.ts +1 -1
  138. package/packages/bundled-features/src/jobs/handlers/tenant-runs.query.ts +1 -1
  139. package/packages/bundled-features/src/jobs/job-run-logger.ts +11 -10
  140. package/packages/bundled-features/src/jobs/tenant-job-failure-table.ts +1 -1
  141. package/packages/bundled-features/src/jobs/tenant-job-run-table.ts +1 -1
  142. package/packages/bundled-features/src/ledger/feature.ts +6 -3
  143. package/packages/bundled-features/src/mail-foundation/feature.ts +66 -46
  144. package/packages/bundled-features/src/mail-foundation/i18n.ts +8 -0
  145. package/packages/bundled-features/src/mail-foundation/index.ts +1 -0
  146. package/packages/bundled-features/src/mail-transport-inmemory/feature.ts +31 -17
  147. package/packages/bundled-features/src/mail-transport-inmemory/index.ts +6 -1
  148. package/packages/bundled-features/src/mail-transport-smtp/changes.json +7 -0
  149. package/packages/bundled-features/src/mail-transport-smtp/config-keys.ts +67 -0
  150. package/packages/bundled-features/src/mail-transport-smtp/feature.ts +67 -82
  151. package/packages/bundled-features/src/mail-transport-smtp/i18n.ts +28 -0
  152. package/packages/bundled-features/src/mail-transport-smtp/index.ts +1 -0
  153. package/packages/bundled-features/src/managed-pages/handlers/by-slug.query.ts +1 -1
  154. package/packages/bundled-features/src/managed-pages/handlers/by-tenant-published.query.ts +1 -2
  155. package/packages/bundled-features/src/managed-pages/handlers/set.write.ts +1 -2
  156. package/packages/bundled-features/src/managed-pages/seeding.ts +8 -4
  157. package/packages/bundled-features/src/metrics/compute.ts +1 -1
  158. package/packages/bundled-features/src/metrics/filters.ts +1 -1
  159. package/packages/bundled-features/src/metrics/validate.ts +1 -1
  160. package/packages/bundled-features/src/notes-history/feature.ts +6 -3
  161. package/packages/bundled-features/src/notes-history/handlers/add-note.write.ts +1 -1
  162. package/packages/bundled-features/src/notes-history-user-data/hooks.ts +1 -1
  163. package/packages/bundled-features/src/notes-history-user-data/index.ts +27 -18
  164. package/packages/bundled-features/src/personal-access-tokens/changes.json +6 -0
  165. package/packages/bundled-features/src/personal-access-tokens/feature.ts +17 -2
  166. package/packages/bundled-features/src/personal-access-tokens/handlers/create.write.ts +1 -1
  167. package/packages/bundled-features/src/personal-access-tokens/handlers/list.query.ts +2 -2
  168. package/packages/bundled-features/src/personal-access-tokens/handlers/revoke.write.ts +1 -1
  169. package/packages/bundled-features/src/personal-access-tokens/resolver.ts +1 -1
  170. package/packages/bundled-features/src/personal-access-tokens/revoke-for-user.ts +2 -2
  171. package/packages/bundled-features/src/personal-access-tokens/roles.ts +8 -6
  172. package/packages/bundled-features/src/personal-access-tokens/screens.ts +2 -0
  173. package/packages/bundled-features/src/readiness/feature.ts +25 -16
  174. package/packages/bundled-features/src/readiness/index.ts +1 -1
  175. package/packages/bundled-features/src/secrets/changes.json +6 -0
  176. package/packages/bundled-features/src/secrets/db/queries/read.ts +1 -1
  177. package/packages/bundled-features/src/secrets/feature.ts +26 -6
  178. package/packages/bundled-features/src/secrets/handlers/delete.write.ts +5 -2
  179. package/packages/bundled-features/src/secrets/handlers/rotate.job.ts +2 -2
  180. package/packages/bundled-features/src/secrets/handlers/set.write.ts +5 -2
  181. package/packages/bundled-features/src/secrets/secrets-context.ts +4 -3
  182. package/packages/bundled-features/src/sessions/db/queries/cleanup.ts +1 -1
  183. package/packages/bundled-features/src/sessions/handlers/detail.query.ts +1 -1
  184. package/packages/bundled-features/src/sessions/handlers/list.query.ts +2 -2
  185. package/packages/bundled-features/src/sessions/handlers/mine.query.ts +1 -1
  186. package/packages/bundled-features/src/sessions/handlers/revoke-all-for-user.write.ts +1 -1
  187. package/packages/bundled-features/src/sessions/handlers/revoke-all-others.write.ts +1 -1
  188. package/packages/bundled-features/src/sessions/handlers/revoke.write.ts +1 -1
  189. package/packages/bundled-features/src/sessions/session-callbacks.ts +14 -7
  190. package/packages/bundled-features/src/sessions/testing.ts +1 -1
  191. package/packages/bundled-features/src/tags/feature.ts +6 -3
  192. package/packages/bundled-features/src/template-resolver/api.ts +1 -1
  193. package/packages/bundled-features/src/template-resolver/constants.ts +0 -1
  194. package/packages/bundled-features/src/template-resolver/handlers/bundle-import.ts +1 -1
  195. package/packages/bundled-features/src/template-resolver/handlers/by-slug.query.ts +1 -1
  196. package/packages/bundled-features/src/template-resolver/handlers/by-tenant.query.ts +1 -2
  197. package/packages/bundled-features/src/template-resolver/handlers/collection-item.query.ts +1 -1
  198. package/packages/bundled-features/src/template-resolver/handlers/collection-list.query.ts +1 -2
  199. package/packages/bundled-features/src/template-resolver/handlers/collection-set.write.ts +1 -1
  200. package/packages/bundled-features/src/template-resolver/handlers/copy-locale.write.ts +1 -1
  201. package/packages/bundled-features/src/template-resolver/handlers/diff-to-system.query.ts +1 -1
  202. package/packages/bundled-features/src/template-resolver/handlers/export-bundle.query.ts +1 -1
  203. package/packages/bundled-features/src/template-resolver/handlers/find-by-id.query.ts +1 -1
  204. package/packages/bundled-features/src/template-resolver/handlers/layout-source.query.ts +1 -1
  205. package/packages/bundled-features/src/template-resolver/handlers/list.query.ts +1 -1
  206. package/packages/bundled-features/src/template-resolver/handlers/overview.query.ts +1 -1
  207. package/packages/bundled-features/src/template-resolver/handlers/reset-to-system.write.ts +1 -1
  208. package/packages/bundled-features/src/template-resolver/handlers/resource-remove.write.ts +1 -1
  209. package/packages/bundled-features/src/template-resolver/handlers/send-test.write.ts +4 -2
  210. package/packages/bundled-features/src/template-resolver/handlers/set.write.ts +1 -1
  211. package/packages/bundled-features/src/template-resolver/handlers/template-write.ts +1 -1
  212. package/packages/bundled-features/src/template-resolver/handlers/tenant-overrides.query.ts +1 -1
  213. package/packages/bundled-features/src/template-resolver/handlers/toggle-status.write.ts +1 -1
  214. package/packages/bundled-features/src/template-resolver/handlers/usage.query.ts +1 -1
  215. package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +1 -1
  216. package/packages/bundled-features/src/template-resolver/seeding.ts +3 -3
  217. package/packages/bundled-features/src/template-resolver/store-template-resource.ts +1 -1
  218. package/packages/bundled-features/src/template-resolver/template-preview.ts +1 -1
  219. package/packages/bundled-features/src/template-resolver/template-resources.ts +1 -1
  220. package/packages/bundled-features/src/template-resolver/testing.ts +1 -1
  221. package/packages/bundled-features/src/template-resolver-user-data/index.ts +23 -14
  222. package/packages/bundled-features/src/tenant/handlers/active-tenant-ids.query.ts +1 -1
  223. package/packages/bundled-features/src/tenant/handlers/add-member.write.ts +1 -2
  224. package/packages/bundled-features/src/tenant/handlers/cancel-invitation.write.ts +1 -1
  225. package/packages/bundled-features/src/tenant/handlers/invitations.query.ts +1 -1
  226. package/packages/bundled-features/src/tenant/handlers/me.query.ts +1 -1
  227. package/packages/bundled-features/src/tenant/handlers/member-directory.query.ts +1 -1
  228. package/packages/bundled-features/src/tenant/handlers/members.query.ts +1 -1
  229. package/packages/bundled-features/src/tenant/handlers/memberships.query.ts +1 -1
  230. package/packages/bundled-features/src/tenant/handlers/remove-member.write.ts +2 -1
  231. package/packages/bundled-features/src/tenant/handlers/resolve-user-ids.query.ts +1 -1
  232. package/packages/bundled-features/src/tenant/handlers/team-list.query.ts +1 -1
  233. package/packages/bundled-features/src/tenant/handlers/tenant-directory.query.ts +1 -1
  234. package/packages/bundled-features/src/tenant/handlers/update-member-roles.write.ts +1 -2
  235. package/packages/bundled-features/src/tenant/invited-membership.ts +2 -2
  236. package/packages/bundled-features/src/tenant/last-tenant-admin.ts +1 -2
  237. package/packages/bundled-features/src/tenant/seeding.ts +12 -12
  238. package/packages/bundled-features/src/tenant-lifecycle/handlers/cancel-destruction.write.ts +1 -2
  239. package/packages/bundled-features/src/tenant-lifecycle/handlers/request-destruction.write.ts +1 -2
  240. package/packages/bundled-features/src/tenant-lifecycle/lib/revoke-tenant-sessions.ts +1 -1
  241. package/packages/bundled-features/src/tenant-lifecycle/lifecycle-gate.ts +1 -1
  242. package/packages/bundled-features/src/tenant-lifecycle/run-tenant-destroy.ts +3 -3
  243. package/packages/bundled-features/src/tenant-lifecycle/stages.ts +10 -5
  244. package/packages/bundled-features/src/tenant-lifecycle/testing.ts +3 -3
  245. package/packages/bundled-features/src/tenant-settings/feature.ts +34 -29
  246. package/packages/bundled-features/src/tier-engine/feature.ts +426 -428
  247. package/packages/bundled-features/src/tier-engine/handlers/get-tenant-tier.query.ts +2 -3
  248. package/packages/bundled-features/src/tier-engine/handlers/set-tenant-tier.write.ts +5 -2
  249. package/packages/bundled-features/src/user/changes.json +6 -0
  250. package/packages/bundled-features/src/user/db/queries/stream-tenant-backfill.ts +1 -1
  251. package/packages/bundled-features/src/user/handlers/create.write.ts +1 -2
  252. package/packages/bundled-features/src/user/handlers/find-for-auth.query.ts +1 -1
  253. package/packages/bundled-features/src/user/handlers/list.query.ts +1 -1
  254. package/packages/bundled-features/src/user/handlers/update-roles.ts +2 -1
  255. package/packages/bundled-features/src/user/index.ts +5 -1
  256. package/packages/bundled-features/src/user/invited-global-roles.ts +2 -2
  257. package/packages/bundled-features/src/user/principal-status.ts +13 -3
  258. package/packages/bundled-features/src/user/resolve-display-names.ts +1 -1
  259. package/packages/bundled-features/src/user/seeding.ts +5 -5
  260. package/packages/bundled-features/src/user-data-rights/audit-download.ts +2 -2
  261. package/packages/bundled-features/src/user-data-rights/changes.json +6 -0
  262. package/packages/bundled-features/src/user-data-rights/db/queries/export-jobs.ts +1 -1
  263. package/packages/bundled-features/src/user-data-rights/db/queries/forget-cleanup.ts +1 -1
  264. package/packages/bundled-features/src/user-data-rights/feature.ts +7 -4
  265. package/packages/bundled-features/src/user-data-rights/handlers/download-by-job.query.ts +1 -1
  266. package/packages/bundled-features/src/user-data-rights/handlers/download-by-token.query.ts +1 -1
  267. package/packages/bundled-features/src/user-data-rights/handlers/export-status.query.ts +1 -1
  268. package/packages/bundled-features/src/user-data-rights/handlers/list-download-attempts.query.ts +1 -1
  269. package/packages/bundled-features/src/user-data-rights/handlers/my-audit-log.query.ts +1 -1
  270. package/packages/bundled-features/src/user-data-rights/handlers/request-export.write.ts +1 -2
  271. package/packages/bundled-features/src/user-data-rights/handlers/run-forget-cleanup.write.ts +3 -3
  272. package/packages/bundled-features/src/user-data-rights/lib/default-mailers.ts +40 -3
  273. package/packages/bundled-features/src/user-data-rights/lib/deny-if-target-outside-admin-tenant.ts +1 -1
  274. package/packages/bundled-features/src/user-data-rights/lib/update-user-lifecycle.ts +7 -2
  275. package/packages/bundled-features/src/user-data-rights/run-export-jobs.ts +7 -3
  276. package/packages/bundled-features/src/user-data-rights/run-forget-cleanup.ts +11 -5
  277. package/packages/bundled-features/src/user-data-rights/run-user-export.ts +10 -5
  278. package/packages/bundled-features/src/waitlist/handlers/invite.write.ts +1 -2
  279. package/packages/bundled-features/src/waitlist/handlers/reject.write.ts +1 -1
  280. package/packages/bundled-features/src/waitlist/lib.ts +5 -2
  281. package/packages/bundled-features/src/workflow-runner/event-subscriber.ts +1 -1
  282. package/packages/bundled-features/src/workflow-runner/feature.ts +58 -47
  283. package/packages/bundled-features/src/workflow-runner/handlers/resume-run.write.ts +1 -1
  284. package/packages/bundled-features/src/workflow-runner/index.ts +1 -1
  285. package/packages/bundled-features/src/workflow-runner/pending-projection.ts +1 -1
  286. package/samples/apps/admin-console/src/run-config.ts +2 -2
  287. package/samples/apps/cap-billing-demo/package.json +3 -0
  288. package/samples/apps/cap-billing-demo/src/feature.ts +2 -2
  289. package/samples/apps/cap-billing-demo/src/run-config.ts +8 -8
  290. package/samples/apps/marketing-demo/src/app/seed.ts +1 -1
  291. package/samples/apps/marketing-demo/src/db/queries/seed-counts.ts +1 -1
  292. package/samples/apps/showcase/package.json +3 -0
  293. package/samples/apps/showcase/src/app/seed-items.ts +1 -1
  294. package/samples/apps/styleguide/src/app/seed.ts +2 -2
  295. package/samples/apps/styleguide/src/features/ai-settings/seed.ts +2 -2
  296. package/samples/apps/ui-walkthrough/scripts/emit-e2e-data.ts +1 -1
  297. package/samples/apps/ui-walkthrough/src/app/auth-constants.ts +1 -1
  298. package/samples/apps/ui-walkthrough/src/app/seed-rental.ts +2 -2
  299. package/samples/apps/ui-walkthrough/src/app/seed-vehicles.ts +1 -1
  300. package/samples/apps/ui-walkthrough/src/app/seed.ts +1 -1
  301. package/samples/apps/ui-walkthrough/src/db/queries/row-counts.ts +1 -1
  302. package/samples/apps/ui-walkthrough/src/db/queries/task-counts.ts +1 -1
  303. package/samples/apps/use-all-bundled/feature-manifest.json +16 -16
  304. package/samples/apps/use-all-bundled/package.json +3 -0
  305. package/samples/apps/use-all-bundled/scripts/check-coverage.ts +2 -2
  306. package/samples/apps/use-all-bundled/src/app/auth-constants.ts +1 -1
  307. package/samples/apps/use-all-bundled/src/app/cap-overview-caps.ts +2 -2
  308. package/samples/apps/use-all-bundled/src/app/dev-app-options.ts +1 -1
  309. package/samples/apps/use-all-bundled/src/app/seed-documents.ts +1 -1
  310. package/samples/apps/use-all-bundled/src/app/seed.ts +11 -5
  311. package/samples/apps/use-all-bundled/src/run-config.ts +55 -56
  312. package/samples/apps/user-data-rights-demo/README.md +2 -2
  313. package/samples/apps/user-data-rights-demo/package.json +3 -0
  314. package/samples/apps/user-data-rights-demo/src/run-config.ts +7 -7
  315. package/samples/apps/workspaces/package.json +3 -0
  316. package/samples/recipes/access-control/package.json +3 -0
  317. package/samples/recipes/anonymous-access/package.json +3 -0
  318. package/samples/recipes/anonymous-access-multitenant/package.json +3 -0
  319. package/samples/recipes/apex-landing/package.json +1 -0
  320. package/samples/recipes/apex-surface-auth/package.json +3 -0
  321. package/samples/recipes/apex-surface-auth/src/feature.ts +2 -2
  322. package/samples/recipes/api-worker-split/package.json +3 -0
  323. package/samples/recipes/api-worker-split/src/feature.ts +1 -2
  324. package/samples/recipes/auth-claims/package.json +3 -0
  325. package/samples/recipes/auth-foundation-providers/src/feature.ts +1 -1
  326. package/samples/recipes/auth-mfa/package.json +3 -0
  327. package/samples/recipes/basic-entity/package.json +3 -0
  328. package/samples/recipes/chat-channels/package.json +3 -0
  329. package/samples/recipes/compliance-profiles-demo/package.json +3 -0
  330. package/samples/recipes/cross-feature-events/package.json +3 -1
  331. package/samples/recipes/cross-feature-events/src/feature.ts +1 -1
  332. package/samples/recipes/crypto-shredding-hr/package.json +3 -0
  333. package/samples/recipes/currencies-global/package.json +3 -0
  334. package/samples/recipes/currencies-per-tenant/package.json +3 -0
  335. package/samples/recipes/custom-fields-basic/package.json +3 -0
  336. package/samples/recipes/custom-handlers/package.json +3 -0
  337. package/samples/recipes/dashboard-stats/package.json +3 -0
  338. package/samples/recipes/delivery-notifications/package.json +3 -0
  339. package/samples/recipes/e2e-generator/package.json +3 -0
  340. package/samples/recipes/embedded/package.json +3 -0
  341. package/samples/recipes/embedded-entity-form/package.json +1 -0
  342. package/samples/recipes/encrypted-tenant-config/README.md +1 -1
  343. package/samples/recipes/encrypted-tenant-config/package.json +3 -0
  344. package/samples/recipes/error-contract/package.json +3 -0
  345. package/samples/recipes/event-sourcing/package.json +3 -1
  346. package/samples/recipes/event-sourcing/src/feature.ts +16 -20
  347. package/samples/recipes/event-sourcing/tsconfig.json +2 -6
  348. package/samples/recipes/feature-toggles/package.json +3 -0
  349. package/samples/recipes/field-access/package.json +3 -0
  350. package/samples/recipes/files-post-processing/package.json +1 -0
  351. package/samples/recipes/golden-path/README.md +30 -0
  352. package/samples/recipes/golden-path/package.json +11 -0
  353. package/samples/recipes/golden-path/src/feature.ts +70 -0
  354. package/samples/recipes/idempotency/package.json +3 -0
  355. package/samples/recipes/inbound-mail-triage/package.json +3 -0
  356. package/samples/recipes/lane-routing/package.json +3 -0
  357. package/samples/recipes/ledger-banking/package.json +3 -0
  358. package/samples/recipes/ledger-invoicing/package.json +3 -0
  359. package/samples/recipes/legal-pages/package.json +3 -0
  360. package/samples/recipes/lifecycle-hooks/package.json +3 -0
  361. package/samples/recipes/managed-config/package.json +3 -0
  362. package/samples/recipes/managed-pages/package.json +3 -0
  363. package/samples/recipes/notes-history-basic/package.json +3 -0
  364. package/samples/recipes/ownership/package.json +3 -0
  365. package/samples/recipes/pdf-audit-export/package.json +1 -0
  366. package/samples/recipes/pipeline-basics/package.json +3 -0
  367. package/samples/recipes/public-share-token/package.json +3 -0
  368. package/samples/recipes/public-share-token/src/feature.ts +1 -1
  369. package/samples/recipes/rate-limiting/package.json +3 -0
  370. package/samples/recipes/realtime-sse/package.json +3 -0
  371. package/samples/recipes/record-detail-layout/package.json +1 -0
  372. package/samples/recipes/reference-data/package.json +3 -0
  373. package/samples/recipes/relations/package.json +3 -0
  374. package/samples/recipes/screens-nav/package.json +3 -0
  375. package/samples/recipes/search/package.json +3 -0
  376. package/samples/recipes/secrets-demo/package.json +3 -0
  377. package/samples/recipes/security-baseline/src/feature.ts +2 -2
  378. package/samples/recipes/session-revocation/README.md +1 -1
  379. package/samples/recipes/session-revocation/package.json +3 -0
  380. package/samples/recipes/session-revocation/src/feature.ts +1 -1
  381. package/samples/recipes/state-machine/package.json +3 -1
  382. package/samples/recipes/state-machine/src/entities/invoice.ts +2 -2
  383. package/samples/recipes/state-machine/src/events.ts +19 -0
  384. package/samples/recipes/state-machine/src/feature.ts +25 -30
  385. package/samples/recipes/state-machine/src/handlers/_helpers.ts +13 -14
  386. package/samples/recipes/state-machine/src/handlers/create.ts +1 -1
  387. package/samples/recipes/state-machine/src/handlers/transitions.ts +129 -122
  388. package/samples/recipes/state-machine/src/reducer.ts +1 -1
  389. package/samples/recipes/state-machine/tsconfig.json +2 -6
  390. package/samples/recipes/tags-basic/package.json +3 -0
  391. package/samples/recipes/tenant-isolation/package.json +3 -0
  392. package/samples/recipes/tenant-settings/package.json +3 -0
  393. package/samples/recipes/tier-admin/package.json +3 -0
  394. package/samples/recipes/timezones/package.json +3 -0
  395. package/samples/recipes/tsconfig.base.json +1 -1
  396. package/samples/recipes/user-data-rights/package.json +3 -0
  397. package/samples/recipes/user-data-rights/src/feature.ts +6 -2
  398. package/samples/recipes/user-profile/package.json +3 -0
  399. package/samples/recipes/user-profile/src/feature.ts +2 -2
  400. package/samples/recipes/webhook-step/package.json +3 -0
  401. package/samples/recipes/wizard-form/package.json +1 -0
  402. package/samples/recipes/workflow-engine/package.json +3 -0
  403. package/samples/recipes/workflow-engine/src/db/queries/suspended-runs.ts +5 -2
  404. package/samples/recipes/writeform-section/package.json +1 -0
  405. package/packages/bundled-features/src/file-provider-s3-env/feature.ts +0 -58
  406. /package/packages/bundled-features/src/{files-provider-s3 → file-provider-s3/lib}/env-helper.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-samples",
3
- "version": "0.367.0",
3
+ "version": "0.369.0",
4
4
  "description": "Source trees of the Kumiko sample recipes, sample apps and bundled features in repo layout, for tooling such as few-shot corpus builds.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-bundled-features",
3
- "version": "0.367.0",
3
+ "version": "0.369.0",
4
4
  "description": "Built-in features — tenant, user, auth, delivery. The stuff you'd rewrite anyway, already typed.",
5
5
  "license": "BUSL-1.1",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -73,6 +73,7 @@
73
73
  "./mail-transport-inmemory": "./src/mail-transport-inmemory/index.ts",
74
74
  "./file-foundation": "./src/file-foundation/index.ts",
75
75
  "./file-provider-s3": "./src/file-provider-s3/index.ts",
76
+ "./file-provider-s3/lib": "./src/file-provider-s3/lib/index.ts",
76
77
  "./document-ingest-foundation": "./src/document-ingest-foundation/index.ts",
77
78
  "./file-provider-s3-env": "./src/file-provider-s3-env/index.ts",
78
79
  "./file-provider-inmemory": "./src/file-provider-inmemory/index.ts",
@@ -397,6 +398,10 @@
397
398
  "types": "./dist/file-provider-s3/index.d.ts",
398
399
  "default": "./dist/file-provider-s3/index.js"
399
400
  },
401
+ "./file-provider-s3/lib": {
402
+ "types": "./dist/file-provider-s3/lib/index.d.ts",
403
+ "default": "./dist/file-provider-s3/lib/index.js"
404
+ },
400
405
  "./document-ingest-foundation": {
401
406
  "types": "./dist/document-ingest-foundation/index.d.ts",
402
407
  "default": "./dist/document-ingest-foundation/index.js"
@@ -707,6 +712,15 @@
707
712
  "@cosmicdrift/kumiko-locale-es": "workspace:*",
708
713
  "@cosmicdrift/kumiko-renderer-mail-html": "workspace:*",
709
714
  "jsqr": "^1.4.0",
710
- "unpdf": "^1.8.1"
715
+ "unpdf": "^1.8.1",
716
+ "@cosmicdrift/kumiko-testing": "workspace:*"
717
+ },
718
+ "peerDependencies": {
719
+ "@cosmicdrift/kumiko-testing": ">=0.366.0 <1.0.0"
720
+ },
721
+ "peerDependenciesMeta": {
722
+ "@cosmicdrift/kumiko-testing": {
723
+ "optional": true
724
+ }
711
725
  }
712
726
  }
@@ -3,7 +3,7 @@
3
3
  // can only read events in their own tenant; a SystemAdmin can pass scope
4
4
  // "system" to read app-instance system events (e.g. app.started).
5
5
 
6
- import { selectMany } from "@cosmicdrift/kumiko-framework/bun-db";
6
+ import { selectMany } from "@cosmicdrift/kumiko-framework/db";
7
7
  import { access, defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
8
8
  import { eventsTable } from "@cosmicdrift/kumiko-framework/event-store";
9
9
  import * as z from "zod";
@@ -12,7 +12,7 @@
12
12
  // Event payloads hold PII as subject-KMS ciphertext; it is replaced by
13
13
  // REDACTED_PII_PLACEHOLDER before returning, since the API leak guard refuses ciphertext.
14
14
 
15
- import { selectMany, type WhereObject } from "@cosmicdrift/kumiko-framework/bun-db";
15
+ import { selectMany, type WhereObject } from "@cosmicdrift/kumiko-framework/db";
16
16
  import { access, defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
17
17
  import { eventsTable } from "@cosmicdrift/kumiko-framework/event-store";
18
18
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
@@ -1,13 +1,13 @@
1
- import {
2
- aggregateWhere,
3
- runnerCanBeginTransaction,
4
- selectMany,
5
- } from "@cosmicdrift/kumiko-framework/bun-db";
6
1
  import {
7
2
  COMPLIANCE_PROFILES,
8
3
  subtractRetentionSpec,
9
4
  } from "@cosmicdrift/kumiko-framework/compliance";
10
5
  import type { DbConnection, DbRunner } from "@cosmicdrift/kumiko-framework/db";
6
+ import {
7
+ aggregateWhere,
8
+ runnerCanBeginTransaction,
9
+ selectMany,
10
+ } from "@cosmicdrift/kumiko-framework/db";
11
11
  import {
12
12
  type ConfigResolver,
13
13
  parseTenantId,
@@ -10,8 +10,8 @@ import {
10
10
  makeDispatchWriteAs,
11
11
  type RoleDispatchArgs,
12
12
  } from "@cosmicdrift/kumiko-framework/api";
13
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
14
13
  import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
14
+ import { fetchOne } from "@cosmicdrift/kumiko-framework/db";
15
15
  import {
16
16
  ConfigScopes,
17
17
  createSystemUser,
@@ -21,8 +21,11 @@
21
21
  // both already exist. The magic is the combined login+accept operation in
22
22
  // one round trip.
23
23
 
24
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
25
- import { createEventStoreExecutor, createTenantDb } from "@cosmicdrift/kumiko-framework/db";
24
+ import {
25
+ createEventStoreExecutor,
26
+ createTenantDb,
27
+ fetchOne,
28
+ } from "@cosmicdrift/kumiko-framework/db";
26
29
  import {
27
30
  buildSessionRoles,
28
31
  createSystemUser,
@@ -235,7 +238,11 @@ export function createInviteAcceptWithLoginHandler(opts: InviteAcceptWithLoginOp
235
238
  if (!globalGrant.isSuccess) return globalGrant;
236
239
 
237
240
  // Invitation → accepted: TenantDb for the invitation's tenant.
238
- const invitationTdb = createTenantDb(dbConn, invitationTenantId, "system");
241
+ const invitationTdb = createTenantDb({
242
+ db: dbConn,
243
+ tenantId: invitationTenantId,
244
+ mode: "system",
245
+ });
239
246
  const updateResult = await invitationExecutor.update(
240
247
  {
241
248
  id: invitationId,
@@ -15,8 +15,11 @@
15
15
  // Session"-Flow. Branch 2 (anon + existing email) und Branch 3 (anon +
16
16
  // new email) kommen als separate Handler.
17
17
 
18
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
19
- import { createEventStoreExecutor, createTenantDb } from "@cosmicdrift/kumiko-framework/db";
18
+ import {
19
+ createEventStoreExecutor,
20
+ createTenantDb,
21
+ fetchOne,
22
+ } from "@cosmicdrift/kumiko-framework/db";
20
23
  import {
21
24
  createSystemUser,
22
25
  defineWriteHandler,
@@ -170,7 +173,11 @@ export function createInviteAcceptHandler() {
170
173
  // Tenant-scoping: ctx.db ist auf event.user.tenantId gescopt
171
174
  // (= NICHT der invitation-tenant). Eigene TenantDb für den
172
175
  // invitation-tenant bauen damit der executor die row findet.
173
- const invitationTdb = createTenantDb(dbConn, invitationTenantId, "system");
176
+ const invitationTdb = createTenantDb({
177
+ db: dbConn,
178
+ tenantId: invitationTenantId,
179
+ mode: "system",
180
+ });
174
181
  const updateResult = await invitationExecutor.update(
175
182
  {
176
183
  id: invitationId,
@@ -5,7 +5,7 @@
5
5
  // the token store — the token is not burned and stays usable for the
6
6
  // actual accept call.
7
7
 
8
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
8
+ import { fetchOne } from "@cosmicdrift/kumiko-framework/db";
9
9
  import { defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
10
10
  import { UnprocessableError } from "@cosmicdrift/kumiko-framework/errors";
11
11
  import * as z from "zod";
@@ -17,11 +17,11 @@
17
17
  // e. Invitation → accepted, Token gelöscht
18
18
  // 5. Response: SessionUser + tenantId für Auto-Login
19
19
 
20
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
21
20
  import {
22
21
  createEventStoreExecutor,
23
22
  createTenantDb,
24
23
  type DbConnection,
24
+ fetchOne,
25
25
  } from "@cosmicdrift/kumiko-framework/db";
26
26
  import {
27
27
  buildSessionRoles,
@@ -185,7 +185,11 @@ export function createInviteSignupCompleteHandler(opts: InviteSignupCompleteOpti
185
185
  });
186
186
 
187
187
  // Invitation → accepted: TenantDb für invitation-tenant
188
- const invitationTdb = createTenantDb(dbConn, invitationTenantId, "system");
188
+ const invitationTdb = createTenantDb({
189
+ db: dbConn,
190
+ tenantId: invitationTenantId,
191
+ mode: "system",
192
+ });
189
193
  const updateResult = await invitationExecutor.update(
190
194
  {
191
195
  id: invitationId,
@@ -19,8 +19,8 @@
19
19
  // bei !committed wird der burn released damit ein legitimer Retry
20
20
  // nicht durch einen stale Marker geblockt wird (wie reset/verify).
21
21
 
22
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
23
22
  import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
23
+ import { fetchOne } from "@cosmicdrift/kumiko-framework/db";
24
24
  import {
25
25
  defineWriteHandler,
26
26
  type HandlerContext,
@@ -12,7 +12,6 @@
12
12
  // Damit Sample-Server und Tests keine drei sub-paths zusammensammeln
13
13
  // müssen.
14
14
 
15
- import { fetchOne, selectMany } from "@cosmicdrift/kumiko-framework/bun-db";
16
15
  import {
17
16
  configuredBlindIndexKey,
18
17
  configuredPiiSubjectKms,
@@ -20,10 +19,11 @@ import {
20
19
  type LocalKeyKmsAdapter,
21
20
  } from "@cosmicdrift/kumiko-framework/crypto";
22
21
  import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
22
+ import { fetchOne, selectMany } from "@cosmicdrift/kumiko-framework/db";
23
23
  import type { SessionUser, TenantId } from "@cosmicdrift/kumiko-framework/engine";
24
24
  import { ConflictError } from "@cosmicdrift/kumiko-framework/errors";
25
25
  import { createFallbackLogger } from "@cosmicdrift/kumiko-framework/logging";
26
- import { TestUsers } from "@cosmicdrift/kumiko-framework/stack";
26
+ import { TestUsers } from "@cosmicdrift/kumiko-framework/seeding";
27
27
  import { hashPassword } from "../shared/index.js";
28
28
  // kumiko-lint-ignore cross-feature-import auth-tests need user+tenant seed-helpers
29
29
  import { type SeedTenantHooks, seedTenant, seedTenantMembership } from "../tenant/seeding.js";
@@ -44,45 +44,54 @@ export {
44
44
 
45
45
  const FEATURE_NAME = "auth-foundation";
46
46
 
47
- export const authFoundationFeature = defineFeature(FEATURE_NAME, (r) => {
48
- r.describe(
49
- "Declares auth-middleware extension points: `tokenVerifier` (Bearer), `sessionStore` (revocable JWT sid), optional `tenantResolver` + `tenantExistence` for anonymous multi-tenant. Provider-features register via r.useExtension; mount auth-foundation with the matching provider features.",
50
- );
51
- r.uiHints({
52
- displayLabel: "Auth Provider Foundation",
53
- category: "identity",
54
- recommended: false,
55
- });
47
+ export function createAuthFoundationFeature() {
48
+ return defineFeature(
49
+ FEATURE_NAME,
50
+ (r) => {
51
+ r.describe(
52
+ "Declares auth-middleware extension points: `tokenVerifier` (Bearer), `sessionStore` (revocable JWT sid), optional `tenantResolver` + `tenantExistence` for anonymous multi-tenant. Provider-features register via r.useExtension; mount auth-foundation with the matching provider features.",
53
+ );
54
+ r.uiHints({
55
+ displayLabel: "Auth Provider Foundation",
56
+ category: "identity",
57
+ recommended: false,
58
+ });
56
59
 
57
- r.extendsRegistrar(EXT_TOKEN_VERIFIER, {
58
- onRegister: () => {
59
- // No side-effects at register-time — registry stores the usage,
60
- // resolveTokenVerifier looks it up at request-time.
61
- },
62
- });
63
- r.bootCheck(({ features }) => validateTokenVerifierMultiplicity(features));
60
+ r.extendsRegistrar(EXT_TOKEN_VERIFIER, {
61
+ onRegister: () => {
62
+ // No side-effects at register-time — registry stores the usage,
63
+ // resolveTokenVerifier looks it up at request-time.
64
+ },
65
+ });
66
+ r.bootCheck(({ features }) => validateTokenVerifierMultiplicity(features));
64
67
 
65
- r.extendsRegistrar(EXT_SESSION_STORE, {
66
- onRegister: () => {
67
- // No side-effects at register-time — resolveSessionStore at boot/request.
68
- },
69
- });
70
- r.bootCheck(({ features }) => validateSessionStoreMultiplicity(features));
68
+ r.extendsRegistrar(EXT_SESSION_STORE, {
69
+ onRegister: () => {
70
+ // No side-effects at register-time — resolveSessionStore at boot/request.
71
+ },
72
+ });
73
+ r.bootCheck(({ features }) => validateSessionStoreMultiplicity(features));
71
74
 
72
- r.extendsRegistrar(EXT_TENANT_RESOLVER, {
73
- onRegister: () => {
74
- // Optional — zero providers is fine (single-tenant / header-cookie).
75
- },
76
- });
77
- r.bootCheck(({ features }) => validateTenantResolverMultiplicity(features));
75
+ r.extendsRegistrar(EXT_TENANT_RESOLVER, {
76
+ onRegister: () => {
77
+ // Optional — zero providers is fine (single-tenant / header-cookie).
78
+ },
79
+ });
80
+ r.bootCheck(({ features }) => validateTenantResolverMultiplicity(features));
78
81
 
79
- r.extendsRegistrar(EXT_TENANT_EXISTENCE, {
80
- onRegister: () => {
81
- // Optional — zero providers skips the existence check.
82
+ r.extendsRegistrar(EXT_TENANT_EXISTENCE, {
83
+ onRegister: () => {
84
+ // Optional — zero providers skips the existence check.
85
+ },
86
+ });
87
+ r.bootCheck(({ features }) => validateTenantExistenceMultiplicity(features));
82
88
  },
83
- });
84
- r.bootCheck(({ features }) => validateTenantExistenceMultiplicity(features));
85
- });
89
+ { dedupeOptions: {} },
90
+ );
91
+ }
92
+
93
+ /** @deprecated Use createAuthFoundationFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
94
+ export const authFoundationFeature = createAuthFoundationFeature();
86
95
 
87
96
  /**
88
97
  * Tries every registered tokenVerifier provider's shape against `rawToken`
@@ -2,6 +2,7 @@
2
2
 
3
3
  export {
4
4
  authFoundationFeature,
5
+ createAuthFoundationFeature,
5
6
  type ResolvedTenantResolver,
6
7
  resolveSessionStore,
7
8
  resolveTenantExistence,
@@ -1,5 +1,8 @@
1
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
2
- import { createEventStoreExecutor, type TenantDb } from "@cosmicdrift/kumiko-framework/db";
1
+ import {
2
+ createEventStoreExecutor,
3
+ fetchOne,
4
+ type TenantDb,
5
+ } from "@cosmicdrift/kumiko-framework/db";
3
6
  import type { SessionUser } from "@cosmicdrift/kumiko-framework/engine";
4
7
  import { parseJsonOrThrow } from "@cosmicdrift/kumiko-framework/utils";
5
8
  import { userMfaEntity, userMfaTable } from "../schema/user-mfa.js";
@@ -134,7 +134,7 @@ export function createEnableConfirmPreauthHandler(opts: EnableConfirmPreauthOpti
134
134
 
135
135
  // "system" mode: no session exists yet, tenantId comes from the
136
136
  // verified token, mirroring enable-start-preauth.write.ts.
137
- const scopedDb = createTenantDb(ctx.db.unsafeRaw(), tenantId, "system");
137
+ const scopedDb = createTenantDb({ db: ctx.db.unsafeRaw(), tenantId, mode: "system" });
138
138
  const scopedUser: SessionUser = { id: userId, tenantId, roles: ["User"] };
139
139
  const existing = await findUserMfaRow(scopedDb, scopedUser);
140
140
  if (existing) return mfaAlreadyEnabled();
@@ -62,7 +62,7 @@ export function createEnableStartPreauthHandler(opts: EnableStartPreauthOptions)
62
62
  // "system" mode: the guest dispatch identity's own tenantId is
63
63
  // meaningless here — the preauthSetupToken is the source of truth
64
64
  // for which tenant's row to read, mirroring verify.write.ts.
65
- const scopedDb = createTenantDb(ctx.db.unsafeRaw(), tenantId, "system");
65
+ const scopedDb = createTenantDb({ db: ctx.db.unsafeRaw(), tenantId, mode: "system" });
66
66
  const scopedUser: SessionUser = { id: userId, tenantId, roles: ["User"] };
67
67
  const existing = await findUserMfaRow(scopedDb, scopedUser);
68
68
  if (existing) return mfaAlreadyEnabled();
@@ -23,7 +23,6 @@
23
23
  // an old-KEK wrap would happen if rotation only touched the read-side
24
24
  // projection instead of appending a real `.updated` event).
25
25
 
26
- import { selectMany } from "@cosmicdrift/kumiko-framework/bun-db";
27
26
  import {
28
27
  collectPiiSubjectFields,
29
28
  configuredPiiSubjectKms,
@@ -34,6 +33,7 @@ import {
34
33
  createEventStoreExecutor,
35
34
  createTenantDb,
36
35
  type DbConnection,
36
+ selectMany,
37
37
  type TenantDb,
38
38
  } from "@cosmicdrift/kumiko-framework/db";
39
39
  import type { JobContext, SessionUser, TenantId } from "@cosmicdrift/kumiko-framework/engine";
@@ -109,7 +109,7 @@ export async function mfaReencryptJob(
109
109
  function tdbFor(tenantId: TenantId): TenantDb {
110
110
  let existing = tdbCache.get(tenantId);
111
111
  if (!existing) {
112
- existing = createTenantDb(db, tenantId, "system");
112
+ existing = createTenantDb({ db, tenantId, mode: "system" });
113
113
  tdbCache.set(tenantId, existing);
114
114
  }
115
115
  return existing;
@@ -1,4 +1,4 @@
1
- import { fetchOne } from "@cosmicdrift/kumiko-framework/bun-db";
1
+ import { fetchOne } from "@cosmicdrift/kumiko-framework/db";
2
2
  import { defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import * as z from "zod";
4
4
  import { userMfaTable } from "../schema/user-mfa.js";
@@ -98,7 +98,7 @@ export function createMfaVerifyHandler(opts: MfaVerifyOptions) {
98
98
  // "system" mode: this handler runs with a guest identity whose own
99
99
  // tenantId is meaningless here — the challenge token is the source
100
100
  // of truth for which tenant's row to read.
101
- const scopedDb = createTenantDb(ctx.db.unsafeRaw(), tenantId, "system");
101
+ const scopedDb = createTenantDb({ db: ctx.db.unsafeRaw(), tenantId, mode: "system" });
102
102
  const scopedUser: SessionUser = { id: userId, tenantId, roles: ["User"] };
103
103
  const row = await findUserMfaRow(scopedDb, scopedUser);
104
104
  // MFA got disabled between login and verify (race, or a stale
@@ -29,7 +29,7 @@ export function createMfaCodeVerifier(): MfaCodeVerifier {
29
29
  reason:
30
30
  "reads the MFA enrollment of the user being re-authenticated on the caller's handler context; the calling handler declares its own escapeHatch",
31
31
  });
32
- const scopedDb = createTenantDb(ctx.db.unsafeRaw(), tenantId, "system");
32
+ const scopedDb = createTenantDb({ db: ctx.db.unsafeRaw(), tenantId, mode: "system" });
33
33
  const row = await findUserMfaRow(scopedDb, { id: userId, tenantId, roles: [] });
34
34
  if (!row) return { enrolled: false, ok: false };
35
35
  // Fail closed without ctx.redis, matching disable.write.ts/verify.write.ts —
@@ -47,7 +47,7 @@ export function createMfaStatusChecker(opts: {
47
47
  reason:
48
48
  "reads the MFA enrollment of the tenant named in the signed login/setup token, not the guest dispatch tenant, on the caller's handler context; the calling handler declares its own escapeHatch",
49
49
  });
50
- const scopedDb = createTenantDb(ctx.db.unsafeRaw(), tenantId, "system");
50
+ const scopedDb = createTenantDb({ db: ctx.db.unsafeRaw(), tenantId, mode: "system" });
51
51
  const scopedUser: SessionUser = { id: userId, tenantId, roles: ["User"] };
52
52
  const row = await findUserMfaRow(scopedDb, scopedUser);
53
53
 
@@ -8,14 +8,23 @@
8
8
  import { defineFeature, EXT_USER_DATA } from "@cosmicdrift/kumiko-framework/engine";
9
9
  import { userMfaDeleteHook, userMfaExportHook } from "./hooks.js";
10
10
 
11
- export const authMfaUserDataFeature = defineFeature("auth-mfa-user-data", (r) => {
12
- r.describe(
13
- "GDPR (Art. 20 export / Art. 17 erasure) coverage for the `auth-mfa` feature's `user-mfa` entity. Mounts the EXT_USER_DATA export + delete hooks so 2FA enrollment status is included in the user-data export bundle and a user's TOTP secret + recovery codes are hard-deleted (via executor.forget, rebuild-safe) on a data-subject erasure request. Kept separate from `auth-mfa` so consumers without the user-data-rights pipeline don't pull a hard dependency — requires `user-data-rights`, optionalRequires `auth-mfa`.",
11
+ export function createAuthMfaUserDataFeature() {
12
+ return defineFeature(
13
+ "auth-mfa-user-data",
14
+ (r) => {
15
+ r.describe(
16
+ "GDPR (Art. 20 export / Art. 17 erasure) coverage for the `auth-mfa` feature's `user-mfa` entity. Mounts the EXT_USER_DATA export + delete hooks so 2FA enrollment status is included in the user-data export bundle and a user's TOTP secret + recovery codes are hard-deleted (via executor.forget, rebuild-safe) on a data-subject erasure request. Kept separate from `auth-mfa` so consumers without the user-data-rights pipeline don't pull a hard dependency — requires `user-data-rights`, optionalRequires `auth-mfa`.",
17
+ );
18
+ r.requires({ features: ["user-data-rights"] });
19
+ r.optionalRequires("auth-mfa");
20
+ r.useExtension(EXT_USER_DATA, "user-mfa", {
21
+ export: userMfaExportHook,
22
+ delete: userMfaDeleteHook,
23
+ });
24
+ },
25
+ { dedupeOptions: {} },
14
26
  );
15
- r.requires({ features: ["user-data-rights"] });
16
- r.optionalRequires("auth-mfa");
17
- r.useExtension(EXT_USER_DATA, "user-mfa", {
18
- export: userMfaExportHook,
19
- delete: userMfaDeleteHook,
20
- });
21
- });
27
+ }
28
+
29
+ /** @deprecated Use createAuthMfaUserDataFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
30
+ export const authMfaUserDataFeature = createAuthMfaUserDataFeature();
@@ -5,7 +5,7 @@
5
5
  // off the app's extraContext.
6
6
  //
7
7
  // Deliberately does NOT call defineQueryHandler itself: apps use different
8
- // wrappers around it (publicstatus's `@app/define`, which adds
8
+ // wrappers around it (publicstatus's own wrapper, which adds
9
9
  // `agent: { expose: false }`; show-pony's plain framework
10
10
  // `defineQueryHandler`). Calling defineQueryHandler here would bypass
11
11
  // whatever an app's own wrapper does. Instead this factory returns just the