@cosmicdrift/kumiko-samples 0.368.0 → 0.370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (927) 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 +13 -0
  203. package/packages/bundled-features/src/channel-email/email-channel.ts +43 -12
  204. package/packages/bundled-features/src/channel-email/env.ts +28 -0
  205. package/packages/bundled-features/src/channel-email/feature.ts +9 -5
  206. package/packages/bundled-features/src/channel-email/index.ts +10 -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/i18n.ts +1 -2
  256. package/packages/bundled-features/src/config/web/index.ts +2 -2
  257. package/packages/bundled-features/src/config/write-helpers.ts +3 -3
  258. package/packages/bundled-features/src/crypto-shredding/changes.json +6 -0
  259. package/packages/bundled-features/src/crypto-shredding/env/index.ts +94 -0
  260. package/packages/bundled-features/src/crypto-shredding/feature.ts +9 -5
  261. package/packages/bundled-features/src/crypto-shredding/handlers/forget-subject.write.ts +6 -6
  262. package/packages/bundled-features/src/crypto-shredding/index.ts +4 -3
  263. package/packages/bundled-features/src/custom-fields/changes.json +8 -0
  264. package/packages/bundled-features/src/custom-fields/executor.ts +1 -1
  265. package/packages/bundled-features/src/custom-fields/feature.ts +10 -13
  266. package/packages/bundled-features/src/custom-fields/handlers/clear-custom-field.write.ts +3 -3
  267. package/packages/bundled-features/src/custom-fields/handlers/define-system-field.write.ts +5 -5
  268. package/packages/bundled-features/src/custom-fields/handlers/define-tenant-field.write.ts +6 -6
  269. package/packages/bundled-features/src/custom-fields/handlers/delete-system-field.write.ts +6 -6
  270. package/packages/bundled-features/src/custom-fields/handlers/delete-tenant-field.write.ts +5 -5
  271. package/packages/bundled-features/src/custom-fields/handlers/set-custom-field.write.ts +4 -4
  272. package/packages/bundled-features/src/custom-fields/handlers/update-tenant-field.write.ts +5 -5
  273. package/packages/bundled-features/src/custom-fields/index.ts +10 -11
  274. package/packages/bundled-features/src/custom-fields/lib/define-or-resurrect.ts +2 -2
  275. package/packages/bundled-features/src/custom-fields/lib/field-access.ts +2 -2
  276. package/packages/bundled-features/src/custom-fields/lib/field-definition-row.ts +1 -1
  277. package/packages/bundled-features/src/custom-fields/lib/quota.ts +1 -1
  278. package/packages/bundled-features/src/custom-fields/lib/value-schema.ts +1 -1
  279. package/packages/bundled-features/src/custom-fields/run-retention.ts +3 -3
  280. package/packages/bundled-features/src/custom-fields/schemas.ts +1 -1
  281. package/packages/bundled-features/src/custom-fields/web/client-plugin.tsx +3 -3
  282. package/packages/bundled-features/src/custom-fields/web/custom-fields-form-section.tsx +1 -1
  283. package/packages/bundled-features/src/custom-fields/web/index.ts +3 -3
  284. package/packages/bundled-features/src/custom-fields/wire-for-entity.ts +4 -4
  285. package/packages/bundled-features/src/custom-fields/wire-user-data-rights.ts +1 -1
  286. package/packages/bundled-features/src/data-retention/_internal/parse-override.ts +2 -2
  287. package/packages/bundled-features/src/data-retention/feature.ts +11 -11
  288. package/packages/bundled-features/src/data-retention/handlers/policy-for.query.ts +2 -2
  289. package/packages/bundled-features/src/data-retention/index.ts +3 -3
  290. package/packages/bundled-features/src/data-retention/resolve-for-tenant.ts +6 -6
  291. package/packages/bundled-features/src/data-retention/resolve-tenant-preset.ts +2 -2
  292. package/packages/bundled-features/src/data-retention/resolver.ts +1 -1
  293. package/packages/bundled-features/src/data-retention/run-retention-cleanup.ts +5 -5
  294. package/packages/bundled-features/src/delivery/address-opt-out.ts +2 -2
  295. package/packages/bundled-features/src/delivery/attachment-ref.ts +3 -3
  296. package/packages/bundled-features/src/delivery/attempt-log-retention.ts +1 -1
  297. package/packages/bundled-features/src/delivery/attempt-log.ts +4 -4
  298. package/packages/bundled-features/src/delivery/changes.json +12 -0
  299. package/packages/bundled-features/src/delivery/channel-context.ts +5 -5
  300. package/packages/bundled-features/src/delivery/chat-webhook-channel.ts +2 -2
  301. package/packages/bundled-features/src/delivery/constants.ts +2 -2
  302. package/packages/bundled-features/src/delivery/db/queries/address-opt-outs.ts +1 -1
  303. package/packages/bundled-features/src/delivery/delivery-service.ts +11 -11
  304. package/packages/bundled-features/src/delivery/events.ts +1 -1
  305. package/packages/bundled-features/src/delivery/feature.ts +16 -14
  306. package/packages/bundled-features/src/delivery/handlers/log.query.ts +4 -4
  307. package/packages/bundled-features/src/delivery/handlers/preferences.query.ts +1 -1
  308. package/packages/bundled-features/src/delivery/handlers/resubscribe-address.write.ts +2 -2
  309. package/packages/bundled-features/src/delivery/handlers/resubscribe-user.write.ts +2 -2
  310. package/packages/bundled-features/src/delivery/handlers/set-preference.write.ts +2 -2
  311. package/packages/bundled-features/src/delivery/handlers/unsubscribe-address.write.ts +2 -2
  312. package/packages/bundled-features/src/delivery/handlers/unsubscribe-page-chrome.query.ts +56 -0
  313. package/packages/bundled-features/src/delivery/handlers/unsubscribe-user.write.ts +2 -2
  314. package/packages/bundled-features/src/delivery/i18n.ts +1 -1
  315. package/packages/bundled-features/src/delivery/index.ts +26 -19
  316. package/packages/bundled-features/src/delivery/jobs.ts +7 -7
  317. package/packages/bundled-features/src/delivery/notify-factory.ts +1 -1
  318. package/packages/bundled-features/src/delivery/public-names.ts +1 -0
  319. package/packages/bundled-features/src/delivery/testing.ts +5 -5
  320. package/packages/bundled-features/src/delivery/types.ts +3 -3
  321. package/packages/bundled-features/src/delivery/unsubscribe-link.ts +4 -4
  322. package/packages/bundled-features/src/delivery/unsubscribe-page-strings.ts +5 -0
  323. package/packages/bundled-features/src/delivery/unsubscribe-page.ts +226 -0
  324. package/packages/bundled-features/src/delivery/unsubscribe.ts +217 -92
  325. package/packages/bundled-features/src/delivery/upsert-preference.ts +1 -1
  326. package/packages/bundled-features/src/delivery/web/client-plugin.tsx +6 -6
  327. package/packages/bundled-features/src/delivery/web/delivery-channel-cell.tsx +1 -1
  328. package/packages/bundled-features/src/delivery/web/delivery-error-cell.tsx +1 -1
  329. package/packages/bundled-features/src/delivery/web/delivery-status-cell.tsx +2 -2
  330. package/packages/bundled-features/src/delivery/web/delivery-type-cell.tsx +1 -1
  331. package/packages/bundled-features/src/delivery/web/index.ts +2 -2
  332. package/packages/bundled-features/src/derivatives-sharp/changes.json +8 -0
  333. package/packages/bundled-features/src/derivatives-sharp/feature.ts +1 -4
  334. package/packages/bundled-features/src/derivatives-sharp/index.ts +2 -2
  335. package/packages/bundled-features/src/derivatives-sharp/render.ts +1 -1
  336. package/packages/bundled-features/src/document-ingest-foundation/boot-checks.ts +2 -2
  337. package/packages/bundled-features/src/document-ingest-foundation/changes.json +8 -0
  338. package/packages/bundled-features/src/document-ingest-foundation/executor.ts +1 -1
  339. package/packages/bundled-features/src/document-ingest-foundation/feature.ts +7 -10
  340. package/packages/bundled-features/src/document-ingest-foundation/forget-extract-with-file-ref.ts +3 -3
  341. package/packages/bundled-features/src/document-ingest-foundation/index.ts +7 -10
  342. package/packages/bundled-features/src/document-ingest-foundation/pages.ts +1 -1
  343. package/packages/bundled-features/src/document-ingest-foundation/providers.ts +1 -1
  344. package/packages/bundled-features/src/document-ingest-foundation/tenant-destroy-hook.ts +2 -2
  345. package/packages/bundled-features/src/document-ingest-foundation/write-document-extract.ts +4 -4
  346. package/packages/bundled-features/src/feature-toggles/compose-tier-resolver.ts +1 -1
  347. package/packages/bundled-features/src/feature-toggles/feature.ts +12 -12
  348. package/packages/bundled-features/src/feature-toggles/handlers/list.query.ts +2 -2
  349. package/packages/bundled-features/src/feature-toggles/handlers/registered.query.ts +2 -2
  350. package/packages/bundled-features/src/feature-toggles/handlers/set.write.ts +3 -3
  351. package/packages/bundled-features/src/feature-toggles/index.ts +3 -3
  352. package/packages/bundled-features/src/feature-toggles/toggle-runtime.ts +2 -2
  353. package/packages/bundled-features/src/feature-toggles/toggle-sync-signal.ts +1 -1
  354. package/packages/bundled-features/src/feature-toggles/web/client-plugin.tsx +2 -2
  355. package/packages/bundled-features/src/feature-toggles/web/index.ts +1 -1
  356. package/packages/bundled-features/src/file-derivatives/changes.json +8 -0
  357. package/packages/bundled-features/src/file-derivatives/feature.ts +2 -5
  358. package/packages/bundled-features/src/file-derivatives/handlers/public-variant-by-file-ref.query.ts +2 -2
  359. package/packages/bundled-features/src/file-derivatives/index.ts +4 -4
  360. package/packages/bundled-features/src/file-foundation/changes.json +8 -0
  361. package/packages/bundled-features/src/file-foundation/feature.ts +0 -3
  362. package/packages/bundled-features/src/file-foundation/index.ts +2 -3
  363. package/packages/bundled-features/src/file-provider-inmemory/changes.json +10 -1
  364. package/packages/bundled-features/src/file-provider-inmemory/feature.ts +0 -3
  365. package/packages/bundled-features/src/file-provider-inmemory/index.ts +1 -2
  366. package/packages/bundled-features/src/file-provider-s3/changes.json +22 -0
  367. package/packages/bundled-features/src/file-provider-s3/env-feature.ts +10 -7
  368. package/packages/bundled-features/src/file-provider-s3/env-schema.ts +71 -0
  369. package/packages/bundled-features/src/file-provider-s3/feature.ts +2 -5
  370. package/packages/bundled-features/src/file-provider-s3/index.ts +2 -2
  371. package/packages/bundled-features/src/file-provider-s3/lib/env-helper.ts +1 -1
  372. package/packages/bundled-features/src/file-provider-s3/lib/index.ts +3 -3
  373. package/packages/bundled-features/src/files/index.ts +1 -1
  374. package/packages/bundled-features/src/files-tenant-data/handlers/sweep-orphaned-derivatives.job.ts +2 -2
  375. package/packages/bundled-features/src/files-tenant-data/hooks.ts +1 -1
  376. package/packages/bundled-features/src/files-tenant-data/index.ts +4 -4
  377. package/packages/bundled-features/src/folders/changes.json +8 -0
  378. package/packages/bundled-features/src/folders/executor.ts +1 -1
  379. package/packages/bundled-features/src/folders/feature.ts +6 -9
  380. package/packages/bundled-features/src/folders/handlers/clear-folder.write.ts +5 -5
  381. package/packages/bundled-features/src/folders/handlers/delete-folder.write.ts +3 -3
  382. package/packages/bundled-features/src/folders/handlers/set-folder.write.ts +5 -5
  383. package/packages/bundled-features/src/folders/index.ts +7 -8
  384. package/packages/bundled-features/src/folders/web/client-plugin.tsx +3 -3
  385. package/packages/bundled-features/src/folders/web/folder-manager.tsx +2 -2
  386. package/packages/bundled-features/src/folders/web/folder-section.tsx +2 -2
  387. package/packages/bundled-features/src/folders/web/index.ts +5 -5
  388. package/packages/bundled-features/src/folders-user-data/changes.json +10 -1
  389. package/packages/bundled-features/src/folders-user-data/hooks.ts +1 -1
  390. package/packages/bundled-features/src/folders-user-data/index.ts +1 -4
  391. package/packages/bundled-features/src/form-draft/changes.json +8 -0
  392. package/packages/bundled-features/src/form-draft/db/queries/cleanup.ts +1 -1
  393. package/packages/bundled-features/src/form-draft/entity.ts +1 -1
  394. package/packages/bundled-features/src/form-draft/executor.ts +1 -1
  395. package/packages/bundled-features/src/form-draft/feature.ts +7 -10
  396. package/packages/bundled-features/src/form-draft/handlers/cleanup.job.ts +4 -4
  397. package/packages/bundled-features/src/form-draft/handlers/discard.write.ts +6 -6
  398. package/packages/bundled-features/src/form-draft/handlers/get.query.ts +4 -4
  399. package/packages/bundled-features/src/form-draft/handlers/list.query.ts +3 -3
  400. package/packages/bundled-features/src/form-draft/handlers/save.write.ts +5 -5
  401. package/packages/bundled-features/src/form-draft/index.ts +10 -10
  402. package/packages/bundled-features/src/form-draft/lookup.ts +2 -2
  403. package/packages/bundled-features/src/form-draft/release-file-refs.ts +1 -1
  404. package/packages/bundled-features/src/form-draft/schemas.ts +1 -1
  405. package/packages/bundled-features/src/form-draft-user-data/changes.json +10 -1
  406. package/packages/bundled-features/src/form-draft-user-data/hooks.ts +1 -1
  407. package/packages/bundled-features/src/form-draft-user-data/index.ts +1 -4
  408. package/packages/bundled-features/src/foundation-shared/build-info-env.ts +16 -0
  409. package/packages/bundled-features/src/foundation-shared/changes.json +8 -1
  410. package/packages/bundled-features/src/foundation-shared/demo-admin-env.ts +24 -0
  411. package/packages/bundled-features/src/foundation-shared/index.ts +5 -3
  412. package/packages/bundled-features/src/foundation-shared/mail-host-policy.ts +1 -1
  413. package/packages/bundled-features/src/host-routing/README.md +89 -0
  414. package/packages/bundled-features/src/host-routing/changes.json +8 -0
  415. package/packages/bundled-features/src/host-routing/constants.ts +24 -0
  416. package/packages/bundled-features/src/host-routing/dispatch.ts +130 -0
  417. package/packages/bundled-features/src/host-routing/feature.ts +146 -0
  418. package/packages/bundled-features/src/host-routing/host.ts +42 -0
  419. package/packages/bundled-features/src/host-routing/index.ts +21 -0
  420. package/packages/bundled-features/src/host-routing/options.ts +43 -0
  421. package/packages/bundled-features/src/host-routing/validate-options.ts +38 -0
  422. package/packages/bundled-features/src/inbound-mail-foundation/changes.json +8 -0
  423. package/packages/bundled-features/src/inbound-mail-foundation/connect-routes.ts +5 -5
  424. package/packages/bundled-features/src/inbound-mail-foundation/events.ts +1 -1
  425. package/packages/bundled-features/src/inbound-mail-foundation/feature.ts +12 -15
  426. package/packages/bundled-features/src/inbound-mail-foundation/handlers/account-state.ts +1 -1
  427. package/packages/bundled-features/src/inbound-mail-foundation/handlers/connect-account.write.ts +3 -3
  428. package/packages/bundled-features/src/inbound-mail-foundation/handlers/disconnect-account.write.ts +3 -3
  429. package/packages/bundled-features/src/inbound-mail-foundation/handlers/ingest-message.write.ts +4 -4
  430. package/packages/bundled-features/src/inbound-mail-foundation/handlers/list-accounts.query.ts +3 -3
  431. package/packages/bundled-features/src/inbound-mail-foundation/handlers/list-messages.query.ts +3 -3
  432. package/packages/bundled-features/src/inbound-mail-foundation/handlers/update-account.write.ts +3 -3
  433. package/packages/bundled-features/src/inbound-mail-foundation/index.ts +12 -12
  434. package/packages/bundled-features/src/inbound-mail-foundation/oauth-access-token.ts +2 -2
  435. package/packages/bundled-features/src/inbound-mail-foundation/projection.ts +2 -2
  436. package/packages/bundled-features/src/inbound-mail-foundation/provider-factory.ts +2 -2
  437. package/packages/bundled-features/src/inbound-mail-foundation/retention-sweep.ts +3 -3
  438. package/packages/bundled-features/src/inbound-mail-foundation/tenant-destroy-hook.ts +3 -3
  439. package/packages/bundled-features/src/inbound-mail-foundation/types.ts +1 -1
  440. package/packages/bundled-features/src/inbound-mail-foundation/watch-supervisor.ts +6 -6
  441. package/packages/bundled-features/src/inbound-provider-imap/changes.json +8 -0
  442. package/packages/bundled-features/src/inbound-provider-imap/feature.ts +3 -6
  443. package/packages/bundled-features/src/inbound-provider-imap/imap-client.ts +1 -1
  444. package/packages/bundled-features/src/inbound-provider-imap/index.ts +3 -4
  445. package/packages/bundled-features/src/inbound-provider-inmemory/changes.json +10 -1
  446. package/packages/bundled-features/src/inbound-provider-inmemory/feature.ts +0 -3
  447. package/packages/bundled-features/src/inbound-provider-inmemory/index.ts +1 -2
  448. package/packages/bundled-features/src/jobs/db/queries/retention.ts +3 -3
  449. package/packages/bundled-features/src/jobs/db/queries/stale-run-sweep.ts +5 -5
  450. package/packages/bundled-features/src/jobs/feature.ts +16 -16
  451. package/packages/bundled-features/src/jobs/handlers/catalog.query.ts +1 -1
  452. package/packages/bundled-features/src/jobs/handlers/detail.query.ts +2 -2
  453. package/packages/bundled-features/src/jobs/handlers/list.query.ts +2 -2
  454. package/packages/bundled-features/src/jobs/handlers/retention-cleanup.job.ts +1 -1
  455. package/packages/bundled-features/src/jobs/handlers/retry.write.ts +3 -3
  456. package/packages/bundled-features/src/jobs/handlers/stale-run-sweep.job.ts +1 -1
  457. package/packages/bundled-features/src/jobs/handlers/tenant-failures.query.ts +1 -1
  458. package/packages/bundled-features/src/jobs/handlers/tenant-runs.query.ts +1 -1
  459. package/packages/bundled-features/src/jobs/handlers/trigger.write.ts +2 -2
  460. package/packages/bundled-features/src/jobs/index.ts +9 -9
  461. package/packages/bundled-features/src/jobs/job-run-logger.ts +6 -6
  462. package/packages/bundled-features/src/jobs/web/client-plugin.tsx +2 -2
  463. package/packages/bundled-features/src/jobs/web/i18n.ts +1 -1
  464. package/packages/bundled-features/src/jobs/web/index.ts +1 -1
  465. package/packages/bundled-features/src/ledger/changes.json +8 -0
  466. package/packages/bundled-features/src/ledger/entity.ts +1 -1
  467. package/packages/bundled-features/src/ledger/executor.ts +1 -1
  468. package/packages/bundled-features/src/ledger/feature.ts +7 -10
  469. package/packages/bundled-features/src/ledger/handlers/confirm-schedule-period.write.ts +5 -5
  470. package/packages/bundled-features/src/ledger/handlers/create-transaction.write.ts +3 -3
  471. package/packages/bundled-features/src/ledger/handlers/reports.query.ts +3 -3
  472. package/packages/bundled-features/src/ledger/handlers/reverse-transaction.write.ts +5 -5
  473. package/packages/bundled-features/src/ledger/index.ts +10 -11
  474. package/packages/bundled-features/src/ledger/recurring.ts +2 -2
  475. package/packages/bundled-features/src/ledger/reports.ts +2 -2
  476. package/packages/bundled-features/src/ledger/schemas.ts +1 -1
  477. package/packages/bundled-features/src/ledger/web/index.ts +3 -3
  478. package/packages/bundled-features/src/legal-pages/README.md +39 -0
  479. package/packages/bundled-features/src/legal-pages/changes.json +6 -0
  480. package/packages/bundled-features/src/legal-pages/constants.ts +22 -0
  481. package/packages/bundled-features/src/legal-pages/feature.ts +14 -7
  482. package/packages/bundled-features/src/legal-pages/index.ts +12 -3
  483. package/packages/bundled-features/src/legal-pages/layout.ts +45 -0
  484. package/packages/bundled-features/src/legal-pages/lib/boot-check.ts +1 -1
  485. package/packages/bundled-features/src/legal-pages/lib/validate-routes.ts +1 -1
  486. package/packages/bundled-features/src/legal-pages/markdown.ts +2 -2
  487. package/packages/bundled-features/src/legal-pages/seed.ts +53 -0
  488. package/packages/bundled-features/src/legal-pages/web/client-plugin.ts +1 -1
  489. package/packages/bundled-features/src/legal-pages/web/index.ts +1 -1
  490. package/packages/bundled-features/src/mail-foundation/changes.json +10 -1
  491. package/packages/bundled-features/src/mail-foundation/feature.ts +21 -15
  492. package/packages/bundled-features/src/mail-foundation/i18n.ts +8 -0
  493. package/packages/bundled-features/src/mail-foundation/index.ts +1 -2
  494. package/packages/bundled-features/src/mail-transport-inmemory/changes.json +10 -1
  495. package/packages/bundled-features/src/mail-transport-inmemory/feature.ts +6 -3
  496. package/packages/bundled-features/src/mail-transport-inmemory/index.ts +1 -2
  497. package/packages/bundled-features/src/mail-transport-smtp/changes.json +15 -0
  498. package/packages/bundled-features/src/mail-transport-smtp/config-keys.ts +67 -0
  499. package/packages/bundled-features/src/mail-transport-smtp/feature.ts +6 -36
  500. package/packages/bundled-features/src/mail-transport-smtp/i18n.ts +28 -0
  501. package/packages/bundled-features/src/mail-transport-smtp/index.ts +1 -2
  502. package/packages/bundled-features/src/managed-pages/branding.ts +1 -1
  503. package/packages/bundled-features/src/managed-pages/css-gate.ts +1 -1
  504. package/packages/bundled-features/src/managed-pages/feature.ts +12 -12
  505. package/packages/bundled-features/src/managed-pages/handlers/branding.query.ts +1 -1
  506. package/packages/bundled-features/src/managed-pages/handlers/by-slug.query.ts +1 -1
  507. package/packages/bundled-features/src/managed-pages/handlers/by-tenant-published.query.ts +1 -1
  508. package/packages/bundled-features/src/managed-pages/handlers/page-crud.ts +1 -1
  509. package/packages/bundled-features/src/managed-pages/handlers/set.write.ts +2 -2
  510. package/packages/bundled-features/src/managed-pages/index.ts +5 -5
  511. package/packages/bundled-features/src/managed-pages/screens/branding-screen.ts +1 -1
  512. package/packages/bundled-features/src/managed-pages/seeding.ts +1 -1
  513. package/packages/bundled-features/src/managed-pages/web/client-plugin.tsx +1 -1
  514. package/packages/bundled-features/src/managed-pages/web/i18n.ts +1 -1
  515. package/packages/bundled-features/src/managed-pages/web/index.ts +2 -2
  516. package/packages/bundled-features/src/metrics/compute.ts +3 -3
  517. package/packages/bundled-features/src/metrics/default-metrics.ts +5 -5
  518. package/packages/bundled-features/src/metrics/feature.ts +7 -7
  519. package/packages/bundled-features/src/metrics/filters.ts +1 -1
  520. package/packages/bundled-features/src/metrics/index.ts +5 -5
  521. package/packages/bundled-features/src/metrics/types.ts +1 -1
  522. package/packages/bundled-features/src/metrics/validate.ts +3 -3
  523. package/packages/bundled-features/src/metrics/window.ts +2 -2
  524. package/packages/bundled-features/src/notes-history/changes.json +8 -0
  525. package/packages/bundled-features/src/notes-history/executor.ts +1 -1
  526. package/packages/bundled-features/src/notes-history/feature.ts +6 -9
  527. package/packages/bundled-features/src/notes-history/handlers/add-note.write.ts +6 -6
  528. package/packages/bundled-features/src/notes-history/index.ts +6 -7
  529. package/packages/bundled-features/src/notes-history/web/client-plugin.tsx +3 -3
  530. package/packages/bundled-features/src/notes-history/web/index.ts +3 -3
  531. package/packages/bundled-features/src/notes-history/web/notes-section.tsx +1 -1
  532. package/packages/bundled-features/src/notes-history-user-data/changes.json +8 -0
  533. package/packages/bundled-features/src/notes-history-user-data/hooks.ts +1 -1
  534. package/packages/bundled-features/src/notes-history-user-data/index.ts +2 -5
  535. package/packages/bundled-features/src/page-render/cached-page-response.ts +1 -1
  536. package/packages/bundled-features/src/page-render/index.ts +7 -7
  537. package/packages/bundled-features/src/page-render/layout.ts +2 -2
  538. package/packages/bundled-features/src/page-render/web.ts +5 -5
  539. package/packages/bundled-features/src/personal-access-tokens/feature.ts +13 -13
  540. package/packages/bundled-features/src/personal-access-tokens/handlers/available-scopes.query.ts +1 -1
  541. package/packages/bundled-features/src/personal-access-tokens/handlers/create.write.ts +5 -5
  542. package/packages/bundled-features/src/personal-access-tokens/handlers/list.query.ts +3 -3
  543. package/packages/bundled-features/src/personal-access-tokens/handlers/revoke.write.ts +3 -3
  544. package/packages/bundled-features/src/personal-access-tokens/hash.ts +1 -1
  545. package/packages/bundled-features/src/personal-access-tokens/i18n.ts +2 -2
  546. package/packages/bundled-features/src/personal-access-tokens/index.ts +13 -13
  547. package/packages/bundled-features/src/personal-access-tokens/resolver.ts +5 -5
  548. package/packages/bundled-features/src/personal-access-tokens/revoke-for-user.ts +2 -2
  549. package/packages/bundled-features/src/personal-access-tokens/roles.ts +2 -2
  550. package/packages/bundled-features/src/personal-access-tokens/schema/api-token.ts +1 -1
  551. package/packages/bundled-features/src/personal-access-tokens/screens.ts +2 -2
  552. package/packages/bundled-features/src/presets/changes.json +6 -0
  553. package/packages/bundled-features/src/presets/dsgvo-self-service.ts +7 -5
  554. package/packages/bundled-features/src/presets/index.ts +2 -2
  555. package/packages/bundled-features/src/presets/security-baseline.ts +6 -4
  556. package/packages/bundled-features/src/rate-limiting/feature.ts +2 -2
  557. package/packages/bundled-features/src/rate-limiting/handlers/bucket-access.ts +1 -1
  558. package/packages/bundled-features/src/rate-limiting/handlers/status.query.ts +2 -2
  559. package/packages/bundled-features/src/rate-limiting/index.ts +2 -2
  560. package/packages/bundled-features/src/readiness/changes.json +10 -1
  561. package/packages/bundled-features/src/readiness/feature.ts +1 -4
  562. package/packages/bundled-features/src/readiness/handlers/status.query.ts +1 -1
  563. package/packages/bundled-features/src/readiness/index.ts +3 -3
  564. package/packages/bundled-features/src/renderer-foundation/api.ts +2 -2
  565. package/packages/bundled-features/src/renderer-foundation/constants.ts +2 -2
  566. package/packages/bundled-features/src/renderer-foundation/feature.ts +2 -2
  567. package/packages/bundled-features/src/renderer-foundation/index.ts +8 -5
  568. package/packages/bundled-features/src/renderer-foundation/types.ts +22 -2
  569. package/packages/bundled-features/src/renderer-pdf/feature.ts +2 -2
  570. package/packages/bundled-features/src/renderer-pdf/index.ts +2 -2
  571. package/packages/bundled-features/src/renderer-pdf/render-table-pdf.ts +2 -2
  572. package/packages/bundled-features/src/secrets/changes.json +18 -0
  573. package/packages/bundled-features/src/secrets/constants.ts +9 -0
  574. package/packages/bundled-features/src/secrets/db/queries/read.ts +1 -1
  575. package/packages/bundled-features/src/secrets/feature.ts +34 -15
  576. package/packages/bundled-features/src/secrets/handlers/delete.write.ts +8 -5
  577. package/packages/bundled-features/src/secrets/handlers/list.query.ts +2 -2
  578. package/packages/bundled-features/src/secrets/handlers/rotate.job.ts +2 -2
  579. package/packages/bundled-features/src/secrets/handlers/set.write.ts +8 -5
  580. package/packages/bundled-features/src/secrets/i18n.ts +1 -1
  581. package/packages/bundled-features/src/secrets/index.ts +9 -7
  582. package/packages/bundled-features/src/secrets/secrets-context.ts +3 -3
  583. package/packages/bundled-features/src/secrets/write-gate.ts +1 -1
  584. package/packages/bundled-features/src/seo/feature.ts +8 -8
  585. package/packages/bundled-features/src/seo/handlers/seo-config.query.ts +1 -1
  586. package/packages/bundled-features/src/seo/index.ts +6 -6
  587. package/packages/bundled-features/src/sessions/feature.ts +13 -13
  588. package/packages/bundled-features/src/sessions/handlers/cleanup.job.ts +1 -1
  589. package/packages/bundled-features/src/sessions/handlers/detail.query.ts +2 -2
  590. package/packages/bundled-features/src/sessions/handlers/list.query.ts +2 -2
  591. package/packages/bundled-features/src/sessions/handlers/mine.query.ts +2 -2
  592. package/packages/bundled-features/src/sessions/handlers/revoke-all-for-user.write.ts +2 -2
  593. package/packages/bundled-features/src/sessions/handlers/revoke-all-others.write.ts +3 -3
  594. package/packages/bundled-features/src/sessions/handlers/revoke.write.ts +3 -3
  595. package/packages/bundled-features/src/sessions/index.ts +8 -8
  596. package/packages/bundled-features/src/sessions/schema/user-session.ts +1 -1
  597. package/packages/bundled-features/src/sessions/screens.ts +1 -1
  598. package/packages/bundled-features/src/sessions/session-callbacks.ts +6 -6
  599. package/packages/bundled-features/src/sessions/testing.ts +1 -1
  600. package/packages/bundled-features/src/shared/index.ts +31 -31
  601. package/packages/bundled-features/src/shared/password-hashing.ts +1 -1
  602. package/packages/bundled-features/src/shared/row-bound-grant.ts +1 -1
  603. package/packages/bundled-features/src/step-dispatcher/deliver-dispatch-request.ts +4 -4
  604. package/packages/bundled-features/src/step-dispatcher/dispatch-payload.ts +2 -2
  605. package/packages/bundled-features/src/step-dispatcher/feature.ts +3 -3
  606. package/packages/bundled-features/src/step-dispatcher/index.ts +3 -3
  607. package/packages/bundled-features/src/step-dispatcher/webhook-runner.ts +1 -1
  608. package/packages/bundled-features/src/subscription-mollie/feature.ts +3 -3
  609. package/packages/bundled-features/src/subscription-mollie/index.ts +3 -3
  610. package/packages/bundled-features/src/subscription-mollie/verify-webhook.ts +2 -2
  611. package/packages/bundled-features/src/subscription-stripe/changes.json +6 -0
  612. package/packages/bundled-features/src/subscription-stripe/feature.ts +34 -6
  613. package/packages/bundled-features/src/subscription-stripe/index.ts +3 -2
  614. package/packages/bundled-features/src/subscription-stripe/plugin-methods.ts +2 -2
  615. package/packages/bundled-features/src/subscription-stripe/runtime.ts +1 -1
  616. package/packages/bundled-features/src/subscription-stripe/verify-webhook.ts +2 -2
  617. package/packages/bundled-features/src/tags/changes.json +8 -0
  618. package/packages/bundled-features/src/tags/executor.ts +1 -1
  619. package/packages/bundled-features/src/tags/feature.ts +11 -14
  620. package/packages/bundled-features/src/tags/handlers/assign-tag.write.ts +5 -5
  621. package/packages/bundled-features/src/tags/handlers/create-tag.write.ts +3 -3
  622. package/packages/bundled-features/src/tags/handlers/delete-tag.write.ts +3 -3
  623. package/packages/bundled-features/src/tags/handlers/remove-tag.write.ts +5 -5
  624. package/packages/bundled-features/src/tags/handlers/update-tag.write.ts +3 -3
  625. package/packages/bundled-features/src/tags/index.ts +11 -11
  626. package/packages/bundled-features/src/tags/screens.ts +1 -1
  627. package/packages/bundled-features/src/tags/web/client-plugin.tsx +5 -5
  628. package/packages/bundled-features/src/tags/web/entity-tags.tsx +2 -2
  629. package/packages/bundled-features/src/tags/web/index.ts +9 -9
  630. package/packages/bundled-features/src/tags/web/tag-filter.tsx +3 -3
  631. package/packages/bundled-features/src/tags/web/tag-manager.tsx +2 -2
  632. package/packages/bundled-features/src/tags/web/tag-picker.tsx +1 -1
  633. package/packages/bundled-features/src/tags/web/tag-section.tsx +3 -3
  634. package/packages/bundled-features/src/tags/web/tags-cell.tsx +2 -2
  635. package/packages/bundled-features/src/template-resolver/api.ts +7 -7
  636. package/packages/bundled-features/src/template-resolver/changes.json +6 -0
  637. package/packages/bundled-features/src/template-resolver/compile-document-body.ts +4 -4
  638. package/packages/bundled-features/src/template-resolver/compile-steps-block.ts +3 -3
  639. package/packages/bundled-features/src/template-resolver/constants.ts +1 -2
  640. package/packages/bundled-features/src/template-resolver/document-sanitizer.ts +4 -4
  641. package/packages/bundled-features/src/template-resolver/document-schema.ts +1 -1
  642. package/packages/bundled-features/src/template-resolver/feature.ts +31 -31
  643. package/packages/bundled-features/src/template-resolver/handlers/bundle-import.ts +11 -11
  644. package/packages/bundled-features/src/template-resolver/handlers/by-slug.query.ts +2 -2
  645. package/packages/bundled-features/src/template-resolver/handlers/by-tenant.query.ts +2 -2
  646. package/packages/bundled-features/src/template-resolver/handlers/collection-item.query.ts +1 -1
  647. package/packages/bundled-features/src/template-resolver/handlers/collection-list.query.ts +1 -1
  648. package/packages/bundled-features/src/template-resolver/handlers/collection-set.write.ts +5 -5
  649. package/packages/bundled-features/src/template-resolver/handlers/collection-shared.ts +2 -2
  650. package/packages/bundled-features/src/template-resolver/handlers/copy-locale.write.ts +13 -13
  651. package/packages/bundled-features/src/template-resolver/handlers/diff-to-system.query.ts +3 -3
  652. package/packages/bundled-features/src/template-resolver/handlers/discard-draft.write.ts +3 -3
  653. package/packages/bundled-features/src/template-resolver/handlers/export-bundle.query.ts +7 -7
  654. package/packages/bundled-features/src/template-resolver/handlers/find-by-id.query.ts +3 -3
  655. package/packages/bundled-features/src/template-resolver/handlers/import-bundle-system.write.ts +2 -2
  656. package/packages/bundled-features/src/template-resolver/handlers/import-bundle.write.ts +2 -2
  657. package/packages/bundled-features/src/template-resolver/handlers/layout-source.query.ts +7 -7
  658. package/packages/bundled-features/src/template-resolver/handlers/list.query.ts +4 -4
  659. package/packages/bundled-features/src/template-resolver/handlers/override-diff.ts +3 -3
  660. package/packages/bundled-features/src/template-resolver/handlers/overview.query.ts +6 -6
  661. package/packages/bundled-features/src/template-resolver/handlers/preview.query.ts +2 -2
  662. package/packages/bundled-features/src/template-resolver/handlers/reset-to-system.write.ts +3 -3
  663. package/packages/bundled-features/src/template-resolver/handlers/resource-link-pdf.write.ts +2 -2
  664. package/packages/bundled-features/src/template-resolver/handlers/resource-remove.write.ts +5 -5
  665. package/packages/bundled-features/src/template-resolver/handlers/resource-shared.ts +1 -1
  666. package/packages/bundled-features/src/template-resolver/handlers/resource-upload.write.ts +5 -5
  667. package/packages/bundled-features/src/template-resolver/handlers/send-test.write.ts +9 -7
  668. package/packages/bundled-features/src/template-resolver/handlers/set.write.ts +7 -7
  669. package/packages/bundled-features/src/template-resolver/handlers/shared.ts +3 -3
  670. package/packages/bundled-features/src/template-resolver/handlers/template-gates.ts +7 -7
  671. package/packages/bundled-features/src/template-resolver/handlers/template-write.ts +10 -10
  672. package/packages/bundled-features/src/template-resolver/handlers/tenant-overrides.query.ts +5 -5
  673. package/packages/bundled-features/src/template-resolver/handlers/toggle-status.write.ts +6 -6
  674. package/packages/bundled-features/src/template-resolver/handlers/upsert-system.write.ts +3 -3
  675. package/packages/bundled-features/src/template-resolver/handlers/upsert-tenant.write.ts +3 -3
  676. package/packages/bundled-features/src/template-resolver/handlers/usage.query.ts +5 -5
  677. package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +8 -8
  678. package/packages/bundled-features/src/template-resolver/index.ts +25 -25
  679. package/packages/bundled-features/src/template-resolver/layout-appearance.ts +2 -2
  680. package/packages/bundled-features/src/template-resolver/layout-regions.ts +2 -2
  681. package/packages/bundled-features/src/template-resolver/linked-resources.ts +2 -2
  682. package/packages/bundled-features/src/template-resolver/preview-display-html.ts +1 -1
  683. package/packages/bundled-features/src/template-resolver/print-document.ts +1 -1
  684. package/packages/bundled-features/src/template-resolver/resource-image.ts +1 -1
  685. package/packages/bundled-features/src/template-resolver/seeding.ts +10 -10
  686. package/packages/bundled-features/src/template-resolver/store-template-resource.ts +10 -10
  687. package/packages/bundled-features/src/template-resolver/table.ts +1 -1
  688. package/packages/bundled-features/src/template-resolver/template-bundle.ts +4 -4
  689. package/packages/bundled-features/src/template-resolver/template-diff.ts +1 -1
  690. package/packages/bundled-features/src/template-resolver/template-draft.ts +2 -2
  691. package/packages/bundled-features/src/template-resolver/template-meta.ts +2 -2
  692. package/packages/bundled-features/src/template-resolver/template-preview.ts +40 -25
  693. package/packages/bundled-features/src/template-resolver/template-resources.ts +4 -4
  694. package/packages/bundled-features/src/template-resolver/template-system-only.ts +1 -1
  695. package/packages/bundled-features/src/template-resolver/template-usage.ts +4 -1
  696. package/packages/bundled-features/src/template-resolver/template-validation.ts +3 -3
  697. package/packages/bundled-features/src/template-resolver/testing.ts +4 -4
  698. package/packages/bundled-features/src/template-resolver/user-content-table.ts +2 -2
  699. package/packages/bundled-features/src/template-resolver/web/client-plugin.tsx +4 -4
  700. package/packages/bundled-features/src/template-resolver/web/document-editor-extensions.ts +8 -5
  701. package/packages/bundled-features/src/template-resolver/web/document-editor.tsx +2 -2
  702. package/packages/bundled-features/src/template-resolver/web/document-tiptap-editor.tsx +30 -11
  703. package/packages/bundled-features/src/template-resolver/web/editor-handle.ts +2 -2
  704. package/packages/bundled-features/src/template-resolver/web/index.ts +7 -7
  705. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor-lazy.tsx +3 -3
  706. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor.tsx +6 -6
  707. package/packages/bundled-features/src/template-resolver/web/placeholder-text.ts +1 -1
  708. package/packages/bundled-features/src/template-resolver-user-data/changes.json +10 -0
  709. package/packages/bundled-features/src/template-resolver-user-data/hooks.ts +1 -1
  710. package/packages/bundled-features/src/template-resolver-user-data/index.ts +1 -4
  711. package/packages/bundled-features/src/tenant/cancel-pending-invitation.ts +2 -2
  712. package/packages/bundled-features/src/tenant/command-schemas.ts +6 -6
  713. package/packages/bundled-features/src/tenant/decrypt-tenant-names.ts +1 -1
  714. package/packages/bundled-features/src/tenant/feature.ts +24 -24
  715. package/packages/bundled-features/src/tenant/handlers/active-tenant-ids.query.ts +1 -1
  716. package/packages/bundled-features/src/tenant/handlers/add-member.write.ts +3 -3
  717. package/packages/bundled-features/src/tenant/handlers/cancel-invitation.write.ts +2 -2
  718. package/packages/bundled-features/src/tenant/handlers/create.write.ts +1 -1
  719. package/packages/bundled-features/src/tenant/handlers/invitations.query.ts +3 -3
  720. package/packages/bundled-features/src/tenant/handlers/list.query.ts +1 -1
  721. package/packages/bundled-features/src/tenant/handlers/me.query.ts +2 -2
  722. package/packages/bundled-features/src/tenant/handlers/member-directory.query.ts +4 -4
  723. package/packages/bundled-features/src/tenant/handlers/member-role-availability.query.ts +1 -1
  724. package/packages/bundled-features/src/tenant/handlers/members.query.ts +3 -3
  725. package/packages/bundled-features/src/tenant/handlers/memberships.query.ts +3 -3
  726. package/packages/bundled-features/src/tenant/handlers/remove-member.write.ts +6 -6
  727. package/packages/bundled-features/src/tenant/handlers/resolve-user-ids.query.ts +1 -1
  728. package/packages/bundled-features/src/tenant/handlers/team-list.query.ts +5 -5
  729. package/packages/bundled-features/src/tenant/handlers/tenant-directory.query.ts +3 -3
  730. package/packages/bundled-features/src/tenant/handlers/toggle-enabled.write.ts +1 -1
  731. package/packages/bundled-features/src/tenant/handlers/update-member-roles.write.ts +3 -3
  732. package/packages/bundled-features/src/tenant/handlers/update.write.ts +1 -1
  733. package/packages/bundled-features/src/tenant/index.ts +10 -10
  734. package/packages/bundled-features/src/tenant/invitation-table.ts +1 -1
  735. package/packages/bundled-features/src/tenant/invited-membership.ts +4 -4
  736. package/packages/bundled-features/src/tenant/is-tenant-serving-public-content.ts +1 -1
  737. package/packages/bundled-features/src/tenant/last-tenant-admin.ts +2 -2
  738. package/packages/bundled-features/src/tenant/member-role-options.ts +1 -1
  739. package/packages/bundled-features/src/tenant/screens.ts +2 -2
  740. package/packages/bundled-features/src/tenant/seeding.ts +3 -3
  741. package/packages/bundled-features/src/tenant/testing.ts +1 -1
  742. package/packages/bundled-features/src/tenant/web/client-plugin.tsx +3 -3
  743. package/packages/bundled-features/src/tenant/web/index.ts +3 -3
  744. package/packages/bundled-features/src/tenant/web/member-roles-cell.tsx +1 -1
  745. package/packages/bundled-features/src/tenant/web/member-status-cell.tsx +1 -1
  746. package/packages/bundled-features/src/tenant-handover/feature.ts +4 -4
  747. package/packages/bundled-features/src/tenant-handover/grant.ts +1 -1
  748. package/packages/bundled-features/src/tenant-handover/handlers/claim.write.ts +5 -5
  749. package/packages/bundled-features/src/tenant-handover/index.ts +3 -3
  750. package/packages/bundled-features/src/tenant-handover/move-entity-graph.ts +1 -1
  751. package/packages/bundled-features/src/tenant-handover/root-anchor.ts +1 -1
  752. package/packages/bundled-features/src/tenant-handover/signup-handover-provider.ts +5 -5
  753. package/packages/bundled-features/src/tenant-lifecycle/boot-checks.ts +1 -1
  754. package/packages/bundled-features/src/tenant-lifecycle/feature.ts +8 -8
  755. package/packages/bundled-features/src/tenant-lifecycle/handlers/cancel-destruction.write.ts +4 -4
  756. package/packages/bundled-features/src/tenant-lifecycle/handlers/request-destruction.write.ts +5 -5
  757. package/packages/bundled-features/src/tenant-lifecycle/index.ts +3 -3
  758. package/packages/bundled-features/src/tenant-lifecycle/lib/revoke-tenant-sessions.ts +1 -1
  759. package/packages/bundled-features/src/tenant-lifecycle/lifecycle-gate.ts +1 -1
  760. package/packages/bundled-features/src/tenant-lifecycle/run-tenant-destroy.ts +5 -5
  761. package/packages/bundled-features/src/tenant-lifecycle/stages.ts +3 -3
  762. package/packages/bundled-features/src/tenant-lifecycle/testing.ts +3 -3
  763. package/packages/bundled-features/src/tenant-settings/changes.json +10 -1
  764. package/packages/bundled-features/src/tenant-settings/feature.ts +2 -5
  765. package/packages/bundled-features/src/tenant-settings/index.ts +4 -5
  766. package/packages/bundled-features/src/tenant-settings/tenant-defaults.ts +1 -1
  767. package/packages/bundled-features/src/tier-engine/changes.json +8 -0
  768. package/packages/bundled-features/src/tier-engine/entity.ts +1 -1
  769. package/packages/bundled-features/src/tier-engine/feature.ts +10 -13
  770. package/packages/bundled-features/src/tier-engine/handlers/get-tenant-tier.query.ts +1 -1
  771. package/packages/bundled-features/src/tier-engine/handlers/set-tenant-tier.write.ts +4 -4
  772. package/packages/bundled-features/src/tier-engine/i18n.ts +4 -10
  773. package/packages/bundled-features/src/tier-engine/index.ts +8 -9
  774. package/packages/bundled-features/src/tier-engine/tier-option-gate.ts +1 -1
  775. package/packages/bundled-features/src/tier-engine/tier-resolver.ts +2 -2
  776. package/packages/bundled-features/src/tier-engine/web/client-plugin.tsx +9 -3
  777. package/packages/bundled-features/src/tier-engine/web/index.ts +1 -1
  778. package/packages/bundled-features/src/user/command-schemas.ts +2 -2
  779. package/packages/bundled-features/src/user/feature.ts +10 -10
  780. package/packages/bundled-features/src/user/handlers/create.write.ts +3 -3
  781. package/packages/bundled-features/src/user/handlers/detail.query.ts +2 -2
  782. package/packages/bundled-features/src/user/handlers/find-for-auth.query.ts +1 -1
  783. package/packages/bundled-features/src/user/handlers/list.query.ts +2 -2
  784. package/packages/bundled-features/src/user/handlers/me.query.ts +1 -1
  785. package/packages/bundled-features/src/user/handlers/update-roles.ts +2 -2
  786. package/packages/bundled-features/src/user/handlers/update.write.ts +4 -4
  787. package/packages/bundled-features/src/user/index.ts +8 -8
  788. package/packages/bundled-features/src/user/invited-global-roles.ts +2 -2
  789. package/packages/bundled-features/src/user/principal-status.ts +1 -1
  790. package/packages/bundled-features/src/user/resolve-display-names.ts +2 -2
  791. package/packages/bundled-features/src/user/schema/user.ts +1 -1
  792. package/packages/bundled-features/src/user/seeding.ts +2 -2
  793. package/packages/bundled-features/src/user/testing.ts +1 -1
  794. package/packages/bundled-features/src/user-data-rights/audit-download.ts +2 -2
  795. package/packages/bundled-features/src/user-data-rights/boot-checks.ts +1 -1
  796. package/packages/bundled-features/src/user-data-rights/changes.json +6 -0
  797. package/packages/bundled-features/src/user-data-rights/db/queries/export-jobs.ts +1 -1
  798. package/packages/bundled-features/src/user-data-rights/db/queries/forget-cleanup.ts +1 -1
  799. package/packages/bundled-features/src/user-data-rights/deletion-token.ts +1 -1
  800. package/packages/bundled-features/src/user-data-rights/feature.ts +38 -35
  801. package/packages/bundled-features/src/user-data-rights/handlers/cancel-deletion.write.ts +3 -3
  802. package/packages/bundled-features/src/user-data-rights/handlers/confirm-deletion-by-token.write.ts +3 -3
  803. package/packages/bundled-features/src/user-data-rights/handlers/deletion-grace-period.ts +3 -3
  804. package/packages/bundled-features/src/user-data-rights/handlers/download-attempt-list.query.ts +1 -1
  805. package/packages/bundled-features/src/user-data-rights/handlers/download-by-job.query.ts +4 -4
  806. package/packages/bundled-features/src/user-data-rights/handlers/download-by-token.query.ts +5 -5
  807. package/packages/bundled-features/src/user-data-rights/handlers/export-job-detail.query.ts +1 -1
  808. package/packages/bundled-features/src/user-data-rights/handlers/export-job-list.query.ts +1 -1
  809. package/packages/bundled-features/src/user-data-rights/handlers/export-status.query.ts +1 -1
  810. package/packages/bundled-features/src/user-data-rights/handlers/lift-restriction.write.ts +3 -3
  811. package/packages/bundled-features/src/user-data-rights/handlers/list-download-attempts.query.ts +2 -2
  812. package/packages/bundled-features/src/user-data-rights/handlers/my-audit-log.query.ts +1 -1
  813. package/packages/bundled-features/src/user-data-rights/handlers/request-deletion-by-email.write.ts +3 -3
  814. package/packages/bundled-features/src/user-data-rights/handlers/request-deletion.write.ts +3 -3
  815. package/packages/bundled-features/src/user-data-rights/handlers/request-export.write.ts +1 -1
  816. package/packages/bundled-features/src/user-data-rights/handlers/restrict-account.write.ts +4 -4
  817. package/packages/bundled-features/src/user-data-rights/handlers/run-forget-cleanup.write.ts +3 -3
  818. package/packages/bundled-features/src/user-data-rights/index.ts +13 -13
  819. package/packages/bundled-features/src/user-data-rights/lib/default-mailers.ts +46 -9
  820. package/packages/bundled-features/src/user-data-rights/lib/deny-if-target-outside-admin-tenant.ts +2 -2
  821. package/packages/bundled-features/src/user-data-rights/lib/mail-transport-resolver.ts +1 -1
  822. package/packages/bundled-features/src/user-data-rights/lib/resolve-tenant-model.ts +2 -2
  823. package/packages/bundled-features/src/user-data-rights/lib/storage-provider-resolver.ts +2 -2
  824. package/packages/bundled-features/src/user-data-rights/lib/update-user-lifecycle.ts +1 -1
  825. package/packages/bundled-features/src/user-data-rights/mail-notifications.ts +2 -2
  826. package/packages/bundled-features/src/user-data-rights/run-export-jobs.ts +8 -8
  827. package/packages/bundled-features/src/user-data-rights/run-forget-cleanup.ts +6 -6
  828. package/packages/bundled-features/src/user-data-rights/run-user-export.ts +2 -2
  829. package/packages/bundled-features/src/user-data-rights/web/client-plugin.tsx +4 -4
  830. package/packages/bundled-features/src/user-data-rights/web/i18n.ts +1 -1
  831. package/packages/bundled-features/src/user-data-rights/web/index.ts +8 -8
  832. package/packages/bundled-features/src/user-data-rights/web/privacy-center-screen.tsx +1 -1
  833. package/packages/bundled-features/src/user-data-rights/web/public-deletion-gate.tsx +2 -2
  834. package/packages/bundled-features/src/user-data-rights-defaults/feature.ts +11 -11
  835. package/packages/bundled-features/src/user-data-rights-defaults/hooks/api-token.userdata-hook.ts +2 -2
  836. package/packages/bundled-features/src/user-data-rights-defaults/hooks/config-value.userdata-hook.ts +3 -3
  837. package/packages/bundled-features/src/user-data-rights-defaults/hooks/delivery-attempt.userdata-hook.ts +2 -2
  838. package/packages/bundled-features/src/user-data-rights-defaults/hooks/download-attempt.userdata-hook.ts +2 -2
  839. package/packages/bundled-features/src/user-data-rights-defaults/hooks/file-ref.userdata-hook.ts +1 -1
  840. package/packages/bundled-features/src/user-data-rights-defaults/hooks/in-app-message.userdata-hook.ts +2 -2
  841. package/packages/bundled-features/src/user-data-rights-defaults/hooks/job-run.userdata-hook.ts +2 -2
  842. package/packages/bundled-features/src/user-data-rights-defaults/hooks/notification-preference.userdata-hook.ts +3 -3
  843. package/packages/bundled-features/src/user-data-rights-defaults/hooks/tenant-invitation.userdata-hook.ts +4 -4
  844. package/packages/bundled-features/src/user-data-rights-defaults/hooks/user-session.userdata-hook.ts +2 -2
  845. package/packages/bundled-features/src/user-data-rights-defaults/hooks/user.userdata-hook.ts +1 -1
  846. package/packages/bundled-features/src/user-data-rights-defaults/index.ts +11 -11
  847. package/packages/bundled-features/src/user-profile/feature.ts +2 -2
  848. package/packages/bundled-features/src/user-profile/handlers/change-email.write.ts +4 -4
  849. package/packages/bundled-features/src/user-profile/index.ts +2 -2
  850. package/packages/bundled-features/src/user-profile/web/client-plugin.ts +3 -3
  851. package/packages/bundled-features/src/user-profile/web/index.ts +2 -2
  852. package/packages/bundled-features/src/user-profile/web/profile-screen.tsx +3 -3
  853. package/packages/bundled-features/src/waitlist/changes.json +7 -0
  854. package/packages/bundled-features/src/waitlist/constants.ts +12 -0
  855. package/packages/bundled-features/src/waitlist/entity.ts +5 -3
  856. package/packages/bundled-features/src/waitlist/entries-admin.ts +55 -0
  857. package/packages/bundled-features/src/waitlist/feature.ts +33 -12
  858. package/packages/bundled-features/src/waitlist/handlers/export-purge.write.ts +81 -0
  859. package/packages/bundled-features/src/waitlist/handlers/invite.write.ts +7 -7
  860. package/packages/bundled-features/src/waitlist/handlers/list.query.ts +2 -2
  861. package/packages/bundled-features/src/waitlist/handlers/reject.write.ts +5 -5
  862. package/packages/bundled-features/src/waitlist/handlers/submit.write.ts +5 -5
  863. package/packages/bundled-features/src/waitlist/i18n.ts +4 -0
  864. package/packages/bundled-features/src/waitlist/import.ts +83 -0
  865. package/packages/bundled-features/src/waitlist/index.ts +23 -5
  866. package/packages/bundled-features/src/waitlist/legacy-migrate.ts +220 -0
  867. package/packages/bundled-features/src/waitlist/lib.ts +5 -5
  868. package/packages/bundled-features/src/waitlist/link-on-signup.ts +106 -0
  869. package/packages/bundled-features/src/waitlist/mail.ts +1 -1
  870. package/packages/bundled-features/src/waitlist/options.ts +15 -3
  871. package/packages/bundled-features/src/waitlist/payloads.ts +3 -1
  872. package/packages/bundled-features/src/waitlist/screens.ts +2 -2
  873. package/packages/bundled-features/src/waitlist/user-data-hooks.ts +3 -3
  874. package/packages/bundled-features/src/workflow-runner/changes.json +8 -0
  875. package/packages/bundled-features/src/workflow-runner/db/queries/due-runs.ts +1 -1
  876. package/packages/bundled-features/src/workflow-runner/event-subscriber.ts +2 -2
  877. package/packages/bundled-features/src/workflow-runner/event-trigger.ts +4 -4
  878. package/packages/bundled-features/src/workflow-runner/feature.ts +4 -7
  879. package/packages/bundled-features/src/workflow-runner/handlers/resume-run.write.ts +3 -3
  880. package/packages/bundled-features/src/workflow-runner/index.ts +4 -4
  881. package/packages/bundled-features/src/workflow-runner/pending-projection.ts +1 -1
  882. package/samples/apps/ui-walkthrough/package.json +2 -1
  883. package/samples/apps/ui-walkthrough/src/app/auth-constants.ts +4 -0
  884. package/samples/apps/ui-walkthrough/src/app/server.ts +10 -1
  885. package/samples/apps/ui-walkthrough/src/app/template-seed-data.ts +1 -1
  886. package/samples/apps/ui-walkthrough/src/features/billing/feature.ts +11 -10
  887. package/samples/apps/ui-walkthrough/src/features/billing/i18n.ts +22 -1
  888. package/samples/apps/ui-walkthrough/src/run-config.ts +14 -5
  889. package/samples/apps/ui-walkthrough/tsconfig.json +1 -0
  890. package/samples/apps/use-all-bundled/feature-manifest.json +59 -18
  891. package/samples/apps/use-all-bundled/scripts/check-coverage.ts +2 -3
  892. package/samples/apps/use-all-bundled/src/run-config.ts +22 -20
  893. package/samples/recipes/apex-surface-auth/README.md +1 -0
  894. package/samples/recipes/apex-surface-auth/src/feature.ts +1 -1
  895. package/samples/recipes/api-worker-split/bin/api.ts +6 -1
  896. package/samples/recipes/app-config/README.md +28 -0
  897. package/samples/recipes/app-config/kumiko.config.ts +9 -0
  898. package/samples/recipes/app-config/package.json +8 -0
  899. package/samples/recipes/app-config/src/feature.ts +6 -0
  900. package/samples/recipes/app-config/tsconfig.json +22 -0
  901. package/samples/recipes/auth-mfa/README.md +14 -0
  902. package/samples/recipes/auth-mfa/src/feature.ts +7 -0
  903. package/samples/recipes/compose-stacks/README.md +60 -0
  904. package/samples/recipes/compose-stacks/package.json +11 -0
  905. package/samples/recipes/compose-stacks/src/app.ts +44 -0
  906. package/samples/recipes/env-composition/README.md +36 -0
  907. package/samples/recipes/env-composition/bin/server.ts +15 -0
  908. package/samples/recipes/env-composition/package.json +15 -0
  909. package/samples/recipes/env-composition/src/env.ts +47 -0
  910. package/samples/recipes/host-routing/README.md +25 -0
  911. package/samples/recipes/host-routing/package.json +12 -0
  912. package/samples/recipes/host-routing/src/feature.ts +35 -0
  913. package/samples/recipes/legal-pages/README.md +15 -0
  914. package/samples/recipes/legal-pages/src/feature.ts +13 -2
  915. package/samples/recipes/managed-config/README.md +1 -0
  916. package/samples/recipes/managed-pages/README.md +1 -0
  917. package/samples/recipes/prod-boot-options/README.md +48 -0
  918. package/samples/recipes/prod-boot-options/bin/server.ts +11 -0
  919. package/samples/recipes/prod-boot-options/package.json +13 -0
  920. package/samples/recipes/prod-boot-options/src/app.ts +32 -0
  921. package/samples/recipes/security-baseline/README.md +16 -13
  922. package/samples/recipes/security-baseline/package.json +2 -1
  923. package/samples/recipes/security-baseline/src/feature.ts +3 -3
  924. package/packages/bundled-features/src/file-provider-s3-env/changes.json +0 -1
  925. package/packages/bundled-features/src/file-provider-s3-env/index.ts +0 -8
  926. package/packages/bundled-features/src/files-provider-s3/changes.json +0 -1
  927. package/packages/bundled-features/src/files-provider-s3/index.ts +0 -11
@@ -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()`.",
@@ -407,7 +424,7 @@
407
424
  },
408
425
  {
409
426
  "name": "channel-email",
410
- "description": "Wires an `EmailTransport` (typically `mail-transport-smtp` in production, `createInMemoryTransport()` in tests) into the delivery system as the `email` channel. Requires `delivery`; pass an `EmailChannelOptions` with a `transport` and a `resolveEmail` function that maps a user ID to their email address. Mails render from stored templates (`renderer-mail-html`): a notification routed to this channel needs `template` + `meta` on `r.notification`, otherwise its delivery fails. Pass `tenantTransport: tenantMailTransport` (from `mail-foundation`) to send each tenant's mail through its own configured provider: a broken provider fails the send, a tenant without one uses the app `transport`. Notifications declared with `unsubscribe: true` get a signed `data.unsubscribeUrl` from delivery, which turns into the `List-Unsubscribe` headers.",
427
+ "description": "Wires an `EmailTransport` (typically `mail-transport-smtp` in production, `createInMemoryTransport()` in tests) into the delivery system as the `email` channel. Requires `delivery`; pass an `EmailChannelOptions` with a `transport` and a `resolveEmail` function that maps a user ID to their email address. Mails render from stored templates (`renderer-mail-html`): a notification routed to this channel needs `template` + `meta` on `r.notification`, otherwise its delivery fails. Pass `tenantTransport: tenantMailTransport` (from `mail-foundation`) to send the notifications declared with `tenantTransport: true` through the sending tenant's own configured provider: a broken provider fails the send, a tenant without one uses the app `transport`; every other notification (password reset, sign-in) always goes through the app `transport`. `transport` may be left out when `tenantTransport` is set; a mail that then has no transport fails with `missing_credentials`. Notifications declared with `unsubscribe: true` get a signed `data.unsubscribeUrl` from delivery, which turns into the `List-Unsubscribe` headers.",
411
428
  "toggleableDefault": null,
412
429
  "requires": [
413
430
  "delivery"
@@ -725,7 +742,7 @@
725
742
  },
726
743
  {
727
744
  "name": "delivery",
728
- "description": "The notification dispatch core: call `ctx.notify(notificationType, { to, route, data, priority, idempotencyKey })` from any handler to fan out a notification across all registered channels (email, in-app, push). Inside a write handler the delivery runs after the write has committed (the call returns `{ kind: \"deferred\" }`, a rolled-back write sends nothing); `immediate: true` delivers synchronously and returns `{ kind: \"dispatched\", deliveries }`. It stores per-user channel preferences in the `notification-preference` entity, opt-outs for no-account recipient addresses in `notification-address-opt-out` (keyed by a blind-index hash, never the plaintext address), logs every attempt to `store_delivery_attempts`, and enforces idempotency and rate-limiting — add `channel-email`, `channel-in-app`, or `channel-push` on top to actually send anything. Unsubscribe/resubscribe links are served by `createUnsubscribeRoutes({ secret })` mounted via the app's `extraRoutes` at `/api/delivery/unsubscribe` and `/api/delivery/resubscribe`: `GET /unsubscribe?token=` renders a confirmation page (no write), `POST /unsubscribe` performs the opt-out (RFC 8058 one-click, token from the form body or query), `POST /resubscribe` undoes it (JSON `{token}` or form body only, never the query — reachable by a mail-client link prefetcher) — sign links with `signUnsubscribeToken` / `signAddressUnsubscribeToken` using the same secret. `channel-email` sets `List-Unsubscribe` / `List-Unsubscribe-Post` automatically when a message's `data.unsubscribeUrl` points at the unsubscribe route. A notification declared with `unsubscribe: true` gets that link from delivery itself when the service has `unsubscribeLinks` (`runProdApp` option `unsubscribe: { secret }` mounts the routes and wires it; base URL from `auth.publicOrigin`, `auth.mail.baseUrl` or `APP_BASE_URL`): user recipients get a user token, `route` recipients an address token (needs a blind-index key, otherwise no link); a `data.unsubscribeUrl` from the caller wins. `unsubscribe.tenantOrigin: (ctx) => origin | null` points the link at the tenant's own host (subdomain or custom domain, must serve this app's `/api`); null, a throw or a non-https value fall back to the app origin. The token carries the mail's locale, so the confirmation and result pages render in the mail's language. To react to a no-account opt-out (e.g. remove the app's own subscriber row), declare `r.job(name, { trigger: { on: DeliveryHandlers.unsubscribeAddress } }, handler)` on a lane the app consumes: it runs after each committed opt-out, also an idempotent repeat, with `unsubscribeAddressPayloadSchema` (`addressHash`, `notificationType`, `channel`) as payload and the tenant in `ctx.triggeredBy.tenantId`; match the subscriber via `hashUnsubscribeAddress(email)`. Declare `unsubscribeUrl` as an optional template variable if the mail body shows it.",
745
+ "description": "The notification dispatch core: call `ctx.notify(notificationType, { to, route, data, priority, idempotencyKey })` from any handler to fan out a notification across all registered channels (email, in-app, push). Inside a write handler the delivery runs after the write has committed (the call returns `{ kind: \"deferred\" }`, a rolled-back write sends nothing); `immediate: true` delivers synchronously and returns `{ kind: \"dispatched\", deliveries }`. It stores per-user channel preferences in the `notification-preference` entity, opt-outs for no-account recipient addresses in `notification-address-opt-out` (keyed by a blind-index hash, never the plaintext address), logs every attempt to `store_delivery_attempts`, and enforces idempotency and rate-limiting — add `channel-email`, `channel-in-app`, or `channel-push` on top to actually send anything. Unsubscribe/resubscribe links are served by `createUnsubscribeRoutes({ secret })` mounted via the app's `extraRoutes` at `/api/delivery/unsubscribe` and `/api/delivery/resubscribe`: `GET /unsubscribe?token=` renders a confirmation page (no write), `POST /unsubscribe` performs the opt-out (RFC 8058 one-click, token from the form body or query), `POST /resubscribe` undoes it (JSON `{token}` or form body only, never the query — reachable by a mail-client link prefetcher) — sign links with `signUnsubscribeToken` / `signAddressUnsubscribeToken` using the same secret. `channel-email` sets `List-Unsubscribe` / `List-Unsubscribe-Post` automatically when a message's `data.unsubscribeUrl` points at the unsubscribe route. A notification declared with `unsubscribe: true` gets that link from delivery itself when the service has `unsubscribeLinks` (the `runProdApp` and `runDevApp` option `unsubscribe: { secret }` mounts the routes and wires it; base URL from `auth.publicOrigin`, `auth.mail.baseUrl` or `APP_BASE_URL`): user recipients get a user token, `route` recipients an address token (needs a blind-index key, otherwise no link); a `data.unsubscribeUrl` from the caller wins. `unsubscribe.tenantOrigin: (ctx) => origin | null` points the link at the tenant's own host (subdomain or custom domain, must serve this app's `/api`); null, a throw or a non-https value fall back to the app origin. The token carries the mail's locale, so the confirmation and result pages render in the mail's language. An app serving its own (e.g. legacy) unsubscribe links renders the same result page with `renderUnsubscribeResultPage({ kind, locale })`. To react to a no-account opt-out (e.g. remove the app's own subscriber row), declare `r.job(name, { trigger: { on: DeliveryHandlers.unsubscribeAddress } }, handler)` on a lane the app consumes: it runs after each committed opt-out, also an idempotent repeat, with `unsubscribeAddressPayloadSchema` (`addressHash`, `notificationType`, `channel`) as payload and the tenant in `ctx.triggeredBy.tenantId`; match the subscriber via `hashUnsubscribeAddress(email)`. Declare `unsubscribeUrl` as an optional template variable if the mail body shows it.",
729
746
  "toggleableDefault": null,
730
747
  "requires": [
731
748
  "tenant"
@@ -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.",
@@ -1507,7 +1546,7 @@
1507
1546
  },
1508
1547
  {
1509
1548
  "name": "mail-foundation",
1510
- "description": "Defines the `mailTransport` extension point and a per-tenant `provider` config key that selects which registered transport plugin to use at runtime. Call `createTransportForTenant(ctx, tenantId)` to get an `EmailTransport` ready for sending — use this feature together with at least one `mail-transport-*` feature; use `delivery` + `channel-email` instead when you need the full notification pipeline with delivery attempts and user preferences. Pass `tenantMailTransport` as `tenantTransport` to `createChannelEmailFeature` so a tenant with a provider configured sends delivery mails through its own transport and other tenants through the app transport.",
1549
+ "description": "Defines the `mailTransport` extension point and a per-tenant `provider` config key that selects which registered transport plugin to use at runtime. Call `createTransportForTenant(ctx, tenantId)` to get an `EmailTransport` ready for sending — use this feature together with at least one `mail-transport-*` feature; use `delivery` + `channel-email` instead when you need the full notification pipeline with delivery attempts and user preferences. Pass `tenantMailTransport` as `tenantTransport` to `createChannelEmailFeature`: notifications declared with `tenantTransport: true` then go through the tenant's own transport when it has a provider and through the app transport otherwise. Tenant admins pick the provider and fill in its settings on the generated Email sending settings screen; an empty provider is a valid choice and means the platform sends.",
1511
1550
  "toggleableDefault": null,
1512
1551
  "requires": [
1513
1552
  "config"
@@ -1531,8 +1570,8 @@
1531
1570
  "bounds": null,
1532
1571
  "pattern": null,
1533
1572
  "writeRoles": [
1534
- "TenantAdmin",
1535
- "SystemAdmin"
1573
+ "system",
1574
+ "TenantAdmin"
1536
1575
  ],
1537
1576
  "readRoles": [
1538
1577
  "TenantAdmin",
@@ -1603,8 +1642,8 @@
1603
1642
  "bounds": null,
1604
1643
  "pattern": null,
1605
1644
  "writeRoles": [
1606
- "TenantAdmin",
1607
- "SystemAdmin"
1645
+ "system",
1646
+ "TenantAdmin"
1608
1647
  ],
1609
1648
  "readRoles": [
1610
1649
  "TenantAdmin",
@@ -1624,8 +1663,8 @@
1624
1663
  "bounds": null,
1625
1664
  "pattern": null,
1626
1665
  "writeRoles": [
1627
- "TenantAdmin",
1628
- "SystemAdmin"
1666
+ "system",
1667
+ "TenantAdmin"
1629
1668
  ],
1630
1669
  "readRoles": [
1631
1670
  "TenantAdmin",
@@ -1645,8 +1684,8 @@
1645
1684
  "bounds": null,
1646
1685
  "pattern": null,
1647
1686
  "writeRoles": [
1648
- "TenantAdmin",
1649
- "SystemAdmin"
1687
+ "system",
1688
+ "TenantAdmin"
1650
1689
  ],
1651
1690
  "readRoles": [
1652
1691
  "TenantAdmin",
@@ -1669,8 +1708,8 @@
1669
1708
  },
1670
1709
  "pattern": null,
1671
1710
  "writeRoles": [
1672
- "TenantAdmin",
1673
- "SystemAdmin"
1711
+ "system",
1712
+ "TenantAdmin"
1674
1713
  ],
1675
1714
  "readRoles": [
1676
1715
  "all"
@@ -1689,8 +1728,8 @@
1689
1728
  "bounds": null,
1690
1729
  "pattern": null,
1691
1730
  "writeRoles": [
1692
- "TenantAdmin",
1693
- "SystemAdmin"
1731
+ "system",
1732
+ "TenantAdmin"
1694
1733
  ],
1695
1734
  "readRoles": [
1696
1735
  "all"
@@ -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).",
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,