@cosmicdrift/kumiko-samples 0.378.0 → 0.379.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 (506) hide show
  1. package/package.json +1 -1
  2. package/packages/bundled-features/package.json +18 -17
  3. package/packages/bundled-features/src/account-security/feature.ts +2 -2
  4. package/packages/bundled-features/src/account-security/index.ts +8 -8
  5. package/packages/bundled-features/src/account-security/{constants.ts → web/constants.ts} +0 -2
  6. package/packages/bundled-features/src/account-security/{i18n.ts → web/i18n.ts} +0 -1
  7. package/packages/bundled-features/src/admin-shell/feature.ts +10 -9
  8. package/packages/bundled-features/src/admin-shell/index.ts +8 -8
  9. package/packages/bundled-features/src/admin-shell/web/client-plugin.tsx +2 -3
  10. package/packages/bundled-features/src/admin-shell/{constants.ts → web/constants.ts} +0 -1
  11. package/packages/bundled-features/src/admin-shell/web/default-translations.ts +10 -0
  12. package/packages/bundled-features/src/admin-shell/web/i18n.ts +51 -9
  13. package/packages/bundled-features/src/admin-shell/web/index.ts +0 -1
  14. package/packages/bundled-features/src/audit/changes.json +7 -0
  15. package/packages/bundled-features/src/audit/feature.ts +72 -64
  16. package/packages/bundled-features/src/audit/handlers/audit-events.ts +153 -0
  17. package/packages/bundled-features/src/audit/handlers/audit-system-db.ts +13 -0
  18. package/packages/bundled-features/src/audit/handlers/details-all-tenants.query.ts +26 -0
  19. package/packages/bundled-features/src/audit/handlers/details.query.ts +11 -39
  20. package/packages/bundled-features/src/audit/handlers/list-all-tenants.query.ts +47 -0
  21. package/packages/bundled-features/src/audit/handlers/list.query.ts +16 -123
  22. package/packages/bundled-features/src/audit/handlers/resolve-audit-tenant.ts +21 -7
  23. package/packages/bundled-features/src/audit/index.ts +1 -1
  24. package/packages/bundled-features/src/audit/run-escape-hatch-retention.ts +4 -4
  25. package/packages/bundled-features/src/audit/screens.ts +82 -0
  26. package/packages/bundled-features/src/audit/web/client-plugin.tsx +2 -3
  27. package/packages/bundled-features/src/audit/{constants.ts → web/constants.ts} +11 -1
  28. package/packages/bundled-features/src/audit/web/default-translations.ts +7 -0
  29. package/packages/bundled-features/src/audit/web/i18n.ts +33 -7
  30. package/packages/bundled-features/src/audit/web/index.ts +0 -2
  31. package/packages/bundled-features/src/auth-email-password/bootstrap.ts +6 -6
  32. package/packages/bundled-features/src/auth-email-password/changes.json +6 -0
  33. package/packages/bundled-features/src/auth-email-password/errors.ts +1 -1
  34. package/packages/bundled-features/src/auth-email-password/feature.ts +2 -2
  35. package/packages/bundled-features/src/auth-email-password/handlers/confirm-account-unlock.write.ts +1 -1
  36. package/packages/bundled-features/src/auth-email-password/handlers/invite-accept-with-login.write.ts +4 -4
  37. package/packages/bundled-features/src/auth-email-password/handlers/invite-create.write.ts +3 -3
  38. package/packages/bundled-features/src/auth-email-password/handlers/invite-info.query.ts +1 -1
  39. package/packages/bundled-features/src/auth-email-password/handlers/login.write.ts +38 -4
  40. package/packages/bundled-features/src/auth-email-password/handlers/request-account-unlock.write.ts +1 -1
  41. package/packages/bundled-features/src/auth-email-password/handlers/request-email-verification.write.ts +1 -1
  42. package/packages/bundled-features/src/auth-email-password/handlers/request-password-reset.write.ts +1 -1
  43. package/packages/bundled-features/src/auth-email-password/handlers/reset-password.write.ts +1 -1
  44. package/packages/bundled-features/src/auth-email-password/handlers/verify-email.write.ts +1 -1
  45. package/packages/bundled-features/src/auth-email-password/index.ts +6 -1
  46. package/packages/bundled-features/src/auth-email-password/mail-notifications.ts +1 -1
  47. package/packages/bundled-features/src/auth-email-password/signup-activation.ts +1 -1
  48. package/packages/bundled-features/src/auth-email-password/web/auth-client.ts +0 -1
  49. package/packages/bundled-features/src/auth-email-password/web/auth-form-logic.ts +0 -1
  50. package/packages/bundled-features/src/auth-email-password/web/auth-form-primitives.tsx +0 -1
  51. package/packages/bundled-features/src/auth-email-password/web/auth-gate.tsx +0 -1
  52. package/packages/bundled-features/src/auth-email-password/web/auth-redirect.ts +0 -1
  53. package/packages/bundled-features/src/auth-email-password/web/client-actions.ts +0 -1
  54. package/packages/bundled-features/src/auth-email-password/web/client-plugin.ts +1 -2
  55. package/packages/bundled-features/src/auth-email-password/web/confirm-account-unlock-screen.tsx +0 -1
  56. package/packages/bundled-features/src/auth-email-password/{constants.ts → web/constants.ts} +3 -6
  57. package/packages/bundled-features/src/auth-email-password/web/default-topbar-actions.tsx +0 -1
  58. package/packages/bundled-features/src/auth-email-password/web/forgot-password-screen.tsx +0 -1
  59. package/packages/bundled-features/src/auth-email-password/{i18n.ts → web/i18n.ts} +3 -4
  60. package/packages/bundled-features/src/auth-email-password/web/index.ts +1 -2
  61. package/packages/bundled-features/src/auth-email-password/web/invite-accept-screen.tsx +2 -3
  62. package/packages/bundled-features/src/auth-email-password/web/login-screen.tsx +0 -1
  63. package/packages/bundled-features/src/auth-email-password/{mail-i18n.ts → web/mail-i18n.ts} +0 -1
  64. package/packages/bundled-features/src/auth-email-password/web/request-account-unlock-screen.tsx +0 -1
  65. package/packages/bundled-features/src/auth-email-password/web/reset-password-screen.tsx +0 -1
  66. package/packages/bundled-features/src/auth-email-password/web/session-bootstrap-error.tsx +0 -1
  67. package/packages/bundled-features/src/auth-email-password/web/session.tsx +0 -1
  68. package/packages/bundled-features/src/auth-email-password/web/signup-complete-screen.tsx +2 -3
  69. package/packages/bundled-features/src/auth-email-password/web/signup-screen.tsx +0 -1
  70. package/packages/bundled-features/src/auth-email-password/web/tenant-menu-items.tsx +0 -1
  71. package/packages/bundled-features/src/auth-email-password/web/tenant-switcher.tsx +0 -1
  72. package/packages/bundled-features/src/auth-email-password/web/use-shell-user.ts +0 -1
  73. package/packages/bundled-features/src/auth-email-password/web/user-menu.tsx +0 -1
  74. package/packages/bundled-features/src/auth-email-password/web/verify-email-screen.tsx +0 -1
  75. package/packages/bundled-features/src/auth-mfa/changes.json +6 -0
  76. package/packages/bundled-features/src/auth-mfa/errors.ts +2 -2
  77. package/packages/bundled-features/src/auth-mfa/handlers/enable-confirm-preauth.write.ts +1 -1
  78. package/packages/bundled-features/src/auth-mfa/handlers/enable-start-preauth.write.ts +1 -1
  79. package/packages/bundled-features/src/auth-mfa/handlers/enable-start.write.ts +1 -1
  80. package/packages/bundled-features/src/auth-mfa/handlers/verify.write.ts +1 -1
  81. package/packages/bundled-features/src/auth-mfa/index.ts +8 -8
  82. package/packages/bundled-features/src/auth-mfa/mfa-status-checker.ts +4 -4
  83. package/packages/bundled-features/src/auth-mfa/screens.ts +1 -1
  84. package/packages/bundled-features/src/auth-mfa/web/client-plugin.ts +0 -1
  85. package/packages/bundled-features/src/auth-mfa/{constants.ts → web/constants.ts} +0 -1
  86. package/packages/bundled-features/src/auth-mfa/web/i18n.ts +0 -1
  87. package/packages/bundled-features/src/auth-mfa/web/index.ts +0 -1
  88. package/packages/bundled-features/src/auth-mfa/web/mfa-client.ts +0 -1
  89. package/packages/bundled-features/src/auth-mfa/web/mfa-disable-dialog.tsx +1 -2
  90. package/packages/bundled-features/src/auth-mfa/web/mfa-recovery-codes-reveal.tsx +0 -1
  91. package/packages/bundled-features/src/auth-mfa/web/mfa-regenerate-recovery-dialog.tsx +1 -2
  92. package/packages/bundled-features/src/auth-mfa/web/mfa-setup-preauth-screen.tsx +21 -23
  93. package/packages/bundled-features/src/auth-mfa/web/mfa-verify-screen.tsx +0 -1
  94. package/packages/bundled-features/src/billing-foundation/changes.json +18 -0
  95. package/packages/bundled-features/src/billing-foundation/checkout-core.ts +3 -3
  96. package/packages/bundled-features/src/billing-foundation/consumer-protection/consent-text.ts +2 -2
  97. package/packages/bundled-features/src/billing-foundation/consumer-protection/issue-confirmation.ts +11 -3
  98. package/packages/bundled-features/src/billing-foundation/consumer-protection/mail-notifications.ts +11 -1
  99. package/packages/bundled-features/src/billing-foundation/consumer-protection/register-consent.ts +1 -1
  100. package/packages/bundled-features/src/billing-foundation/consumer-protection/register-termination.ts +12 -1
  101. package/packages/bundled-features/src/billing-foundation/consumer-protection/stored-user-email.ts +12 -0
  102. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-mail.ts +6 -1
  103. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-notify.ts +1 -1
  104. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-pages.ts +167 -28
  105. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-record.ts +102 -3
  106. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-request.ts +43 -12
  107. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-revoke.ts +202 -0
  108. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-texts.ts +70 -0
  109. package/packages/bundled-features/src/billing-foundation/events.ts +20 -2
  110. package/packages/bundled-features/src/billing-foundation/feature.ts +5 -5
  111. package/packages/bundled-features/src/billing-foundation/handlers/process-event.write.ts +82 -9
  112. package/packages/bundled-features/src/billing-foundation/handlers/switch-plan.write.ts +1 -1
  113. package/packages/bundled-features/src/billing-foundation/handlers/sync-subscription.write.ts +1 -1
  114. package/packages/bundled-features/src/billing-foundation/index.ts +27 -27
  115. package/packages/bundled-features/src/billing-foundation/plan-catalog.ts +7 -7
  116. package/packages/bundled-features/src/billing-foundation/screens.ts +1 -1
  117. package/packages/bundled-features/src/billing-foundation/subscription-tier-sync.ts +1 -1
  118. package/packages/bundled-features/src/billing-foundation/types.ts +17 -3
  119. package/packages/bundled-features/src/billing-foundation/validate-options.ts +3 -3
  120. package/packages/bundled-features/src/billing-foundation/web/billing-contact-plan.tsx +1 -3
  121. package/packages/bundled-features/src/billing-foundation/web/billing-plans-panel.tsx +5 -7
  122. package/packages/bundled-features/src/billing-foundation/web/cancel-contract-dialog.tsx +1 -3
  123. package/packages/bundled-features/src/billing-foundation/web/checkout-consent-dialog.tsx +1 -3
  124. package/packages/bundled-features/src/billing-foundation/web/client-plugin.tsx +1 -2
  125. package/packages/bundled-features/src/billing-foundation/{constants.ts → web/constants.ts} +37 -31
  126. package/packages/bundled-features/src/billing-foundation/{consumer-protection → web/consumer-protection}/consent-locale.ts +0 -1
  127. package/packages/bundled-features/src/billing-foundation/{contact-card.ts → web/contact-card.ts} +0 -2
  128. package/packages/bundled-features/src/billing-foundation/web/index.ts +14 -15
  129. package/packages/bundled-features/src/billing-foundation/web/localized-params.ts +0 -2
  130. package/packages/bundled-features/src/billing-foundation/webhook-handler.ts +5 -2
  131. package/packages/bundled-features/src/cap-overview/feature.ts +1 -1
  132. package/packages/bundled-features/src/cap-overview/handlers/caps-usage.query.ts +1 -1
  133. package/packages/bundled-features/src/cap-overview/handlers/tenant-caps-list.query.ts +2 -2
  134. package/packages/bundled-features/src/cap-overview/index.ts +9 -9
  135. package/packages/bundled-features/src/cap-overview/screens.ts +2 -2
  136. package/packages/bundled-features/src/cap-overview/web/cap-cards-panel.tsx +1 -2
  137. package/packages/bundled-features/src/cap-overview/web/cap-usage-bar.tsx +1 -2
  138. package/packages/bundled-features/src/cap-overview/web/cap-usage-cell.tsx +0 -2
  139. package/packages/bundled-features/src/cap-overview/web/client-plugin.tsx +3 -4
  140. package/packages/bundled-features/src/cap-overview/{constants.ts → web/constants.ts} +0 -1
  141. package/packages/bundled-features/src/cap-overview/web/index.ts +0 -1
  142. package/packages/bundled-features/src/cap-overview/{usage-math.ts → web/usage-math.ts} +1 -2
  143. package/packages/bundled-features/src/compliance-profiles/feature.ts +5 -5
  144. package/packages/bundled-features/src/compliance-profiles/index.ts +6 -6
  145. package/packages/bundled-features/src/compliance-profiles/web/client-plugin.tsx +2 -3
  146. package/packages/bundled-features/src/compliance-profiles/web/compliance-profile-catalog.tsx +1 -2
  147. package/packages/bundled-features/src/compliance-profiles/{constants.ts → web/constants.ts} +0 -1
  148. package/packages/bundled-features/src/compliance-profiles/web/i18n.ts +0 -1
  149. package/packages/bundled-features/src/compliance-profiles/web/index.ts +0 -1
  150. package/packages/bundled-features/src/config/index.ts +6 -6
  151. package/packages/bundled-features/src/config/web/client-plugin.ts +1 -2
  152. package/packages/bundled-features/src/config/{constants.ts → web/constants.ts} +0 -1
  153. package/packages/bundled-features/src/config/web/i18n.ts +0 -1
  154. package/packages/bundled-features/src/config/web/index.ts +1 -3
  155. package/packages/bundled-features/src/config/write-helpers.ts +1 -1
  156. package/packages/bundled-features/src/custom-fields/feature.ts +8 -8
  157. package/packages/bundled-features/src/custom-fields/handlers/clear-custom-field.write.ts +1 -1
  158. package/packages/bundled-features/src/custom-fields/handlers/define-tenant-field.write.ts +1 -1
  159. package/packages/bundled-features/src/custom-fields/handlers/delete-system-field.write.ts +1 -1
  160. package/packages/bundled-features/src/custom-fields/handlers/delete-tenant-field.write.ts +4 -4
  161. package/packages/bundled-features/src/custom-fields/handlers/set-custom-field.write.ts +1 -1
  162. package/packages/bundled-features/src/custom-fields/handlers/update-tenant-field.write.ts +1 -1
  163. package/packages/bundled-features/src/custom-fields/index.ts +8 -8
  164. package/packages/bundled-features/src/custom-fields/lib/value-schema.ts +1 -1
  165. package/packages/bundled-features/src/custom-fields/schemas.ts +1 -1
  166. package/packages/bundled-features/src/custom-fields/web/client-plugin.tsx +1 -2
  167. package/packages/bundled-features/src/custom-fields/{constants.ts → web/constants.ts} +18 -19
  168. package/packages/bundled-features/src/custom-fields/web/custom-fields-form-section.tsx +1 -2
  169. package/packages/bundled-features/src/custom-fields/web/i18n.ts +0 -1
  170. package/packages/bundled-features/src/custom-fields/web/index.ts +2 -3
  171. package/packages/bundled-features/src/custom-fields/wire-for-entity.ts +1 -2
  172. package/packages/bundled-features/src/delivery/address-opt-out.ts +1 -1
  173. package/packages/bundled-features/src/delivery/attempt-log-retention.ts +24 -8
  174. package/packages/bundled-features/src/delivery/changes.json +6 -0
  175. package/packages/bundled-features/src/delivery/constants.ts +2 -2
  176. package/packages/bundled-features/src/delivery/i18n.ts +1 -1
  177. package/packages/bundled-features/src/delivery/unsubscribe-page.ts +1 -1
  178. package/packages/bundled-features/src/delivery/web/client-plugin.tsx +6 -7
  179. package/packages/bundled-features/src/delivery/web/delivery-channel-cell.tsx +0 -1
  180. package/packages/bundled-features/src/delivery/web/delivery-error-cell.tsx +0 -1
  181. package/packages/bundled-features/src/delivery/web/delivery-status-cell.tsx +1 -2
  182. package/packages/bundled-features/src/delivery/web/delivery-time-cell.tsx +0 -1
  183. package/packages/bundled-features/src/delivery/web/delivery-type-cell.tsx +0 -1
  184. package/packages/bundled-features/src/delivery/web/index.ts +0 -1
  185. package/packages/bundled-features/src/delivery/{public-names.ts → web/public-names.ts} +0 -1
  186. package/packages/bundled-features/src/document-ingest-foundation/changes.json +6 -0
  187. package/packages/bundled-features/src/document-ingest-foundation/events.ts +4 -0
  188. package/packages/bundled-features/src/document-ingest-foundation/executor.ts +2 -1
  189. package/packages/bundled-features/src/document-ingest-foundation/feature.ts +18 -4
  190. package/packages/bundled-features/src/document-ingest-foundation/index.ts +1 -0
  191. package/packages/bundled-features/src/feature-toggles/feature.ts +7 -7
  192. package/packages/bundled-features/src/feature-toggles/handlers/list.query.ts +1 -1
  193. package/packages/bundled-features/src/feature-toggles/handlers/registered.query.ts +1 -1
  194. package/packages/bundled-features/src/feature-toggles/handlers/set.write.ts +3 -3
  195. package/packages/bundled-features/src/feature-toggles/index.ts +6 -6
  196. package/packages/bundled-features/src/feature-toggles/web/client-plugin.tsx +1 -2
  197. package/packages/bundled-features/src/feature-toggles/{constants.ts → web/constants.ts} +0 -1
  198. package/packages/bundled-features/src/feature-toggles/web/i18n.ts +0 -1
  199. package/packages/bundled-features/src/feature-toggles/web/index.ts +0 -1
  200. package/packages/bundled-features/src/files/changes.json +7 -0
  201. package/packages/bundled-features/src/folders/feature.ts +1 -1
  202. package/packages/bundled-features/src/folders/handlers/clear-folder.write.ts +1 -1
  203. package/packages/bundled-features/src/folders/handlers/delete-folder.write.ts +1 -1
  204. package/packages/bundled-features/src/folders/handlers/set-folder.write.ts +1 -1
  205. package/packages/bundled-features/src/folders/index.ts +8 -8
  206. package/packages/bundled-features/src/folders/web/client-plugin.tsx +1 -3
  207. package/packages/bundled-features/src/folders/{constants.ts → web/constants.ts} +0 -1
  208. package/packages/bundled-features/src/folders/web/folder-manager.tsx +1 -2
  209. package/packages/bundled-features/src/folders/web/folder-section.tsx +1 -2
  210. package/packages/bundled-features/src/folders/web/i18n.ts +0 -1
  211. package/packages/bundled-features/src/folders/web/index.ts +1 -2
  212. package/packages/bundled-features/src/folders/web/tree.ts +0 -1
  213. package/packages/bundled-features/src/form-draft/changes.json +7 -0
  214. package/packages/bundled-features/src/form-draft/db/queries/cleanup.ts +25 -11
  215. package/packages/bundled-features/src/form-draft/decrypt-draft.ts +24 -0
  216. package/packages/bundled-features/src/form-draft/entity.ts +6 -9
  217. package/packages/bundled-features/src/form-draft/feature.ts +1 -1
  218. package/packages/bundled-features/src/form-draft/handlers/cleanup.job.ts +26 -5
  219. package/packages/bundled-features/src/form-draft/handlers/discard.write.ts +1 -1
  220. package/packages/bundled-features/src/form-draft/handlers/get.query.ts +6 -7
  221. package/packages/bundled-features/src/form-draft/handlers/list.query.ts +13 -7
  222. package/packages/bundled-features/src/form-draft/handlers/save.write.ts +5 -5
  223. package/packages/bundled-features/src/form-draft/index.ts +8 -8
  224. package/packages/bundled-features/src/form-draft/lookup.ts +10 -4
  225. package/packages/bundled-features/src/form-draft/schemas.ts +1 -1
  226. package/packages/bundled-features/src/form-draft/{constants.ts → web/constants.ts} +0 -1
  227. package/packages/bundled-features/src/form-draft-user-data/hooks.ts +2 -2
  228. package/packages/bundled-features/src/inbound-mail-foundation/retention-sweep.ts +10 -10
  229. package/packages/bundled-features/src/jobs/feature.ts +7 -7
  230. package/packages/bundled-features/src/jobs/handlers/retry.write.ts +1 -1
  231. package/packages/bundled-features/src/jobs/handlers/trigger.write.ts +1 -1
  232. package/packages/bundled-features/src/jobs/index.ts +1 -1
  233. package/packages/bundled-features/src/jobs/web/client-plugin.tsx +2 -3
  234. package/packages/bundled-features/src/jobs/{constants.ts → web/constants.ts} +0 -1
  235. package/packages/bundled-features/src/jobs/web/default-translations.ts +7 -0
  236. package/packages/bundled-features/src/jobs/web/i18n.ts +53 -7
  237. package/packages/bundled-features/src/jobs/web/index.ts +0 -1
  238. package/packages/bundled-features/src/ledger/changes.json +7 -0
  239. package/packages/bundled-features/src/ledger/entity.ts +1 -1
  240. package/packages/bundled-features/src/ledger/feature.ts +1 -1
  241. package/packages/bundled-features/src/ledger/handlers/confirm-schedule-period.write.ts +2 -10
  242. package/packages/bundled-features/src/ledger/handlers/create-transaction.write.ts +1 -1
  243. package/packages/bundled-features/src/ledger/handlers/reports.query.ts +1 -1
  244. package/packages/bundled-features/src/ledger/handlers/reverse-transaction.write.ts +1 -1
  245. package/packages/bundled-features/src/ledger/index.ts +13 -13
  246. package/packages/bundled-features/src/ledger/recurring.ts +1 -1
  247. package/packages/bundled-features/src/ledger/reports.ts +1 -1
  248. package/packages/bundled-features/src/ledger/schemas.ts +1 -1
  249. package/packages/bundled-features/src/ledger/{constants.ts → web/constants.ts} +0 -1
  250. package/packages/bundled-features/src/ledger/web/index.ts +11 -12
  251. package/packages/bundled-features/src/legal-pages/README.md +1 -1
  252. package/packages/bundled-features/src/legal-pages/feature.ts +5 -5
  253. package/packages/bundled-features/src/legal-pages/index.ts +11 -11
  254. package/packages/bundled-features/src/legal-pages/lib/boot-check.ts +1 -1
  255. package/packages/bundled-features/src/legal-pages/lib/validate-routes.ts +1 -1
  256. package/packages/bundled-features/src/legal-pages/web/client-plugin.ts +1 -2
  257. package/packages/bundled-features/src/legal-pages/{constants.ts → web/constants.ts} +6 -8
  258. package/packages/bundled-features/src/legal-pages/web/index.ts +0 -1
  259. package/packages/bundled-features/src/managed-pages/feature.ts +1 -1
  260. package/packages/bundled-features/src/managed-pages/web/client-plugin.tsx +1 -2
  261. package/packages/bundled-features/src/managed-pages/web/default-translations.ts +17 -0
  262. package/packages/bundled-features/src/managed-pages/web/i18n.ts +59 -16
  263. package/packages/bundled-features/src/managed-pages/web/index.ts +1 -2
  264. package/packages/bundled-features/src/metrics/compute.ts +1 -1
  265. package/packages/bundled-features/src/metrics/feature.ts +6 -6
  266. package/packages/bundled-features/src/metrics/index.ts +8 -8
  267. package/packages/bundled-features/src/metrics/types.ts +1 -1
  268. package/packages/bundled-features/src/metrics/validate.ts +1 -1
  269. package/packages/bundled-features/src/metrics/{constants.ts → web/constants.ts} +0 -1
  270. package/packages/bundled-features/src/metrics/window.ts +1 -1
  271. package/packages/bundled-features/src/notes-history/feature.ts +1 -1
  272. package/packages/bundled-features/src/notes-history/handlers/add-note.write.ts +1 -1
  273. package/packages/bundled-features/src/notes-history/index.ts +8 -8
  274. package/packages/bundled-features/src/notes-history/web/client-plugin.tsx +1 -3
  275. package/packages/bundled-features/src/notes-history/{constants.ts → web/constants.ts} +0 -1
  276. package/packages/bundled-features/src/notes-history/web/i18n.ts +0 -1
  277. package/packages/bundled-features/src/notes-history/web/index.ts +2 -3
  278. package/packages/bundled-features/src/notes-history/web/notes-section.tsx +2 -3
  279. package/packages/bundled-features/src/personal-access-tokens/feature.ts +12 -10
  280. package/packages/bundled-features/src/personal-access-tokens/handlers/available-scopes.query.ts +1 -1
  281. package/packages/bundled-features/src/personal-access-tokens/handlers/create.write.ts +1 -1
  282. package/packages/bundled-features/src/personal-access-tokens/handlers/revoke.write.ts +1 -1
  283. package/packages/bundled-features/src/personal-access-tokens/hash.ts +1 -1
  284. package/packages/bundled-features/src/personal-access-tokens/i18n.ts +2 -2
  285. package/packages/bundled-features/src/personal-access-tokens/index.ts +5 -5
  286. package/packages/bundled-features/src/personal-access-tokens/resolver.ts +1 -1
  287. package/packages/bundled-features/src/personal-access-tokens/schema/api-token.ts +1 -1
  288. package/packages/bundled-features/src/personal-access-tokens/screens.ts +2 -2
  289. package/packages/bundled-features/src/personal-access-tokens/{constants.ts → web/constants.ts} +0 -1
  290. package/packages/bundled-features/src/personal-access-tokens/{scopes.ts → web/scopes.ts} +0 -1
  291. package/packages/bundled-features/src/presets/changes.json +7 -0
  292. package/packages/bundled-features/src/presets/index.ts +0 -1
  293. package/packages/bundled-features/src/presets/security-baseline.ts +1 -1
  294. package/packages/bundled-features/src/renderer-foundation/types.ts +1 -1
  295. package/packages/bundled-features/src/secrets/feature.ts +1 -1
  296. package/packages/bundled-features/src/secrets/handlers/delete.write.ts +1 -1
  297. package/packages/bundled-features/src/secrets/handlers/list.query.ts +1 -1
  298. package/packages/bundled-features/src/secrets/handlers/set.write.ts +1 -1
  299. package/packages/bundled-features/src/secrets/i18n.ts +1 -1
  300. package/packages/bundled-features/src/secrets/index.ts +8 -8
  301. package/packages/bundled-features/src/secrets/{constants.ts → web/constants.ts} +0 -1
  302. package/packages/bundled-features/src/secrets/write-gate.ts +1 -1
  303. package/packages/bundled-features/src/sessions/feature.ts +7 -4
  304. package/packages/bundled-features/src/sessions/{i18n.ts → web/i18n.ts} +0 -1
  305. package/packages/bundled-features/src/shared/index.ts +6 -1
  306. package/packages/bundled-features/src/shared/purge-files-reaching-subject.ts +10 -2
  307. package/packages/bundled-features/src/shared/web/translate-or-raw.ts +0 -1
  308. package/packages/bundled-features/src/subscription-stripe/feature.ts +2 -0
  309. package/packages/bundled-features/src/subscription-stripe/plugin-methods.ts +19 -0
  310. package/packages/bundled-features/src/subscription-stripe/verify-webhook.ts +1 -0
  311. package/packages/bundled-features/src/tags/changes.json +6 -0
  312. package/packages/bundled-features/src/tags/feature.ts +1 -1
  313. package/packages/bundled-features/src/tags/handlers/assign-tag.write.ts +11 -7
  314. package/packages/bundled-features/src/tags/handlers/create-tag.write.ts +1 -1
  315. package/packages/bundled-features/src/tags/handlers/delete-tag.write.ts +4 -1
  316. package/packages/bundled-features/src/tags/handlers/remove-tag.write.ts +1 -1
  317. package/packages/bundled-features/src/tags/handlers/update-tag.write.ts +1 -1
  318. package/packages/bundled-features/src/tags/index.ts +12 -12
  319. package/packages/bundled-features/src/tags/screens.ts +1 -1
  320. package/packages/bundled-features/src/tags/web/client-plugin.tsx +1 -3
  321. package/packages/bundled-features/src/tags/{constants.ts → web/constants.ts} +4 -1
  322. package/packages/bundled-features/src/tags/web/entity-tags.tsx +1 -2
  323. package/packages/bundled-features/src/tags/web/i18n.ts +2 -2
  324. package/packages/bundled-features/src/tags/web/index.ts +2 -3
  325. package/packages/bundled-features/src/tags/web/tag-chip.tsx +0 -1
  326. package/packages/bundled-features/src/tags/web/tag-filter.tsx +1 -2
  327. package/packages/bundled-features/src/tags/web/tag-manager.tsx +5 -4
  328. package/packages/bundled-features/src/tags/web/tag-picker.tsx +0 -1
  329. package/packages/bundled-features/src/tags/web/tag-section.tsx +1 -2
  330. package/packages/bundled-features/src/tags/web/tags-cell.tsx +1 -2
  331. package/packages/bundled-features/src/template-resolver/README.md +1 -1
  332. package/packages/bundled-features/src/template-resolver/api.ts +75 -28
  333. package/packages/bundled-features/src/template-resolver/changes.json +43 -0
  334. package/packages/bundled-features/src/template-resolver/compile-document-body.ts +1 -1
  335. package/packages/bundled-features/src/template-resolver/compile-steps-block.ts +2 -2
  336. package/packages/bundled-features/src/template-resolver/document-ops.ts +5 -5
  337. package/packages/bundled-features/src/template-resolver/document-sanitizer.ts +4 -4
  338. package/packages/bundled-features/src/template-resolver/feature.ts +13 -4
  339. package/packages/bundled-features/src/template-resolver/handlers/by-slug.query.ts +6 -1
  340. package/packages/bundled-features/src/template-resolver/handlers/by-tenant.query.ts +6 -2
  341. package/packages/bundled-features/src/template-resolver/handlers/collection-item.query.ts +1 -1
  342. package/packages/bundled-features/src/template-resolver/handlers/collection-list.query.ts +1 -1
  343. package/packages/bundled-features/src/template-resolver/handlers/collection-set.write.ts +19 -2
  344. package/packages/bundled-features/src/template-resolver/handlers/copy-locale.write.ts +2 -2
  345. package/packages/bundled-features/src/template-resolver/handlers/diff-to-system.query.ts +7 -1
  346. package/packages/bundled-features/src/template-resolver/handlers/discard-draft.write.ts +1 -1
  347. package/packages/bundled-features/src/template-resolver/handlers/document-base.ts +8 -2
  348. package/packages/bundled-features/src/template-resolver/handlers/document-blocks.query.ts +2 -2
  349. package/packages/bundled-features/src/template-resolver/handlers/export-bundle.query.ts +5 -2
  350. package/packages/bundled-features/src/template-resolver/handlers/find-by-id.query.ts +4 -2
  351. package/packages/bundled-features/src/template-resolver/handlers/layout-source.query.ts +10 -5
  352. package/packages/bundled-features/src/template-resolver/handlers/list.query.ts +5 -2
  353. package/packages/bundled-features/src/template-resolver/handlers/overview.query.ts +68 -10
  354. package/packages/bundled-features/src/template-resolver/handlers/patch-draft.write.ts +1 -1
  355. package/packages/bundled-features/src/template-resolver/handlers/resource-shared.ts +1 -1
  356. package/packages/bundled-features/src/template-resolver/handlers/resource-upload.write.ts +1 -1
  357. package/packages/bundled-features/src/template-resolver/handlers/send-test.write.ts +2 -2
  358. package/packages/bundled-features/src/template-resolver/handlers/set.write.ts +1 -1
  359. package/packages/bundled-features/src/template-resolver/handlers/shared.ts +1 -1
  360. package/packages/bundled-features/src/template-resolver/handlers/template-gates.ts +6 -6
  361. package/packages/bundled-features/src/template-resolver/handlers/template-write.ts +2 -2
  362. package/packages/bundled-features/src/template-resolver/handlers/usage.query.ts +8 -2
  363. package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +4 -2
  364. package/packages/bundled-features/src/template-resolver/i18n.ts +25 -0
  365. package/packages/bundled-features/src/template-resolver/index.ts +60 -59
  366. package/packages/bundled-features/src/template-resolver/layout-appearance.ts +1 -1
  367. package/packages/bundled-features/src/template-resolver/layout-regions.ts +1 -1
  368. package/packages/bundled-features/src/template-resolver/seeding.ts +16 -7
  369. package/packages/bundled-features/src/template-resolver/store-template-resource.ts +2 -2
  370. package/packages/bundled-features/src/template-resolver/table.ts +1 -1
  371. package/packages/bundled-features/src/template-resolver/template-bundle.ts +2 -2
  372. package/packages/bundled-features/src/template-resolver/template-delivery-policy.ts +82 -0
  373. package/packages/bundled-features/src/template-resolver/template-draft.ts +1 -1
  374. package/packages/bundled-features/src/template-resolver/template-edit-policy.ts +2 -2
  375. package/packages/bundled-features/src/template-resolver/template-meta.ts +2 -2
  376. package/packages/bundled-features/src/template-resolver/template-preview.ts +14 -10
  377. package/packages/bundled-features/src/template-resolver/template-usage.ts +1 -1
  378. package/packages/bundled-features/src/template-resolver/template-validation.ts +2 -2
  379. package/packages/bundled-features/src/template-resolver/testing.ts +2 -2
  380. package/packages/bundled-features/src/template-resolver/user-content-table.ts +1 -1
  381. package/packages/bundled-features/src/template-resolver/web/client-plugin.tsx +4 -5
  382. package/packages/bundled-features/src/template-resolver/{constants.ts → web/constants.ts} +7 -10
  383. package/packages/bundled-features/src/template-resolver/{document-blocks.ts → web/document-blocks.ts} +0 -1
  384. package/packages/bundled-features/src/template-resolver/web/document-editor-extensions.ts +2 -3
  385. package/packages/bundled-features/src/template-resolver/web/document-editor.tsx +0 -1
  386. package/packages/bundled-features/src/template-resolver/{document-images.ts → web/document-images.ts} +0 -1
  387. package/packages/bundled-features/src/template-resolver/{document-schema.ts → web/document-schema.ts} +0 -1
  388. package/packages/bundled-features/src/template-resolver/{document-steps.ts → web/document-steps.ts} +0 -1
  389. package/packages/bundled-features/src/template-resolver/web/document-tiptap-editor.tsx +6 -7
  390. package/packages/bundled-features/src/template-resolver/web/document-toolbar-blocks.ts +2 -3
  391. package/packages/bundled-features/src/template-resolver/web/editor-handle.ts +1 -2
  392. package/packages/bundled-features/src/template-resolver/web/i18n.ts +2 -1
  393. package/packages/bundled-features/src/template-resolver/web/index.ts +13 -14
  394. package/packages/bundled-features/src/template-resolver/{mail-constants.ts → web/mail-constants.ts} +0 -1
  395. package/packages/bundled-features/src/template-resolver/{pdf-constants.ts → web/pdf-constants.ts} +0 -1
  396. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor-lazy.tsx +0 -1
  397. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor.tsx +5 -4
  398. package/packages/bundled-features/src/template-resolver/{placeholder-text.ts → web/placeholder-text.ts} +0 -1
  399. package/packages/bundled-features/src/template-resolver/{qualified-names.ts → web/qualified-names.ts} +0 -1
  400. package/packages/bundled-features/src/template-resolver/web/use-stable-by-key.ts +0 -1
  401. package/packages/bundled-features/src/tenant/handlers/add-member.write.ts +1 -1
  402. package/packages/bundled-features/src/tenant/index.ts +7 -7
  403. package/packages/bundled-features/src/tenant/invitation-table.ts +1 -1
  404. package/packages/bundled-features/src/tenant/invited-membership.ts +1 -1
  405. package/packages/bundled-features/src/tenant/last-tenant-admin.ts +1 -1
  406. package/packages/bundled-features/src/tenant/member-role-options.ts +1 -1
  407. package/packages/bundled-features/src/tenant/screens.ts +2 -2
  408. package/packages/bundled-features/src/tenant/web/client-plugin.tsx +1 -2
  409. package/packages/bundled-features/src/tenant/{constants.ts → web/constants.ts} +3 -6
  410. package/packages/bundled-features/src/tenant/web/index.ts +0 -1
  411. package/packages/bundled-features/src/tenant/web/member-roles-cell.tsx +0 -1
  412. package/packages/bundled-features/src/tenant/web/member-status-cell.tsx +0 -1
  413. package/packages/bundled-features/src/tenant-lifecycle/stages.ts +2 -2
  414. package/packages/bundled-features/src/tier-engine/entity.ts +1 -1
  415. package/packages/bundled-features/src/tier-engine/feature.ts +7 -7
  416. package/packages/bundled-features/src/tier-engine/handlers/set-tenant-tier.write.ts +1 -1
  417. package/packages/bundled-features/src/tier-engine/index.ts +8 -8
  418. package/packages/bundled-features/src/tier-engine/web/client-plugin.tsx +2 -3
  419. package/packages/bundled-features/src/tier-engine/{constants.ts → web/constants.ts} +2 -3
  420. package/packages/bundled-features/src/tier-engine/{i18n.ts → web/i18n.ts} +0 -1
  421. package/packages/bundled-features/src/tier-engine/web/index.ts +0 -1
  422. package/packages/bundled-features/src/user/handlers/create.write.ts +1 -1
  423. package/packages/bundled-features/src/user/handlers/update-roles.ts +1 -1
  424. package/packages/bundled-features/src/user/handlers/update.write.ts +1 -1
  425. package/packages/bundled-features/src/user/index.ts +1 -1
  426. package/packages/bundled-features/src/user/invited-global-roles.ts +1 -1
  427. package/packages/bundled-features/src/user/schema/user.ts +1 -1
  428. package/packages/bundled-features/src/user/{constants.ts → web/constants.ts} +0 -1
  429. package/packages/bundled-features/src/user-data-rights/changes.json +14 -0
  430. package/packages/bundled-features/src/user-data-rights/env.ts +1 -1
  431. package/packages/bundled-features/src/user-data-rights/feature.ts +9 -9
  432. package/packages/bundled-features/src/user-data-rights/index.ts +1 -1
  433. package/packages/bundled-features/src/user-data-rights/lib/resolve-tenant-model.ts +1 -1
  434. package/packages/bundled-features/src/user-data-rights/mail-notifications.ts +1 -1
  435. package/packages/bundled-features/src/user-data-rights/web/client-plugin.tsx +2 -3
  436. package/packages/bundled-features/src/user-data-rights/web/confirm-deletion-screen.tsx +0 -1
  437. package/packages/bundled-features/src/user-data-rights/{constants.ts → web/constants.ts} +11 -12
  438. package/packages/bundled-features/src/user-data-rights/web/default-translations.ts +91 -0
  439. package/packages/bundled-features/src/user-data-rights/web/i18n.ts +41 -91
  440. package/packages/bundled-features/src/user-data-rights/web/index.ts +1 -2
  441. package/packages/bundled-features/src/user-data-rights/web/privacy-center-screen.tsx +1 -2
  442. package/packages/bundled-features/src/user-data-rights/web/public-deletion-gate.tsx +0 -1
  443. package/packages/bundled-features/src/user-data-rights/web/request-deletion-screen.tsx +0 -1
  444. package/packages/bundled-features/src/user-data-rights-defaults/hooks/file-ref.userdata-hook.ts +10 -1
  445. package/packages/bundled-features/src/user-profile/feature.ts +2 -2
  446. package/packages/bundled-features/src/user-profile/handlers/change-email.write.ts +1 -1
  447. package/packages/bundled-features/src/user-profile/index.ts +3 -2
  448. package/packages/bundled-features/src/user-profile/web/client-plugin.ts +2 -3
  449. package/packages/bundled-features/src/user-profile/{constants.ts → web/constants.ts} +0 -1
  450. package/packages/bundled-features/src/user-profile/{i18n.ts → web/i18n.ts} +0 -1
  451. package/packages/bundled-features/src/user-profile/web/profile-screen.tsx +2 -3
  452. package/packages/bundled-features/src/waitlist/changes.json +6 -0
  453. package/packages/bundled-features/src/waitlist/entity.ts +1 -1
  454. package/packages/bundled-features/src/waitlist/feature.ts +5 -5
  455. package/packages/bundled-features/src/waitlist/handlers/export-purge.write.ts +3 -3
  456. package/packages/bundled-features/src/waitlist/handlers/invite.write.ts +5 -1
  457. package/packages/bundled-features/src/waitlist/handlers/reject.write.ts +1 -1
  458. package/packages/bundled-features/src/waitlist/handlers/submit.write.ts +3 -3
  459. package/packages/bundled-features/src/waitlist/import.ts +1 -1
  460. package/packages/bundled-features/src/waitlist/index.ts +11 -11
  461. package/packages/bundled-features/src/waitlist/legacy-migrate.ts +1 -1
  462. package/packages/bundled-features/src/waitlist/link-on-signup.ts +1 -1
  463. package/packages/bundled-features/src/waitlist/mail.ts +7 -6
  464. package/packages/bundled-features/src/waitlist/payloads.ts +1 -1
  465. package/packages/bundled-features/src/waitlist/screens.ts +1 -1
  466. package/packages/bundled-features/src/waitlist/{constants.ts → web/constants.ts} +0 -1
  467. package/samples/apps/styleguide/src/features/content/web.tsx +0 -1
  468. package/samples/apps/ui-walkthrough/src/app/client.tsx +2 -0
  469. package/samples/apps/ui-walkthrough/src/app/seed-rental.ts +17 -1
  470. package/samples/apps/ui-walkthrough/src/app/seed-templates.ts +11 -0
  471. package/samples/apps/ui-walkthrough/src/app/server.ts +2 -1
  472. package/samples/apps/ui-walkthrough/src/features/billing/feature.ts +35 -7
  473. package/samples/apps/ui-walkthrough/src/features/billing/i18n.ts +6 -0
  474. package/samples/apps/ui-walkthrough/src/features/rental/entities.ts +27 -0
  475. package/samples/apps/ui-walkthrough/src/features/rental/feature.ts +61 -7
  476. package/samples/apps/ui-walkthrough/src/features/rental/i18n.ts +48 -24
  477. package/samples/apps/ui-walkthrough/src/features/rental/invoice-receive.ts +0 -1
  478. package/samples/apps/ui-walkthrough/src/features/rental/lease-support.ts +17 -1
  479. package/samples/apps/ui-walkthrough/src/features/rental/qualified-names.ts +3 -0
  480. package/samples/apps/ui-walkthrough/src/features/rental/receipts-upload.ts +70 -0
  481. package/samples/apps/ui-walkthrough/src/features/rental/screens.ts +90 -13
  482. package/samples/apps/ui-walkthrough/src/features/rental/web/index.ts +0 -2
  483. package/samples/apps/ui-walkthrough/src/features/subscription-plans/feature.ts +103 -0
  484. package/samples/apps/ui-walkthrough/src/features/subscription-plans/i18n.ts +36 -0
  485. package/samples/apps/ui-walkthrough/src/features/subscription-plans/index.ts +2 -0
  486. package/samples/apps/ui-walkthrough/src/features/subscription-plans/seed.ts +21 -0
  487. package/samples/apps/ui-walkthrough/src/run-config.ts +11 -0
  488. package/samples/apps/use-all-bundled/e2e-billing-gallery/server.ts +1 -1
  489. package/samples/apps/use-all-bundled/feature-manifest.json +4 -4
  490. package/samples/apps/use-all-bundled/scripts/check-coverage.ts +1 -1
  491. package/samples/apps/use-all-bundled/src/app/dev-app-options.ts +3 -1
  492. package/samples/recipes/compose-stacks/README.md +1 -2
  493. package/samples/recipes/embedded/README.md +5 -5
  494. package/samples/recipes/embedded/src/handlers/invoice-receive.write.ts +0 -1
  495. package/samples/recipes/embedded/src/screens/invoice-receive.screen.ts +9 -12
  496. package/samples/recipes/legal-pages/README.md +2 -2
  497. package/samples/recipes/legal-pages/src/feature.ts +1 -1
  498. package/samples/recipes/reference-data/src/feature.ts +3 -7
  499. package/packages/bundled-features/src/admin-shell/i18n.ts +0 -54
  500. package/packages/bundled-features/src/audit/i18n.ts +0 -25
  501. package/packages/bundled-features/src/auth-mfa/web/qrcode-browser.d.ts +0 -11
  502. package/packages/bundled-features/src/jobs/i18n.ts +0 -55
  503. package/packages/bundled-features/src/managed-pages/i18n.ts +0 -63
  504. package/packages/bundled-features/src/presets/dsgvo-self-service.ts +0 -35
  505. package/packages/bundled-features/src/user-data-rights/i18n.ts +0 -44
  506. package/samples/apps/ui-walkthrough/src/features/rental/web/upload-standard-layout.tsx +0 -61
@@ -0,0 +1,91 @@
1
+ // Default bundle for the apex deletion screens. Apps attach it as a fallback
2
+ // bundle in the LocaleProvider (createPublicSurface clientFeatures or directly)
3
+ // and may override single keys. Keys: `userDataRights.deletion.<step>.<slug>`.
4
+
5
+ import {
6
+ mergeTranslations,
7
+ type TranslationsByLocale,
8
+ translationsByLocaleFromKeys,
9
+ } from "@cosmicdrift/kumiko-renderer";
10
+ import { USER_DATA_RIGHTS_I18N } from "./i18n.ts";
11
+
12
+ const apexTranslations: TranslationsByLocale = {
13
+ en: {
14
+ "userDataRights.deletion.request.title": "Request account deletion",
15
+ "userDataRights.deletion.request.intro":
16
+ "Enter the email address of your account. If an account exists, we'll send you a confirmation link to delete it.",
17
+ "userDataRights.deletion.request.email": "Email",
18
+ "userDataRights.deletion.request.submit": "Request confirmation link",
19
+ "userDataRights.deletion.request.submitting": "…",
20
+ "userDataRights.deletion.request.successTitle": "Email sent",
21
+ "userDataRights.deletion.request.successBody":
22
+ "If the email exists in our system, a message with a confirmation link is on its way. Please check your inbox.",
23
+ "userDataRights.deletion.request.error": "Something went wrong. Please try again.",
24
+ "userDataRights.deletion.confirm.title": "Confirm account deletion",
25
+ "userDataRights.deletion.confirm.intro":
26
+ "Confirming starts the deletion grace period. Until it ends you can cancel the deletion from your logged-in account.",
27
+ "userDataRights.deletion.confirm.submit": "Confirm deletion",
28
+ "userDataRights.deletion.confirm.submitting": "…",
29
+ "userDataRights.deletion.confirm.successTitle": "Deletion scheduled",
30
+ "userDataRights.deletion.confirm.successBody":
31
+ "Your account will be deleted after the grace period. You can cancel the deletion from your logged-in account until then.",
32
+ "userDataRights.deletion.confirm.invalidToken":
33
+ "The link is invalid or expired. Please request a new one.",
34
+ "userDataRights.deletion.confirm.missingToken":
35
+ "No token found in the link. Please open the link from the email again.",
36
+ "userDataRights.deletion.confirm.error": "Something went wrong. Please try again.",
37
+
38
+ "userDataRights.privacyCenter.errors.generic": "Something went wrong. Please try again.",
39
+ "userDataRights.privacyCenter.field.status": "Account status",
40
+ "userDataRights.privacyCenter.field.gracePeriodEnd": "Scheduled deletion date",
41
+ "userDataRights.privacyCenter.field.status.option.active": "Active",
42
+ "userDataRights.privacyCenter.field.status.option.restricted": "Restricted",
43
+ "userDataRights.privacyCenter.field.status.option.deletionRequested": "Deletion requested",
44
+ "userDataRights.privacyCenter.field.status.option.deleted": "Deleted",
45
+
46
+ "userDataRights.privacyCenter.export.title": "Export your data (Art. 20)",
47
+ "userDataRights.privacyCenter.export.intro":
48
+ "Request a copy of your data. It is prepared in the background; once ready you can download it here.",
49
+ "userDataRights.privacyCenter.export.request": "Request data export",
50
+ "userDataRights.privacyCenter.export.requesting": "Requesting …",
51
+ "userDataRights.privacyCenter.export.pending":
52
+ "Your export is being prepared. Please check back later.",
53
+ "userDataRights.privacyCenter.export.failed":
54
+ "The last export failed to build. You can try again.",
55
+ "userDataRights.privacyCenter.export.ready": "Your export is ready.",
56
+ "userDataRights.privacyCenter.export.download": "Download export",
57
+ "userDataRights.privacyCenter.export.availableUntil": "Available until {date}",
58
+ "userDataRights.privacyCenter.export.requestNew": "Request a new export",
59
+
60
+ "userDataRights.privacyCenter.restriction.title": "Restrict processing (Art. 18)",
61
+ "userDataRights.privacyCenter.restriction.explainer":
62
+ "Freeze your account: processing of your data is paused and you are signed out. Lifting the restriction afterwards is only possible via support.",
63
+ "userDataRights.privacyCenter.restriction.restrict": "Restrict account",
64
+ "userDataRights.privacyCenter.restriction.dialogTitle": "Restrict your account?",
65
+ "userDataRights.privacyCenter.restriction.dialogDescription":
66
+ "You will be signed out immediately and cannot sign in again until support lifts the restriction.",
67
+
68
+ "userDataRights.privacyCenter.deletion.title": "Delete account (Art. 17)",
69
+ "userDataRights.privacyCenter.deletion.explainer":
70
+ "Request deletion of your account. Until the grace period ends you can cancel the deletion.",
71
+ "userDataRights.privacyCenter.deletion.delete": "Delete account",
72
+ "userDataRights.privacyCenter.deletion.cancel": "Cancel deletion",
73
+ "userDataRights.privacyCenter.deletion.dialogTitle": "Delete your account?",
74
+ "userDataRights.privacyCenter.deletion.dialogDescription":
75
+ "Confirming starts the deletion grace period. You can cancel the deletion until it ends.",
76
+
77
+ "userDataRights.errors.download.notFound":
78
+ "The download link is invalid or belongs to a different account.",
79
+ "userDataRights.errors.download.expired":
80
+ "Your download has expired. Please request a new export.",
81
+ "userDataRights.errors.download.unavailable":
82
+ "The export is not yet ready or has failed. Please check the status endpoint.",
83
+ "userDataRights.errors.download.signedUrlNotSupported":
84
+ "The download is currently unavailable due to a server configuration issue. The operator has been notified.",
85
+ },
86
+ };
87
+
88
+ export const defaultTranslations: TranslationsByLocale = mergeTranslations(
89
+ translationsByLocaleFromKeys(USER_DATA_RIGHTS_I18N),
90
+ apexTranslations,
91
+ );
@@ -1,93 +1,43 @@
1
- // @runtime client
2
- // Default-Bundle für die Apex-Deletion-Screens. Apps hängen es als
3
- // Fallback-Bundle in den LocaleProvider (createPublicSurface clientFeatures
4
- // oder direkt) und können einzelne Keys überschreiben. Keys: `userDataRights.
5
- // deletion.<step>.<slug>`.
6
-
7
- import {
8
- mergeTranslations,
9
- type TranslationsByLocale,
10
- translationsByLocaleFromKeys,
11
- } from "@cosmicdrift/kumiko-renderer";
12
- import { USER_DATA_RIGHTS_I18N } from "../i18n.ts";
13
-
14
- const apexTranslations: TranslationsByLocale = {
15
- en: {
16
- "userDataRights.deletion.request.title": "Request account deletion",
17
- "userDataRights.deletion.request.intro":
18
- "Enter the email address of your account. If an account exists, we'll send you a confirmation link to delete it.",
19
- "userDataRights.deletion.request.email": "Email",
20
- "userDataRights.deletion.request.submit": "Request confirmation link",
21
- "userDataRights.deletion.request.submitting": "…",
22
- "userDataRights.deletion.request.successTitle": "Email sent",
23
- "userDataRights.deletion.request.successBody":
24
- "If the email exists in our system, a message with a confirmation link is on its way. Please check your inbox.",
25
- "userDataRights.deletion.request.error": "Something went wrong. Please try again.",
26
- "userDataRights.deletion.confirm.title": "Confirm account deletion",
27
- "userDataRights.deletion.confirm.intro":
28
- "Confirming starts the deletion grace period. Until it ends you can cancel the deletion from your logged-in account.",
29
- "userDataRights.deletion.confirm.submit": "Confirm deletion",
30
- "userDataRights.deletion.confirm.submitting": "…",
31
- "userDataRights.deletion.confirm.successTitle": "Deletion scheduled",
32
- "userDataRights.deletion.confirm.successBody":
33
- "Your account will be deleted after the grace period. You can cancel the deletion from your logged-in account until then.",
34
- "userDataRights.deletion.confirm.invalidToken":
35
- "The link is invalid or expired. Please request a new one.",
36
- "userDataRights.deletion.confirm.missingToken":
37
- "No token found in the link. Please open the link from the email again.",
38
- "userDataRights.deletion.confirm.error": "Something went wrong. Please try again.",
39
-
40
- "userDataRights.privacyCenter.errors.generic": "Something went wrong. Please try again.",
41
- "userDataRights.privacyCenter.field.status": "Account status",
42
- "userDataRights.privacyCenter.field.gracePeriodEnd": "Scheduled deletion date",
43
- "userDataRights.privacyCenter.field.status.option.active": "Active",
44
- "userDataRights.privacyCenter.field.status.option.restricted": "Restricted",
45
- "userDataRights.privacyCenter.field.status.option.deletionRequested": "Deletion requested",
46
- "userDataRights.privacyCenter.field.status.option.deleted": "Deleted",
47
-
48
- "userDataRights.privacyCenter.export.title": "Export your data (Art. 20)",
49
- "userDataRights.privacyCenter.export.intro":
50
- "Request a copy of your data. It is prepared in the background; once ready you can download it here.",
51
- "userDataRights.privacyCenter.export.request": "Request data export",
52
- "userDataRights.privacyCenter.export.requesting": "Requesting …",
53
- "userDataRights.privacyCenter.export.pending":
54
- "Your export is being prepared. Please check back later.",
55
- "userDataRights.privacyCenter.export.failed":
56
- "The last export failed to build. You can try again.",
57
- "userDataRights.privacyCenter.export.ready": "Your export is ready.",
58
- "userDataRights.privacyCenter.export.download": "Download export",
59
- "userDataRights.privacyCenter.export.availableUntil": "Available until {date}",
60
- "userDataRights.privacyCenter.export.requestNew": "Request a new export",
61
-
62
- "userDataRights.privacyCenter.restriction.title": "Restrict processing (Art. 18)",
63
- "userDataRights.privacyCenter.restriction.explainer":
64
- "Freeze your account: processing of your data is paused and you are signed out. Lifting the restriction afterwards is only possible via support.",
65
- "userDataRights.privacyCenter.restriction.restrict": "Restrict account",
66
- "userDataRights.privacyCenter.restriction.dialogTitle": "Restrict your account?",
67
- "userDataRights.privacyCenter.restriction.dialogDescription":
68
- "You will be signed out immediately and cannot sign in again until support lifts the restriction.",
69
-
70
- "userDataRights.privacyCenter.deletion.title": "Delete account (Art. 17)",
71
- "userDataRights.privacyCenter.deletion.explainer":
72
- "Request deletion of your account. Until the grace period ends you can cancel the deletion.",
73
- "userDataRights.privacyCenter.deletion.delete": "Delete account",
74
- "userDataRights.privacyCenter.deletion.cancel": "Cancel deletion",
75
- "userDataRights.privacyCenter.deletion.dialogTitle": "Delete your account?",
76
- "userDataRights.privacyCenter.deletion.dialogDescription":
77
- "Confirming starts the deletion grace period. You can cancel the deletion until it ends.",
78
-
79
- "userDataRights.errors.download.notFound":
80
- "The download link is invalid or belongs to a different account.",
81
- "userDataRights.errors.download.expired":
82
- "Your download has expired. Please request a new export.",
83
- "userDataRights.errors.download.unavailable":
84
- "The export is not yet ready or has failed. Please check the status endpoint.",
85
- "userDataRights.errors.download.signedUrlNotSupported":
86
- "The download is currently unavailable due to a server configuration issue. The operator has been notified.",
1
+ // Server + client i18n for user-data-rights (operator screens + nav). Pure
2
+ // data, importable from the web bundle (web/default-translations.ts derives the client keys).
3
+ type LocalizedString = { readonly en: string };
4
+
5
+ export const USER_DATA_RIGHTS_I18N: Readonly<Record<string, LocalizedString>> = {
6
+ "user-data-rights:feature.label": { en: "Privacy" },
7
+ "user-data-rights:notify.export-ready.label": { en: "Data export ready" },
8
+ "user-data-rights:notify.export-failed.label": { en: "Data export failed" },
9
+ "user-data-rights:notify.deletion-requested.label": { en: "Deletion requested" },
10
+ "user-data-rights:notify.deletion-executed.label": { en: "Deletion completed" },
11
+ "user-data-rights:nav.exportJobs": { en: "GDPR exports" },
12
+ "screen:export-job-list.title": { en: "GDPR exports" },
13
+ "screen:export-job-detail.title": { en: "Export job" },
14
+ "screen:download-attempt-list.title": { en: "Download attempts" },
15
+ "screen:privacy-center.title": { en: "Privacy" },
16
+ "userDataRights.privacyCenter.subtitle": {
17
+ en: "Logged-in GDPR self-service page where a user requests and downloads a data export (Art. 20), restricts processing of their account (Art. 18) and requests its deletion (Art. 17).",
18
+ },
19
+ "user-data-rights:entity:export-job:field:userId": { en: "User" },
20
+ "user-data-rights:entity:export-job:field:status": { en: "Status" },
21
+ "user-data-rights:entity:export-job:field:requestedAt": { en: "Requested" },
22
+ "user-data-rights:entity:export-job:field:completedAt": { en: "Completed" },
23
+ "user-data-rights:entity:export-job:field:expiresAt": { en: "Expires" },
24
+ "user-data-rights:entity:export-job:field:requestedFromTenantId": {
25
+ en: "Tenant",
26
+ },
27
+ "user-data-rights:entity:export-job:field:startedAt": { en: "Started" },
28
+ "user-data-rights:entity:export-job:field:downloadStorageKey": {
29
+ en: "Storage key",
87
30
  },
31
+ "user-data-rights:entity:export-job:field:bytesWritten": { en: "Bytes" },
32
+ "user-data-rights:entity:export-job:field:errorMessage": { en: "Error" },
33
+ "user-data-rights:entity:download-attempt:field:attemptedAt": {
34
+ en: "Attempted at",
35
+ },
36
+ "user-data-rights:entity:download-attempt:field:result": { en: "Result" },
37
+ "user-data-rights:entity:download-attempt:field:via": { en: "Via" },
38
+ "user-data-rights:entity:download-attempt:field:ip": { en: "IP" },
39
+ "user-data-rights:entity:download-attempt:field:attemptedByUserId": {
40
+ en: "User",
41
+ },
42
+ "user-data-rights:entity:download-attempt:field:jobId": { en: "Job" },
88
43
  };
89
-
90
- export const defaultTranslations: TranslationsByLocale = mergeTranslations(
91
- translationsByLocaleFromKeys(USER_DATA_RIGHTS_I18N),
92
- apexTranslations,
93
- );
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Public exports für die Browser-Seite des user-data-rights Features —
3
2
  // die anonymen Apex-Deletion-Screens. Konsumiert via Sub-Path-Export
4
3
  // `@cosmicdrift/kumiko-bundled-features/user-data-rights/web`. Die Server-
@@ -8,7 +7,7 @@
8
7
  export { type UserDataRightsClientOptions, userDataRightsClient } from "./client-plugin.tsx";
9
8
  export type { ConfirmAccountDeletionScreenProps } from "./confirm-deletion-screen.tsx";
10
9
  export { ConfirmAccountDeletionScreen } from "./confirm-deletion-screen.tsx";
11
- export { defaultTranslations } from "./i18n.ts";
10
+ export { defaultTranslations } from "./default-translations.ts";
12
11
  export { formatDate } from "./privacy-center-screen.tsx";
13
12
  export { makePublicDeletionGate, type PublicDeletionRoutes } from "./public-deletion-gate.tsx";
14
13
  export type { RequestAccountDeletionScreenProps } from "./request-deletion-screen.tsx";
@@ -1,5 +1,4 @@
1
1
  import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-renderer/headless";
2
- // @runtime client
3
2
  // Export section (Art. 20) — the one part of user-data-rights' privacy-center
4
3
  // screen that stays custom (fw#2312). Registered as an EditExtensionSection
5
4
  // component (see web/client-plugin.tsx); the projectionDetail screen
@@ -25,7 +24,7 @@ import {
25
24
  type ExportJobStatus,
26
25
  UserDataRightsHandlers,
27
26
  UserDataRightsQueries,
28
- } from "../constants.ts";
27
+ } from "./constants.ts";
29
28
 
30
29
  // Export-Job läuft async (worker-Lane-Cron, ~1 Min). Solange er pending/running
31
30
  // ist, pollt der Screen den Status, damit der Download ohne manuellen Reload
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Public-Gate für die anonyme Account-Löschung. Matcht window.location.pathname:
3
2
  // requestPath → RequestAccountDeletionScreen, confirmPath →
4
3
  // ConfirmAccountDeletionScreen, sonst durch zur App. Spiegelt makeAuthGate
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // RequestAccountDeletionScreen — anonymer Apex-Screen Schritt 1. Email-Form
3
2
  // → user-data-rights:write:request-deletion-by-email. Enumeration-safe: zeigt
4
3
  // unconditional ein "Falls Account existiert, Mail unterwegs"-Confirm, auch
@@ -15,7 +15,11 @@ import {
15
15
  type UserDataStorageProvider,
16
16
  } from "@cosmicdrift/kumiko-framework/engine";
17
17
  import { InternalError } from "@cosmicdrift/kumiko-framework/errors";
18
- import { fileRefEntity, fileRefsTable } from "@cosmicdrift/kumiko-framework/files";
18
+ import {
19
+ fileRefEntity,
20
+ fileRefsTable,
21
+ resolveActionFormFileField,
22
+ } from "@cosmicdrift/kumiko-framework/files";
19
23
  import { collectErasureFailure, throwIfErasureFailed } from "../../shared/index.ts";
20
24
 
21
25
  const ERROR_CONTEXT = "user-data-rights-defaults:fileRef";
@@ -166,6 +170,8 @@ function isPersonalPiiField(field: FieldDefinition | undefined): boolean {
166
170
  // 2. Field exists but carries no PII annotation → anonymize (the
167
171
  // conservative path); the boot-validator warns on a PII-typical field
168
172
  // name so this stays visible and quiet-fixable via `personal`.
173
+ // 2b. Pending upload of an actionForm files field (entityType = screen QN, entityId null):
174
+ // nothing owns it yet, so it is personal to its uploader and hard-deleted like case 1.
169
175
  // 3. Entity or field not resolvable (upload hardening in file-routes.ts
170
176
  // should prevent this from ever being written; theoretical remainder
171
177
  // only) → anonymize, never a silent hard-delete.
@@ -174,6 +180,9 @@ function isPersonalFileRow(registry: Registry, row: Record<string, unknown>): bo
174
180
  const fieldName = row["fieldName"]; // @cast-boundary db-row
175
181
  if (entityType === null && fieldName === null) return true;
176
182
  if (typeof entityType !== "string" || typeof fieldName !== "string") return false;
183
+ if (row["entityId"] === null && resolveActionFormFileField(registry, entityType, fieldName)) {
184
+ return true;
185
+ }
177
186
  const fieldDef = registry.getEntity(entityType)?.fields[fieldName];
178
187
  return isPersonalPiiField(fieldDef);
179
188
  }
@@ -3,14 +3,14 @@ import {
3
3
  type FeatureDefinition,
4
4
  i18nKey,
5
5
  } from "@cosmicdrift/kumiko-framework/engine";
6
+ import { changeEmailWrite } from "./handlers/change-email.write.ts";
6
7
  import {
7
8
  CHANGE_EMAIL_SECTION_EXTENSION_NAME,
8
9
  CHANGE_PASSWORD_SECTION_EXTENSION_NAME,
9
10
  PROFILE_SCREEN_ID,
10
11
  UserDataRightsHandlers,
11
12
  UserProfileQueries,
12
- } from "./constants.ts";
13
- import { changeEmailWrite } from "./handlers/change-email.write.ts";
13
+ } from "./web/constants.ts";
14
14
 
15
15
  export type UserProfileFeatureOptions = {
16
16
  /** Default true. false drops the change-email handler and the email
@@ -8,7 +8,7 @@ import * as z from "zod";
8
8
  import { AuthErrors } from "../../auth-email-password/index.ts";
9
9
  import { decryptStoredPii, verifyPassword } from "../../shared/index.ts";
10
10
  import { UserErrors, UserHandlers, UserQueries } from "../../user/index.ts";
11
- import { UserProfileErrors } from "../constants.ts";
11
+ import { UserProfileErrors } from "../web/constants.ts";
12
12
 
13
13
  // Gleiche Failure-Shape wie auth-email-password (anti-enumeration):
14
14
  // dessen errors.ts ist nicht Teil des Feature-Barrels, der Reason-Code
@@ -1,11 +1,12 @@
1
1
  // Bewusst OHNE i18n-Export: das Server-Barrel muss von Server-Samples
2
2
  // ohne jsx-tsconfig kompilierbar bleiben (i18n zieht kumiko-renderer →
3
3
  // .tsx). Translations kommen via ./web (userProfileClient).
4
+
5
+ export { createUserProfileFeature, type UserProfileFeatureOptions } from "./feature.ts";
4
6
  export {
5
7
  USER_PROFILE_FEATURE,
6
8
  UserDataRightsHandlers,
7
9
  UserProfileErrors,
8
10
  UserProfileHandlers,
9
11
  UserProfileQueries,
10
- } from "./constants.ts";
11
- export { createUserProfileFeature, type UserProfileFeatureOptions } from "./feature.ts";
12
+ } from "./web/constants.ts";
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  import {
3
2
  type ExtensionSectionComponent,
4
3
  mergeTranslations,
@@ -8,8 +7,8 @@ import type { ComponentType, ReactNode } from "react";
8
7
  import {
9
8
  CHANGE_EMAIL_SECTION_EXTENSION_NAME,
10
9
  CHANGE_PASSWORD_SECTION_EXTENSION_NAME,
11
- } from "../constants.ts";
12
- import { defaultTranslations } from "../i18n.ts";
10
+ } from "./constants.ts";
11
+ import { defaultTranslations } from "./i18n.ts";
13
12
  import { ChangeEmailSection, ChangePasswordSection } from "./profile-screen.tsx";
14
13
 
15
14
  export type UserProfileClientOptions = {
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Plain string constants — client-marked so web/profile-screen.tsx can
3
2
  // import them; runtime code (handlers/feature) may pull client files anyway.
4
3
 
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Default bundles for the `profile` screen. userProfileClient() hangs this
3
2
  // in the LocaleProvider as a fallback bundle — apps override individual keys
4
3
  // via `userProfileClient({ translations })`.
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Change-password and change-email sections for the declarative `profile`
3
2
  // projectionDetail screen (fw#2312, ../feature.ts). Both keep re-auth flows
4
3
  // a declarative action can't express, so they stay React `EditExtensionSection`
@@ -15,9 +14,9 @@ import {
15
14
  } from "@cosmicdrift/kumiko-renderer";
16
15
  import { propertyOf } from "@cosmicdrift/kumiko-types/type-guards";
17
16
  import { type ReactNode, useState } from "react";
18
- import { AuthHandlers } from "../../auth-email-password/constants.ts";
17
+ import { AuthHandlers } from "../../auth-email-password/web/constants.ts";
19
18
  import { requestEmailVerification } from "../../auth-email-password/web/index.ts";
20
- import { UserProfileHandlers } from "../constants.ts";
19
+ import { UserProfileHandlers } from "./constants.ts";
21
20
 
22
21
  type SectionStatus =
23
22
  | { kind: "idle" }
@@ -1,4 +1,10 @@
1
1
  [
2
+ {
3
+ "version": "0.379.0",
4
+ "type": "improvement",
5
+ "title": "Spanish admin notice for new waitlist entries",
6
+ "detail": "The operator notice \"new entry on the waitlist\" now exists in Spanish, like the entrant's confirmation. It follows the locale of the request that created the entry and falls back to English."
7
+ },
2
8
  {
3
9
  "version": "0.377.0",
4
10
  "type": "fix",
@@ -6,7 +6,7 @@ import {
6
6
  createTextField,
7
7
  createTimestampField,
8
8
  } from "@cosmicdrift/kumiko-framework/engine";
9
- import { WAITLIST_STATUS, type WaitlistStatus } from "./constants.ts";
9
+ import { WAITLIST_STATUS, type WaitlistStatus } from "./web/constants.ts";
10
10
 
11
11
  const WAITLIST_STATUS_OPTIONS = [
12
12
  WAITLIST_STATUS.Pending,
@@ -4,11 +4,6 @@ import {
4
4
  type FeatureDefinition,
5
5
  i18nKey,
6
6
  } from "@cosmicdrift/kumiko-framework/engine";
7
- import {
8
- WAITLIST_EXPORTED_EVENT_SHORT,
9
- WAITLIST_FEATURE,
10
- WAITLIST_PURGED_EVENT_SHORT,
11
- } from "./constants.ts";
12
7
  import { waitlistEntryEntity } from "./entity.ts";
13
8
  import { exportHandler, purgeHandler } from "./handlers/export-purge.write.ts";
14
9
  import { createInviteHandler } from "./handlers/invite.write.ts";
@@ -29,6 +24,11 @@ import type { WaitlistOptions } from "./options.ts";
29
24
  import { WaitlistAuditEventSchema } from "./payloads.ts";
30
25
  import { waitlistListScreen } from "./screens.ts";
31
26
  import { waitlistEntryDeleteHook, waitlistEntryExportHook } from "./user-data-hooks.ts";
27
+ import {
28
+ WAITLIST_EXPORTED_EVENT_SHORT,
29
+ WAITLIST_FEATURE,
30
+ WAITLIST_PURGED_EVENT_SHORT,
31
+ } from "./web/constants.ts";
32
32
 
33
33
  export function createWaitlistFeature(opts: WaitlistOptions = {}): FeatureDefinition {
34
34
  return defineFeature(WAITLIST_FEATURE, (r) => {
@@ -2,14 +2,14 @@ import { defineWriteHandler, type HandlerContext } from "@cosmicdrift/kumiko-fra
2
2
  import { UnprocessableError, writeFailure } from "@cosmicdrift/kumiko-framework/errors";
3
3
  import { generateId } from "@cosmicdrift/kumiko-framework/utils";
4
4
  import * as z from "zod";
5
+ import { listAllWaitlistRows, purgeWaitlistRows } from "../entries-admin.ts";
6
+ import { adminAccess, waitlistDb } from "../lib.ts";
5
7
  import {
6
8
  WAITLIST_AUDIT_AGGREGATE_TYPE,
7
9
  WAITLIST_EXPORTED_EVENT_QN,
8
10
  WAITLIST_PURGED_EVENT_QN,
9
11
  WaitlistErrors,
10
- } from "../constants.ts";
11
- import { listAllWaitlistRows, purgeWaitlistRows } from "../entries-admin.ts";
12
- import { adminAccess, waitlistDb } from "../lib.ts";
12
+ } from "../web/constants.ts";
13
13
 
14
14
  export type WaitlistExportData = {
15
15
  readonly count: number;
@@ -16,7 +16,6 @@ import {
16
16
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
17
17
  import { AuthErrors, AuthHandlers } from "../../auth-email-password/index.ts";
18
18
  import { TenantHandlers, tenantTable } from "../../tenant/index.ts";
19
- import { DEFAULT_OWN_TENANT_INVITE_ROLE, WAITLIST_STATUS, WaitlistErrors } from "../constants.ts";
20
19
  import { isOpenWaitlistStatus } from "../entity.ts";
21
20
  import {
22
21
  adminAccess,
@@ -27,6 +26,11 @@ import {
27
26
  } from "../lib.ts";
28
27
  import type { WaitlistInviteOptions } from "../options.ts";
29
28
  import { WaitlistIdSchema } from "../payloads.ts";
29
+ import {
30
+ DEFAULT_OWN_TENANT_INVITE_ROLE,
31
+ WAITLIST_STATUS,
32
+ WaitlistErrors,
33
+ } from "../web/constants.ts";
30
34
 
31
35
  export type WaitlistInviteData = {
32
36
  readonly kind: "invited";
@@ -17,7 +17,6 @@ import {
17
17
  INVITATION_STATUS,
18
18
  tenantInvitationsTable,
19
19
  } from "../../tenant/index.ts";
20
- import { WAITLIST_STATUS, WaitlistErrors } from "../constants.ts";
21
20
  import { isOpenWaitlistStatus } from "../entity.ts";
22
21
  import {
23
22
  adminAccess,
@@ -28,6 +27,7 @@ import {
28
27
  waitlistExecutor,
29
28
  } from "../lib.ts";
30
29
  import { WaitlistIdSchema } from "../payloads.ts";
30
+ import { WAITLIST_STATUS, WaitlistErrors } from "../web/constants.ts";
31
31
 
32
32
  export type WaitlistRejectData = { readonly kind: "rejected"; readonly id: string };
33
33
 
@@ -7,10 +7,8 @@ import {
7
7
  } from "@cosmicdrift/kumiko-framework/engine";
8
8
  import { InternalError } from "@cosmicdrift/kumiko-framework/errors";
9
9
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
10
- import { WAITLIST_NOTIFICATION_TYPES, WAITLIST_STATUS } from "../constants.ts";
11
10
  import { normalizeEmail, platformActor, waitlistDb, waitlistExecutor } from "../lib.ts";
12
11
  import {
13
- resolveWaitlistAdminMailLocale,
14
12
  resolveWaitlistMailLocale,
15
13
  waitlistAdminNoticeVariables,
16
14
  waitlistConfirmationVariables,
@@ -21,6 +19,7 @@ import {
21
19
  type WaitlistOptions,
22
20
  } from "../options.ts";
23
21
  import { type WaitlistSubmitInput, WaitlistSubmitSchema } from "../payloads.ts";
22
+ import { WAITLIST_NOTIFICATION_TYPES, WAITLIST_STATUS } from "../web/constants.ts";
24
23
 
25
24
  // pg_advisory_xact_lock namespace (int4): 'wlst' as ASCII, disjoint from the
26
25
  // framework's other fixed advisory-lock keys.
@@ -176,7 +175,8 @@ export function createSubmitHandler(opts: WaitlistOptions) {
176
175
  message: payload.message,
177
176
  }),
178
177
  priority: "normal",
179
- locale: resolveWaitlistAdminMailLocale(ctx.locale),
178
+ // Operator-facing: the request locale, not the one the entrant picked in the form.
179
+ locale: resolveWaitlistMailLocale(ctx.locale),
180
180
  });
181
181
  });
182
182
 
@@ -2,8 +2,8 @@ import { createHash } from "node:crypto";
2
2
  import type { TenantDb } from "@cosmicdrift/kumiko-framework/db";
3
3
  import { InternalError } from "@cosmicdrift/kumiko-framework/errors";
4
4
  import type { Temporal } from "@cosmicdrift/kumiko-types/temporal";
5
- import type { WaitlistStatus } from "./constants.ts";
6
5
  import { normalizeEmail, platformActor, waitlistExecutor } from "./lib.ts";
6
+ import type { WaitlistStatus } from "./web/constants.ts";
7
7
 
8
8
  export type WaitlistImportEntry = {
9
9
  /** Stable identity of the source row (e.g. `offlot:<uuid>`); the new entry id derives from it. */
@@ -1,14 +1,3 @@
1
- export {
2
- DEFAULT_OWN_TENANT_INVITE_ROLE,
3
- WAITLIST_FEATURE,
4
- WAITLIST_FIELD_LIMITS,
5
- WAITLIST_NOTIFICATION_TYPES,
6
- WAITLIST_STATUS,
7
- WaitlistErrors,
8
- WaitlistHandlers,
9
- WaitlistQueries,
10
- type WaitlistStatus,
11
- } from "./constants.ts";
12
1
  export { isOpenWaitlistStatus, waitlistEntryEntity, waitlistEntryTable } from "./entity.ts";
13
2
  export { createWaitlistFeature } from "./feature.ts";
14
3
  export {
@@ -31,3 +20,14 @@ export {
31
20
  } from "./legacy-migrate.ts";
32
21
  export type { WaitlistInviteOptions, WaitlistOptions } from "./options.ts";
33
22
  export { type WaitlistSubmitInput, WaitlistSubmitSchema } from "./payloads.ts";
23
+ export {
24
+ DEFAULT_OWN_TENANT_INVITE_ROLE,
25
+ WAITLIST_FEATURE,
26
+ WAITLIST_FIELD_LIMITS,
27
+ WAITLIST_NOTIFICATION_TYPES,
28
+ WAITLIST_STATUS,
29
+ WaitlistErrors,
30
+ WaitlistHandlers,
31
+ WaitlistQueries,
32
+ type WaitlistStatus,
33
+ } from "./web/constants.ts";
@@ -23,8 +23,8 @@ import {
23
23
  } from "@cosmicdrift/kumiko-framework/event-store";
24
24
  import type { DbConnection } from "@cosmicdrift/kumiko-types/db-connection";
25
25
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
26
- import { WAITLIST_STATUS, type WaitlistStatus } from "./constants.ts";
27
26
  import { importWaitlistEntry, type WaitlistImportEntry, waitlistImportId } from "./import.ts";
27
+ import { WAITLIST_STATUS, type WaitlistStatus } from "./web/constants.ts";
28
28
 
29
29
  export const LEGACY_WAITLIST_SOURCES = ["offlot", "publicstatus"] as const;
30
30
  export type LegacyWaitlistSource = (typeof LEGACY_WAITLIST_SOURCES)[number];
@@ -10,8 +10,8 @@ import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
10
10
  import { decryptStoredPii } from "../shared/index.ts";
11
11
  import { tenantMembershipsTable } from "../tenant/index.ts";
12
12
  import { userTable } from "../user/index.ts";
13
- import { DEFAULT_OWN_TENANT_INVITE_ROLE, WAITLIST_STATUS } from "./constants.ts";
14
13
  import { normalizeEmail, platformActor, waitlistExecutor } from "./lib.ts";
14
+ import { DEFAULT_OWN_TENANT_INVITE_ROLE, WAITLIST_STATUS } from "./web/constants.ts";
15
15
 
16
16
  const PII_DECRYPT_REASON = "waitlist:link-on-signup";
17
17
 
@@ -50,7 +50,7 @@ type AdminNoticeStrings = {
50
50
  readonly footer: string;
51
51
  };
52
52
 
53
- const ADMIN_NOTICE_STRINGS: Readonly<Record<"en" | "de", AdminNoticeStrings>> = {
53
+ const ADMIN_NOTICE_STRINGS: Readonly<Record<WaitlistMailLocale, AdminNoticeStrings>> = {
54
54
  en: {
55
55
  subject: (name) => `New waitlist entry: ${name}`,
56
56
  header: "New waitlist entry",
@@ -63,6 +63,12 @@ const ADMIN_NOTICE_STRINGS: Readonly<Record<"en" | "de", AdminNoticeStrings>> =
63
63
  intro: "Jemand hat sich gerade auf die Warteliste eingetragen.",
64
64
  footer: "Den Eintrag findest du in der Wartelisten-Verwaltung.",
65
65
  },
66
+ es: {
67
+ subject: (name) => `Nueva entrada en la lista de espera: ${name}`,
68
+ header: "Nueva entrada en la lista de espera",
69
+ intro: "Alguien acaba de unirse a la lista de espera.",
70
+ footer: "Revisa la entrada en la administración de la lista de espera.",
71
+ },
66
72
  };
67
73
 
68
74
  function languageOf(locale: string | undefined): string {
@@ -126,11 +132,6 @@ export function waitlistConfirmationTemplate(): NotificationLocalizedTemplate {
126
132
  );
127
133
  }
128
134
 
129
- // Operator-facing, so the entrant's locale does not apply: en/de, en default.
130
- export function resolveWaitlistAdminMailLocale(adminLocale: string | undefined): "en" | "de" {
131
- return languageOf(adminLocale) === "de" ? "de" : "en";
132
- }
133
-
134
135
  export function waitlistAdminNoticeVariables(args: {
135
136
  readonly name: string;
136
137
  readonly email: string;