@cosmicdrift/kumiko-samples 0.369.0 → 0.370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (922) hide show
  1. package/package.json +1 -1
  2. package/packages/bundled-features/package.json +21 -11
  3. package/packages/bundled-features/src/account-security/README.md +31 -0
  4. package/packages/bundled-features/src/account-security/changes.json +8 -0
  5. package/packages/bundled-features/src/account-security/constants.ts +6 -0
  6. package/packages/bundled-features/src/account-security/feature.ts +100 -0
  7. package/packages/bundled-features/src/account-security/i18n.ts +9 -0
  8. package/packages/bundled-features/src/account-security/index.ts +13 -0
  9. package/packages/bundled-features/src/admin-shell/feature.ts +4 -4
  10. package/packages/bundled-features/src/admin-shell/index.ts +4 -4
  11. package/packages/bundled-features/src/admin-shell/overview-allowlist.ts +3 -3
  12. package/packages/bundled-features/src/admin-shell/overview-panels.ts +3 -3
  13. package/packages/bundled-features/src/admin-shell/web/client-plugin.tsx +2 -2
  14. package/packages/bundled-features/src/admin-shell/web/i18n.ts +1 -1
  15. package/packages/bundled-features/src/admin-shell/web/index.ts +1 -1
  16. package/packages/bundled-features/src/agent-tools/agent-doc-lint.ts +1 -1
  17. package/packages/bundled-features/src/agent-tools/agent-manifest.ts +2 -2
  18. package/packages/bundled-features/src/agent-tools/feature.ts +1 -1
  19. package/packages/bundled-features/src/agent-tools/index.ts +8 -8
  20. package/packages/bundled-features/src/agent-tools/manifest-deny-qns.ts +1 -1
  21. package/packages/bundled-features/src/agent-tools/tool-catalog.ts +3 -3
  22. package/packages/bundled-features/src/agent-tools/tool-dispatch.ts +2 -2
  23. package/packages/bundled-features/src/audit/feature.ts +6 -6
  24. package/packages/bundled-features/src/audit/handlers/details.query.ts +3 -3
  25. package/packages/bundled-features/src/audit/handlers/list.query.ts +3 -3
  26. package/packages/bundled-features/src/audit/handlers/resolve-audit-tenant.ts +1 -1
  27. package/packages/bundled-features/src/audit/index.ts +3 -3
  28. package/packages/bundled-features/src/audit/run-escape-hatch-retention.ts +4 -4
  29. package/packages/bundled-features/src/audit/web/client-plugin.tsx +2 -2
  30. package/packages/bundled-features/src/audit/web/i18n.ts +1 -1
  31. package/packages/bundled-features/src/audit/web/index.ts +1 -1
  32. package/packages/bundled-features/src/auth-email-password/bootstrap.ts +10 -10
  33. package/packages/bundled-features/src/auth-email-password/changes.json +6 -0
  34. package/packages/bundled-features/src/auth-email-password/errors.ts +1 -1
  35. package/packages/bundled-features/src/auth-email-password/feature.ts +26 -24
  36. package/packages/bundled-features/src/auth-email-password/handlers/change-password.write.ts +4 -4
  37. package/packages/bundled-features/src/auth-email-password/handlers/confirm-account-unlock.write.ts +4 -4
  38. package/packages/bundled-features/src/auth-email-password/handlers/confirm-token-flow.ts +4 -4
  39. package/packages/bundled-features/src/auth-email-password/handlers/invite-accept-with-login.write.ts +10 -10
  40. package/packages/bundled-features/src/auth-email-password/handlers/invite-accept.write.ts +7 -7
  41. package/packages/bundled-features/src/auth-email-password/handlers/invite-create.write.ts +11 -11
  42. package/packages/bundled-features/src/auth-email-password/handlers/invite-info.query.ts +5 -5
  43. package/packages/bundled-features/src/auth-email-password/handlers/invite-signup-complete.write.ts +11 -11
  44. package/packages/bundled-features/src/auth-email-password/handlers/login.write.ts +6 -6
  45. package/packages/bundled-features/src/auth-email-password/handlers/request-account-unlock.write.ts +4 -4
  46. package/packages/bundled-features/src/auth-email-password/handlers/request-email-verification.write.ts +4 -4
  47. package/packages/bundled-features/src/auth-email-password/handlers/request-password-reset.write.ts +4 -4
  48. package/packages/bundled-features/src/auth-email-password/handlers/reset-password.write.ts +6 -6
  49. package/packages/bundled-features/src/auth-email-password/handlers/self-registration-status.query.ts +1 -1
  50. package/packages/bundled-features/src/auth-email-password/handlers/signup-confirm.write.ts +7 -7
  51. package/packages/bundled-features/src/auth-email-password/handlers/signup-request.write.ts +7 -7
  52. package/packages/bundled-features/src/auth-email-password/handlers/switch-tenant-mfa-gate.write.ts +4 -4
  53. package/packages/bundled-features/src/auth-email-password/handlers/token-request-handler.ts +5 -5
  54. package/packages/bundled-features/src/auth-email-password/handlers/verify-email.write.ts +4 -4
  55. package/packages/bundled-features/src/auth-email-password/index.ts +13 -13
  56. package/packages/bundled-features/src/auth-email-password/invite-token-store.ts +1 -1
  57. package/packages/bundled-features/src/auth-email-password/lockout-store.ts +1 -1
  58. package/packages/bundled-features/src/auth-email-password/magic-link-mail.ts +2 -2
  59. package/packages/bundled-features/src/auth-email-password/mail-notifications.ts +1 -1
  60. package/packages/bundled-features/src/auth-email-password/reset-token.ts +1 -1
  61. package/packages/bundled-features/src/auth-email-password/seeding.ts +6 -6
  62. package/packages/bundled-features/src/auth-email-password/signed-token.ts +1 -1
  63. package/packages/bundled-features/src/auth-email-password/signup-activation.ts +4 -4
  64. package/packages/bundled-features/src/auth-email-password/signup-token-store.ts +1 -1
  65. package/packages/bundled-features/src/auth-email-password/testing.ts +1 -1
  66. package/packages/bundled-features/src/auth-email-password/unlock-token.ts +1 -1
  67. package/packages/bundled-features/src/auth-email-password/verification-token.ts +1 -1
  68. package/packages/bundled-features/src/auth-email-password/web/auth-gate.tsx +4 -4
  69. package/packages/bundled-features/src/auth-email-password/web/client-plugin.ts +3 -3
  70. package/packages/bundled-features/src/auth-email-password/web/confirm-account-unlock-screen.tsx +2 -2
  71. package/packages/bundled-features/src/auth-email-password/web/default-topbar-actions.tsx +2 -2
  72. package/packages/bundled-features/src/auth-email-password/web/forgot-password-screen.tsx +2 -2
  73. package/packages/bundled-features/src/auth-email-password/web/index.ts +42 -42
  74. package/packages/bundled-features/src/auth-email-password/web/invite-accept-screen.tsx +4 -4
  75. package/packages/bundled-features/src/auth-email-password/web/login-screen.tsx +4 -4
  76. package/packages/bundled-features/src/auth-email-password/web/request-account-unlock-screen.tsx +2 -2
  77. package/packages/bundled-features/src/auth-email-password/web/reset-password-screen.tsx +3 -3
  78. package/packages/bundled-features/src/auth-email-password/web/session-bootstrap-error.tsx +2 -2
  79. package/packages/bundled-features/src/auth-email-password/web/session.tsx +1 -1
  80. package/packages/bundled-features/src/auth-email-password/web/signup-complete-screen.tsx +4 -4
  81. package/packages/bundled-features/src/auth-email-password/web/signup-screen.tsx +3 -3
  82. package/packages/bundled-features/src/auth-email-password/web/tenant-menu-items.tsx +1 -1
  83. package/packages/bundled-features/src/auth-email-password/web/tenant-switcher.tsx +1 -1
  84. package/packages/bundled-features/src/auth-email-password/web/use-shell-user.ts +1 -1
  85. package/packages/bundled-features/src/auth-email-password/web/user-menu.tsx +1 -1
  86. package/packages/bundled-features/src/auth-email-password/web/verify-email-screen.tsx +2 -2
  87. package/packages/bundled-features/src/auth-foundation/boot-checks.ts +1 -1
  88. package/packages/bundled-features/src/auth-foundation/changes.json +8 -0
  89. package/packages/bundled-features/src/auth-foundation/feature.ts +3 -6
  90. package/packages/bundled-features/src/auth-foundation/index.ts +3 -4
  91. package/packages/bundled-features/src/auth-foundation/resolve-anonymous-access.ts +2 -2
  92. package/packages/bundled-features/src/auth-mfa/changes.json +6 -0
  93. package/packages/bundled-features/src/auth-mfa/db/queries.ts +1 -1
  94. package/packages/bundled-features/src/auth-mfa/env.ts +28 -0
  95. package/packages/bundled-features/src/auth-mfa/errors.ts +2 -2
  96. package/packages/bundled-features/src/auth-mfa/feature-exports.ts +100 -0
  97. package/packages/bundled-features/src/auth-mfa/feature.ts +86 -105
  98. package/packages/bundled-features/src/auth-mfa/handlers/disable.write.ts +4 -4
  99. package/packages/bundled-features/src/auth-mfa/handlers/enable-confirm-preauth.write.ts +10 -10
  100. package/packages/bundled-features/src/auth-mfa/handlers/enable-confirm.write.ts +7 -7
  101. package/packages/bundled-features/src/auth-mfa/handlers/enable-start-preauth.write.ts +9 -9
  102. package/packages/bundled-features/src/auth-mfa/handlers/enable-start.write.ts +9 -9
  103. package/packages/bundled-features/src/auth-mfa/handlers/reencrypt.job.ts +2 -2
  104. package/packages/bundled-features/src/auth-mfa/handlers/regenerate-recovery.write.ts +5 -5
  105. package/packages/bundled-features/src/auth-mfa/handlers/status.query.ts +1 -1
  106. package/packages/bundled-features/src/auth-mfa/handlers/verify.write.ts +9 -9
  107. package/packages/bundled-features/src/auth-mfa/index.ts +16 -11
  108. package/packages/bundled-features/src/auth-mfa/mfa-challenge-token.ts +1 -1
  109. package/packages/bundled-features/src/auth-mfa/mfa-code-verifier.ts +2 -2
  110. package/packages/bundled-features/src/auth-mfa/mfa-preauth-setup-token.ts +1 -1
  111. package/packages/bundled-features/src/auth-mfa/mfa-status-checker.ts +5 -5
  112. package/packages/bundled-features/src/auth-mfa/mfa-verify-attempts.ts +1 -1
  113. package/packages/bundled-features/src/auth-mfa/otpauth-uri.ts +1 -1
  114. package/packages/bundled-features/src/auth-mfa/recovery-codes.ts +1 -1
  115. package/packages/bundled-features/src/auth-mfa/screens.ts +1 -1
  116. package/packages/bundled-features/src/auth-mfa/testing.ts +1 -1
  117. package/packages/bundled-features/src/auth-mfa/token-secrets.ts +26 -0
  118. package/packages/bundled-features/src/auth-mfa/verify-factor.ts +5 -5
  119. package/packages/bundled-features/src/auth-mfa/web/client-plugin.ts +1 -1
  120. package/packages/bundled-features/src/auth-mfa/web/index.ts +15 -15
  121. package/packages/bundled-features/src/auth-mfa/web/mfa-client.ts +1 -1
  122. package/packages/bundled-features/src/auth-mfa/web/mfa-disable-dialog.tsx +1 -1
  123. package/packages/bundled-features/src/auth-mfa/web/mfa-regenerate-recovery-dialog.tsx +1 -1
  124. package/packages/bundled-features/src/auth-mfa/web/mfa-setup-preauth-screen.tsx +2 -2
  125. package/packages/bundled-features/src/auth-mfa/web/mfa-verify-screen.tsx +2 -2
  126. package/packages/bundled-features/src/auth-mfa-user-data/changes.json +10 -1
  127. package/packages/bundled-features/src/auth-mfa-user-data/hooks.ts +2 -2
  128. package/packages/bundled-features/src/auth-mfa-user-data/index.ts +1 -4
  129. package/packages/bundled-features/src/billing-foundation/billing-info-query.ts +3 -3
  130. package/packages/bundled-features/src/billing-foundation/changes.json +8 -0
  131. package/packages/bundled-features/src/billing-foundation/checkout-core.ts +3 -3
  132. package/packages/bundled-features/src/billing-foundation/consumer-protection/confirmation-mail.ts +3 -3
  133. package/packages/bundled-features/src/billing-foundation/consumer-protection/consent-gate.ts +5 -5
  134. package/packages/bundled-features/src/billing-foundation/consumer-protection/consent-text.ts +2 -2
  135. package/packages/bundled-features/src/billing-foundation/consumer-protection/issue-confirmation.ts +8 -8
  136. package/packages/bundled-features/src/billing-foundation/consumer-protection/mail-notifications.ts +4 -4
  137. package/packages/bundled-features/src/billing-foundation/consumer-protection/register-consent.ts +7 -7
  138. package/packages/bundled-features/src/billing-foundation/consumer-protection/register-termination.ts +5 -5
  139. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-mail.ts +3 -3
  140. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-notify.ts +6 -6
  141. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-pages.ts +7 -7
  142. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-record.ts +10 -10
  143. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-request.ts +12 -12
  144. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-texts.ts +2 -2
  145. package/packages/bundled-features/src/billing-foundation/consumer-protection/withdrawal-period.ts +1 -1
  146. package/packages/bundled-features/src/billing-foundation/events.ts +2 -2
  147. package/packages/bundled-features/src/billing-foundation/feature.ts +19 -22
  148. package/packages/bundled-features/src/billing-foundation/get-subscription-for-tenant.ts +3 -3
  149. package/packages/bundled-features/src/billing-foundation/handlers/billing-plans.query.ts +4 -4
  150. package/packages/bundled-features/src/billing-foundation/handlers/create-checkout-session.write.ts +3 -3
  151. package/packages/bundled-features/src/billing-foundation/handlers/create-portal-session.write.ts +6 -6
  152. package/packages/bundled-features/src/billing-foundation/handlers/list-subscriptions.query.ts +2 -2
  153. package/packages/bundled-features/src/billing-foundation/handlers/process-event.write.ts +5 -5
  154. package/packages/bundled-features/src/billing-foundation/handlers/process-payment-event.write.ts +3 -3
  155. package/packages/bundled-features/src/billing-foundation/handlers/start-plan-checkout.write.ts +4 -4
  156. package/packages/bundled-features/src/billing-foundation/handlers/switch-plan.write.ts +5 -5
  157. package/packages/bundled-features/src/billing-foundation/handlers/sync-subscription.write.ts +4 -4
  158. package/packages/bundled-features/src/billing-foundation/index.ts +16 -16
  159. package/packages/bundled-features/src/billing-foundation/plan-catalog.ts +4 -4
  160. package/packages/bundled-features/src/billing-foundation/projection.ts +3 -3
  161. package/packages/bundled-features/src/billing-foundation/screens.ts +1 -1
  162. package/packages/bundled-features/src/billing-foundation/subscription-tier-sync.ts +6 -5
  163. package/packages/bundled-features/src/billing-foundation/tenant-destroy-hook.ts +4 -4
  164. package/packages/bundled-features/src/billing-foundation/types.ts +3 -3
  165. package/packages/bundled-features/src/billing-foundation/validate-options.ts +3 -3
  166. package/packages/bundled-features/src/billing-foundation/web/billing-plans-panel.tsx +4 -4
  167. package/packages/bundled-features/src/billing-foundation/web/cancel-contract-dialog.tsx +2 -2
  168. package/packages/bundled-features/src/billing-foundation/web/checkout-consent-dialog.tsx +2 -2
  169. package/packages/bundled-features/src/billing-foundation/web/client-plugin.tsx +2 -2
  170. package/packages/bundled-features/src/billing-foundation/web/index.ts +6 -6
  171. package/packages/bundled-features/src/billing-foundation/webhook-handler.ts +2 -2
  172. package/packages/bundled-features/src/cap-counter/book-cap-usage.ts +3 -3
  173. package/packages/bundled-features/src/cap-counter/calendar-cap-usage-reservation.ts +4 -4
  174. package/packages/bundled-features/src/cap-counter/cap-reservation.ts +4 -4
  175. package/packages/bundled-features/src/cap-counter/changes.json +8 -0
  176. package/packages/bundled-features/src/cap-counter/enforce-cap.ts +2 -2
  177. package/packages/bundled-features/src/cap-counter/feature.ts +8 -11
  178. package/packages/bundled-features/src/cap-counter/handlers/get-counter.query.ts +1 -1
  179. package/packages/bundled-features/src/cap-counter/handlers/increment-rolling.write.ts +2 -2
  180. package/packages/bundled-features/src/cap-counter/handlers/increment.write.ts +1 -1
  181. package/packages/bundled-features/src/cap-counter/handlers/mark-soft-warned.write.ts +1 -1
  182. package/packages/bundled-features/src/cap-counter/index.ts +13 -13
  183. package/packages/bundled-features/src/cap-counter/stock-cap-guard.ts +1 -1
  184. package/packages/bundled-features/src/cap-counter/value-cap-guard.ts +2 -2
  185. package/packages/bundled-features/src/cap-counter/with-cap-enforcement.ts +4 -4
  186. package/packages/bundled-features/src/cap-overview/feature.ts +8 -8
  187. package/packages/bundled-features/src/cap-overview/handlers/caps-usage.query.ts +3 -3
  188. package/packages/bundled-features/src/cap-overview/handlers/tenant-caps-list.query.ts +7 -7
  189. package/packages/bundled-features/src/cap-overview/handlers/tenant-options.query.ts +1 -1
  190. package/packages/bundled-features/src/cap-overview/index.ts +6 -6
  191. package/packages/bundled-features/src/cap-overview/screens.ts +2 -2
  192. package/packages/bundled-features/src/cap-overview/types.ts +1 -1
  193. package/packages/bundled-features/src/cap-overview/usage-math.ts +1 -1
  194. package/packages/bundled-features/src/cap-overview/web/cap-cards-panel.tsx +3 -3
  195. package/packages/bundled-features/src/cap-overview/web/cap-usage-bar.tsx +2 -2
  196. package/packages/bundled-features/src/cap-overview/web/cap-usage-cell.tsx +2 -2
  197. package/packages/bundled-features/src/cap-overview/web/client-plugin.tsx +3 -3
  198. package/packages/bundled-features/src/cap-overview/web/index.ts +4 -4
  199. package/packages/bundled-features/src/channel-discord/discord-channel.ts +1 -1
  200. package/packages/bundled-features/src/channel-discord/feature.ts +1 -1
  201. package/packages/bundled-features/src/channel-discord/index.ts +2 -2
  202. package/packages/bundled-features/src/channel-email/changes.json +6 -0
  203. package/packages/bundled-features/src/channel-email/email-channel.ts +4 -4
  204. package/packages/bundled-features/src/channel-email/env.ts +28 -0
  205. package/packages/bundled-features/src/channel-email/feature.ts +8 -4
  206. package/packages/bundled-features/src/channel-email/index.ts +6 -5
  207. package/packages/bundled-features/src/channel-email/pii-guard.ts +1 -1
  208. package/packages/bundled-features/src/channel-email/smtp-transport.ts +1 -1
  209. package/packages/bundled-features/src/channel-email/types.ts +1 -1
  210. package/packages/bundled-features/src/channel-in-app/feature.ts +6 -6
  211. package/packages/bundled-features/src/channel-in-app/handlers/inbox.query.ts +1 -1
  212. package/packages/bundled-features/src/channel-in-app/handlers/mark-all-read.write.ts +1 -1
  213. package/packages/bundled-features/src/channel-in-app/handlers/mark-read.write.ts +1 -1
  214. package/packages/bundled-features/src/channel-in-app/handlers/unread-count.query.ts +1 -1
  215. package/packages/bundled-features/src/channel-in-app/in-app-channel.ts +2 -2
  216. package/packages/bundled-features/src/channel-in-app/index.ts +4 -4
  217. package/packages/bundled-features/src/channel-push/feature.ts +1 -1
  218. package/packages/bundled-features/src/channel-push/index.ts +3 -3
  219. package/packages/bundled-features/src/channel-push/push-channel.ts +2 -2
  220. package/packages/bundled-features/src/channel-slack/feature.ts +1 -1
  221. package/packages/bundled-features/src/channel-slack/index.ts +2 -2
  222. package/packages/bundled-features/src/channel-slack/slack-channel.ts +1 -1
  223. package/packages/bundled-features/src/channel-teams/feature.ts +1 -1
  224. package/packages/bundled-features/src/channel-teams/index.ts +2 -2
  225. package/packages/bundled-features/src/channel-teams/teams-channel.ts +1 -1
  226. package/packages/bundled-features/src/channel-telegram/feature.ts +1 -1
  227. package/packages/bundled-features/src/channel-telegram/index.ts +2 -2
  228. package/packages/bundled-features/src/channel-telegram/telegram-channel.ts +1 -1
  229. package/packages/bundled-features/src/compliance-profiles/feature.ts +9 -9
  230. package/packages/bundled-features/src/compliance-profiles/handlers/for-tenant.query.ts +2 -2
  231. package/packages/bundled-features/src/compliance-profiles/handlers/needs-profile.query.ts +1 -1
  232. package/packages/bundled-features/src/compliance-profiles/handlers/set-profile.write.ts +2 -2
  233. package/packages/bundled-features/src/compliance-profiles/index.ts +3 -3
  234. package/packages/bundled-features/src/compliance-profiles/resolve-for-tenant.ts +3 -3
  235. package/packages/bundled-features/src/compliance-profiles/seeding.ts +1 -1
  236. package/packages/bundled-features/src/compliance-profiles/web/client-plugin.tsx +3 -3
  237. package/packages/bundled-features/src/compliance-profiles/web/compliance-profile-catalog.tsx +1 -1
  238. package/packages/bundled-features/src/compliance-profiles/web/index.ts +2 -2
  239. package/packages/bundled-features/src/compliance-profiles-ops/changes.json +10 -0
  240. package/packages/bundled-features/src/compliance-profiles-ops/handlers/tenants-missing-profile.query.ts +2 -2
  241. package/packages/bundled-features/src/compliance-profiles-ops/index.ts +1 -4
  242. package/packages/bundled-features/src/config/db/queries/resolver.ts +1 -1
  243. package/packages/bundled-features/src/config/feature.ts +11 -11
  244. package/packages/bundled-features/src/config/handlers/cascade.query.ts +3 -3
  245. package/packages/bundled-features/src/config/handlers/readiness.query.ts +2 -2
  246. package/packages/bundled-features/src/config/handlers/reencrypt.job.ts +2 -2
  247. package/packages/bundled-features/src/config/handlers/reset.write.ts +3 -3
  248. package/packages/bundled-features/src/config/handlers/schema.query.ts +1 -1
  249. package/packages/bundled-features/src/config/handlers/selected-extensions.query.ts +3 -3
  250. package/packages/bundled-features/src/config/handlers/set.write.ts +4 -4
  251. package/packages/bundled-features/src/config/handlers/values.query.ts +3 -3
  252. package/packages/bundled-features/src/config/index.ts +9 -9
  253. package/packages/bundled-features/src/config/resolver.ts +2 -2
  254. package/packages/bundled-features/src/config/web/client-plugin.ts +2 -2
  255. package/packages/bundled-features/src/config/web/index.ts +2 -2
  256. package/packages/bundled-features/src/config/write-helpers.ts +3 -3
  257. package/packages/bundled-features/src/crypto-shredding/changes.json +6 -0
  258. package/packages/bundled-features/src/crypto-shredding/env/index.ts +94 -0
  259. package/packages/bundled-features/src/crypto-shredding/feature.ts +9 -5
  260. package/packages/bundled-features/src/crypto-shredding/handlers/forget-subject.write.ts +6 -6
  261. package/packages/bundled-features/src/crypto-shredding/index.ts +4 -3
  262. package/packages/bundled-features/src/custom-fields/changes.json +8 -0
  263. package/packages/bundled-features/src/custom-fields/executor.ts +1 -1
  264. package/packages/bundled-features/src/custom-fields/feature.ts +10 -13
  265. package/packages/bundled-features/src/custom-fields/handlers/clear-custom-field.write.ts +3 -3
  266. package/packages/bundled-features/src/custom-fields/handlers/define-system-field.write.ts +5 -5
  267. package/packages/bundled-features/src/custom-fields/handlers/define-tenant-field.write.ts +6 -6
  268. package/packages/bundled-features/src/custom-fields/handlers/delete-system-field.write.ts +6 -6
  269. package/packages/bundled-features/src/custom-fields/handlers/delete-tenant-field.write.ts +5 -5
  270. package/packages/bundled-features/src/custom-fields/handlers/set-custom-field.write.ts +4 -4
  271. package/packages/bundled-features/src/custom-fields/handlers/update-tenant-field.write.ts +5 -5
  272. package/packages/bundled-features/src/custom-fields/index.ts +10 -11
  273. package/packages/bundled-features/src/custom-fields/lib/define-or-resurrect.ts +2 -2
  274. package/packages/bundled-features/src/custom-fields/lib/field-access.ts +2 -2
  275. package/packages/bundled-features/src/custom-fields/lib/field-definition-row.ts +1 -1
  276. package/packages/bundled-features/src/custom-fields/lib/quota.ts +1 -1
  277. package/packages/bundled-features/src/custom-fields/lib/value-schema.ts +1 -1
  278. package/packages/bundled-features/src/custom-fields/run-retention.ts +3 -3
  279. package/packages/bundled-features/src/custom-fields/schemas.ts +1 -1
  280. package/packages/bundled-features/src/custom-fields/web/client-plugin.tsx +3 -3
  281. package/packages/bundled-features/src/custom-fields/web/custom-fields-form-section.tsx +1 -1
  282. package/packages/bundled-features/src/custom-fields/web/index.ts +3 -3
  283. package/packages/bundled-features/src/custom-fields/wire-for-entity.ts +4 -4
  284. package/packages/bundled-features/src/custom-fields/wire-user-data-rights.ts +1 -1
  285. package/packages/bundled-features/src/data-retention/_internal/parse-override.ts +2 -2
  286. package/packages/bundled-features/src/data-retention/feature.ts +11 -11
  287. package/packages/bundled-features/src/data-retention/handlers/policy-for.query.ts +2 -2
  288. package/packages/bundled-features/src/data-retention/index.ts +3 -3
  289. package/packages/bundled-features/src/data-retention/resolve-for-tenant.ts +6 -6
  290. package/packages/bundled-features/src/data-retention/resolve-tenant-preset.ts +2 -2
  291. package/packages/bundled-features/src/data-retention/resolver.ts +1 -1
  292. package/packages/bundled-features/src/data-retention/run-retention-cleanup.ts +5 -5
  293. package/packages/bundled-features/src/delivery/address-opt-out.ts +2 -2
  294. package/packages/bundled-features/src/delivery/attachment-ref.ts +3 -3
  295. package/packages/bundled-features/src/delivery/attempt-log-retention.ts +1 -1
  296. package/packages/bundled-features/src/delivery/attempt-log.ts +4 -4
  297. package/packages/bundled-features/src/delivery/changes.json +6 -0
  298. package/packages/bundled-features/src/delivery/channel-context.ts +5 -5
  299. package/packages/bundled-features/src/delivery/chat-webhook-channel.ts +2 -2
  300. package/packages/bundled-features/src/delivery/constants.ts +2 -2
  301. package/packages/bundled-features/src/delivery/db/queries/address-opt-outs.ts +1 -1
  302. package/packages/bundled-features/src/delivery/delivery-service.ts +11 -11
  303. package/packages/bundled-features/src/delivery/events.ts +1 -1
  304. package/packages/bundled-features/src/delivery/feature.ts +15 -13
  305. package/packages/bundled-features/src/delivery/handlers/log.query.ts +4 -4
  306. package/packages/bundled-features/src/delivery/handlers/preferences.query.ts +1 -1
  307. package/packages/bundled-features/src/delivery/handlers/resubscribe-address.write.ts +2 -2
  308. package/packages/bundled-features/src/delivery/handlers/resubscribe-user.write.ts +2 -2
  309. package/packages/bundled-features/src/delivery/handlers/set-preference.write.ts +2 -2
  310. package/packages/bundled-features/src/delivery/handlers/unsubscribe-address.write.ts +2 -2
  311. package/packages/bundled-features/src/delivery/handlers/unsubscribe-page-chrome.query.ts +56 -0
  312. package/packages/bundled-features/src/delivery/handlers/unsubscribe-user.write.ts +2 -2
  313. package/packages/bundled-features/src/delivery/i18n.ts +1 -1
  314. package/packages/bundled-features/src/delivery/index.ts +20 -20
  315. package/packages/bundled-features/src/delivery/jobs.ts +7 -7
  316. package/packages/bundled-features/src/delivery/notify-factory.ts +1 -1
  317. package/packages/bundled-features/src/delivery/public-names.ts +1 -0
  318. package/packages/bundled-features/src/delivery/testing.ts +5 -5
  319. package/packages/bundled-features/src/delivery/types.ts +3 -3
  320. package/packages/bundled-features/src/delivery/unsubscribe-link.ts +4 -4
  321. package/packages/bundled-features/src/delivery/unsubscribe-page-strings.ts +5 -0
  322. package/packages/bundled-features/src/delivery/unsubscribe-page.ts +226 -0
  323. package/packages/bundled-features/src/delivery/unsubscribe.ts +204 -108
  324. package/packages/bundled-features/src/delivery/upsert-preference.ts +1 -1
  325. package/packages/bundled-features/src/delivery/web/client-plugin.tsx +6 -6
  326. package/packages/bundled-features/src/delivery/web/delivery-channel-cell.tsx +1 -1
  327. package/packages/bundled-features/src/delivery/web/delivery-error-cell.tsx +1 -1
  328. package/packages/bundled-features/src/delivery/web/delivery-status-cell.tsx +2 -2
  329. package/packages/bundled-features/src/delivery/web/delivery-type-cell.tsx +1 -1
  330. package/packages/bundled-features/src/delivery/web/index.ts +2 -2
  331. package/packages/bundled-features/src/derivatives-sharp/changes.json +8 -0
  332. package/packages/bundled-features/src/derivatives-sharp/feature.ts +1 -4
  333. package/packages/bundled-features/src/derivatives-sharp/index.ts +2 -2
  334. package/packages/bundled-features/src/derivatives-sharp/render.ts +1 -1
  335. package/packages/bundled-features/src/document-ingest-foundation/boot-checks.ts +2 -2
  336. package/packages/bundled-features/src/document-ingest-foundation/changes.json +8 -0
  337. package/packages/bundled-features/src/document-ingest-foundation/executor.ts +1 -1
  338. package/packages/bundled-features/src/document-ingest-foundation/feature.ts +7 -10
  339. package/packages/bundled-features/src/document-ingest-foundation/forget-extract-with-file-ref.ts +3 -3
  340. package/packages/bundled-features/src/document-ingest-foundation/index.ts +7 -10
  341. package/packages/bundled-features/src/document-ingest-foundation/pages.ts +1 -1
  342. package/packages/bundled-features/src/document-ingest-foundation/providers.ts +1 -1
  343. package/packages/bundled-features/src/document-ingest-foundation/tenant-destroy-hook.ts +2 -2
  344. package/packages/bundled-features/src/document-ingest-foundation/write-document-extract.ts +4 -4
  345. package/packages/bundled-features/src/feature-toggles/compose-tier-resolver.ts +1 -1
  346. package/packages/bundled-features/src/feature-toggles/feature.ts +12 -12
  347. package/packages/bundled-features/src/feature-toggles/handlers/list.query.ts +2 -2
  348. package/packages/bundled-features/src/feature-toggles/handlers/registered.query.ts +2 -2
  349. package/packages/bundled-features/src/feature-toggles/handlers/set.write.ts +3 -3
  350. package/packages/bundled-features/src/feature-toggles/index.ts +3 -3
  351. package/packages/bundled-features/src/feature-toggles/toggle-runtime.ts +2 -2
  352. package/packages/bundled-features/src/feature-toggles/toggle-sync-signal.ts +1 -1
  353. package/packages/bundled-features/src/feature-toggles/web/client-plugin.tsx +2 -2
  354. package/packages/bundled-features/src/feature-toggles/web/index.ts +1 -1
  355. package/packages/bundled-features/src/file-derivatives/changes.json +8 -0
  356. package/packages/bundled-features/src/file-derivatives/feature.ts +2 -5
  357. package/packages/bundled-features/src/file-derivatives/handlers/public-variant-by-file-ref.query.ts +2 -2
  358. package/packages/bundled-features/src/file-derivatives/index.ts +4 -4
  359. package/packages/bundled-features/src/file-foundation/changes.json +8 -0
  360. package/packages/bundled-features/src/file-foundation/feature.ts +0 -3
  361. package/packages/bundled-features/src/file-foundation/index.ts +2 -3
  362. package/packages/bundled-features/src/file-provider-inmemory/changes.json +10 -1
  363. package/packages/bundled-features/src/file-provider-inmemory/feature.ts +0 -3
  364. package/packages/bundled-features/src/file-provider-inmemory/index.ts +1 -2
  365. package/packages/bundled-features/src/file-provider-s3/changes.json +22 -0
  366. package/packages/bundled-features/src/file-provider-s3/env-feature.ts +10 -7
  367. package/packages/bundled-features/src/file-provider-s3/env-schema.ts +71 -0
  368. package/packages/bundled-features/src/file-provider-s3/feature.ts +2 -5
  369. package/packages/bundled-features/src/file-provider-s3/index.ts +2 -2
  370. package/packages/bundled-features/src/file-provider-s3/lib/env-helper.ts +1 -1
  371. package/packages/bundled-features/src/file-provider-s3/lib/index.ts +3 -3
  372. package/packages/bundled-features/src/files/index.ts +1 -1
  373. package/packages/bundled-features/src/files-tenant-data/handlers/sweep-orphaned-derivatives.job.ts +2 -2
  374. package/packages/bundled-features/src/files-tenant-data/hooks.ts +1 -1
  375. package/packages/bundled-features/src/files-tenant-data/index.ts +4 -4
  376. package/packages/bundled-features/src/folders/changes.json +8 -0
  377. package/packages/bundled-features/src/folders/executor.ts +1 -1
  378. package/packages/bundled-features/src/folders/feature.ts +6 -9
  379. package/packages/bundled-features/src/folders/handlers/clear-folder.write.ts +5 -5
  380. package/packages/bundled-features/src/folders/handlers/delete-folder.write.ts +3 -3
  381. package/packages/bundled-features/src/folders/handlers/set-folder.write.ts +5 -5
  382. package/packages/bundled-features/src/folders/index.ts +7 -8
  383. package/packages/bundled-features/src/folders/web/client-plugin.tsx +3 -3
  384. package/packages/bundled-features/src/folders/web/folder-manager.tsx +2 -2
  385. package/packages/bundled-features/src/folders/web/folder-section.tsx +2 -2
  386. package/packages/bundled-features/src/folders/web/index.ts +5 -5
  387. package/packages/bundled-features/src/folders-user-data/changes.json +10 -1
  388. package/packages/bundled-features/src/folders-user-data/hooks.ts +1 -1
  389. package/packages/bundled-features/src/folders-user-data/index.ts +1 -4
  390. package/packages/bundled-features/src/form-draft/changes.json +8 -0
  391. package/packages/bundled-features/src/form-draft/db/queries/cleanup.ts +1 -1
  392. package/packages/bundled-features/src/form-draft/entity.ts +1 -1
  393. package/packages/bundled-features/src/form-draft/executor.ts +1 -1
  394. package/packages/bundled-features/src/form-draft/feature.ts +7 -10
  395. package/packages/bundled-features/src/form-draft/handlers/cleanup.job.ts +4 -4
  396. package/packages/bundled-features/src/form-draft/handlers/discard.write.ts +6 -6
  397. package/packages/bundled-features/src/form-draft/handlers/get.query.ts +4 -4
  398. package/packages/bundled-features/src/form-draft/handlers/list.query.ts +3 -3
  399. package/packages/bundled-features/src/form-draft/handlers/save.write.ts +5 -5
  400. package/packages/bundled-features/src/form-draft/index.ts +10 -10
  401. package/packages/bundled-features/src/form-draft/lookup.ts +2 -2
  402. package/packages/bundled-features/src/form-draft/release-file-refs.ts +1 -1
  403. package/packages/bundled-features/src/form-draft/schemas.ts +1 -1
  404. package/packages/bundled-features/src/form-draft-user-data/changes.json +10 -1
  405. package/packages/bundled-features/src/form-draft-user-data/hooks.ts +1 -1
  406. package/packages/bundled-features/src/form-draft-user-data/index.ts +1 -4
  407. package/packages/bundled-features/src/foundation-shared/build-info-env.ts +16 -0
  408. package/packages/bundled-features/src/foundation-shared/changes.json +8 -1
  409. package/packages/bundled-features/src/foundation-shared/demo-admin-env.ts +24 -0
  410. package/packages/bundled-features/src/foundation-shared/index.ts +5 -3
  411. package/packages/bundled-features/src/foundation-shared/mail-host-policy.ts +1 -1
  412. package/packages/bundled-features/src/host-routing/README.md +89 -0
  413. package/packages/bundled-features/src/host-routing/changes.json +8 -0
  414. package/packages/bundled-features/src/host-routing/constants.ts +24 -0
  415. package/packages/bundled-features/src/host-routing/dispatch.ts +130 -0
  416. package/packages/bundled-features/src/host-routing/feature.ts +146 -0
  417. package/packages/bundled-features/src/host-routing/host.ts +42 -0
  418. package/packages/bundled-features/src/host-routing/index.ts +21 -0
  419. package/packages/bundled-features/src/host-routing/options.ts +43 -0
  420. package/packages/bundled-features/src/host-routing/validate-options.ts +38 -0
  421. package/packages/bundled-features/src/inbound-mail-foundation/changes.json +8 -0
  422. package/packages/bundled-features/src/inbound-mail-foundation/connect-routes.ts +5 -5
  423. package/packages/bundled-features/src/inbound-mail-foundation/events.ts +1 -1
  424. package/packages/bundled-features/src/inbound-mail-foundation/feature.ts +12 -15
  425. package/packages/bundled-features/src/inbound-mail-foundation/handlers/account-state.ts +1 -1
  426. package/packages/bundled-features/src/inbound-mail-foundation/handlers/connect-account.write.ts +3 -3
  427. package/packages/bundled-features/src/inbound-mail-foundation/handlers/disconnect-account.write.ts +3 -3
  428. package/packages/bundled-features/src/inbound-mail-foundation/handlers/ingest-message.write.ts +4 -4
  429. package/packages/bundled-features/src/inbound-mail-foundation/handlers/list-accounts.query.ts +3 -3
  430. package/packages/bundled-features/src/inbound-mail-foundation/handlers/list-messages.query.ts +3 -3
  431. package/packages/bundled-features/src/inbound-mail-foundation/handlers/update-account.write.ts +3 -3
  432. package/packages/bundled-features/src/inbound-mail-foundation/index.ts +12 -12
  433. package/packages/bundled-features/src/inbound-mail-foundation/oauth-access-token.ts +2 -2
  434. package/packages/bundled-features/src/inbound-mail-foundation/projection.ts +2 -2
  435. package/packages/bundled-features/src/inbound-mail-foundation/provider-factory.ts +2 -2
  436. package/packages/bundled-features/src/inbound-mail-foundation/retention-sweep.ts +3 -3
  437. package/packages/bundled-features/src/inbound-mail-foundation/tenant-destroy-hook.ts +3 -3
  438. package/packages/bundled-features/src/inbound-mail-foundation/types.ts +1 -1
  439. package/packages/bundled-features/src/inbound-mail-foundation/watch-supervisor.ts +6 -6
  440. package/packages/bundled-features/src/inbound-provider-imap/changes.json +8 -0
  441. package/packages/bundled-features/src/inbound-provider-imap/feature.ts +3 -6
  442. package/packages/bundled-features/src/inbound-provider-imap/imap-client.ts +1 -1
  443. package/packages/bundled-features/src/inbound-provider-imap/index.ts +3 -4
  444. package/packages/bundled-features/src/inbound-provider-inmemory/changes.json +10 -1
  445. package/packages/bundled-features/src/inbound-provider-inmemory/feature.ts +0 -3
  446. package/packages/bundled-features/src/inbound-provider-inmemory/index.ts +1 -2
  447. package/packages/bundled-features/src/jobs/db/queries/retention.ts +3 -3
  448. package/packages/bundled-features/src/jobs/db/queries/stale-run-sweep.ts +5 -5
  449. package/packages/bundled-features/src/jobs/feature.ts +16 -16
  450. package/packages/bundled-features/src/jobs/handlers/catalog.query.ts +1 -1
  451. package/packages/bundled-features/src/jobs/handlers/detail.query.ts +2 -2
  452. package/packages/bundled-features/src/jobs/handlers/list.query.ts +2 -2
  453. package/packages/bundled-features/src/jobs/handlers/retention-cleanup.job.ts +1 -1
  454. package/packages/bundled-features/src/jobs/handlers/retry.write.ts +3 -3
  455. package/packages/bundled-features/src/jobs/handlers/stale-run-sweep.job.ts +1 -1
  456. package/packages/bundled-features/src/jobs/handlers/tenant-failures.query.ts +1 -1
  457. package/packages/bundled-features/src/jobs/handlers/tenant-runs.query.ts +1 -1
  458. package/packages/bundled-features/src/jobs/handlers/trigger.write.ts +2 -2
  459. package/packages/bundled-features/src/jobs/index.ts +9 -9
  460. package/packages/bundled-features/src/jobs/job-run-logger.ts +6 -6
  461. package/packages/bundled-features/src/jobs/web/client-plugin.tsx +2 -2
  462. package/packages/bundled-features/src/jobs/web/i18n.ts +1 -1
  463. package/packages/bundled-features/src/jobs/web/index.ts +1 -1
  464. package/packages/bundled-features/src/ledger/changes.json +8 -0
  465. package/packages/bundled-features/src/ledger/entity.ts +1 -1
  466. package/packages/bundled-features/src/ledger/executor.ts +1 -1
  467. package/packages/bundled-features/src/ledger/feature.ts +7 -10
  468. package/packages/bundled-features/src/ledger/handlers/confirm-schedule-period.write.ts +5 -5
  469. package/packages/bundled-features/src/ledger/handlers/create-transaction.write.ts +3 -3
  470. package/packages/bundled-features/src/ledger/handlers/reports.query.ts +3 -3
  471. package/packages/bundled-features/src/ledger/handlers/reverse-transaction.write.ts +5 -5
  472. package/packages/bundled-features/src/ledger/index.ts +10 -11
  473. package/packages/bundled-features/src/ledger/recurring.ts +2 -2
  474. package/packages/bundled-features/src/ledger/reports.ts +2 -2
  475. package/packages/bundled-features/src/ledger/schemas.ts +1 -1
  476. package/packages/bundled-features/src/ledger/web/index.ts +3 -3
  477. package/packages/bundled-features/src/legal-pages/README.md +39 -0
  478. package/packages/bundled-features/src/legal-pages/changes.json +6 -0
  479. package/packages/bundled-features/src/legal-pages/constants.ts +22 -0
  480. package/packages/bundled-features/src/legal-pages/feature.ts +14 -7
  481. package/packages/bundled-features/src/legal-pages/index.ts +12 -3
  482. package/packages/bundled-features/src/legal-pages/layout.ts +45 -0
  483. package/packages/bundled-features/src/legal-pages/lib/boot-check.ts +1 -1
  484. package/packages/bundled-features/src/legal-pages/lib/validate-routes.ts +1 -1
  485. package/packages/bundled-features/src/legal-pages/markdown.ts +2 -2
  486. package/packages/bundled-features/src/legal-pages/seed.ts +53 -0
  487. package/packages/bundled-features/src/legal-pages/web/client-plugin.ts +1 -1
  488. package/packages/bundled-features/src/legal-pages/web/index.ts +1 -1
  489. package/packages/bundled-features/src/mail-foundation/changes.json +10 -1
  490. package/packages/bundled-features/src/mail-foundation/feature.ts +1 -4
  491. package/packages/bundled-features/src/mail-foundation/index.ts +1 -2
  492. package/packages/bundled-features/src/mail-transport-inmemory/changes.json +10 -1
  493. package/packages/bundled-features/src/mail-transport-inmemory/feature.ts +0 -3
  494. package/packages/bundled-features/src/mail-transport-inmemory/index.ts +1 -2
  495. package/packages/bundled-features/src/mail-transport-smtp/changes.json +8 -0
  496. package/packages/bundled-features/src/mail-transport-smtp/feature.ts +2 -5
  497. package/packages/bundled-features/src/mail-transport-smtp/index.ts +1 -2
  498. package/packages/bundled-features/src/managed-pages/branding.ts +1 -1
  499. package/packages/bundled-features/src/managed-pages/css-gate.ts +1 -1
  500. package/packages/bundled-features/src/managed-pages/feature.ts +12 -12
  501. package/packages/bundled-features/src/managed-pages/handlers/branding.query.ts +1 -1
  502. package/packages/bundled-features/src/managed-pages/handlers/by-slug.query.ts +1 -1
  503. package/packages/bundled-features/src/managed-pages/handlers/by-tenant-published.query.ts +1 -1
  504. package/packages/bundled-features/src/managed-pages/handlers/page-crud.ts +1 -1
  505. package/packages/bundled-features/src/managed-pages/handlers/set.write.ts +2 -2
  506. package/packages/bundled-features/src/managed-pages/index.ts +5 -5
  507. package/packages/bundled-features/src/managed-pages/screens/branding-screen.ts +1 -1
  508. package/packages/bundled-features/src/managed-pages/seeding.ts +1 -1
  509. package/packages/bundled-features/src/managed-pages/web/client-plugin.tsx +1 -1
  510. package/packages/bundled-features/src/managed-pages/web/i18n.ts +1 -1
  511. package/packages/bundled-features/src/managed-pages/web/index.ts +2 -2
  512. package/packages/bundled-features/src/metrics/compute.ts +3 -3
  513. package/packages/bundled-features/src/metrics/default-metrics.ts +5 -5
  514. package/packages/bundled-features/src/metrics/feature.ts +7 -7
  515. package/packages/bundled-features/src/metrics/filters.ts +1 -1
  516. package/packages/bundled-features/src/metrics/index.ts +5 -5
  517. package/packages/bundled-features/src/metrics/types.ts +1 -1
  518. package/packages/bundled-features/src/metrics/validate.ts +3 -3
  519. package/packages/bundled-features/src/metrics/window.ts +2 -2
  520. package/packages/bundled-features/src/notes-history/changes.json +8 -0
  521. package/packages/bundled-features/src/notes-history/executor.ts +1 -1
  522. package/packages/bundled-features/src/notes-history/feature.ts +6 -9
  523. package/packages/bundled-features/src/notes-history/handlers/add-note.write.ts +6 -6
  524. package/packages/bundled-features/src/notes-history/index.ts +6 -7
  525. package/packages/bundled-features/src/notes-history/web/client-plugin.tsx +3 -3
  526. package/packages/bundled-features/src/notes-history/web/index.ts +3 -3
  527. package/packages/bundled-features/src/notes-history/web/notes-section.tsx +1 -1
  528. package/packages/bundled-features/src/notes-history-user-data/changes.json +8 -0
  529. package/packages/bundled-features/src/notes-history-user-data/hooks.ts +1 -1
  530. package/packages/bundled-features/src/notes-history-user-data/index.ts +2 -5
  531. package/packages/bundled-features/src/page-render/cached-page-response.ts +1 -1
  532. package/packages/bundled-features/src/page-render/index.ts +7 -7
  533. package/packages/bundled-features/src/page-render/layout.ts +2 -2
  534. package/packages/bundled-features/src/page-render/web.ts +5 -5
  535. package/packages/bundled-features/src/personal-access-tokens/feature.ts +13 -13
  536. package/packages/bundled-features/src/personal-access-tokens/handlers/available-scopes.query.ts +1 -1
  537. package/packages/bundled-features/src/personal-access-tokens/handlers/create.write.ts +5 -5
  538. package/packages/bundled-features/src/personal-access-tokens/handlers/list.query.ts +3 -3
  539. package/packages/bundled-features/src/personal-access-tokens/handlers/revoke.write.ts +3 -3
  540. package/packages/bundled-features/src/personal-access-tokens/hash.ts +1 -1
  541. package/packages/bundled-features/src/personal-access-tokens/i18n.ts +2 -2
  542. package/packages/bundled-features/src/personal-access-tokens/index.ts +13 -13
  543. package/packages/bundled-features/src/personal-access-tokens/resolver.ts +5 -5
  544. package/packages/bundled-features/src/personal-access-tokens/revoke-for-user.ts +2 -2
  545. package/packages/bundled-features/src/personal-access-tokens/roles.ts +2 -2
  546. package/packages/bundled-features/src/personal-access-tokens/schema/api-token.ts +1 -1
  547. package/packages/bundled-features/src/personal-access-tokens/screens.ts +2 -2
  548. package/packages/bundled-features/src/presets/changes.json +6 -0
  549. package/packages/bundled-features/src/presets/dsgvo-self-service.ts +7 -5
  550. package/packages/bundled-features/src/presets/index.ts +2 -2
  551. package/packages/bundled-features/src/presets/security-baseline.ts +6 -4
  552. package/packages/bundled-features/src/rate-limiting/feature.ts +2 -2
  553. package/packages/bundled-features/src/rate-limiting/handlers/bucket-access.ts +1 -1
  554. package/packages/bundled-features/src/rate-limiting/handlers/status.query.ts +2 -2
  555. package/packages/bundled-features/src/rate-limiting/index.ts +2 -2
  556. package/packages/bundled-features/src/readiness/changes.json +10 -1
  557. package/packages/bundled-features/src/readiness/feature.ts +1 -4
  558. package/packages/bundled-features/src/readiness/handlers/status.query.ts +1 -1
  559. package/packages/bundled-features/src/readiness/index.ts +3 -3
  560. package/packages/bundled-features/src/renderer-foundation/api.ts +2 -2
  561. package/packages/bundled-features/src/renderer-foundation/constants.ts +2 -2
  562. package/packages/bundled-features/src/renderer-foundation/feature.ts +2 -2
  563. package/packages/bundled-features/src/renderer-foundation/index.ts +8 -5
  564. package/packages/bundled-features/src/renderer-foundation/types.ts +22 -2
  565. package/packages/bundled-features/src/renderer-pdf/feature.ts +2 -2
  566. package/packages/bundled-features/src/renderer-pdf/index.ts +2 -2
  567. package/packages/bundled-features/src/renderer-pdf/render-table-pdf.ts +2 -2
  568. package/packages/bundled-features/src/secrets/changes.json +12 -0
  569. package/packages/bundled-features/src/secrets/constants.ts +9 -0
  570. package/packages/bundled-features/src/secrets/db/queries/read.ts +1 -1
  571. package/packages/bundled-features/src/secrets/feature.ts +17 -13
  572. package/packages/bundled-features/src/secrets/handlers/delete.write.ts +5 -5
  573. package/packages/bundled-features/src/secrets/handlers/list.query.ts +2 -2
  574. package/packages/bundled-features/src/secrets/handlers/rotate.job.ts +2 -2
  575. package/packages/bundled-features/src/secrets/handlers/set.write.ts +5 -5
  576. package/packages/bundled-features/src/secrets/i18n.ts +1 -1
  577. package/packages/bundled-features/src/secrets/index.ts +9 -7
  578. package/packages/bundled-features/src/secrets/secrets-context.ts +3 -3
  579. package/packages/bundled-features/src/secrets/write-gate.ts +1 -1
  580. package/packages/bundled-features/src/seo/feature.ts +8 -8
  581. package/packages/bundled-features/src/seo/handlers/seo-config.query.ts +1 -1
  582. package/packages/bundled-features/src/seo/index.ts +6 -6
  583. package/packages/bundled-features/src/sessions/feature.ts +13 -13
  584. package/packages/bundled-features/src/sessions/handlers/cleanup.job.ts +1 -1
  585. package/packages/bundled-features/src/sessions/handlers/detail.query.ts +2 -2
  586. package/packages/bundled-features/src/sessions/handlers/list.query.ts +2 -2
  587. package/packages/bundled-features/src/sessions/handlers/mine.query.ts +2 -2
  588. package/packages/bundled-features/src/sessions/handlers/revoke-all-for-user.write.ts +2 -2
  589. package/packages/bundled-features/src/sessions/handlers/revoke-all-others.write.ts +3 -3
  590. package/packages/bundled-features/src/sessions/handlers/revoke.write.ts +3 -3
  591. package/packages/bundled-features/src/sessions/index.ts +8 -8
  592. package/packages/bundled-features/src/sessions/schema/user-session.ts +1 -1
  593. package/packages/bundled-features/src/sessions/screens.ts +1 -1
  594. package/packages/bundled-features/src/sessions/session-callbacks.ts +6 -6
  595. package/packages/bundled-features/src/sessions/testing.ts +1 -1
  596. package/packages/bundled-features/src/shared/index.ts +31 -31
  597. package/packages/bundled-features/src/shared/password-hashing.ts +1 -1
  598. package/packages/bundled-features/src/shared/row-bound-grant.ts +1 -1
  599. package/packages/bundled-features/src/step-dispatcher/deliver-dispatch-request.ts +4 -4
  600. package/packages/bundled-features/src/step-dispatcher/dispatch-payload.ts +2 -2
  601. package/packages/bundled-features/src/step-dispatcher/feature.ts +3 -3
  602. package/packages/bundled-features/src/step-dispatcher/index.ts +3 -3
  603. package/packages/bundled-features/src/step-dispatcher/webhook-runner.ts +1 -1
  604. package/packages/bundled-features/src/subscription-mollie/feature.ts +3 -3
  605. package/packages/bundled-features/src/subscription-mollie/index.ts +3 -3
  606. package/packages/bundled-features/src/subscription-mollie/verify-webhook.ts +2 -2
  607. package/packages/bundled-features/src/subscription-stripe/changes.json +6 -0
  608. package/packages/bundled-features/src/subscription-stripe/feature.ts +34 -6
  609. package/packages/bundled-features/src/subscription-stripe/index.ts +3 -2
  610. package/packages/bundled-features/src/subscription-stripe/plugin-methods.ts +2 -2
  611. package/packages/bundled-features/src/subscription-stripe/runtime.ts +1 -1
  612. package/packages/bundled-features/src/subscription-stripe/verify-webhook.ts +2 -2
  613. package/packages/bundled-features/src/tags/changes.json +8 -0
  614. package/packages/bundled-features/src/tags/executor.ts +1 -1
  615. package/packages/bundled-features/src/tags/feature.ts +11 -14
  616. package/packages/bundled-features/src/tags/handlers/assign-tag.write.ts +5 -5
  617. package/packages/bundled-features/src/tags/handlers/create-tag.write.ts +3 -3
  618. package/packages/bundled-features/src/tags/handlers/delete-tag.write.ts +3 -3
  619. package/packages/bundled-features/src/tags/handlers/remove-tag.write.ts +5 -5
  620. package/packages/bundled-features/src/tags/handlers/update-tag.write.ts +3 -3
  621. package/packages/bundled-features/src/tags/index.ts +11 -11
  622. package/packages/bundled-features/src/tags/screens.ts +1 -1
  623. package/packages/bundled-features/src/tags/web/client-plugin.tsx +5 -5
  624. package/packages/bundled-features/src/tags/web/entity-tags.tsx +2 -2
  625. package/packages/bundled-features/src/tags/web/index.ts +9 -9
  626. package/packages/bundled-features/src/tags/web/tag-filter.tsx +3 -3
  627. package/packages/bundled-features/src/tags/web/tag-manager.tsx +2 -2
  628. package/packages/bundled-features/src/tags/web/tag-picker.tsx +1 -1
  629. package/packages/bundled-features/src/tags/web/tag-section.tsx +3 -3
  630. package/packages/bundled-features/src/tags/web/tags-cell.tsx +2 -2
  631. package/packages/bundled-features/src/template-resolver/api.ts +7 -7
  632. package/packages/bundled-features/src/template-resolver/changes.json +6 -0
  633. package/packages/bundled-features/src/template-resolver/compile-document-body.ts +4 -4
  634. package/packages/bundled-features/src/template-resolver/compile-steps-block.ts +3 -3
  635. package/packages/bundled-features/src/template-resolver/constants.ts +1 -1
  636. package/packages/bundled-features/src/template-resolver/document-sanitizer.ts +4 -4
  637. package/packages/bundled-features/src/template-resolver/document-schema.ts +1 -1
  638. package/packages/bundled-features/src/template-resolver/feature.ts +31 -31
  639. package/packages/bundled-features/src/template-resolver/handlers/bundle-import.ts +11 -11
  640. package/packages/bundled-features/src/template-resolver/handlers/by-slug.query.ts +2 -2
  641. package/packages/bundled-features/src/template-resolver/handlers/by-tenant.query.ts +2 -2
  642. package/packages/bundled-features/src/template-resolver/handlers/collection-item.query.ts +1 -1
  643. package/packages/bundled-features/src/template-resolver/handlers/collection-list.query.ts +1 -1
  644. package/packages/bundled-features/src/template-resolver/handlers/collection-set.write.ts +5 -5
  645. package/packages/bundled-features/src/template-resolver/handlers/collection-shared.ts +2 -2
  646. package/packages/bundled-features/src/template-resolver/handlers/copy-locale.write.ts +13 -13
  647. package/packages/bundled-features/src/template-resolver/handlers/diff-to-system.query.ts +3 -3
  648. package/packages/bundled-features/src/template-resolver/handlers/discard-draft.write.ts +3 -3
  649. package/packages/bundled-features/src/template-resolver/handlers/export-bundle.query.ts +7 -7
  650. package/packages/bundled-features/src/template-resolver/handlers/find-by-id.query.ts +3 -3
  651. package/packages/bundled-features/src/template-resolver/handlers/import-bundle-system.write.ts +2 -2
  652. package/packages/bundled-features/src/template-resolver/handlers/import-bundle.write.ts +2 -2
  653. package/packages/bundled-features/src/template-resolver/handlers/layout-source.query.ts +7 -7
  654. package/packages/bundled-features/src/template-resolver/handlers/list.query.ts +4 -4
  655. package/packages/bundled-features/src/template-resolver/handlers/override-diff.ts +3 -3
  656. package/packages/bundled-features/src/template-resolver/handlers/overview.query.ts +6 -6
  657. package/packages/bundled-features/src/template-resolver/handlers/preview.query.ts +2 -2
  658. package/packages/bundled-features/src/template-resolver/handlers/reset-to-system.write.ts +3 -3
  659. package/packages/bundled-features/src/template-resolver/handlers/resource-link-pdf.write.ts +2 -2
  660. package/packages/bundled-features/src/template-resolver/handlers/resource-remove.write.ts +5 -5
  661. package/packages/bundled-features/src/template-resolver/handlers/resource-shared.ts +1 -1
  662. package/packages/bundled-features/src/template-resolver/handlers/resource-upload.write.ts +5 -5
  663. package/packages/bundled-features/src/template-resolver/handlers/send-test.write.ts +6 -6
  664. package/packages/bundled-features/src/template-resolver/handlers/set.write.ts +7 -7
  665. package/packages/bundled-features/src/template-resolver/handlers/shared.ts +3 -3
  666. package/packages/bundled-features/src/template-resolver/handlers/template-gates.ts +7 -7
  667. package/packages/bundled-features/src/template-resolver/handlers/template-write.ts +10 -10
  668. package/packages/bundled-features/src/template-resolver/handlers/tenant-overrides.query.ts +5 -5
  669. package/packages/bundled-features/src/template-resolver/handlers/toggle-status.write.ts +6 -6
  670. package/packages/bundled-features/src/template-resolver/handlers/upsert-system.write.ts +3 -3
  671. package/packages/bundled-features/src/template-resolver/handlers/upsert-tenant.write.ts +3 -3
  672. package/packages/bundled-features/src/template-resolver/handlers/usage.query.ts +5 -5
  673. package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +8 -8
  674. package/packages/bundled-features/src/template-resolver/index.ts +25 -25
  675. package/packages/bundled-features/src/template-resolver/layout-appearance.ts +2 -2
  676. package/packages/bundled-features/src/template-resolver/layout-regions.ts +2 -2
  677. package/packages/bundled-features/src/template-resolver/linked-resources.ts +2 -2
  678. package/packages/bundled-features/src/template-resolver/preview-display-html.ts +1 -1
  679. package/packages/bundled-features/src/template-resolver/print-document.ts +1 -1
  680. package/packages/bundled-features/src/template-resolver/resource-image.ts +1 -1
  681. package/packages/bundled-features/src/template-resolver/seeding.ts +10 -10
  682. package/packages/bundled-features/src/template-resolver/store-template-resource.ts +10 -10
  683. package/packages/bundled-features/src/template-resolver/table.ts +1 -1
  684. package/packages/bundled-features/src/template-resolver/template-bundle.ts +4 -4
  685. package/packages/bundled-features/src/template-resolver/template-diff.ts +1 -1
  686. package/packages/bundled-features/src/template-resolver/template-draft.ts +2 -2
  687. package/packages/bundled-features/src/template-resolver/template-meta.ts +2 -2
  688. package/packages/bundled-features/src/template-resolver/template-preview.ts +40 -25
  689. package/packages/bundled-features/src/template-resolver/template-resources.ts +4 -4
  690. package/packages/bundled-features/src/template-resolver/template-system-only.ts +1 -1
  691. package/packages/bundled-features/src/template-resolver/template-usage.ts +4 -1
  692. package/packages/bundled-features/src/template-resolver/template-validation.ts +3 -3
  693. package/packages/bundled-features/src/template-resolver/testing.ts +4 -4
  694. package/packages/bundled-features/src/template-resolver/user-content-table.ts +2 -2
  695. package/packages/bundled-features/src/template-resolver/web/client-plugin.tsx +4 -4
  696. package/packages/bundled-features/src/template-resolver/web/document-editor-extensions.ts +8 -5
  697. package/packages/bundled-features/src/template-resolver/web/document-editor.tsx +2 -2
  698. package/packages/bundled-features/src/template-resolver/web/document-tiptap-editor.tsx +30 -11
  699. package/packages/bundled-features/src/template-resolver/web/editor-handle.ts +2 -2
  700. package/packages/bundled-features/src/template-resolver/web/index.ts +7 -7
  701. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor-lazy.tsx +3 -3
  702. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor.tsx +6 -6
  703. package/packages/bundled-features/src/template-resolver/web/placeholder-text.ts +1 -1
  704. package/packages/bundled-features/src/template-resolver-user-data/changes.json +10 -0
  705. package/packages/bundled-features/src/template-resolver-user-data/hooks.ts +1 -1
  706. package/packages/bundled-features/src/template-resolver-user-data/index.ts +1 -4
  707. package/packages/bundled-features/src/tenant/cancel-pending-invitation.ts +2 -2
  708. package/packages/bundled-features/src/tenant/command-schemas.ts +6 -6
  709. package/packages/bundled-features/src/tenant/decrypt-tenant-names.ts +1 -1
  710. package/packages/bundled-features/src/tenant/feature.ts +24 -24
  711. package/packages/bundled-features/src/tenant/handlers/active-tenant-ids.query.ts +1 -1
  712. package/packages/bundled-features/src/tenant/handlers/add-member.write.ts +3 -3
  713. package/packages/bundled-features/src/tenant/handlers/cancel-invitation.write.ts +2 -2
  714. package/packages/bundled-features/src/tenant/handlers/create.write.ts +1 -1
  715. package/packages/bundled-features/src/tenant/handlers/invitations.query.ts +3 -3
  716. package/packages/bundled-features/src/tenant/handlers/list.query.ts +1 -1
  717. package/packages/bundled-features/src/tenant/handlers/me.query.ts +2 -2
  718. package/packages/bundled-features/src/tenant/handlers/member-directory.query.ts +4 -4
  719. package/packages/bundled-features/src/tenant/handlers/member-role-availability.query.ts +1 -1
  720. package/packages/bundled-features/src/tenant/handlers/members.query.ts +3 -3
  721. package/packages/bundled-features/src/tenant/handlers/memberships.query.ts +3 -3
  722. package/packages/bundled-features/src/tenant/handlers/remove-member.write.ts +6 -6
  723. package/packages/bundled-features/src/tenant/handlers/resolve-user-ids.query.ts +1 -1
  724. package/packages/bundled-features/src/tenant/handlers/team-list.query.ts +5 -5
  725. package/packages/bundled-features/src/tenant/handlers/tenant-directory.query.ts +3 -3
  726. package/packages/bundled-features/src/tenant/handlers/toggle-enabled.write.ts +1 -1
  727. package/packages/bundled-features/src/tenant/handlers/update-member-roles.write.ts +3 -3
  728. package/packages/bundled-features/src/tenant/handlers/update.write.ts +1 -1
  729. package/packages/bundled-features/src/tenant/index.ts +10 -10
  730. package/packages/bundled-features/src/tenant/invitation-table.ts +1 -1
  731. package/packages/bundled-features/src/tenant/invited-membership.ts +4 -4
  732. package/packages/bundled-features/src/tenant/is-tenant-serving-public-content.ts +1 -1
  733. package/packages/bundled-features/src/tenant/last-tenant-admin.ts +2 -2
  734. package/packages/bundled-features/src/tenant/member-role-options.ts +1 -1
  735. package/packages/bundled-features/src/tenant/screens.ts +2 -2
  736. package/packages/bundled-features/src/tenant/seeding.ts +3 -3
  737. package/packages/bundled-features/src/tenant/testing.ts +1 -1
  738. package/packages/bundled-features/src/tenant/web/client-plugin.tsx +3 -3
  739. package/packages/bundled-features/src/tenant/web/index.ts +3 -3
  740. package/packages/bundled-features/src/tenant/web/member-roles-cell.tsx +1 -1
  741. package/packages/bundled-features/src/tenant/web/member-status-cell.tsx +1 -1
  742. package/packages/bundled-features/src/tenant-handover/feature.ts +4 -4
  743. package/packages/bundled-features/src/tenant-handover/grant.ts +1 -1
  744. package/packages/bundled-features/src/tenant-handover/handlers/claim.write.ts +5 -5
  745. package/packages/bundled-features/src/tenant-handover/index.ts +3 -3
  746. package/packages/bundled-features/src/tenant-handover/move-entity-graph.ts +1 -1
  747. package/packages/bundled-features/src/tenant-handover/root-anchor.ts +1 -1
  748. package/packages/bundled-features/src/tenant-handover/signup-handover-provider.ts +5 -5
  749. package/packages/bundled-features/src/tenant-lifecycle/boot-checks.ts +1 -1
  750. package/packages/bundled-features/src/tenant-lifecycle/feature.ts +8 -8
  751. package/packages/bundled-features/src/tenant-lifecycle/handlers/cancel-destruction.write.ts +4 -4
  752. package/packages/bundled-features/src/tenant-lifecycle/handlers/request-destruction.write.ts +5 -5
  753. package/packages/bundled-features/src/tenant-lifecycle/index.ts +3 -3
  754. package/packages/bundled-features/src/tenant-lifecycle/lib/revoke-tenant-sessions.ts +1 -1
  755. package/packages/bundled-features/src/tenant-lifecycle/lifecycle-gate.ts +1 -1
  756. package/packages/bundled-features/src/tenant-lifecycle/run-tenant-destroy.ts +5 -5
  757. package/packages/bundled-features/src/tenant-lifecycle/stages.ts +3 -3
  758. package/packages/bundled-features/src/tenant-lifecycle/testing.ts +3 -3
  759. package/packages/bundled-features/src/tenant-settings/changes.json +10 -1
  760. package/packages/bundled-features/src/tenant-settings/feature.ts +2 -5
  761. package/packages/bundled-features/src/tenant-settings/index.ts +4 -5
  762. package/packages/bundled-features/src/tenant-settings/tenant-defaults.ts +1 -1
  763. package/packages/bundled-features/src/tier-engine/changes.json +8 -0
  764. package/packages/bundled-features/src/tier-engine/entity.ts +1 -1
  765. package/packages/bundled-features/src/tier-engine/feature.ts +10 -13
  766. package/packages/bundled-features/src/tier-engine/handlers/get-tenant-tier.query.ts +1 -1
  767. package/packages/bundled-features/src/tier-engine/handlers/set-tenant-tier.write.ts +4 -4
  768. package/packages/bundled-features/src/tier-engine/i18n.ts +4 -10
  769. package/packages/bundled-features/src/tier-engine/index.ts +8 -9
  770. package/packages/bundled-features/src/tier-engine/tier-option-gate.ts +1 -1
  771. package/packages/bundled-features/src/tier-engine/tier-resolver.ts +2 -2
  772. package/packages/bundled-features/src/tier-engine/web/client-plugin.tsx +9 -3
  773. package/packages/bundled-features/src/tier-engine/web/index.ts +1 -1
  774. package/packages/bundled-features/src/user/command-schemas.ts +2 -2
  775. package/packages/bundled-features/src/user/feature.ts +10 -10
  776. package/packages/bundled-features/src/user/handlers/create.write.ts +3 -3
  777. package/packages/bundled-features/src/user/handlers/detail.query.ts +2 -2
  778. package/packages/bundled-features/src/user/handlers/find-for-auth.query.ts +1 -1
  779. package/packages/bundled-features/src/user/handlers/list.query.ts +2 -2
  780. package/packages/bundled-features/src/user/handlers/me.query.ts +1 -1
  781. package/packages/bundled-features/src/user/handlers/update-roles.ts +2 -2
  782. package/packages/bundled-features/src/user/handlers/update.write.ts +4 -4
  783. package/packages/bundled-features/src/user/index.ts +8 -8
  784. package/packages/bundled-features/src/user/invited-global-roles.ts +2 -2
  785. package/packages/bundled-features/src/user/principal-status.ts +1 -1
  786. package/packages/bundled-features/src/user/resolve-display-names.ts +2 -2
  787. package/packages/bundled-features/src/user/schema/user.ts +1 -1
  788. package/packages/bundled-features/src/user/seeding.ts +2 -2
  789. package/packages/bundled-features/src/user/testing.ts +1 -1
  790. package/packages/bundled-features/src/user-data-rights/audit-download.ts +2 -2
  791. package/packages/bundled-features/src/user-data-rights/boot-checks.ts +1 -1
  792. package/packages/bundled-features/src/user-data-rights/db/queries/export-jobs.ts +1 -1
  793. package/packages/bundled-features/src/user-data-rights/db/queries/forget-cleanup.ts +1 -1
  794. package/packages/bundled-features/src/user-data-rights/deletion-token.ts +1 -1
  795. package/packages/bundled-features/src/user-data-rights/feature.ts +31 -31
  796. package/packages/bundled-features/src/user-data-rights/handlers/cancel-deletion.write.ts +3 -3
  797. package/packages/bundled-features/src/user-data-rights/handlers/confirm-deletion-by-token.write.ts +3 -3
  798. package/packages/bundled-features/src/user-data-rights/handlers/deletion-grace-period.ts +3 -3
  799. package/packages/bundled-features/src/user-data-rights/handlers/download-attempt-list.query.ts +1 -1
  800. package/packages/bundled-features/src/user-data-rights/handlers/download-by-job.query.ts +4 -4
  801. package/packages/bundled-features/src/user-data-rights/handlers/download-by-token.query.ts +5 -5
  802. package/packages/bundled-features/src/user-data-rights/handlers/export-job-detail.query.ts +1 -1
  803. package/packages/bundled-features/src/user-data-rights/handlers/export-job-list.query.ts +1 -1
  804. package/packages/bundled-features/src/user-data-rights/handlers/export-status.query.ts +1 -1
  805. package/packages/bundled-features/src/user-data-rights/handlers/lift-restriction.write.ts +3 -3
  806. package/packages/bundled-features/src/user-data-rights/handlers/list-download-attempts.query.ts +2 -2
  807. package/packages/bundled-features/src/user-data-rights/handlers/my-audit-log.query.ts +1 -1
  808. package/packages/bundled-features/src/user-data-rights/handlers/request-deletion-by-email.write.ts +3 -3
  809. package/packages/bundled-features/src/user-data-rights/handlers/request-deletion.write.ts +3 -3
  810. package/packages/bundled-features/src/user-data-rights/handlers/request-export.write.ts +1 -1
  811. package/packages/bundled-features/src/user-data-rights/handlers/restrict-account.write.ts +4 -4
  812. package/packages/bundled-features/src/user-data-rights/handlers/run-forget-cleanup.write.ts +3 -3
  813. package/packages/bundled-features/src/user-data-rights/index.ts +13 -13
  814. package/packages/bundled-features/src/user-data-rights/lib/default-mailers.ts +7 -7
  815. package/packages/bundled-features/src/user-data-rights/lib/deny-if-target-outside-admin-tenant.ts +2 -2
  816. package/packages/bundled-features/src/user-data-rights/lib/mail-transport-resolver.ts +1 -1
  817. package/packages/bundled-features/src/user-data-rights/lib/resolve-tenant-model.ts +2 -2
  818. package/packages/bundled-features/src/user-data-rights/lib/storage-provider-resolver.ts +2 -2
  819. package/packages/bundled-features/src/user-data-rights/lib/update-user-lifecycle.ts +1 -1
  820. package/packages/bundled-features/src/user-data-rights/mail-notifications.ts +2 -2
  821. package/packages/bundled-features/src/user-data-rights/run-export-jobs.ts +8 -8
  822. package/packages/bundled-features/src/user-data-rights/run-forget-cleanup.ts +6 -6
  823. package/packages/bundled-features/src/user-data-rights/run-user-export.ts +2 -2
  824. package/packages/bundled-features/src/user-data-rights/web/client-plugin.tsx +4 -4
  825. package/packages/bundled-features/src/user-data-rights/web/i18n.ts +1 -1
  826. package/packages/bundled-features/src/user-data-rights/web/index.ts +8 -8
  827. package/packages/bundled-features/src/user-data-rights/web/privacy-center-screen.tsx +1 -1
  828. package/packages/bundled-features/src/user-data-rights/web/public-deletion-gate.tsx +2 -2
  829. package/packages/bundled-features/src/user-data-rights-defaults/feature.ts +11 -11
  830. package/packages/bundled-features/src/user-data-rights-defaults/hooks/api-token.userdata-hook.ts +2 -2
  831. package/packages/bundled-features/src/user-data-rights-defaults/hooks/config-value.userdata-hook.ts +3 -3
  832. package/packages/bundled-features/src/user-data-rights-defaults/hooks/delivery-attempt.userdata-hook.ts +2 -2
  833. package/packages/bundled-features/src/user-data-rights-defaults/hooks/download-attempt.userdata-hook.ts +2 -2
  834. package/packages/bundled-features/src/user-data-rights-defaults/hooks/file-ref.userdata-hook.ts +1 -1
  835. package/packages/bundled-features/src/user-data-rights-defaults/hooks/in-app-message.userdata-hook.ts +2 -2
  836. package/packages/bundled-features/src/user-data-rights-defaults/hooks/job-run.userdata-hook.ts +2 -2
  837. package/packages/bundled-features/src/user-data-rights-defaults/hooks/notification-preference.userdata-hook.ts +3 -3
  838. package/packages/bundled-features/src/user-data-rights-defaults/hooks/tenant-invitation.userdata-hook.ts +4 -4
  839. package/packages/bundled-features/src/user-data-rights-defaults/hooks/user-session.userdata-hook.ts +2 -2
  840. package/packages/bundled-features/src/user-data-rights-defaults/hooks/user.userdata-hook.ts +1 -1
  841. package/packages/bundled-features/src/user-data-rights-defaults/index.ts +11 -11
  842. package/packages/bundled-features/src/user-profile/feature.ts +2 -2
  843. package/packages/bundled-features/src/user-profile/handlers/change-email.write.ts +4 -4
  844. package/packages/bundled-features/src/user-profile/index.ts +2 -2
  845. package/packages/bundled-features/src/user-profile/web/client-plugin.ts +3 -3
  846. package/packages/bundled-features/src/user-profile/web/index.ts +2 -2
  847. package/packages/bundled-features/src/user-profile/web/profile-screen.tsx +3 -3
  848. package/packages/bundled-features/src/waitlist/changes.json +7 -0
  849. package/packages/bundled-features/src/waitlist/constants.ts +12 -0
  850. package/packages/bundled-features/src/waitlist/entity.ts +5 -3
  851. package/packages/bundled-features/src/waitlist/entries-admin.ts +55 -0
  852. package/packages/bundled-features/src/waitlist/feature.ts +33 -12
  853. package/packages/bundled-features/src/waitlist/handlers/export-purge.write.ts +81 -0
  854. package/packages/bundled-features/src/waitlist/handlers/invite.write.ts +7 -7
  855. package/packages/bundled-features/src/waitlist/handlers/list.query.ts +2 -2
  856. package/packages/bundled-features/src/waitlist/handlers/reject.write.ts +5 -5
  857. package/packages/bundled-features/src/waitlist/handlers/submit.write.ts +5 -5
  858. package/packages/bundled-features/src/waitlist/i18n.ts +4 -0
  859. package/packages/bundled-features/src/waitlist/import.ts +83 -0
  860. package/packages/bundled-features/src/waitlist/index.ts +23 -5
  861. package/packages/bundled-features/src/waitlist/legacy-migrate.ts +220 -0
  862. package/packages/bundled-features/src/waitlist/lib.ts +5 -5
  863. package/packages/bundled-features/src/waitlist/link-on-signup.ts +106 -0
  864. package/packages/bundled-features/src/waitlist/mail.ts +1 -1
  865. package/packages/bundled-features/src/waitlist/options.ts +15 -3
  866. package/packages/bundled-features/src/waitlist/payloads.ts +3 -1
  867. package/packages/bundled-features/src/waitlist/screens.ts +2 -2
  868. package/packages/bundled-features/src/waitlist/user-data-hooks.ts +3 -3
  869. package/packages/bundled-features/src/workflow-runner/changes.json +8 -0
  870. package/packages/bundled-features/src/workflow-runner/db/queries/due-runs.ts +1 -1
  871. package/packages/bundled-features/src/workflow-runner/event-subscriber.ts +2 -2
  872. package/packages/bundled-features/src/workflow-runner/event-trigger.ts +4 -4
  873. package/packages/bundled-features/src/workflow-runner/feature.ts +4 -7
  874. package/packages/bundled-features/src/workflow-runner/handlers/resume-run.write.ts +3 -3
  875. package/packages/bundled-features/src/workflow-runner/index.ts +4 -4
  876. package/packages/bundled-features/src/workflow-runner/pending-projection.ts +1 -1
  877. package/samples/apps/ui-walkthrough/package.json +2 -1
  878. package/samples/apps/ui-walkthrough/src/app/auth-constants.ts +4 -0
  879. package/samples/apps/ui-walkthrough/src/app/server.ts +10 -1
  880. package/samples/apps/ui-walkthrough/src/app/template-seed-data.ts +1 -1
  881. package/samples/apps/ui-walkthrough/src/features/billing/feature.ts +11 -10
  882. package/samples/apps/ui-walkthrough/src/features/billing/i18n.ts +22 -1
  883. package/samples/apps/ui-walkthrough/src/run-config.ts +14 -5
  884. package/samples/apps/ui-walkthrough/tsconfig.json +1 -0
  885. package/samples/apps/use-all-bundled/feature-manifest.json +44 -3
  886. package/samples/apps/use-all-bundled/scripts/check-coverage.ts +2 -3
  887. package/samples/apps/use-all-bundled/src/run-config.ts +22 -20
  888. package/samples/recipes/apex-surface-auth/README.md +1 -0
  889. package/samples/recipes/apex-surface-auth/src/feature.ts +1 -1
  890. package/samples/recipes/api-worker-split/bin/api.ts +6 -1
  891. package/samples/recipes/app-config/README.md +28 -0
  892. package/samples/recipes/app-config/kumiko.config.ts +9 -0
  893. package/samples/recipes/app-config/package.json +8 -0
  894. package/samples/recipes/app-config/src/feature.ts +6 -0
  895. package/samples/recipes/app-config/tsconfig.json +22 -0
  896. package/samples/recipes/auth-mfa/README.md +14 -0
  897. package/samples/recipes/auth-mfa/src/feature.ts +7 -0
  898. package/samples/recipes/compose-stacks/README.md +60 -0
  899. package/samples/recipes/compose-stacks/package.json +11 -0
  900. package/samples/recipes/compose-stacks/src/app.ts +44 -0
  901. package/samples/recipes/env-composition/README.md +36 -0
  902. package/samples/recipes/env-composition/bin/server.ts +15 -0
  903. package/samples/recipes/env-composition/package.json +15 -0
  904. package/samples/recipes/env-composition/src/env.ts +47 -0
  905. package/samples/recipes/host-routing/README.md +25 -0
  906. package/samples/recipes/host-routing/package.json +12 -0
  907. package/samples/recipes/host-routing/src/feature.ts +35 -0
  908. package/samples/recipes/legal-pages/README.md +15 -0
  909. package/samples/recipes/legal-pages/src/feature.ts +13 -2
  910. package/samples/recipes/managed-config/README.md +1 -0
  911. package/samples/recipes/managed-pages/README.md +1 -0
  912. package/samples/recipes/prod-boot-options/README.md +48 -0
  913. package/samples/recipes/prod-boot-options/bin/server.ts +11 -0
  914. package/samples/recipes/prod-boot-options/package.json +13 -0
  915. package/samples/recipes/prod-boot-options/src/app.ts +32 -0
  916. package/samples/recipes/security-baseline/README.md +16 -13
  917. package/samples/recipes/security-baseline/package.json +2 -1
  918. package/samples/recipes/security-baseline/src/feature.ts +3 -3
  919. package/packages/bundled-features/src/file-provider-s3-env/changes.json +0 -1
  920. package/packages/bundled-features/src/file-provider-s3-env/index.ts +0 -8
  921. package/packages/bundled-features/src/files-provider-s3/changes.json +0 -1
  922. package/packages/bundled-features/src/files-provider-s3/index.ts +0 -11
@@ -0,0 +1,106 @@
1
+ import {
2
+ createTenantDb,
3
+ entityEventName,
4
+ fetchOne,
5
+ selectMany,
6
+ } from "@cosmicdrift/kumiko-framework/db";
7
+ import { type MultiStreamApplyFn, SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-framework/engine";
8
+ import { parseRoles } from "@cosmicdrift/kumiko-framework/utils";
9
+ import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
10
+ import { decryptStoredPii } from "../shared/index.ts";
11
+ import { tenantMembershipsTable } from "../tenant/index.ts";
12
+ import { userTable } from "../user/index.ts";
13
+ import { DEFAULT_OWN_TENANT_INVITE_ROLE, WAITLIST_STATUS } from "./constants.ts";
14
+ import { normalizeEmail, platformActor, waitlistExecutor } from "./lib.ts";
15
+
16
+ const PII_DECRYPT_REASON = "waitlist:link-on-signup";
17
+
18
+ export const WAITLIST_MEMBERSHIP_CREATED_EVENT = entityEventName("tenant-membership", "created");
19
+
20
+ type SignupOwnerMembership = { readonly userId: string; readonly tenantId: string };
21
+
22
+ // Only a TenantAdmin membership can be the signup owner; invite-accept memberships of
23
+ // other roles are not owners.
24
+ function readSignupOwnerMembership(
25
+ event: Parameters<MultiStreamApplyFn>[0],
26
+ ): SignupOwnerMembership | undefined {
27
+ const { userId, roles } = event.payload;
28
+ if (typeof userId !== "string") return undefined;
29
+ if (!parseRoles(roles).includes(DEFAULT_OWN_TENANT_INVITE_ROLE)) return undefined;
30
+ return { userId, tenantId: event.tenantId };
31
+ }
32
+
33
+ // An unreadable submittedAt sorts last instead of throwing: one bad row must not
34
+ // stall the at-least-once consumer.
35
+ function newestSubmittedFirst(a: Record<string, unknown>, b: Record<string, unknown>): number {
36
+ return submittedAtMillis(b) - submittedAtMillis(a);
37
+ }
38
+
39
+ function submittedAtMillis(row: Record<string, unknown>): number {
40
+ return instantMillis(row["submittedAt"]);
41
+ }
42
+
43
+ function instantMillis(value: unknown): number {
44
+ if (value instanceof Temporal.Instant) return value.epochMilliseconds;
45
+ if (typeof value !== "string") return 0;
46
+ try {
47
+ return Temporal.Instant.from(value).epochMilliseconds;
48
+ } catch {
49
+ // Temporal.Instant.from throws RangeError for a non-ISO string.
50
+ return 0;
51
+ }
52
+ }
53
+
54
+ // Runs as a multi-stream consumer (at least once): the hook phase of the signup and
55
+ // invite-accept paths has no system db handle, and a waitlist problem must not roll
56
+ // back the signup. Idempotent because only `invited` entries are updated.
57
+ export const linkWaitlistOnSignup: MultiStreamApplyFn = async (event, tx) => {
58
+ const membership = readSignupOwnerMembership(event);
59
+ // skip: not a TenantAdmin membership, nothing to link.
60
+ if (!membership) return;
61
+
62
+ // Only the tenant's first membership is the owner; later TenantAdmin invites must not link.
63
+ const [first] = await selectMany<{ readonly id: string }>(
64
+ tx,
65
+ tenantMembershipsTable,
66
+ { tenantId: membership.tenantId },
67
+ { limit: 1, fields: ["id"], orderBy: [{ col: "insertedAt" }, { col: "id" }] },
68
+ );
69
+ // skip: another membership came first.
70
+ if (first && first.id !== event.aggregateId) return;
71
+
72
+ const db = createTenantDb({ db: tx, tenantId: SYSTEM_TENANT_ID, mode: "system" });
73
+ const user = await fetchOne<{ email?: unknown }>(tx, userTable, { id: membership.userId });
74
+ // skip: user row unreadable (erased or not projected yet).
75
+ if (typeof user?.email !== "string") return;
76
+ const email = normalizeEmail(await decryptStoredPii(user.email, "email", PII_DECRYPT_REASON));
77
+
78
+ const found = await waitlistExecutor.list(
79
+ {
80
+ filter: { field: "email", op: "eq", value: email },
81
+ filters: [{ field: "status", op: "in", value: [WAITLIST_STATUS.Invited] }],
82
+ },
83
+ platformActor(),
84
+ db,
85
+ );
86
+ const invited = [...found.rows].sort(newestSubmittedFirst)[0];
87
+ // skip: the signup email has no invited waitlist entry (open signup or stale invite).
88
+ if (!invited) return;
89
+ const { id, version } = invited;
90
+ // skip: defensive guard on the row shape.
91
+ if (typeof id !== "string" || typeof version !== "number") return;
92
+
93
+ await waitlistExecutor.update(
94
+ {
95
+ id,
96
+ version,
97
+ changes: {
98
+ status: WAITLIST_STATUS.Provisioned,
99
+ linkedTenantId: membership.tenantId,
100
+ provisionedAt: Temporal.Now.instant(),
101
+ },
102
+ },
103
+ platformActor(),
104
+ db,
105
+ );
106
+ };
@@ -4,7 +4,7 @@ import {
4
4
  type TemplateVariables,
5
5
  templateVariable,
6
6
  } from "@cosmicdrift/kumiko-framework/engine";
7
- import { mailHeading, mailParagraph, mailRepeatedRows } from "../shared/index.js";
7
+ import { mailHeading, mailParagraph, mailRepeatedRows } from "../shared/index.ts";
8
8
 
9
9
  export type WaitlistMailLocale = "en" | "de" | "es";
10
10
 
@@ -1,5 +1,9 @@
1
1
  import type { HandlerContext, TenantId } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { PayloadRateLimitOption, RateLimitOption } from "@cosmicdrift/kumiko-types/handlers";
2
+ import type {
3
+ PayloadRateLimitOption,
4
+ RateLimitDeclaration,
5
+ RateLimitOption,
6
+ } from "@cosmicdrift/kumiko-types/handlers";
3
7
 
4
8
  export type WaitlistInviteOptions =
5
9
  | {
@@ -22,11 +26,19 @@ export type WaitlistOptions = {
22
26
  readonly notifyRecipient?: (ctx: HandlerContext) => string | null | Promise<string | null>;
23
27
  /** Default `{ mode: "own-tenant", role: "TenantAdmin" }`. */
24
28
  readonly invite?: WaitlistInviteOptions;
25
- /** Default: 5 submits per IP per 10 minutes. */
26
- readonly rateLimit?: RateLimitOption;
29
+ /** Default: 5 submits per IP per 10 minutes. Pass `{ disabled: true, reason }`
30
+ * to turn the per-IP limit off (e.g. when a CDN already throttles the route). */
31
+ readonly rateLimit?: RateLimitDeclaration;
27
32
  /** Default: 3 submits per email address per day, across all IPs. Stops a botnet
28
33
  * from flooding one address with confirmation mails. Pass `[]` to disable. */
29
34
  readonly emailRateLimits?: readonly PayloadRateLimitOption[];
35
+ /** Marks an invited entry `provisioned` and records the tenant when its email
36
+ * becomes the first TenantAdmin member of a tenant (open signup after an
37
+ * invite, or accepting an own-tenant invite). Default false. */
38
+ readonly linkOnSignup?: boolean;
39
+ /** Mounts the SystemAdmin-only `export` and `purge` handlers for handing over
40
+ * and erasing the whole list. Default true; pass false to leave them out. */
41
+ readonly exportPurge?: boolean;
30
42
  /** Shown in the confirmation mail; omitted when unset. */
31
43
  readonly appName?: string;
32
44
  };
@@ -1,6 +1,6 @@
1
1
  import { canonicalizeLocaleTag, isValidLocaleTag } from "@cosmicdrift/kumiko-framework/i18n";
2
2
  import * as z from "zod";
3
- import { WAITLIST_FIELD_LIMITS } from "./constants.js";
3
+ import { WAITLIST_FIELD_LIMITS } from "./constants.ts";
4
4
 
5
5
  // Submitted text lands in a mail subject; CR/LF there would allow header injection.
6
6
  const NO_CONTROL_CHARS = /^\P{Cc}*$/u;
@@ -53,3 +53,5 @@ export const WaitlistSubmitSchema = z
53
53
  export type WaitlistSubmitInput = z.infer<typeof WaitlistSubmitSchema>;
54
54
 
55
55
  export const WaitlistIdSchema = z.object({ id: z.uuid() }).strict();
56
+
57
+ export const WaitlistAuditEventSchema = z.object({ count: z.number().int().nonnegative() });
@@ -1,6 +1,6 @@
1
1
  import { type EntityListScreenDefinition, i18nKey } from "@cosmicdrift/kumiko-framework/engine";
2
- import { WAITLIST_STATUS, WaitlistHandlers } from "./constants.js";
3
- import { adminAccess } from "./lib.js";
2
+ import { WAITLIST_STATUS, WaitlistHandlers } from "./constants.ts";
3
+ import { adminAccess } from "./lib.ts";
4
4
 
5
5
  export const waitlistListScreen: EntityListScreenDefinition = {
6
6
  id: "waitlist-list",
@@ -4,9 +4,9 @@ import type {
4
4
  UserDataExportHook,
5
5
  UserDataHookCtx,
6
6
  } from "@cosmicdrift/kumiko-framework/engine";
7
- import { collectErasureFailure, decryptStoredPii, throwIfErasureFailed } from "../shared/index.js";
8
- import { userTable } from "../user/index.js";
9
- import { normalizeEmail, platformActor, waitlistExecutor } from "./lib.js";
7
+ import { collectErasureFailure, decryptStoredPii, throwIfErasureFailed } from "../shared/index.ts";
8
+ import { userTable } from "../user/index.ts";
9
+ import { normalizeEmail, platformActor, waitlistExecutor } from "./lib.ts";
10
10
 
11
11
  const PII_DECRYPT_REASON = "waitlist:user-data";
12
12
  const ERASE_REASON = "waitlist:user-data-forget";
@@ -1,4 +1,12 @@
1
1
  [
2
+ {
3
+ "version": "0.370.0",
4
+ "type": "breaking",
5
+ "title": "The deprecated workflowRunnerFeature constant is removed",
6
+ "detail": "workflowRunnerFeature was kept next to createWorkflowRunnerFeature() for one release. Mount the feature by calling createWorkflowRunnerFeature().",
7
+ "migration": "Run bun kumiko-upgrade --apply. It replaces workflowRunnerFeature with createWorkflowRunnerFeature().",
8
+ "codemod": "scripts/codemod/feature-factory.ts"
9
+ },
2
10
  {
3
11
  "version": "0.364.0",
4
12
  "type": "fix",
@@ -1,5 +1,5 @@
1
1
  import { sql, type TenantDb } from "@cosmicdrift/kumiko-framework/db";
2
- import { workflowRunPendingTable } from "../../tables.js";
2
+ import { workflowRunPendingTable } from "../../tables.ts";
3
3
 
4
4
  export type DueRow = { readonly runId: string; readonly stepIndex: number };
5
5
 
@@ -34,8 +34,8 @@ import type {
34
34
  import { evaluateEventMatch } from "@cosmicdrift/kumiko-framework/engine";
35
35
  import { createFallbackLogger } from "@cosmicdrift/kumiko-framework/logging";
36
36
  import { getTemporal } from "@cosmicdrift/kumiko-framework/time";
37
- import type { TriggerEventRef } from "./runner.js";
38
- import { workflowRunPendingTable } from "./tables.js";
37
+ import type { TriggerEventRef } from "./runner.ts";
38
+ import { workflowRunPendingTable } from "./tables.ts";
39
39
 
40
40
  type CandidateRow = {
41
41
  readonly runId: string;
@@ -28,14 +28,14 @@ import {
28
28
  WorkflowStepError,
29
29
  } from "@cosmicdrift/kumiko-framework/engine";
30
30
  import { createFallbackLogger } from "@cosmicdrift/kumiko-framework/logging";
31
- import { workflowRunAggregateId } from "./aggregate-id.js";
32
- import { registerEventWakeup } from "./event-subscriber.js";
31
+ import { workflowRunAggregateId } from "./aggregate-id.ts";
32
+ import { registerEventWakeup } from "./event-subscriber.ts";
33
33
  import {
34
34
  startAndRunWorkflow,
35
35
  type WorkflowRunFailedPayload,
36
36
  WorkflowSuspensionUnsupportedError,
37
- } from "./runner.js";
38
- import { registerWorkflow } from "./workflow-registry.js";
37
+ } from "./runner.ts";
38
+ import { registerWorkflow } from "./workflow-registry.ts";
39
39
 
40
40
  const log = createFallbackLogger("workflow-runner");
41
41
 
@@ -25,10 +25,10 @@
25
25
  // wait/retry/waitForEvent suspensions all resume automatically now.
26
26
 
27
27
  import { defineFeature } from "@cosmicdrift/kumiko-framework/engine";
28
- import { selectDueWorkflowRunPending } from "./db/queries/due-runs.js";
29
- import { resumeRunHandler } from "./handlers/resume-run.write.js";
30
- import { registerWorkflowRunPendingProjection } from "./pending-projection.js";
31
- import { workflowRunPendingTableMeta } from "./tables.js";
28
+ import { selectDueWorkflowRunPending } from "./db/queries/due-runs.ts";
29
+ import { resumeRunHandler } from "./handlers/resume-run.write.ts";
30
+ import { registerWorkflowRunPendingProjection } from "./pending-projection.ts";
31
+ import { workflowRunPendingTableMeta } from "./tables.ts";
32
32
 
33
33
  // Kebab-case matching the "./workflow-runner" export subpath — every other
34
34
  // bundled feature's runtime name follows this convention, and
@@ -95,6 +95,3 @@ export function createWorkflowRunnerFeature() {
95
95
  { dedupeOptions: {} },
96
96
  );
97
97
  }
98
-
99
- /** @deprecated Use createWorkflowRunnerFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
100
- export const workflowRunnerFeature = createWorkflowRunnerFeature();
@@ -62,9 +62,9 @@ import {
62
62
  type WorkflowRunCompletedPayload,
63
63
  type WorkflowRunFailedPayload,
64
64
  WorkflowSuspensionUnsupportedError,
65
- } from "../runner.js";
66
- import { workflowRunPendingTable } from "../tables.js";
67
- import { getWorkflow } from "../workflow-registry.js";
65
+ } from "../runner.ts";
66
+ import { workflowRunPendingTable } from "../tables.ts";
67
+ import { getWorkflow } from "../workflow-registry.ts";
68
68
 
69
69
  const log = createFallbackLogger("workflow-runner");
70
70
 
@@ -1,12 +1,12 @@
1
1
  // Public API of the workflow-runner bundled-feature.
2
2
 
3
- export { workflowRunAggregateId } from "./aggregate-id.js";
4
- export { registerEventTrigger } from "./event-trigger.js";
5
- export { createWorkflowRunnerFeature, workflowRunnerFeature } from "./feature.js";
3
+ export { workflowRunAggregateId } from "./aggregate-id.ts";
4
+ export { registerEventTrigger } from "./event-trigger.ts";
5
+ export { createWorkflowRunnerFeature } from "./feature.ts";
6
6
  export {
7
7
  startAndRunWorkflow,
8
8
  type WorkflowRunCompletedPayload,
9
9
  type WorkflowRunFailedPayload,
10
10
  type WorkflowRunStartedPayload,
11
11
  WorkflowSuspensionUnsupportedError,
12
- } from "./runner.js";
12
+ } from "./runner.ts";
@@ -26,7 +26,7 @@ import {
26
26
  WORKFLOW_WAITING_FOR_EVENT_TYPE,
27
27
  WORKFLOW_WAITING_TYPE,
28
28
  } from "@cosmicdrift/kumiko-framework/engine";
29
- import { workflowRunPendingTable } from "./tables.js";
29
+ import { workflowRunPendingTable } from "./tables.ts";
30
30
 
31
31
  type WaitPayload = {
32
32
  readonly wakeAt: string;
@@ -21,7 +21,8 @@
21
21
  "react": "^19.2.6",
22
22
  "react-dom": "^19.2.6",
23
23
  "zod": "^4.4.3",
24
- "@cosmicdrift/kumiko-locale-de": "workspace:*"
24
+ "@cosmicdrift/kumiko-locale-de": "workspace:*",
25
+ "@cosmicdrift/kumiko-locale-es": "workspace:*"
25
26
  },
26
27
  "devDependencies": {
27
28
  "@cosmicdrift/kumiko-testing": "workspace:*"
@@ -27,3 +27,7 @@ export const TENANT_ADMIN_EMAIL = "a.berger@nordlicht-immobilien.de";
27
27
  export const TENANT_ADMIN_PASSWORD = "nordlicht-berger";
28
28
  export const PLATFORM_ADMIN_EMAIL = "plattform@kumiko.dev";
29
29
  export const PLATFORM_ADMIN_PASSWORD = "kumiko-plattform";
30
+
31
+ // Signs the unsubscribe links of the sample's mails; the e2e signs its own links with it.
32
+ // A real app reads it from its secret store.
33
+ export const UNSUBSCRIBE_SECRET = "ui-walkthrough-unsubscribe-secret-sample-only";
@@ -9,11 +9,18 @@
9
9
  // kein Auto-Mint-JWT mehr. Persistent-DB-Modus über KUMIKO_DEV_DB_NAME
10
10
  // in der Umgebung.
11
11
 
12
+ import { createUnsubscribeRoutes } from "@cosmicdrift/kumiko-bundled-features/delivery";
12
13
  import { runDevApp } from "@cosmicdrift/kumiko-dev-server";
13
14
  import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
14
15
  import { createInMemoryFileProvider } from "@cosmicdrift/kumiko-framework/files";
15
16
  import { APP_FEATURES } from "../run-config";
16
- import { ADMIN_EMAIL, ADMIN_PASSWORD, BETA_TENANT_ID, DEV_TENANT_ID } from "./auth-constants";
17
+ import {
18
+ ADMIN_EMAIL,
19
+ ADMIN_PASSWORD,
20
+ BETA_TENANT_ID,
21
+ DEV_TENANT_ID,
22
+ UNSUBSCRIBE_SECRET,
23
+ } from "./auth-constants";
17
24
  import { seedTasks } from "./seed";
18
25
  import { seedRental } from "./seed-rental";
19
26
  import { seedTemplates } from "./seed-templates";
@@ -33,6 +40,8 @@ await runDevApp({
33
40
  port: Number.parseInt(process.env["PORT"] ?? "4173", 10),
34
41
  // Logo and attachment uploads of the mail editor need a file store.
35
42
  files: { storageProvider: createInMemoryFileProvider() },
43
+ // The pages behind a mail's unsubscribe link, dressed in the tenant's mail look.
44
+ extraRoutes: createUnsubscribeRoutes({ secret: UNSUBSCRIBE_SECRET }),
36
45
  clientEntry: "./src/app/client.tsx",
37
46
  htmlPath: "./public/index.html",
38
47
  watchDirs: ["./src", "../../../packages/*/src"],
@@ -206,7 +206,7 @@ function invoiceIssuedBody(args: {
206
206
  `<h2>Ihre Rechnung ${v("invoiceNumber")}</h2>`,
207
207
  `<p>Guten Tag ${v("recipientName")},</p>`,
208
208
  `<p>${args.intro} ${v("invoiceNumber")} über ${v("invoiceTotal")}.${due} Die Rechnung finden Sie als PDF im Anhang und jederzeit online.</p>`,
209
- '<a data-button href="{{invoiceUrl}}">Rechnung online ansehen</a>',
209
+ `<a data-button href="{{invoiceUrl}}">Rechnung ${v("invoiceNumber")} online ansehen</a>`,
210
210
  LINES_TABLE,
211
211
  "<hr>",
212
212
  "<p>Bei Fragen zur Rechnung antworten Sie einfach auf diese E-Mail.</p>",
@@ -2,45 +2,46 @@ import { defineFeature, templateVariable } from "@cosmicdrift/kumiko-framework/e
2
2
  import { toKeyFirst } from "../translations";
3
3
  import { billingTranslations } from "./i18n";
4
4
 
5
+ // Variable labels are i18n keys, so the designer's rail and chips speak the editor's language.
5
6
  // Both mails are sent by the host app's billing run, not by an event trigger in
6
7
  // this sample; they exist so the template overview has real senders to show.
7
8
  const INVOICE_ISSUED_VARIABLES = {
8
9
  recipientName: templateVariable.text({
9
- label: "Empfängername",
10
+ label: "billing:mail.variable.recipientName",
10
11
  required: true,
11
12
  example: "Familie Yilmaz",
12
13
  }),
13
14
  recipientEmail: templateVariable.text({
14
- label: "Empfänger-Adresse",
15
+ label: "billing:mail.variable.recipientEmail",
15
16
  example: "yilmaz.familie@example.org",
16
17
  }),
17
18
  invoiceNumber: templateVariable.text({
18
- label: "Rechnungsnummer",
19
+ label: "billing:mail.variable.invoiceNumber",
19
20
  required: true,
20
21
  example: "RE-2026-0142",
21
22
  }),
22
23
  invoiceTotal: templateVariable.money({
23
- label: "Rechnungsbetrag",
24
+ label: "billing:mail.variable.invoiceTotal",
24
25
  required: true,
25
26
  example: { amount: 128450, currency: "EUR" },
26
27
  }),
27
28
  dueDate: templateVariable.date({
28
- label: "Fälligkeitsdatum",
29
+ label: "billing:mail.variable.dueDate",
29
30
  required: true,
30
31
  example: "2026-10-30",
31
32
  }),
32
33
  invoiceUrl: templateVariable.link({
33
- label: "Link zur Rechnung",
34
+ label: "billing:mail.variable.invoiceUrl",
34
35
  required: true,
35
36
  example: "https://nordlicht-immobilien.de/rechnungen/RE-2026-0142",
36
37
  }),
37
38
  lines: templateVariable.list(
38
39
  {
39
- description: templateVariable.text({ label: "Bezeichnung" }),
40
- amount: templateVariable.money({ label: "Betrag" }),
40
+ description: templateVariable.text({ label: "billing:mail.variable.lines.description" }),
41
+ amount: templateVariable.money({ label: "billing:mail.variable.lines.amount" }),
41
42
  },
42
43
  {
43
- label: "Rechnungspositionen",
44
+ label: "billing:mail.variable.lines",
44
45
  required: true,
45
46
  example: [
46
47
  { description: "Kaltmiete Oktober 2026, Lindenstraße 14 WE 3", amount: 98000 },
@@ -50,7 +51,7 @@ const INVOICE_ISSUED_VARIABLES = {
50
51
  },
51
52
  ),
52
53
  paymentReference: templateVariable.text({
53
- label: "Zahlungsreferenz",
54
+ label: "billing:mail.variable.paymentReference",
54
55
  example: "RE-2026-0142 / Yilmaz",
55
56
  }),
56
57
  } as const;
@@ -1,7 +1,8 @@
1
1
  import type { TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
2
2
 
3
3
  // The keys follow the document-designer's "used by" lookup:
4
- // `<feature>:feature.label` and `<feature>:notify.<notification>.label`.
4
+ // `<feature>:feature.label` and `<feature>:notify.<notification>.label`. Variable labels
5
+ // are plain keys the notification's variables name in their `label`.
5
6
  export const billingTranslations: TranslationsByLocale = {
6
7
  de: {
7
8
  "billing:feature.label": "Rechnungen",
@@ -9,6 +10,16 @@ export const billingTranslations: TranslationsByLocale = {
9
10
  "billing:notify.invoice-corrected.label": "Rechnung korrigiert",
10
11
  "billing:notify.payment-reminder.label": "Mahnlauf",
11
12
  "billing:notify.terms-changed.label": "AGB-Änderung",
13
+ "billing:mail.variable.recipientName": "Empfängername",
14
+ "billing:mail.variable.recipientEmail": "Empfänger-Adresse",
15
+ "billing:mail.variable.invoiceNumber": "Rechnungsnummer",
16
+ "billing:mail.variable.invoiceTotal": "Rechnungsbetrag",
17
+ "billing:mail.variable.dueDate": "Fälligkeitsdatum",
18
+ "billing:mail.variable.invoiceUrl": "Link zur Rechnung",
19
+ "billing:mail.variable.lines.description": "Bezeichnung",
20
+ "billing:mail.variable.lines.amount": "Betrag",
21
+ "billing:mail.variable.lines": "Rechnungspositionen",
22
+ "billing:mail.variable.paymentReference": "Zahlungsreferenz",
12
23
  },
13
24
  en: {
14
25
  "billing:feature.label": "Invoices",
@@ -16,5 +27,15 @@ export const billingTranslations: TranslationsByLocale = {
16
27
  "billing:notify.invoice-corrected.label": "Invoice corrected",
17
28
  "billing:notify.payment-reminder.label": "Dunning run",
18
29
  "billing:notify.terms-changed.label": "Terms update",
30
+ "billing:mail.variable.recipientName": "Recipient name",
31
+ "billing:mail.variable.recipientEmail": "Recipient address",
32
+ "billing:mail.variable.invoiceNumber": "Invoice number",
33
+ "billing:mail.variable.invoiceTotal": "Invoice total",
34
+ "billing:mail.variable.dueDate": "Due date",
35
+ "billing:mail.variable.invoiceUrl": "Invoice link",
36
+ "billing:mail.variable.lines.description": "Description",
37
+ "billing:mail.variable.lines.amount": "Amount",
38
+ "billing:mail.variable.lines": "Invoice lines",
39
+ "billing:mail.variable.paymentReference": "Payment reference",
19
40
  },
20
41
  };
@@ -14,6 +14,7 @@ import { createRendererFoundationFeature } from "@cosmicdrift/kumiko-bundled-fea
14
14
  import { createTemplateResolverFeature } from "@cosmicdrift/kumiko-bundled-features/template-resolver";
15
15
  import { createDocumentDesignerFeature } from "@cosmicdrift/kumiko-document-designer";
16
16
  import { localeDe } from "@cosmicdrift/kumiko-locale-de";
17
+ import { localeEs } from "@cosmicdrift/kumiko-locale-es";
17
18
  import { createRendererMailHtmlFeature } from "@cosmicdrift/kumiko-renderer-mail-html";
18
19
  import { createRendererPuppeteerClientFeature } from "@cosmicdrift/kumiko-renderer-puppeteer-client";
19
20
  import { TENANT_ADMIN_EMAIL } from "./app/auth-constants";
@@ -24,6 +25,8 @@ import { vehiclesFeature } from "./features/vehicles";
24
25
 
25
26
  export const APP_FEATURES = [
26
27
  localeDe(),
28
+ // Spanish mail copy: subscribers whose mails go out in Spanish land on Spanish unsubscribe pages.
29
+ localeEs(),
27
30
  taskFeature,
28
31
  rentalFeature,
29
32
  vehiclesFeature,
@@ -43,11 +46,17 @@ export const APP_FEATURES = [
43
46
  imprint: { label: "Impressum", url: "https://nordlicht-immobilien.de/impressum" },
44
47
  privacy: { label: "Datenschutz", url: "https://nordlicht-immobilien.de/datenschutz" },
45
48
  }
46
- : {
47
- text: "Sent via the Nordlicht tenant portal",
48
- imprint: { label: "Imprint", url: "https://nordlicht-immobilien.de/imprint" },
49
- privacy: { label: "Privacy", url: "https://nordlicht-immobilien.de/privacy" },
50
- },
49
+ : locale.startsWith("es")
50
+ ? {
51
+ text: "Enviado a través del portal de inquilinos Nordlicht",
52
+ imprint: { label: "Aviso legal", url: "https://nordlicht-immobilien.de/imprint" },
53
+ privacy: { label: "Privacidad", url: "https://nordlicht-immobilien.de/privacy" },
54
+ }
55
+ : {
56
+ text: "Sent via the Nordlicht tenant portal",
57
+ imprint: { label: "Imprint", url: "https://nordlicht-immobilien.de/imprint" },
58
+ privacy: { label: "Privacy", url: "https://nordlicht-immobilien.de/privacy" },
59
+ },
51
60
  }),
52
61
  // The PDF preview of the template editor prints through the puppeteer-service
53
62
  // (PUPPETEER_SERVICE_URL / PUPPETEER_AUTH_TOKEN); the e2e config starts one.
@@ -8,6 +8,7 @@
8
8
  "target": "ESNext",
9
9
  "module": "ESNext",
10
10
  "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
11
12
  "esModuleInterop": true,
12
13
  "skipLibCheck": true,
13
14
  "lib": ["ESNext", "DOM", "DOM.Iterable"],
@@ -1,7 +1,24 @@
1
1
  {
2
2
  "source": "samples/apps/use-all-bundled APP_FEATURES (composeFeatures includeBundled + signup)",
3
- "featureCount": 84,
3
+ "featureCount": 86,
4
4
  "features": [
5
+ {
6
+ "name": "account-security",
7
+ "description": "Self-service account dashboard: MFA enrollment, recovery codes and the user's own sessions, composed from the auth-mfa and sessions screens.",
8
+ "toggleableDefault": null,
9
+ "requires": [
10
+ "sessions",
11
+ "auth-mfa"
12
+ ],
13
+ "optionalRequires": [],
14
+ "configReads": [],
15
+ "exposesApis": [],
16
+ "usesApis": [],
17
+ "extensionsUsed": [],
18
+ "configKeys": [],
19
+ "secrets": [],
20
+ "writeHandlers": []
21
+ },
5
22
  {
6
23
  "name": "admin-shell",
7
24
  "description": "Registers tenant-admin and platform-admin workspaces with provider nav into owner-feature screens (`tenant:screen:members`, `audit:screen:audit-log`, `tenant:screen:tenant-list`, `jobs:screen:job-runs`, optional `tier-engine:screen:tier-admin`, optional `cap-overview:screen:my-caps`/`cap-overview:screen:tenant-cap-list`, optional `document-designer` template navs) and the two overview dashboards, built from the metrics list (`metrics` option, default DEFAULT_METRICS). Mount after user, tenant, audit, jobs, metrics and metrics-system; pass `workspaceIds` to match app URL conventions (e.g. Studio `d`/`s`, PublicStatus `admin`/`sysadmin`). Client: `adminShellClient()`, `tenantClient()`, `auditClient()`, `jobsClient()`, optional `tierEngineClient()`.",
@@ -1329,6 +1346,28 @@
1329
1346
  "secrets": [],
1330
1347
  "writeHandlers": []
1331
1348
  },
1349
+ {
1350
+ "name": "host-routing",
1351
+ "description": "Host- and path-based tenant routing: an authoritative tenant resolver from the subdomain (tenantBy host), a tenant existence check against enabled, active tenants, and the tenant-key query behind createHostDispatch, which picks the HTML file, CSP, locale redirect or 404 per host for runProdApp's hostDispatch.",
1352
+ "toggleableDefault": null,
1353
+ "requires": [
1354
+ "auth-foundation",
1355
+ "tenant"
1356
+ ],
1357
+ "optionalRequires": [],
1358
+ "configReads": [],
1359
+ "exposesApis": [],
1360
+ "usesApis": [],
1361
+ "extensionsUsed": [
1362
+ {
1363
+ "extensionName": "tenantExistence",
1364
+ "entityName": "active-tenant"
1365
+ }
1366
+ ],
1367
+ "configKeys": [],
1368
+ "secrets": [],
1369
+ "writeHandlers": []
1370
+ },
1332
1371
  {
1333
1372
  "name": "inbound-mail-foundation",
1334
1373
  "description": "Plugin host for inbound e-mail (inbox federation) — provider plugins (inbound-provider-imap, later M365 Graph / Gmail REST) register at the `inboundMailProvider` extension point with verify/fetch and optional oauth/watch (live push). The foundation owns three event-sourced streams (mail-account lifecycle, inbound-message with exactly-once ingest via deterministic aggregate ids, mail-thread rollup) and their projections `read_mail_accounts`/`read_inbound_messages`/`read_mail_threads`; PII fields are envelope-encrypted per tenant subject key before every append (crypto-shredding on tenant destroy). Wire `createInboundMailConnectRoutes` (OAuth connect + anonymous callback outside /api) and `createInboundMailSupervisor` (IDLE watch with backoff + reconciliation poll) in bin/server.ts. Consume `inbound-mail-foundation:event:inbound-message-received` from app features to attach business processes.",
@@ -2122,7 +2161,7 @@
2122
2161
  },
2123
2162
  {
2124
2163
  "name": "renderer-mail-html",
2125
- "description": "A `renderer-foundation` plugin that handles `RenderRequest { kind: \"mail\" }` and returns `{ subject, html, text, previewText? }` suitable for sending via `channel-email`. The mail template (`kind: \"mail\"`, document HTML, subject in `meta`) resolves through `template-resolver`'s DB fallback, its body is compiled to Handlebars by template-resolver and rendered with escaping, then placed into an MJML layout (`kind: \"mail-layout\"`, slug `default` unless `meta.layoutSlug` says otherwise, an in-code structured layout with the tenant branding logo and accent color as last resort) that `mjml()` compiles to email-safe table HTML, with `html-to-text` producing the plain-text alternative. An optional `footer` resolver adds the platform imprint, privacy link and footer text below every structured layout, an optional `brandSuffix` resolver adds a word after the tenant name in the brand row of the in-code layout, and an optional `siteUrl` resolver supplies the site link of the card when the tenant branding has no site URL (without either, the link is left out). The brand row and `data-resource=\"logo\"` images use the branding logo upload, or the branding logo https address when no file is uploaded. Mail meta `headerChip`, `tone` and `footerNote` add a chip beside the brand, the tone of the top line and chip, and a note above the site and unsubscribe links of the card. Seed an editable system layout with `seedSystemMailLayout(db)`. Requires `renderer-foundation` + `template-resolver`.",
2164
+ "description": "A `renderer-foundation` plugin that handles `RenderRequest { kind: \"mail\" }` and returns `{ subject, html, text, previewText? }` suitable for sending via `channel-email`. The mail template (`kind: \"mail\"`, document HTML, subject in `meta`) resolves through `template-resolver`'s DB fallback, its body is compiled to Handlebars by template-resolver and rendered with escaping, then placed into an MJML layout (`kind: \"mail-layout\"`, slug `default` unless `meta.layoutSlug` says otherwise, an in-code structured layout with the tenant branding logo and accent color as last resort) that `mjml()` compiles to email-safe table HTML, with `html-to-text` producing the plain-text alternative. An optional `footer` resolver adds the platform imprint, privacy link and footer text below every structured layout, an optional `brandSuffix` resolver adds a word after the tenant name in the brand row of the in-code layout, and an optional `siteUrl` resolver supplies the site link of the card when the tenant branding has no site URL (without either, the link is left out). The brand row and `data-resource=\"logo\"` images use the branding logo upload, or the branding logo https address when no file is uploaded. Mail meta `headerChip`, `tone` and `footerNote` add a chip beside the brand, the tone of the top line and chip, and a note above the site and unsubscribe links of the card. `readMailChrome` hands the same brand row and footer, resolved for one locale, to pages a recipient opens from a mail, such as the unsubscribe page. Seed an editable system layout with `seedSystemMailLayout(db)`. Requires `renderer-foundation` + `template-resolver`.",
2126
2165
  "toggleableDefault": null,
2127
2166
  "requires": [
2128
2167
  "renderer-foundation",
@@ -2191,7 +2230,7 @@
2191
2230
  },
2192
2231
  {
2193
2232
  "name": "secrets",
2194
- "description": "Stores arbitrary per-tenant secrets (API keys, tokens, credentials) encrypted at rest using AES-256 with a KEK loaded from `KUMIKO_SECRETS_MASTER_KEY_V1` (and successive versions for rotation). Read a secret in handlers via `ctx.secrets.get(tenantId, handle)`, which automatically appends a `tenantSecretRead` audit event so every access is traceable. A `rotate` job re-encrypts all envelopes after a KEK version bump. The `set`/`delete`/`list` handlers share one access rule — default { roles: [\"TenantAdmin\"] }; adopt the host's role vocabulary with createSecretsFeature({ roles }) or open it to every authenticated tenant user with { access: { openToAll: { reason } } } (larger blast radius: any tenant member can then read secret previews and write/delete secrets, not just admins). Server-side code writes a tenant secret with `dispatchSystemWrite({ handlerQn: \"secrets:write:set\", payload, tenantId })`: set and delete also admit the in-process system identity, so such writes pass the same declared-key and value checks.",
2233
+ "description": "Stores arbitrary per-tenant secrets (API keys, tokens, credentials) encrypted at rest using AES-256 with a KEK loaded from `KUMIKO_SECRETS_MASTER_KEY_V1` (and successive versions for rotation). Read a secret in handlers via `ctx.secrets.get(tenantId, handle)`, which automatically appends a `tenantSecretRead` audit event so every access is traceable. A `rotate` job re-encrypts all envelopes after a KEK version bump. The `set`/`delete`/`list` handlers share one access rule — default { roles: [\"TenantAdmin\"] }; adopt the host's role vocabulary with createSecretsFeature({ roles }) or open it to every authenticated tenant user with { access: { openToAll: { reason } } } (larger blast radius: any tenant member can then read secret previews and write/delete secrets, not just admins). Server-side code writes a tenant secret with `dispatchSystemWrite({ handlerQn: SecretsHandlers.set, payload, tenantId })`: set and delete also admit the in-process system identity, so such writes pass the same declared-key and value checks.",
2195
2234
  "toggleableDefault": null,
2196
2235
  "requires": [],
2197
2236
  "optionalRequires": [],
@@ -3229,7 +3268,9 @@
3229
3268
  "configKeys": [],
3230
3269
  "secrets": [],
3231
3270
  "writeHandlers": [
3271
+ "waitlist:write:export",
3232
3272
  "waitlist:write:invite",
3273
+ "waitlist:write:purge",
3233
3274
  "waitlist:write:reject",
3234
3275
  "waitlist:write:submit"
3235
3276
  ],
@@ -23,13 +23,12 @@ const FRAMEWORK_ROOT = resolve(ROOT, "..", "..", "..");
23
23
  // Held-back exports: existieren in bundled-features, sind aber nicht
24
24
  // als runtime-feature in use-all-bundled mountbar.
25
25
  //
26
- // Nur Utilities ohne defineFeature (foundation-shared sowie files-provider-s3, der deprecated Alias von file-provider-s3/lib, sind pure helpers)
26
+ // Nur Utilities ohne defineFeature (foundation-shared ist pure helpers)
27
27
  // und scaffold-only Features. Gemountete Features gehören nicht hierher.
28
28
  const EXPECTED_HELD_BACK = new Set([
29
- "files-provider-s3", // deprecated alias of file-provider-s3/lib (createS3Provider helpers), kein defineFeature
30
29
  "foundation-shared", // utilities (requireDefined/requireNonEmpty), kein feature
31
30
  "page-render", // shared HTML render/cache helpers (legal/managed-pages), kein defineFeature
32
- "presets", // feature-bundle helpers (dsgvoSelfServiceFeatures, securityBaselineFeatures), kein defineFeature
31
+ "presets", // deprecated feature-bundle helpers (dsgvoSelfServiceFeatures, securityBaselineFeatures), kein defineFeature
33
32
  ]);
34
33
 
35
34
  // Sub-paths in bundled-features's package.json exports (./tenant/seeding,