@cosmicdrift/kumiko-bundled-features 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 (632) hide show
  1. package/dist/account-security/feature.js +2 -2
  2. package/dist/account-security/index.d.ts +2 -2
  3. package/dist/account-security/index.js +2 -2
  4. package/dist/account-security/{constants.js → web/constants.js} +0 -1
  5. package/dist/account-security/{i18n.js → web/i18n.js} +0 -1
  6. package/dist/admin-shell/feature.js +4 -3
  7. package/dist/admin-shell/index.d.ts +2 -2
  8. package/dist/admin-shell/index.js +2 -2
  9. package/dist/admin-shell/web/client-plugin.js +2 -3
  10. package/dist/admin-shell/{constants.js → web/constants.js} +0 -1
  11. package/dist/admin-shell/web/default-translations.d.ts +2 -0
  12. package/dist/admin-shell/web/default-translations.js +4 -0
  13. package/dist/admin-shell/web/i18n.d.ts +5 -2
  14. package/dist/admin-shell/web/i18n.js +50 -5
  15. package/dist/admin-shell/web/index.js +0 -1
  16. package/dist/audit/feature.js +58 -59
  17. package/dist/audit/handlers/audit-events.d.ts +102 -0
  18. package/dist/audit/handlers/audit-events.js +112 -0
  19. package/dist/audit/handlers/audit-system-db.d.ts +1 -0
  20. package/dist/audit/handlers/audit-system-db.js +9 -0
  21. package/dist/audit/handlers/details-all-tenants.query.d.ts +15 -0
  22. package/dist/audit/handlers/details-all-tenants.query.js +20 -0
  23. package/dist/audit/handlers/details.query.d.ts +2 -1
  24. package/dist/audit/handlers/details.query.js +8 -24
  25. package/dist/audit/handlers/list-all-tenants.query.d.ts +41 -0
  26. package/dist/audit/handlers/list-all-tenants.query.js +32 -0
  27. package/dist/audit/handlers/list.query.d.ts +2 -1
  28. package/dist/audit/handlers/list.query.js +9 -99
  29. package/dist/audit/handlers/resolve-audit-tenant.d.ts +3 -1
  30. package/dist/audit/handlers/resolve-audit-tenant.js +21 -7
  31. package/dist/audit/index.d.ts +1 -1
  32. package/dist/audit/index.js +1 -1
  33. package/dist/audit/run-escape-hatch-retention.js +1 -1
  34. package/dist/audit/screens.d.ts +65 -0
  35. package/dist/audit/screens.js +73 -0
  36. package/dist/audit/web/client-plugin.js +2 -3
  37. package/dist/audit/{constants.d.ts → web/constants.d.ts} +8 -0
  38. package/dist/audit/{constants.js → web/constants.js} +8 -1
  39. package/dist/audit/web/default-translations.d.ts +2 -0
  40. package/dist/audit/web/default-translations.js +3 -0
  41. package/dist/audit/web/i18n.d.ts +5 -2
  42. package/dist/audit/web/i18n.js +31 -4
  43. package/dist/audit/web/index.js +0 -1
  44. package/dist/auth-email-password/bootstrap.d.ts +1 -1
  45. package/dist/auth-email-password/bootstrap.js +4 -4
  46. package/dist/auth-email-password/errors.js +1 -1
  47. package/dist/auth-email-password/feature.js +2 -2
  48. package/dist/auth-email-password/handlers/confirm-account-unlock.write.js +1 -1
  49. package/dist/auth-email-password/handlers/invite-accept-with-login.write.js +1 -1
  50. package/dist/auth-email-password/handlers/invite-create.write.d.ts +1 -1
  51. package/dist/auth-email-password/handlers/invite-create.write.js +3 -3
  52. package/dist/auth-email-password/handlers/invite-info.query.js +1 -1
  53. package/dist/auth-email-password/handlers/login.write.d.ts +1 -0
  54. package/dist/auth-email-password/handlers/login.write.js +26 -1
  55. package/dist/auth-email-password/handlers/request-account-unlock.write.js +1 -1
  56. package/dist/auth-email-password/handlers/request-email-verification.write.js +1 -1
  57. package/dist/auth-email-password/handlers/request-password-reset.write.js +1 -1
  58. package/dist/auth-email-password/handlers/reset-password.write.js +1 -1
  59. package/dist/auth-email-password/handlers/verify-email.write.js +1 -1
  60. package/dist/auth-email-password/index.d.ts +1 -1
  61. package/dist/auth-email-password/index.js +1 -1
  62. package/dist/auth-email-password/mail-notifications.js +1 -1
  63. package/dist/auth-email-password/signup-activation.js +1 -1
  64. package/dist/auth-email-password/web/auth-client.js +0 -1
  65. package/dist/auth-email-password/web/auth-form-logic.js +0 -1
  66. package/dist/auth-email-password/web/auth-form-primitives.js +0 -1
  67. package/dist/auth-email-password/web/auth-gate.js +0 -1
  68. package/dist/auth-email-password/web/auth-redirect.js +0 -1
  69. package/dist/auth-email-password/web/client-actions.js +0 -1
  70. package/dist/auth-email-password/web/client-plugin.js +1 -2
  71. package/dist/auth-email-password/web/confirm-account-unlock-screen.js +0 -1
  72. package/dist/auth-email-password/{constants.js → web/constants.js} +3 -6
  73. package/dist/auth-email-password/web/default-topbar-actions.js +0 -1
  74. package/dist/auth-email-password/web/forgot-password-screen.js +0 -1
  75. package/dist/auth-email-password/{i18n.js → web/i18n.js} +3 -4
  76. package/dist/auth-email-password/web/index.d.ts +1 -1
  77. package/dist/auth-email-password/web/index.js +1 -2
  78. package/dist/auth-email-password/web/invite-accept-screen.d.ts +2 -2
  79. package/dist/auth-email-password/web/invite-accept-screen.js +0 -1
  80. package/dist/auth-email-password/web/login-screen.js +0 -1
  81. package/dist/auth-email-password/{mail-i18n.js → web/mail-i18n.js} +0 -1
  82. package/dist/auth-email-password/web/request-account-unlock-screen.js +0 -1
  83. package/dist/auth-email-password/web/reset-password-screen.js +0 -1
  84. package/dist/auth-email-password/web/session-bootstrap-error.js +0 -1
  85. package/dist/auth-email-password/web/session.js +0 -1
  86. package/dist/auth-email-password/web/signup-complete-screen.d.ts +2 -2
  87. package/dist/auth-email-password/web/signup-complete-screen.js +0 -1
  88. package/dist/auth-email-password/web/signup-screen.js +0 -1
  89. package/dist/auth-email-password/web/tenant-menu-items.js +0 -1
  90. package/dist/auth-email-password/web/tenant-switcher.js +0 -1
  91. package/dist/auth-email-password/web/use-shell-user.js +0 -1
  92. package/dist/auth-email-password/web/user-menu.js +0 -1
  93. package/dist/auth-email-password/web/verify-email-screen.js +0 -1
  94. package/dist/auth-mfa/errors.d.ts +1 -1
  95. package/dist/auth-mfa/errors.js +2 -2
  96. package/dist/auth-mfa/handlers/enable-confirm-preauth.write.js +1 -1
  97. package/dist/auth-mfa/handlers/enable-start-preauth.write.js +1 -1
  98. package/dist/auth-mfa/handlers/enable-start.write.js +1 -1
  99. package/dist/auth-mfa/handlers/verify.write.js +1 -1
  100. package/dist/auth-mfa/index.d.ts +1 -1
  101. package/dist/auth-mfa/index.js +1 -1
  102. package/dist/auth-mfa/mfa-status-checker.js +1 -1
  103. package/dist/auth-mfa/screens.js +1 -1
  104. package/dist/auth-mfa/web/client-plugin.js +0 -1
  105. package/dist/auth-mfa/{constants.js → web/constants.js} +0 -1
  106. package/dist/auth-mfa/web/i18n.js +0 -1
  107. package/dist/auth-mfa/web/index.js +0 -1
  108. package/dist/auth-mfa/web/mfa-client.js +0 -1
  109. package/dist/auth-mfa/web/mfa-disable-dialog.js +1 -2
  110. package/dist/auth-mfa/web/mfa-recovery-codes-reveal.js +0 -1
  111. package/dist/auth-mfa/web/mfa-regenerate-recovery-dialog.js +1 -2
  112. package/dist/auth-mfa/web/mfa-setup-preauth-screen.js +11 -18
  113. package/dist/auth-mfa/web/mfa-verify-screen.js +0 -1
  114. package/dist/billing-foundation/checkout-core.js +1 -1
  115. package/dist/billing-foundation/consumer-protection/consent-text.d.ts +2 -2
  116. package/dist/billing-foundation/consumer-protection/consent-text.js +1 -1
  117. package/dist/billing-foundation/consumer-protection/issue-confirmation.js +7 -3
  118. package/dist/billing-foundation/consumer-protection/mail-notifications.js +3 -1
  119. package/dist/billing-foundation/consumer-protection/register-consent.js +1 -1
  120. package/dist/billing-foundation/consumer-protection/register-termination.js +8 -2
  121. package/dist/billing-foundation/consumer-protection/stored-user-email.d.ts +1 -0
  122. package/dist/billing-foundation/consumer-protection/stored-user-email.js +8 -0
  123. package/dist/billing-foundation/consumer-protection/termination-mail.d.ts +5 -1
  124. package/dist/billing-foundation/consumer-protection/termination-mail.js +3 -1
  125. package/dist/billing-foundation/consumer-protection/termination-notify.js +1 -1
  126. package/dist/billing-foundation/consumer-protection/termination-pages.js +109 -15
  127. package/dist/billing-foundation/consumer-protection/termination-record.d.ts +8 -1
  128. package/dist/billing-foundation/consumer-protection/termination-record.js +76 -3
  129. package/dist/billing-foundation/consumer-protection/termination-request.js +33 -6
  130. package/dist/billing-foundation/consumer-protection/termination-revoke.d.ts +28 -0
  131. package/dist/billing-foundation/consumer-protection/termination-revoke.js +149 -0
  132. package/dist/billing-foundation/consumer-protection/termination-texts.d.ts +17 -1
  133. package/dist/billing-foundation/consumer-protection/termination-texts.js +39 -0
  134. package/dist/billing-foundation/events.d.ts +9 -0
  135. package/dist/billing-foundation/events.js +14 -2
  136. package/dist/billing-foundation/feature.js +1 -1
  137. package/dist/billing-foundation/handlers/process-event.write.d.ts +5 -1
  138. package/dist/billing-foundation/handlers/process-event.write.js +57 -3
  139. package/dist/billing-foundation/handlers/switch-plan.write.js +1 -1
  140. package/dist/billing-foundation/handlers/sync-subscription.write.js +1 -1
  141. package/dist/billing-foundation/index.d.ts +2 -2
  142. package/dist/billing-foundation/index.js +2 -2
  143. package/dist/billing-foundation/plan-catalog.js +1 -1
  144. package/dist/billing-foundation/screens.js +1 -1
  145. package/dist/billing-foundation/subscription-tier-sync.js +1 -1
  146. package/dist/billing-foundation/types.d.ts +14 -2
  147. package/dist/billing-foundation/types.js +1 -1
  148. package/dist/billing-foundation/validate-options.js +3 -3
  149. package/dist/billing-foundation/web/billing-contact-plan.js +1 -2
  150. package/dist/billing-foundation/web/billing-plans-panel.js +1 -2
  151. package/dist/billing-foundation/web/cancel-contract-dialog.js +1 -2
  152. package/dist/billing-foundation/web/checkout-consent-dialog.js +1 -2
  153. package/dist/billing-foundation/web/client-plugin.js +1 -1
  154. package/dist/billing-foundation/{constants.d.ts → web/constants.d.ts} +21 -14
  155. package/dist/billing-foundation/{constants.js → web/constants.js} +35 -31
  156. package/dist/billing-foundation/{consumer-protection → web/consumer-protection}/consent-locale.js +0 -1
  157. package/dist/billing-foundation/{contact-card.js → web/contact-card.js} +0 -1
  158. package/dist/billing-foundation/web/index.d.ts +2 -2
  159. package/dist/billing-foundation/web/index.js +2 -3
  160. package/dist/billing-foundation/web/localized-params.js +0 -1
  161. package/dist/billing-foundation/webhook-handler.js +4 -1
  162. package/dist/cap-overview/feature.js +1 -1
  163. package/dist/cap-overview/handlers/caps-usage.query.js +1 -1
  164. package/dist/cap-overview/handlers/tenant-caps-list.query.js +2 -2
  165. package/dist/cap-overview/index.d.ts +2 -2
  166. package/dist/cap-overview/index.js +2 -2
  167. package/dist/cap-overview/screens.js +1 -1
  168. package/dist/cap-overview/web/cap-cards-panel.js +1 -1
  169. package/dist/cap-overview/web/cap-usage-bar.js +1 -2
  170. package/dist/cap-overview/web/client-plugin.js +1 -1
  171. package/dist/cap-overview/{constants.js → web/constants.js} +0 -1
  172. package/dist/cap-overview/web/index.js +0 -1
  173. package/dist/cap-overview/{usage-math.d.ts → web/usage-math.d.ts} +1 -1
  174. package/dist/compliance-profiles/feature.js +1 -1
  175. package/dist/compliance-profiles/index.d.ts +1 -1
  176. package/dist/compliance-profiles/index.js +1 -1
  177. package/dist/compliance-profiles/web/client-plugin.js +1 -2
  178. package/dist/compliance-profiles/web/compliance-profile-catalog.js +1 -2
  179. package/dist/compliance-profiles/{constants.js → web/constants.js} +0 -1
  180. package/dist/compliance-profiles/web/index.js +0 -1
  181. package/dist/config/index.d.ts +1 -1
  182. package/dist/config/index.js +1 -1
  183. package/dist/config/web/client-plugin.d.ts +1 -1
  184. package/dist/config/web/client-plugin.js +1 -2
  185. package/dist/config/{constants.js → web/constants.js} +0 -1
  186. package/dist/config/web/i18n.js +0 -1
  187. package/dist/config/web/index.d.ts +1 -1
  188. package/dist/config/web/index.js +1 -2
  189. package/dist/config/write-helpers.js +1 -1
  190. package/dist/custom-fields/feature.js +1 -1
  191. package/dist/custom-fields/handlers/clear-custom-field.write.js +1 -1
  192. package/dist/custom-fields/handlers/define-tenant-field.write.js +1 -1
  193. package/dist/custom-fields/handlers/delete-system-field.write.js +1 -1
  194. package/dist/custom-fields/handlers/delete-tenant-field.write.js +1 -1
  195. package/dist/custom-fields/handlers/set-custom-field.write.js +1 -1
  196. package/dist/custom-fields/handlers/update-tenant-field.write.js +1 -1
  197. package/dist/custom-fields/index.d.ts +1 -1
  198. package/dist/custom-fields/index.js +1 -1
  199. package/dist/custom-fields/lib/value-schema.js +1 -1
  200. package/dist/custom-fields/schemas.js +1 -1
  201. package/dist/custom-fields/web/client-plugin.js +1 -2
  202. package/dist/custom-fields/{constants.js → web/constants.js} +18 -19
  203. package/dist/custom-fields/web/custom-fields-form-section.js +1 -2
  204. package/dist/custom-fields/web/i18n.js +0 -1
  205. package/dist/custom-fields/web/index.d.ts +1 -1
  206. package/dist/custom-fields/web/index.js +1 -2
  207. package/dist/custom-fields/wire-for-entity.js +1 -1
  208. package/dist/delivery/address-opt-out.js +1 -1
  209. package/dist/delivery/attempt-log-retention.js +21 -3
  210. package/dist/delivery/constants.d.ts +1 -1
  211. package/dist/delivery/constants.js +2 -2
  212. package/dist/delivery/i18n.js +1 -1
  213. package/dist/delivery/unsubscribe-page.js +1 -1
  214. package/dist/delivery/web/client-plugin.js +1 -1
  215. package/dist/delivery/web/delivery-channel-cell.js +0 -1
  216. package/dist/delivery/web/delivery-error-cell.js +0 -1
  217. package/dist/delivery/web/delivery-status-cell.js +1 -2
  218. package/dist/delivery/web/delivery-time-cell.js +0 -1
  219. package/dist/delivery/web/delivery-type-cell.js +0 -1
  220. package/dist/delivery/web/index.js +0 -1
  221. package/dist/delivery/{public-names.js → web/public-names.js} +0 -1
  222. package/dist/document-ingest-foundation/events.d.ts +1 -0
  223. package/dist/document-ingest-foundation/events.js +3 -0
  224. package/dist/document-ingest-foundation/executor.js +2 -1
  225. package/dist/document-ingest-foundation/feature.js +16 -5
  226. package/dist/document-ingest-foundation/index.d.ts +1 -1
  227. package/dist/document-ingest-foundation/index.js +1 -1
  228. package/dist/feature-toggles/feature.d.ts +1 -1
  229. package/dist/feature-toggles/feature.js +2 -2
  230. package/dist/feature-toggles/handlers/list.query.js +1 -1
  231. package/dist/feature-toggles/handlers/registered.query.js +1 -1
  232. package/dist/feature-toggles/handlers/set.write.js +1 -1
  233. package/dist/feature-toggles/index.d.ts +1 -1
  234. package/dist/feature-toggles/index.js +1 -1
  235. package/dist/feature-toggles/web/client-plugin.js +1 -2
  236. package/dist/feature-toggles/{constants.js → web/constants.js} +0 -1
  237. package/dist/feature-toggles/web/index.js +0 -1
  238. package/dist/folders/feature.js +1 -1
  239. package/dist/folders/handlers/clear-folder.write.js +1 -1
  240. package/dist/folders/handlers/delete-folder.write.js +1 -1
  241. package/dist/folders/handlers/set-folder.write.js +1 -1
  242. package/dist/folders/index.d.ts +1 -1
  243. package/dist/folders/index.js +1 -1
  244. package/dist/folders/web/client-plugin.js +1 -2
  245. package/dist/folders/{constants.js → web/constants.js} +0 -1
  246. package/dist/folders/web/folder-manager.js +1 -2
  247. package/dist/folders/web/folder-section.js +1 -2
  248. package/dist/folders/web/i18n.js +0 -1
  249. package/dist/folders/web/index.d.ts +1 -1
  250. package/dist/folders/web/index.js +1 -2
  251. package/dist/folders/web/tree.js +0 -1
  252. package/dist/form-draft/db/queries/cleanup.d.ts +3 -2
  253. package/dist/form-draft/db/queries/cleanup.js +18 -9
  254. package/dist/form-draft/decrypt-draft.d.ts +2 -0
  255. package/dist/form-draft/decrypt-draft.js +19 -0
  256. package/dist/form-draft/entity.js +6 -9
  257. package/dist/form-draft/feature.js +1 -1
  258. package/dist/form-draft/handlers/cleanup.job.d.ts +1 -0
  259. package/dist/form-draft/handlers/cleanup.job.js +17 -4
  260. package/dist/form-draft/handlers/discard.write.js +1 -1
  261. package/dist/form-draft/handlers/get.query.js +6 -7
  262. package/dist/form-draft/handlers/list.query.js +11 -7
  263. package/dist/form-draft/handlers/save.write.js +1 -1
  264. package/dist/form-draft/index.d.ts +1 -1
  265. package/dist/form-draft/index.js +1 -1
  266. package/dist/form-draft/lookup.d.ts +2 -2
  267. package/dist/form-draft/lookup.js +7 -2
  268. package/dist/form-draft/schemas.js +1 -1
  269. package/dist/form-draft/{constants.js → web/constants.js} +0 -1
  270. package/dist/form-draft-user-data/hooks.js +2 -2
  271. package/dist/inbound-mail-foundation/retention-sweep.js +7 -5
  272. package/dist/jobs/feature.js +2 -2
  273. package/dist/jobs/handlers/retry.write.js +1 -1
  274. package/dist/jobs/handlers/trigger.write.js +1 -1
  275. package/dist/jobs/index.d.ts +1 -1
  276. package/dist/jobs/index.js +1 -1
  277. package/dist/jobs/web/client-plugin.js +2 -3
  278. package/dist/jobs/{constants.js → web/constants.js} +0 -1
  279. package/dist/jobs/web/default-translations.d.ts +2 -0
  280. package/dist/jobs/web/default-translations.js +3 -0
  281. package/dist/jobs/web/i18n.d.ts +5 -2
  282. package/dist/jobs/web/i18n.js +51 -4
  283. package/dist/jobs/web/index.js +0 -1
  284. package/dist/ledger/entity.d.ts +1 -1
  285. package/dist/ledger/entity.js +1 -1
  286. package/dist/ledger/feature.js +1 -1
  287. package/dist/ledger/handlers/confirm-schedule-period.write.js +2 -5
  288. package/dist/ledger/handlers/create-transaction.write.js +1 -1
  289. package/dist/ledger/handlers/reports.query.js +1 -1
  290. package/dist/ledger/handlers/reverse-transaction.write.js +1 -1
  291. package/dist/ledger/index.d.ts +1 -1
  292. package/dist/ledger/index.js +1 -1
  293. package/dist/ledger/recurring.d.ts +1 -1
  294. package/dist/ledger/reports.d.ts +1 -1
  295. package/dist/ledger/schemas.js +1 -1
  296. package/dist/ledger/{constants.js → web/constants.js} +0 -1
  297. package/dist/ledger/web/index.d.ts +1 -1
  298. package/dist/ledger/web/index.js +1 -2
  299. package/dist/legal-pages/feature.d.ts +1 -1
  300. package/dist/legal-pages/feature.js +1 -1
  301. package/dist/legal-pages/index.d.ts +1 -1
  302. package/dist/legal-pages/index.js +1 -1
  303. package/dist/legal-pages/lib/boot-check.d.ts +1 -1
  304. package/dist/legal-pages/lib/boot-check.js +1 -1
  305. package/dist/legal-pages/lib/validate-routes.d.ts +1 -1
  306. package/dist/legal-pages/web/client-plugin.js +1 -2
  307. package/dist/legal-pages/{constants.js → web/constants.js} +6 -8
  308. package/dist/legal-pages/web/index.js +0 -1
  309. package/dist/managed-pages/feature.js +1 -1
  310. package/dist/managed-pages/web/client-plugin.js +1 -2
  311. package/dist/managed-pages/web/default-translations.d.ts +2 -0
  312. package/dist/managed-pages/web/default-translations.js +11 -0
  313. package/dist/managed-pages/web/i18n.d.ts +5 -2
  314. package/dist/managed-pages/web/i18n.js +53 -12
  315. package/dist/managed-pages/web/index.d.ts +1 -1
  316. package/dist/managed-pages/web/index.js +1 -2
  317. package/dist/metrics/compute.d.ts +1 -1
  318. package/dist/metrics/compute.js +1 -1
  319. package/dist/metrics/feature.js +1 -1
  320. package/dist/metrics/index.d.ts +1 -1
  321. package/dist/metrics/index.js +1 -1
  322. package/dist/metrics/types.d.ts +1 -1
  323. package/dist/metrics/validate.js +1 -1
  324. package/dist/metrics/{constants.js → web/constants.js} +0 -1
  325. package/dist/metrics/window.d.ts +1 -1
  326. package/dist/notes-history/feature.js +1 -1
  327. package/dist/notes-history/handlers/add-note.write.js +1 -1
  328. package/dist/notes-history/index.d.ts +1 -1
  329. package/dist/notes-history/index.js +1 -1
  330. package/dist/notes-history/web/client-plugin.js +1 -2
  331. package/dist/notes-history/{constants.js → web/constants.js} +0 -1
  332. package/dist/notes-history/web/i18n.js +0 -1
  333. package/dist/notes-history/web/index.d.ts +1 -1
  334. package/dist/notes-history/web/index.js +1 -2
  335. package/dist/notes-history/web/notes-section.js +2 -3
  336. package/dist/personal-access-tokens/feature.d.ts +2 -2
  337. package/dist/personal-access-tokens/feature.js +6 -4
  338. package/dist/personal-access-tokens/handlers/available-scopes.query.d.ts +1 -1
  339. package/dist/personal-access-tokens/handlers/create.write.js +1 -1
  340. package/dist/personal-access-tokens/handlers/revoke.write.js +1 -1
  341. package/dist/personal-access-tokens/hash.js +1 -1
  342. package/dist/personal-access-tokens/i18n.d.ts +1 -1
  343. package/dist/personal-access-tokens/i18n.js +1 -1
  344. package/dist/personal-access-tokens/index.d.ts +5 -5
  345. package/dist/personal-access-tokens/index.js +3 -3
  346. package/dist/personal-access-tokens/resolver.d.ts +1 -1
  347. package/dist/personal-access-tokens/resolver.js +1 -1
  348. package/dist/personal-access-tokens/schema/api-token.js +1 -1
  349. package/dist/personal-access-tokens/screens.d.ts +1 -1
  350. package/dist/personal-access-tokens/screens.js +1 -1
  351. package/dist/personal-access-tokens/{constants.js → web/constants.js} +0 -1
  352. package/dist/presets/index.d.ts +0 -1
  353. package/dist/presets/index.js +0 -1
  354. package/dist/presets/security-baseline.d.ts +1 -1
  355. package/dist/presets/security-baseline.js +1 -1
  356. package/dist/secrets/feature.js +1 -1
  357. package/dist/secrets/handlers/delete.write.js +1 -1
  358. package/dist/secrets/handlers/list.query.js +1 -1
  359. package/dist/secrets/handlers/set.write.js +1 -1
  360. package/dist/secrets/i18n.js +1 -1
  361. package/dist/secrets/index.d.ts +1 -1
  362. package/dist/secrets/index.js +1 -1
  363. package/dist/secrets/{constants.js → web/constants.js} +0 -1
  364. package/dist/secrets/write-gate.js +1 -1
  365. package/dist/sessions/feature.js +7 -4
  366. package/dist/sessions/{i18n.js → web/i18n.js} +0 -1
  367. package/dist/shared/index.d.ts +1 -1
  368. package/dist/shared/index.js +1 -1
  369. package/dist/shared/purge-files-reaching-subject.js +7 -3
  370. package/dist/subscription-stripe/feature.js +2 -1
  371. package/dist/subscription-stripe/plugin-methods.d.ts +3 -0
  372. package/dist/subscription-stripe/plugin-methods.js +14 -0
  373. package/dist/subscription-stripe/verify-webhook.js +1 -0
  374. package/dist/tags/feature.js +1 -1
  375. package/dist/tags/handlers/assign-tag.write.js +11 -7
  376. package/dist/tags/handlers/create-tag.write.js +1 -1
  377. package/dist/tags/handlers/delete-tag.write.js +4 -1
  378. package/dist/tags/handlers/remove-tag.write.js +1 -1
  379. package/dist/tags/handlers/update-tag.write.js +1 -1
  380. package/dist/tags/index.d.ts +1 -1
  381. package/dist/tags/index.js +1 -1
  382. package/dist/tags/screens.js +1 -1
  383. package/dist/tags/web/client-plugin.js +1 -2
  384. package/dist/tags/{constants.d.ts → web/constants.d.ts} +1 -0
  385. package/dist/tags/{constants.js → web/constants.js} +3 -1
  386. package/dist/tags/web/entity-tags.js +1 -2
  387. package/dist/tags/web/i18n.js +2 -2
  388. package/dist/tags/web/index.d.ts +1 -1
  389. package/dist/tags/web/index.js +1 -2
  390. package/dist/tags/web/tag-filter.js +1 -2
  391. package/dist/tags/web/tag-manager.js +5 -4
  392. package/dist/tags/web/tag-picker.js +0 -1
  393. package/dist/tags/web/tag-section.js +1 -2
  394. package/dist/tags/web/tags-cell.js +1 -2
  395. package/dist/template-resolver/api.d.ts +21 -23
  396. package/dist/template-resolver/api.js +34 -6
  397. package/dist/template-resolver/compile-document-body.js +1 -1
  398. package/dist/template-resolver/compile-steps-block.js +2 -2
  399. package/dist/template-resolver/document-ops.d.ts +1 -1
  400. package/dist/template-resolver/document-ops.js +3 -3
  401. package/dist/template-resolver/document-sanitizer.d.ts +1 -1
  402. package/dist/template-resolver/document-sanitizer.js +3 -3
  403. package/dist/template-resolver/feature.d.ts +2 -0
  404. package/dist/template-resolver/feature.js +12 -4
  405. package/dist/template-resolver/handlers/by-slug.query.js +6 -1
  406. package/dist/template-resolver/handlers/by-tenant.query.js +6 -2
  407. package/dist/template-resolver/handlers/collection-item.query.js +1 -1
  408. package/dist/template-resolver/handlers/collection-list.query.js +1 -1
  409. package/dist/template-resolver/handlers/collection-set.write.d.ts +2 -1
  410. package/dist/template-resolver/handlers/collection-set.write.js +14 -2
  411. package/dist/template-resolver/handlers/copy-locale.write.js +2 -2
  412. package/dist/template-resolver/handlers/diff-to-system.query.js +5 -1
  413. package/dist/template-resolver/handlers/discard-draft.write.js +1 -1
  414. package/dist/template-resolver/handlers/document-base.d.ts +1 -1
  415. package/dist/template-resolver/handlers/document-base.js +6 -1
  416. package/dist/template-resolver/handlers/document-blocks.query.d.ts +1 -1
  417. package/dist/template-resolver/handlers/document-blocks.query.js +2 -2
  418. package/dist/template-resolver/handlers/export-bundle.query.js +5 -2
  419. package/dist/template-resolver/handlers/find-by-id.query.js +4 -2
  420. package/dist/template-resolver/handlers/layout-source.query.js +5 -5
  421. package/dist/template-resolver/handlers/list.query.js +5 -2
  422. package/dist/template-resolver/handlers/overview.query.d.ts +10 -2
  423. package/dist/template-resolver/handlers/overview.query.js +44 -12
  424. package/dist/template-resolver/handlers/patch-draft.write.js +1 -1
  425. package/dist/template-resolver/handlers/resource-shared.js +1 -1
  426. package/dist/template-resolver/handlers/resource-upload.write.js +1 -1
  427. package/dist/template-resolver/handlers/send-test.write.js +2 -2
  428. package/dist/template-resolver/handlers/set.write.js +1 -1
  429. package/dist/template-resolver/handlers/shared.js +1 -1
  430. package/dist/template-resolver/handlers/template-gates.d.ts +1 -1
  431. package/dist/template-resolver/handlers/template-gates.js +1 -1
  432. package/dist/template-resolver/handlers/template-write.d.ts +1 -1
  433. package/dist/template-resolver/handlers/template-write.js +1 -1
  434. package/dist/template-resolver/handlers/usage.query.js +3 -2
  435. package/dist/template-resolver/handlers/validate.query.d.ts +1 -1
  436. package/dist/template-resolver/handlers/validate.query.js +3 -1
  437. package/dist/template-resolver/i18n.d.ts +3 -0
  438. package/dist/template-resolver/i18n.js +24 -0
  439. package/dist/template-resolver/index.d.ts +4 -3
  440. package/dist/template-resolver/index.js +3 -3
  441. package/dist/template-resolver/layout-appearance.js +1 -1
  442. package/dist/template-resolver/layout-regions.d.ts +1 -1
  443. package/dist/template-resolver/seeding.d.ts +4 -1
  444. package/dist/template-resolver/seeding.js +13 -7
  445. package/dist/template-resolver/store-template-resource.js +2 -2
  446. package/dist/template-resolver/table.js +1 -1
  447. package/dist/template-resolver/template-bundle.js +2 -2
  448. package/dist/template-resolver/template-delivery-policy.d.ts +22 -0
  449. package/dist/template-resolver/template-delivery-policy.js +40 -0
  450. package/dist/template-resolver/template-draft.d.ts +1 -1
  451. package/dist/template-resolver/template-draft.js +1 -1
  452. package/dist/template-resolver/template-edit-policy.d.ts +1 -1
  453. package/dist/template-resolver/template-edit-policy.js +1 -1
  454. package/dist/template-resolver/template-meta.d.ts +2 -2
  455. package/dist/template-resolver/template-meta.js +2 -2
  456. package/dist/template-resolver/template-preview.d.ts +1 -1
  457. package/dist/template-resolver/template-preview.js +8 -4
  458. package/dist/template-resolver/template-usage.d.ts +1 -1
  459. package/dist/template-resolver/template-usage.js +1 -1
  460. package/dist/template-resolver/template-validation.js +1 -1
  461. package/dist/template-resolver/testing.js +1 -1
  462. package/dist/template-resolver/user-content-table.js +1 -1
  463. package/dist/template-resolver/web/client-plugin.js +1 -2
  464. package/dist/template-resolver/{constants.d.ts → web/constants.d.ts} +1 -1
  465. package/dist/template-resolver/{constants.js → web/constants.js} +7 -10
  466. package/dist/template-resolver/web/document-editor-extensions.js +2 -2
  467. package/dist/template-resolver/web/document-editor.js +0 -1
  468. package/dist/template-resolver/{document-images.js → web/document-images.js} +0 -1
  469. package/dist/template-resolver/{document-schema.js → web/document-schema.js} +0 -1
  470. package/dist/template-resolver/{document-steps.js → web/document-steps.js} +0 -1
  471. package/dist/template-resolver/web/document-tiptap-editor.js +2 -3
  472. package/dist/template-resolver/web/document-toolbar-blocks.d.ts +2 -2
  473. package/dist/template-resolver/web/document-toolbar-blocks.js +1 -1
  474. package/dist/template-resolver/web/editor-handle.js +1 -1
  475. package/dist/template-resolver/web/i18n.js +1 -1
  476. package/dist/template-resolver/web/index.d.ts +3 -3
  477. package/dist/template-resolver/web/index.js +3 -4
  478. package/dist/template-resolver/{mail-constants.js → web/mail-constants.js} +0 -1
  479. package/dist/template-resolver/{pdf-constants.js → web/pdf-constants.js} +0 -1
  480. package/dist/template-resolver/web/placeholder-line-editor-lazy.js +0 -1
  481. package/dist/template-resolver/web/placeholder-line-editor.js +6 -4
  482. package/dist/template-resolver/{qualified-names.js → web/qualified-names.js} +0 -1
  483. package/dist/template-resolver/web/use-stable-by-key.js +0 -1
  484. package/dist/tenant/handlers/add-member.write.js +1 -1
  485. package/dist/tenant/index.d.ts +1 -1
  486. package/dist/tenant/index.js +1 -1
  487. package/dist/tenant/invitation-table.js +1 -1
  488. package/dist/tenant/invited-membership.js +1 -1
  489. package/dist/tenant/last-tenant-admin.js +1 -1
  490. package/dist/tenant/member-role-options.js +1 -1
  491. package/dist/tenant/screens.js +1 -1
  492. package/dist/tenant/web/client-plugin.js +1 -2
  493. package/dist/tenant/{constants.js → web/constants.js} +3 -6
  494. package/dist/tenant/web/index.js +0 -1
  495. package/dist/tenant/web/member-roles-cell.js +0 -1
  496. package/dist/tenant/web/member-status-cell.js +0 -1
  497. package/dist/tenant-lifecycle/stages.js +2 -3
  498. package/dist/tier-engine/entity.d.ts +1 -1
  499. package/dist/tier-engine/entity.js +1 -1
  500. package/dist/tier-engine/feature.js +2 -2
  501. package/dist/tier-engine/handlers/set-tenant-tier.write.js +1 -1
  502. package/dist/tier-engine/index.d.ts +1 -1
  503. package/dist/tier-engine/index.js +1 -1
  504. package/dist/tier-engine/web/client-plugin.js +2 -3
  505. package/dist/tier-engine/{constants.js → web/constants.js} +2 -3
  506. package/dist/tier-engine/{i18n.js → web/i18n.js} +0 -1
  507. package/dist/tier-engine/web/index.js +0 -1
  508. package/dist/user/handlers/create.write.js +1 -1
  509. package/dist/user/handlers/update-roles.js +1 -1
  510. package/dist/user/handlers/update.write.js +1 -1
  511. package/dist/user/index.d.ts +1 -1
  512. package/dist/user/index.js +1 -1
  513. package/dist/user/invited-global-roles.d.ts +1 -1
  514. package/dist/user/invited-global-roles.js +1 -1
  515. package/dist/user/schema/user.js +1 -1
  516. package/dist/user/{constants.js → web/constants.js} +0 -1
  517. package/dist/user-data-rights/env.js +1 -1
  518. package/dist/user-data-rights/feature.js +3 -3
  519. package/dist/user-data-rights/index.d.ts +1 -1
  520. package/dist/user-data-rights/index.js +1 -1
  521. package/dist/user-data-rights/lib/resolve-tenant-model.js +1 -1
  522. package/dist/user-data-rights/mail-notifications.js +1 -1
  523. package/dist/user-data-rights/web/client-plugin.js +2 -3
  524. package/dist/user-data-rights/web/confirm-deletion-screen.js +0 -1
  525. package/dist/user-data-rights/{constants.js → web/constants.js} +11 -12
  526. package/dist/user-data-rights/web/default-translations.d.ts +2 -0
  527. package/dist/user-data-rights/web/default-translations.js +59 -0
  528. package/dist/user-data-rights/web/i18n.d.ts +5 -2
  529. package/dist/user-data-rights/web/i18n.js +37 -59
  530. package/dist/user-data-rights/web/index.d.ts +1 -1
  531. package/dist/user-data-rights/web/index.js +1 -2
  532. package/dist/user-data-rights/web/privacy-center-screen.js +1 -2
  533. package/dist/user-data-rights/web/request-deletion-screen.js +0 -1
  534. package/dist/user-data-rights-defaults/hooks/file-ref.userdata-hook.js +6 -1
  535. package/dist/user-profile/feature.js +1 -1
  536. package/dist/user-profile/handlers/change-email.write.js +1 -1
  537. package/dist/user-profile/index.d.ts +1 -1
  538. package/dist/user-profile/index.js +1 -1
  539. package/dist/user-profile/web/client-plugin.js +2 -3
  540. package/dist/user-profile/{constants.js → web/constants.js} +0 -1
  541. package/dist/user-profile/{i18n.js → web/i18n.js} +0 -1
  542. package/dist/user-profile/web/profile-screen.js +2 -3
  543. package/dist/waitlist/entity.js +1 -1
  544. package/dist/waitlist/feature.js +1 -1
  545. package/dist/waitlist/handlers/export-purge.write.js +1 -1
  546. package/dist/waitlist/handlers/invite.write.js +1 -1
  547. package/dist/waitlist/handlers/reject.write.js +1 -1
  548. package/dist/waitlist/handlers/submit.write.js +4 -3
  549. package/dist/waitlist/import.d.ts +1 -1
  550. package/dist/waitlist/index.d.ts +1 -1
  551. package/dist/waitlist/index.js +1 -1
  552. package/dist/waitlist/legacy-migrate.js +1 -1
  553. package/dist/waitlist/link-on-signup.js +1 -1
  554. package/dist/waitlist/mail.d.ts +0 -1
  555. package/dist/waitlist/mail.js +6 -4
  556. package/dist/waitlist/payloads.js +1 -1
  557. package/dist/waitlist/screens.js +1 -1
  558. package/dist/waitlist/{constants.js → web/constants.js} +0 -1
  559. package/kumiko-es-tables.json +102 -0
  560. package/package.json +30 -29
  561. package/src/audit/changes.json +7 -0
  562. package/src/auth-email-password/changes.json +6 -0
  563. package/src/auth-mfa/changes.json +6 -0
  564. package/src/billing-foundation/changes.json +18 -0
  565. package/src/delivery/changes.json +6 -0
  566. package/src/document-ingest-foundation/changes.json +6 -0
  567. package/src/files/changes.json +7 -0
  568. package/src/form-draft/changes.json +7 -0
  569. package/src/ledger/changes.json +7 -0
  570. package/src/presets/changes.json +7 -0
  571. package/src/tags/changes.json +6 -0
  572. package/src/template-resolver/changes.json +43 -0
  573. package/src/user-data-rights/changes.json +14 -0
  574. package/src/waitlist/changes.json +6 -0
  575. package/dist/admin-shell/i18n.d.ts +0 -5
  576. package/dist/admin-shell/i18n.js +0 -51
  577. package/dist/audit/i18n.d.ts +0 -5
  578. package/dist/audit/i18n.js +0 -22
  579. package/dist/jobs/i18n.d.ts +0 -5
  580. package/dist/jobs/i18n.js +0 -52
  581. package/dist/managed-pages/i18n.d.ts +0 -5
  582. package/dist/managed-pages/i18n.js +0 -55
  583. package/dist/presets/dsgvo-self-service.d.ts +0 -10
  584. package/dist/presets/dsgvo-self-service.js +0 -24
  585. package/dist/user-data-rights/i18n.d.ts +0 -5
  586. package/dist/user-data-rights/i18n.js +0 -39
  587. /package/dist/account-security/{constants.d.ts → web/constants.d.ts} +0 -0
  588. /package/dist/account-security/{i18n.d.ts → web/i18n.d.ts} +0 -0
  589. /package/dist/admin-shell/{constants.d.ts → web/constants.d.ts} +0 -0
  590. /package/dist/auth-email-password/{constants.d.ts → web/constants.d.ts} +0 -0
  591. /package/dist/auth-email-password/{i18n.d.ts → web/i18n.d.ts} +0 -0
  592. /package/dist/auth-email-password/{mail-i18n.d.ts → web/mail-i18n.d.ts} +0 -0
  593. /package/dist/auth-mfa/{constants.d.ts → web/constants.d.ts} +0 -0
  594. /package/dist/billing-foundation/{consumer-protection → web/consumer-protection}/consent-locale.d.ts +0 -0
  595. /package/dist/billing-foundation/{contact-card.d.ts → web/contact-card.d.ts} +0 -0
  596. /package/dist/cap-overview/{constants.d.ts → web/constants.d.ts} +0 -0
  597. /package/dist/cap-overview/{usage-math.js → web/usage-math.js} +0 -0
  598. /package/dist/compliance-profiles/{constants.d.ts → web/constants.d.ts} +0 -0
  599. /package/dist/config/{constants.d.ts → web/constants.d.ts} +0 -0
  600. /package/dist/custom-fields/{constants.d.ts → web/constants.d.ts} +0 -0
  601. /package/dist/delivery/{public-names.d.ts → web/public-names.d.ts} +0 -0
  602. /package/dist/feature-toggles/{constants.d.ts → web/constants.d.ts} +0 -0
  603. /package/dist/folders/{constants.d.ts → web/constants.d.ts} +0 -0
  604. /package/dist/form-draft/{constants.d.ts → web/constants.d.ts} +0 -0
  605. /package/dist/jobs/{constants.d.ts → web/constants.d.ts} +0 -0
  606. /package/dist/ledger/{constants.d.ts → web/constants.d.ts} +0 -0
  607. /package/dist/legal-pages/{constants.d.ts → web/constants.d.ts} +0 -0
  608. /package/dist/metrics/{constants.d.ts → web/constants.d.ts} +0 -0
  609. /package/dist/notes-history/{constants.d.ts → web/constants.d.ts} +0 -0
  610. /package/dist/personal-access-tokens/{constants.d.ts → web/constants.d.ts} +0 -0
  611. /package/dist/personal-access-tokens/{scopes.d.ts → web/scopes.d.ts} +0 -0
  612. /package/dist/personal-access-tokens/{scopes.js → web/scopes.js} +0 -0
  613. /package/dist/secrets/{constants.d.ts → web/constants.d.ts} +0 -0
  614. /package/dist/sessions/{i18n.d.ts → web/i18n.d.ts} +0 -0
  615. /package/dist/template-resolver/{document-blocks.d.ts → web/document-blocks.d.ts} +0 -0
  616. /package/dist/template-resolver/{document-blocks.js → web/document-blocks.js} +0 -0
  617. /package/dist/template-resolver/{document-images.d.ts → web/document-images.d.ts} +0 -0
  618. /package/dist/template-resolver/{document-schema.d.ts → web/document-schema.d.ts} +0 -0
  619. /package/dist/template-resolver/{document-steps.d.ts → web/document-steps.d.ts} +0 -0
  620. /package/dist/template-resolver/{mail-constants.d.ts → web/mail-constants.d.ts} +0 -0
  621. /package/dist/template-resolver/{pdf-constants.d.ts → web/pdf-constants.d.ts} +0 -0
  622. /package/dist/template-resolver/{placeholder-text.d.ts → web/placeholder-text.d.ts} +0 -0
  623. /package/dist/template-resolver/{placeholder-text.js → web/placeholder-text.js} +0 -0
  624. /package/dist/template-resolver/{qualified-names.d.ts → web/qualified-names.d.ts} +0 -0
  625. /package/dist/tenant/{constants.d.ts → web/constants.d.ts} +0 -0
  626. /package/dist/tier-engine/{constants.d.ts → web/constants.d.ts} +0 -0
  627. /package/dist/tier-engine/{i18n.d.ts → web/i18n.d.ts} +0 -0
  628. /package/dist/user/{constants.d.ts → web/constants.d.ts} +0 -0
  629. /package/dist/user-data-rights/{constants.d.ts → web/constants.d.ts} +0 -0
  630. /package/dist/user-profile/{constants.d.ts → web/constants.d.ts} +0 -0
  631. /package/dist/user-profile/{i18n.d.ts → web/i18n.d.ts} +0 -0
  632. /package/dist/waitlist/{constants.d.ts → web/constants.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { UnprocessableError, writeFailure } from "@cosmicdrift/kumiko-framework/errors";
2
- import { AuthErrors } from "./constants.js";
2
+ import { AuthErrors } from "./web/constants.js";
3
3
  // @wrapper-known error-helper
4
4
  export function invalidCredentials() {
5
5
  return writeFailure(new UnprocessableError(AuthErrors.invalidCredentials, {
@@ -1,7 +1,6 @@
1
1
  import { defineFeature } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import { featureWithEnvSchema } from "@cosmicdrift/kumiko-framework/env";
3
3
  import * as z from "zod";
4
- import { MIN_HMAC_SECRET_LENGTH } from "./constants.js";
5
4
  import { changePasswordWrite } from "./handlers/change-password.write.js";
6
5
  import { createConfirmAccountUnlockHandler } from "./handlers/confirm-account-unlock.write.js";
7
6
  import { createInviteAcceptHandler } from "./handlers/invite-accept.write.js";
@@ -20,8 +19,9 @@ import { createSignupConfirmHandler } from "./handlers/signup-confirm.write.js";
20
19
  import { createSignupRequestHandler, } from "./handlers/signup-request.write.js";
21
20
  import { createSwitchTenantMfaGateHandler } from "./handlers/switch-tenant-mfa-gate.write.js";
22
21
  import { createVerifyEmailHandler } from "./handlers/verify-email.write.js";
23
- import { AUTH_EMAIL_PASSWORD_MAIL_I18N } from "./mail-i18n.js";
24
22
  import { AUTH_MAIL_VARIABLES, authMailLocalizedTemplate, INVITE_MAIL_VARIABLES, sendsMagicLinkMail, } from "./mail-notifications.js";
23
+ import { MIN_HMAC_SECRET_LENGTH } from "./web/constants.js";
24
+ import { AUTH_EMAIL_PASSWORD_MAIL_I18N } from "./web/mail-i18n.js";
25
25
  /**
26
26
  * Env-vars contract for the `auth-email-password` feature.
27
27
  *
@@ -1,10 +1,10 @@
1
1
  import { defineWriteHandler } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import { InternalError, UnprocessableError, writeFailure, } from "@cosmicdrift/kumiko-framework/errors";
3
3
  import * as z from "zod";
4
- import { AuthErrors } from "../constants.js";
5
4
  import { invalidUnlockToken } from "../errors.js";
6
5
  import { clearLockoutState } from "../lockout-store.js";
7
6
  import { verifyUnlockToken } from "../unlock-token.js";
7
+ import { AuthErrors } from "../web/constants.js";
8
8
  // Confirm step of the unlock flow. Unlike reset/verify, there's no entity
9
9
  // write: the token's HMAC signature already proves it was minted for an
10
10
  // existing, non-deleted user (see request-account-unlock.write.ts's
@@ -33,10 +33,10 @@ import { grantInvitedMembershipRole } from "../../tenant/invited-membership.js";
33
33
  import { grantInvitedGlobalRoles, parseInvitedGlobalRoles, } from "../../user/invited-global-roles.js";
34
34
  // kumiko-lint-ignore cross-feature-import login-style password-check
35
35
  import { userTable } from "../../user/schema/user.js";
36
- import { AUTH_LOCKOUT_DEFAULT_DURATION_MINUTES, AUTH_LOCKOUT_DEFAULT_MAX_FAILED_ATTEMPTS, } from "../constants.js";
37
36
  import { invalidCredentials, invalidInviteToken, inviteEmailMismatch } from "../errors.js";
38
37
  import { burnInviteToken, deleteInviteToken, getInvitationIdForToken, unburnInviteToken, } from "../invite-token-store.js";
39
38
  import { passwordSchema } from "../password-policy.js";
39
+ import { AUTH_LOCKOUT_DEFAULT_DURATION_MINUTES, AUTH_LOCKOUT_DEFAULT_MAX_FAILED_ATTEMPTS, } from "../web/constants.js";
40
40
  import { gateEnforceAccountStatus, gateEnforceEmailVerified, gateEnforceLockout, gateEnforceMfa, gateVerifyPassword, } from "./login.write.js";
41
41
  const InviteAcceptWithLoginSchema = z.object({
42
42
  token: z.string().min(1),
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import { type GlobalRole } from "../../user/constants.ts";
2
+ import { type GlobalRole } from "../../user/web/constants.ts";
3
3
  import type { AuthMailLocale } from "../email-templates.ts";
4
4
  export type InviteCreateData = {
5
5
  readonly kind: "invite-created";
@@ -29,15 +29,15 @@ import { INVITATION_STATUS, tenantInvitationEntity, tenantInvitationsTable, } fr
29
29
  import { membershipVersionOf } from "../../tenant/invited-membership.js";
30
30
  // kumiko-lint-ignore cross-feature-import membership-role validation owned by tenant-feature
31
31
  import { findForbiddenMembershipRole, findForbiddenRoleAssignment, reservedMembershipRoleError, unassignableMembershipRoleError, } from "../../tenant/membership-roles.js";
32
- // kumiko-lint-ignore cross-feature-import global-role options are owned by the user feature
33
- import { GLOBAL_ROLE_OPTIONS } from "../../user/constants.js";
34
32
  // kumiko-lint-ignore cross-feature-import invitee lookup by email reads the user row
35
33
  import { userTable } from "../../user/schema/user.js";
36
- import { AUTH_INVITE_DEFAULT_TTL_MINUTES } from "../constants.js";
34
+ // kumiko-lint-ignore cross-feature-import global-role options are owned by the user feature
35
+ import { GLOBAL_ROLE_OPTIONS } from "../../user/web/constants.js";
37
36
  import { inviteAlreadyAccepted } from "../errors.js";
38
37
  import { invalidateExistingInviteToken, storeInviteToken } from "../invite-token-store.js";
39
38
  import { dispatchMagicLinkMail, resolveHandlerMailLocale } from "../magic-link-mail.js";
40
39
  import { AuthMailNotificationTypes } from "../mail-notifications.js";
40
+ import { AUTH_INVITE_DEFAULT_TTL_MINUTES } from "../web/constants.js";
41
41
  const InviteCreateSchema = z.object({
42
42
  email: z.email(),
43
43
  role: z.string().min(1).max(50),
@@ -13,8 +13,8 @@ import { decryptStoredPii } from "../../shared/index.js";
13
13
  import { INVITATION_STATUS, tenantInvitationsTable } from "../../tenant/invitation-table.js";
14
14
  // kumiko-lint-ignore cross-feature-import login-style account lookup, same as invite-accept-with-login
15
15
  import { userTable } from "../../user/schema/user.js";
16
- import { AuthErrors } from "../constants.js";
17
16
  import { getInvitationIdForToken } from "../invite-token-store.js";
17
+ import { AuthErrors } from "../web/constants.js";
18
18
  const InviteInfoSchema = z.object({
19
19
  token: z.string().min(1),
20
20
  });
@@ -47,6 +47,7 @@ type AuthenticatableUserRow = AuthUserRow & {
47
47
  };
48
48
  /** Uniform response on any credential miss — burns argon2 cost (#774). */
49
49
  export declare function gateResolveAuthUser(found: AuthUserRow | null, password: string): Promise<GateOutcome<AuthenticatableUserRow>>;
50
+ export declare function gateCountUnknownUser(ctx: HandlerContext, email: string, maxFailedAttempts: number, lockoutDurationMinutes: number): Promise<GateOutcome<undefined>>;
50
51
  /**
51
52
  * Lockout BEFORE password verify — locked accounts can't be password-probed.
52
53
  * Fail-open without Redis (IP rate-limit still covers partially).
@@ -4,9 +4,9 @@ import * as z from "zod";
4
4
  import { verifyDummyPassword, verifyPassword } from "../../shared/index.js";
5
5
  import { USER_STATUS, UserQueries } from "../../user/index.js";
6
6
  import { parseAuthUserRow } from "../auth-user-row.js";
7
- import { AUTH_LOCKOUT_DEFAULT_DURATION_MINUTES, AUTH_LOCKOUT_DEFAULT_MAX_FAILED_ATTEMPTS, } from "../constants.js";
8
7
  import { accountLocked, accountRestricted, emailNotVerified, invalidCredentials, noMembership, } from "../errors.js";
9
8
  import { clearLockoutState, getLockoutState, recordFailedAttempt } from "../lockout-store.js";
9
+ import { AUTH_LOCKOUT_DEFAULT_DURATION_MINUTES, AUTH_LOCKOUT_DEFAULT_MAX_FAILED_ATTEMPTS, } from "../web/constants.js";
10
10
  const SYSTEM_USER_ID = "00000000-0000-4000-8000-000000000000";
11
11
  function reject(result) {
12
12
  return { ok: false, result };
@@ -22,6 +22,26 @@ export async function gateResolveAuthUser(found, password) {
22
22
  }
23
23
  return ok({ ...found, passwordHash: found.passwordHash });
24
24
  }
25
+ // Unknown and deleted addresses are counted too, under a keyed digest of the
26
+ // address exactly as findForAuth looks it up (no own normalization: a differently
27
+ // cased spelling is a different, unknown address and must not share a counter with a
28
+ // registered one). ctx.rateLimitDigest is derived from the JWT secret, so that after the
29
+ // threshold they answer account_locked exactly like a registered address.
30
+ // Without a digest key (no rate-limit wiring) they stay plain invalid_credentials.
31
+ function unknownEmailLockoutSubject(ctx, email) {
32
+ const digest = ctx.rateLimitDigest?.(email);
33
+ return digest === undefined ? undefined : `email:${digest}`;
34
+ }
35
+ export async function gateCountUnknownUser(ctx, email, maxFailedAttempts, lockoutDurationMinutes) {
36
+ const subject = unknownEmailLockoutSubject(ctx, email);
37
+ if (!ctx.redis || subject === undefined)
38
+ return ok(undefined);
39
+ const locked = await gateEnforceLockout(ctx, subject);
40
+ if (!locked.ok)
41
+ return locked;
42
+ await recordFailedAttempt(ctx.redis, subject, maxFailedAttempts, lockoutDurationMinutes);
43
+ return ok(undefined);
44
+ }
25
45
  /**
26
46
  * Lockout BEFORE password verify — locked accounts can't be password-probed.
27
47
  * Fail-open without Redis (IP rate-limit still covers partially).
@@ -164,6 +184,11 @@ export function createLoginHandler(opts = {}) {
164
184
  handler: async (event, ctx) => {
165
185
  const systemUser = createSystemUser(SYSTEM_USER_ID);
166
186
  const foundRow = parseAuthUserRow(await ctx.queryAs(systemUser, UserQueries.findForAuth, { email: event.payload.email }));
187
+ if (!foundRow?.passwordHash || foundRow.isDeleted) {
188
+ const unknown = await gateCountUnknownUser(ctx, event.payload.email, maxFailedAttempts, lockoutDurationMinutes);
189
+ if (!unknown.ok)
190
+ return unknown.result;
191
+ }
167
192
  const userGate = await gateResolveAuthUser(foundRow, event.payload.password);
168
193
  if (!userGate.ok)
169
194
  return userGate.result;
@@ -1,6 +1,6 @@
1
- import { AUTH_UNLOCK_DEFAULT_TTL_MINUTES, AuthErrors } from "../constants.js";
2
1
  import { AuthMailNotificationTypes } from "../mail-notifications.js";
3
2
  import { signUnlockToken } from "../unlock-token.js";
3
+ import { AUTH_UNLOCK_DEFAULT_TTL_MINUTES, AuthErrors } from "../web/constants.js";
4
4
  import { createTokenRequestHandler, } from "./token-request-handler.js";
5
5
  // @wrapper-known semantic-alias
6
6
  export function createRequestAccountUnlockHandler(opts) {
@@ -1,6 +1,6 @@
1
- import { AUTH_VERIFY_DEFAULT_TTL_MINUTES, AuthErrors } from "../constants.js";
2
1
  import { AuthMailNotificationTypes } from "../mail-notifications.js";
3
2
  import { signVerificationToken } from "../verification-token.js";
3
+ import { AUTH_VERIFY_DEFAULT_TTL_MINUTES, AuthErrors } from "../web/constants.js";
4
4
  import { createTokenRequestHandler, } from "./token-request-handler.js";
5
5
  // @wrapper-known semantic-alias
6
6
  export function createRequestEmailVerificationHandler(opts) {
@@ -1,6 +1,6 @@
1
- import { AUTH_RESET_DEFAULT_TTL_MINUTES, AuthErrors } from "../constants.js";
2
1
  import { AuthMailNotificationTypes } from "../mail-notifications.js";
3
2
  import { signResetToken } from "../reset-token.js";
3
+ import { AUTH_RESET_DEFAULT_TTL_MINUTES, AuthErrors } from "../web/constants.js";
4
4
  import { createTokenRequestHandler, } from "./token-request-handler.js";
5
5
  // @wrapper-known semantic-alias
6
6
  export function createRequestPasswordResetHandler(opts) {
@@ -2,10 +2,10 @@ import { defineWriteHandler } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import { UnprocessableError, writeFailure } from "@cosmicdrift/kumiko-framework/errors";
3
3
  import * as z from "zod";
4
4
  import { hashPassword } from "../../shared/index.js";
5
- import { AuthErrors } from "../constants.js";
6
5
  import { invalidResetToken } from "../errors.js";
7
6
  import { passwordSchema } from "../password-policy.js";
8
7
  import { verifyResetToken } from "../reset-token.js";
8
+ import { AuthErrors } from "../web/constants.js";
9
9
  import { runConfirmTokenFlow } from "./confirm-token-flow.js";
10
10
  // Confirm step of the reset flow. Token-verify happens inline; the
11
11
  // post-verify pipeline (burn, load user, memberships, try-all-tenants,
@@ -1,9 +1,9 @@
1
1
  import { defineWriteHandler } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import { UnprocessableError, writeFailure } from "@cosmicdrift/kumiko-framework/errors";
3
3
  import * as z from "zod";
4
- import { AuthErrors } from "../constants.js";
5
4
  import { invalidVerificationToken } from "../errors.js";
6
5
  import { verifyVerificationToken } from "../verification-token.js";
6
+ import { AuthErrors } from "../web/constants.js";
7
7
  import { runConfirmTokenFlow } from "./confirm-token-flow.js";
8
8
  const VerifyEmailSchema = z.object({
9
9
  token: z.string().min(1),
@@ -2,7 +2,6 @@ export { hashPassword, verifyPassword } from "../shared/password-hashing.ts";
2
2
  export { type AuthPath, type AuthPaths, DEFAULT_AUTH_PATHS, makeAuthPaths } from "./auth-paths.ts";
3
3
  export type { BootstrapConfigValue, BootstrapDeps, BootstrapInvite, BootstrapInviteOutcome, BootstrapPlan, BootstrapReport, BootstrapSeedDeps, BootstrapSystemAdmin, BootstrapTenant, BootstrapTenantOutcome, } from "./bootstrap.ts";
4
4
  export { BootstrapPlanError, BootstrapWriteError, bootstrapTenants } from "./bootstrap.ts";
5
- export { AUTH_EMAIL_PASSWORD_FEATURE, AuthErrors, AuthHandlers, AuthQueries } from "./constants.ts";
6
5
  export type { AuthMailLocale } from "./email-templates.ts";
7
6
  export type { AccountLockoutOptions, AccountUnlockOptions, AuthEmailPasswordOptions, EmailVerificationOptions, InviteOptions, PasswordResetOptions, SignupOptions, } from "./feature.ts";
8
7
  export { authEmailPasswordEnvSchema, createAuthEmailPasswordFeature } from "./feature.ts";
@@ -11,3 +10,4 @@ export { AUTH_SELF_REGISTRATION_FEATURE, createAuthSelfRegistrationToggleFeature
11
10
  export { signToken, TokenPurpose, type VerifyResult, verifyToken } from "./signed-token.ts";
12
11
  export { type IssuedSignupActivation, type IssueSignupActivationArgs, issueSignupActivation, SIGNUP_ACTIVATION_NOTIFICATION_TYPE, } from "./signup-activation.ts";
13
12
  export { invalidateExistingSignupToken, normalizeEmail, SIGNUP_TOKEN_KEY_PREFIXES, storeSignupToken, } from "./signup-token-store.ts";
13
+ export { AUTH_EMAIL_PASSWORD_FEATURE, AuthErrors, AuthHandlers, AuthQueries, } from "./web/constants.ts";
@@ -7,7 +7,6 @@
7
7
  export { hashPassword, verifyPassword } from "../shared/password-hashing.js";
8
8
  export { DEFAULT_AUTH_PATHS, makeAuthPaths } from "./auth-paths.js";
9
9
  export { BootstrapPlanError, BootstrapWriteError, bootstrapTenants } from "./bootstrap.js";
10
- export { AUTH_EMAIL_PASSWORD_FEATURE, AuthErrors, AuthHandlers, AuthQueries } from "./constants.js";
11
10
  export { authEmailPasswordEnvSchema, createAuthEmailPasswordFeature } from "./feature.js";
12
11
  export { AuthMailNotificationTypes } from "./mail-notifications.js";
13
12
  export { AUTH_SELF_REGISTRATION_FEATURE, createAuthSelfRegistrationToggleFeature, } from "./self-registration-toggle.js";
@@ -19,3 +18,4 @@ export { AUTH_SELF_REGISTRATION_FEATURE, createAuthSelfRegistrationToggleFeature
19
18
  export { signToken, TokenPurpose, verifyToken } from "./signed-token.js";
20
19
  export { issueSignupActivation, SIGNUP_ACTIVATION_NOTIFICATION_TYPE, } from "./signup-activation.js";
21
20
  export { invalidateExistingSignupToken, normalizeEmail, SIGNUP_TOKEN_KEY_PREFIXES, storeSignupToken, } from "./signup-token-store.js";
21
+ export { AUTH_EMAIL_PASSWORD_FEATURE, AuthErrors, AuthHandlers, AuthQueries, } from "./web/constants.js";
@@ -1,7 +1,7 @@
1
1
  import { QnTypes, qn, templateVariable, } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import { hasMailTranslationKey, listMailLocales, mailT, resolveMailLocale, } from "@cosmicdrift/kumiko-framework/i18n";
3
3
  import { escapeHtml, escapeHtmlAttr } from "@cosmicdrift/kumiko-renderer/headless";
4
- import { AUTH_EMAIL_PASSWORD_FEATURE } from "./constants.js";
4
+ import { AUTH_EMAIL_PASSWORD_FEATURE } from "./web/constants.js";
5
5
  export const AUTH_MAIL_KINDS = {
6
6
  passwordReset: { name: "password-reset", translationKey: "reset" },
7
7
  accountUnlock: { name: "account-unlock", translationKey: "unlock" },
@@ -5,10 +5,10 @@
5
5
  // cannot drift between the two.
6
6
  import { generateToken } from "@cosmicdrift/kumiko-framework/api";
7
7
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
8
- import { AUTH_SIGNUP_DEFAULT_TTL_MINUTES } from "./constants.js";
9
8
  import { dispatchMagicLinkMail } from "./magic-link-mail.js";
10
9
  import { AuthMailNotificationTypes } from "./mail-notifications.js";
11
10
  import { invalidateExistingSignupToken, normalizeEmail, storeSignupToken, } from "./signup-token-store.js";
11
+ import { AUTH_SIGNUP_DEFAULT_TTL_MINUTES } from "./web/constants.js";
12
12
  export const SIGNUP_ACTIVATION_NOTIFICATION_TYPE = AuthMailNotificationTypes.signupActivation;
13
13
  export async function issueSignupActivation(args) {
14
14
  const ttlSeconds = (args.tokenTtlMinutes ?? AUTH_SIGNUP_DEFAULT_TTL_MINUTES) * 60;
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Browser-Seite der Auth-Routes. Dünne fetch-Wrapper um /api/auth/*
3
2
  // mit Cookie-Transport: JWT lebt im HttpOnly kumiko_auth-Cookie,
4
3
  // Double-Submit-CSRF-Token im JS-lesbaren kumiko_csrf-Cookie. Alle
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Pure form helpers shared by auth screens. Extracted so unit tests can
3
2
  // pin password / rate-limit / redirect rules without mounting React.
4
3
  /** Client-side password + confirm check before calling signup/reset APIs. */
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // Shared Web-Primitives für die Auth-Screens. Nur noch Layout/Style-
4
3
  // Helpers — Form/Field/Input/Button/Banner kommen jetzt über
5
4
  // usePrimitives() aus dem Framework-Vertrag, damit Native dieselben
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // Auth-Gate: rendert den LoginScreen solange der Session-Status
4
3
  // "unauthenticated" ist, sonst die Kinder. "loading" zeigt einen
5
4
  // minimalen Placeholder — die initiale Refresh-Runde liefert in der
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Redirect targets for external login pages. `next` travels through the query
3
2
  // string, so anything read back from it is untrusted: only same-origin
4
3
  // root-relative paths pass (no "//host", no "/\host", no scheme).
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Handlers for RowAction `kind: "clientAction"`: an admin screen lists users and
3
2
  // triggers the same public mail flows the login screens use.
4
3
  import { requestEmailVerification, requestPasswordReset, } from "./auth-client.js";
@@ -1,12 +1,11 @@
1
- // @runtime client
2
1
  // Client-Feature-Factory für auth-email-password. Wird vom App-Code
3
2
  // in createKumikoApp({ clientFeatures: [emailPasswordClient()] })
4
3
  // eingehängt und bringt Session-Context + AuthGate + Default-UI-
5
4
  // Translations (de/en) mit. Alles ist overridbar — Login-Screen,
6
5
  // Strings pro Locale, pro Key.
7
- import { defaultTranslations, mergeTranslations } from "../i18n.js";
8
6
  import { makeSessionAuthGate, } from "./auth-gate.js";
9
7
  import { emailPasswordClientActions } from "./client-actions.js";
8
+ import { defaultTranslations, mergeTranslations } from "./i18n.js";
10
9
  export function emailPasswordClient(options = {}) {
11
10
  const translations = mergeTranslations(defaultTranslations, options.translations ?? {});
12
11
  return {
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // ConfirmAccountUnlockScreen — reads `?token=...` from the URL, auto-posts
4
3
  // it to /api/auth/confirm-account-unlock on mount, shows success/error.
5
4
  // Idempotent server-side (clearLockoutState is a no-op when already
@@ -1,9 +1,6 @@
1
- // @runtime client
2
- // Pure string constants — no DB/Node builtins. Marked `@runtime client` so
3
- // browser code (Members screen etc.) can import them too without the
4
- // runtime-isolation guard complaining. Runtime may import "client" files
5
- // (see RUNTIME_RULES), so server-side access (handlers, dispatcher) stays
6
- // intact as well.
1
+ // Pure string constants — no DB/Node builtins. They live under web/ so browser
2
+ // code (Members screen etc.) can import them without the runtime-isolation
3
+ // guard complaining; runtime may import client files, so handlers keep using them.
7
4
  export const AUTH_EMAIL_PASSWORD_FEATURE = "auth-email-password";
8
5
  // Minimum length for reset/verify hmacSecret — mirrors the ≥32-char
9
6
  // JWT_SECRET env check (HMAC-SHA256 key material).
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // Standard-Topbar-Actions Komposition für Apps mit Auth + Workspaces.
4
3
  // Bündelt das Pattern das jeder App-Sample sonst hand-ausschreibt:
5
4
  // TenantSwitcher (links) → optional Extras (z.B. LanguageSwitcher) →
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // ForgotPasswordScreen — Form mit email-input. Submit triggert
4
3
  // /api/auth/request-password-reset (silent-success, kein account-
5
4
  // enumeration). UI zeigt unconditional ein "Wenn Account existiert,
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // English UI copy for this feature. emailPasswordClient() mounts it as a
3
2
  // LocaleProvider fallback. Apps override keys via
4
3
  // `emailPasswordClient({ translations })`. German/Spanish ship in
@@ -129,7 +128,7 @@ export const defaultTranslations = {
129
128
  "auth.tenant.switcher.none": "No tenant",
130
129
  },
131
130
  };
132
- // Kanonische Implementierung lebt jetzt im Renderer (neben
133
- // TranslationsByLocale) — Re-Export hält die bestehende Import-Surface
134
- // (auth-email-password/web) stabil.
131
+ // The canonical implementation lives in the renderer (next to
132
+ // TranslationsByLocale); the re-export keeps the existing import surface
133
+ // (auth-email-password/web) stable.
135
134
  export { mergeTranslations } from "@cosmicdrift/kumiko-renderer";
@@ -1,4 +1,3 @@
1
- export { defaultTranslations, mergeTranslations } from "../i18n.ts";
2
1
  export type { AuthTokenFailure, CurrentUserProfile, LoginFailure, LoginRequest, LoginResponse, ResetPasswordFailure, SignupConfirmSuccess, TenantSummary, VerifyEmailFailure, } from "./auth-client.ts";
3
2
  export { AuthRequestError, confirmAccountUnlock, confirmSignup, requestAccountUnlock, requestEmailVerification, requestPasswordReset, requestSignup, resetPassword, toLoginResponse, verifyEmail, } from "./auth-client.ts";
4
3
  export type { AuthCardProps, AuthShellRenderer } from "./auth-form-primitives.tsx";
@@ -14,6 +13,7 @@ export type { DefaultTopbarActionsProps } from "./default-topbar-actions.tsx";
14
13
  export { DefaultTopbarActions } from "./default-topbar-actions.tsx";
15
14
  export type { ForgotPasswordScreenProps } from "./forgot-password-screen.tsx";
16
15
  export { ForgotPasswordScreen } from "./forgot-password-screen.tsx";
16
+ export { defaultTranslations, mergeTranslations } from "./i18n.ts";
17
17
  export type { InviteAcceptScreenProps } from "./invite-accept-screen.tsx";
18
18
  export { InviteAcceptScreen } from "./invite-accept-screen.tsx";
19
19
  export type { AuthLegalLink, LoginScreenProps } from "./login-screen.tsx";
@@ -1,10 +1,8 @@
1
- // @runtime client
2
1
  // Public exports für die Browser-Seite des auth-email-password Features.
3
2
  // Wird über den Sub-Path-Export `@cosmicdrift/kumiko-bundled-features/auth-email-
4
3
  // password/web` konsumiert — die Server-Seite (defineFeature) lebt in
5
4
  // `@cosmicdrift/kumiko-bundled-features/auth-email-password` und hat keine
6
5
  // React-/DOM-Deps. Trennung bleibt sauber so wie renderer vs renderer/web.
7
- export { defaultTranslations, mergeTranslations } from "../i18n.js";
8
6
  export { AuthRequestError, confirmAccountUnlock, confirmSignup, requestAccountUnlock, requestEmailVerification, requestPasswordReset, requestSignup, resetPassword, toLoginResponse, verifyEmail, } from "./auth-client.js";
9
7
  export { AuthCard, AuthShellProvider, useAuthShell } from "./auth-form-primitives.js";
10
8
  export { createLoginRoute, makeAuthGate, makeSessionAuthGate } from "./auth-gate.js";
@@ -13,6 +11,7 @@ export { emailPasswordClient } from "./client-plugin.js";
13
11
  export { ConfirmAccountUnlockScreen } from "./confirm-account-unlock-screen.js";
14
12
  export { DefaultTopbarActions } from "./default-topbar-actions.js";
15
13
  export { ForgotPasswordScreen } from "./forgot-password-screen.js";
14
+ export { defaultTranslations, mergeTranslations } from "./i18n.js";
16
15
  export { InviteAcceptScreen } from "./invite-accept-screen.js";
17
16
  export { LoginScreen } from "./login-screen.js";
18
17
  export { RequestAccountUnlockScreen } from "./request-account-unlock-screen.js";
@@ -6,8 +6,8 @@ export type InviteAcceptScreenProps = {
6
6
  * `(data) => "/${data.tenantId}/"`. Function-form receives the roles this
7
7
  * flow grants in the target tenant; branch 1 reports the invitation's
8
8
  * role, which for an existing member is not their full role set there.
9
- * @deprecated Configure auth.postAuthLanding on the server; its landingPath wins.
10
- * Kept as fallback. */
9
+ * @deprecated Removed in 0.390.0. Configure auth.postAuthLanding on the server; its landingPath wins.
10
+ * Kept as fallback until 0.390.0. */
11
11
  readonly loggedInHref?: string | ((args: {
12
12
  tenantId: string;
13
13
  roles: readonly string[];
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // InviteAcceptScreen — Magic-Link-Accept für Tenant-Invitations.
4
3
  //
5
4
  // Liest `?token=...` aus der URL und branched intern je nach session-state:
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // Default-LoginScreen. Reine E-Mail-+-Passwort-Form, zentriert, Card-
4
3
  // Layout. Texte kommen aus `useTranslation()` — die Default-Bundles
5
4
  // (de+en) liefert das Feature selber mit (translations.ts); Apps die
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Server-registered so the document designer names the seeded auth mails.
3
2
  export const AUTH_EMAIL_PASSWORD_MAIL_I18N = {
4
3
  "auth-email-password:feature.label": { en: "Sign-in" },
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // RequestAccountUnlockScreen — form with an email input. Submit triggers
4
3
  // /api/auth/request-account-unlock (silent-success, no account
5
4
  // enumeration). UI unconditionally shows an "if your account is locked,
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // ResetPasswordScreen — liest `?token=...` aus der URL, zeigt Form mit
4
3
  // new + confirm-password. Submit triggert /api/auth/reset-password mit
5
4
  // dem Token. Server collapses alle Token-Verify-Failures auf einen
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // Rendered by auth-gate's LoginRoute when the session bootstrap failed for a reason other than "not logged in".
4
3
  import { usePrimitives, useTranslation } from "@cosmicdrift/kumiko-renderer";
5
4
  import { useState } from "react";
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // Session-State für den Browser-Renderer. Hält den aktuell eingeloggten
4
3
  // User (Profile + aktive Tenant-Zuordnung + Memberships), reagiert auf
5
4
  // Login/Logout/Switch-Tenant und refresh't die Daten automatisch.
@@ -7,8 +7,8 @@ export type SignupCompleteScreenProps = {
7
7
  /** Where to send the user after activation. Function-form receives the tenantKey, the
8
8
  * roles granted by this flow in that tenant, and the claimed `handover` entity when
9
9
  * signup claimed a try-first grant. Default "/".
10
- * @deprecated Configure auth.postAuthLanding on the server; its landingPath wins.
11
- * Kept as fallback. */
10
+ * @deprecated Removed in 0.390.0. Configure auth.postAuthLanding on the server; its landingPath wins.
11
+ * Kept as fallback until 0.390.0. */
12
12
  readonly loggedInHref?: string | ((args: {
13
13
  tenantKey: string;
14
14
  roles: readonly string[];
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // SignupCompleteScreen — Magic-Link-Self-Signup, Step 2.
4
3
  //
5
4
  // Reads `?token=...` from the URL, shows a form with password + confirm.
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // SignupScreen — Magic-Link-Self-Signup, Step 1.
4
3
  //
5
4
  // Form mit Email-Input. Submit triggert /api/auth/signup-request
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // Tenant choices as dropdown entries — the TenantSwitcher's list for a user
4
3
  // menu that carries the shell controls. Renders nothing for a single tenant.
5
4
  import { useTranslation } from "@cosmicdrift/kumiko-renderer";
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // TenantSwitcher — kleines Dropdown, zeigt den aktiven Tenant und
4
3
  // erlaubt Wechsel zu anderen Memberships. Auf Radix-DropdownMenu für
5
4
  // konsistentes Verhalten (Click-outside/Escape/Keyboard-Nav).
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Liest den eingeloggten User + die Rollen aus dem aktiven Tenant aus
3
2
  // der Session. Der Hook ist die Standard-Brücke zwischen Session-State
4
3
  // und Layout-Komponenten (WorkspaceShell.user, DefaultAppShell-Gates,
@@ -1,5 +1,4 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // UserMenu — Avatar-Dropdown für die Topbar (variant="pill", Default) oder den
4
3
  // Sidebar-Footer (variant="sidebar" = die sidebar-07-NavUser-Row). Zeigt
5
4
  // Name/Email + Logout. Auf Radix-DropdownMenu, damit Click-outside, Escape,
@@ -1,5 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // @runtime client
3
2
  // VerifyEmailScreen — liest `?token=...` aus URL, schickt ihn auto an
4
3
  // /api/auth/verify-email beim Mount, zeigt success/error. Idempotent
5
4
  // auf Server-Seite (mehrfaches Klicken setzt emailVerified=true erneut),
@@ -1,5 +1,5 @@
1
1
  import { type WriteFailure } from "@cosmicdrift/kumiko-framework/errors";
2
- export { AuthMfaErrorCodes as AuthMfaErrors } from "./constants.ts";
2
+ export { AuthMfaErrorCodes as AuthMfaErrors } from "./web/constants.ts";
3
3
  export declare function mfaAlreadyEnabled(): WriteFailure;
4
4
  export declare function mfaNotEnabled(): WriteFailure;
5
5
  export declare function invalidSetupToken(): WriteFailure;
@@ -1,6 +1,6 @@
1
1
  import { UnprocessableError, writeFailure, } from "@cosmicdrift/kumiko-framework/errors";
2
- import { AuthMfaErrorCodes } from "./constants.js";
3
- export { AuthMfaErrorCodes as AuthMfaErrors } from "./constants.js";
2
+ import { AuthMfaErrorCodes } from "./web/constants.js";
3
+ export { AuthMfaErrorCodes as AuthMfaErrors } from "./web/constants.js";
4
4
  export function mfaAlreadyEnabled() {
5
5
  return writeFailure(new UnprocessableError(AuthMfaErrorCodes.mfaAlreadyEnabled, {
6
6
  i18nKey: "auth.mfa.errors.mfaAlreadyEnabled",
@@ -7,13 +7,13 @@ import * as z from "zod";
7
7
  import { burnToken, sessionLocaleField, sessionTimezoneField } from "../../shared/index.js";
8
8
  import { USER_STATUS, UserQueries } from "../../user/index.js";
9
9
  import { base32Decode } from "../base32.js";
10
- import { MFA_VERIFY_LOCKOUT_MINUTES, MFA_VERIFY_MAX_ATTEMPTS } from "../constants.js";
11
10
  import { findUserMfaRow } from "../db/queries.js";
12
11
  import { invalidSetupToken, invalidTotpCode, mfaAlreadyEnabled, tooManyAttempts, } from "../errors.js";
13
12
  import { verifyMfaSetupToken } from "../mfa-setup-token.js";
14
13
  import { clearMfaVerifyAttempts, getMfaVerifyLockoutState, recordFailedMfaVerifyAttempt, } from "../mfa-verify-attempts.js";
15
14
  import { encodeRecoveryCodes, userMfaEntity, userMfaTable } from "../schema/user-mfa.js";
16
15
  import { verifyTotp } from "../totp.js";
16
+ import { MFA_VERIFY_LOCKOUT_MINUTES, MFA_VERIFY_MAX_ATTEMPTS } from "../web/constants.js";
17
17
  const executor = createEventStoreExecutor(userMfaTable, userMfaEntity, {
18
18
  entityName: "user-mfa",
19
19
  });
@@ -2,7 +2,6 @@ import { createTenantDb } from "@cosmicdrift/kumiko-framework/db";
2
2
  import { defineWriteHandler } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import * as z from "zod";
4
4
  import { base32Encode } from "../base32.js";
5
- import { MFA_SETUP_TOKEN_TTL_MINUTES } from "../constants.js";
6
5
  import { findUserMfaRow } from "../db/queries.js";
7
6
  import { invalidChallengeToken, mfaAlreadyEnabled } from "../errors.js";
8
7
  import { verifyMfaPreauthSetupToken } from "../mfa-preauth-setup-token.js";
@@ -10,6 +9,7 @@ import { signMfaSetupToken } from "../mfa-setup-token.js";
10
9
  import { buildOtpauthUri } from "../otpauth-uri.js";
11
10
  import { generateRecoveryCodes, hashRecoveryCodes } from "../recovery-codes.js";
12
11
  import { generateTotpSecret } from "../totp.js";
12
+ import { MFA_SETUP_TOKEN_TTL_MINUTES } from "../web/constants.js";
13
13
  const ENABLE_START_PREAUTH_TENANT_REASON = "reads the MFA enrollment of the tenant named in the signed login/setup token, not the guest dispatch tenant";
14
14
  // Pre-auth twin of enable-start.write.ts: identity comes from a verified
15
15
  // preauthSetupToken (minted by login.write.ts when enforcement policy
@@ -2,13 +2,13 @@ import { defineWriteHandler } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import * as z from "zod";
3
3
  import { UserQueries } from "../../user/index.js";
4
4
  import { base32Encode } from "../base32.js";
5
- import { MFA_SETUP_TOKEN_TTL_MINUTES } from "../constants.js";
6
5
  import { findUserMfaRow } from "../db/queries.js";
7
6
  import { mfaAlreadyEnabled } from "../errors.js";
8
7
  import { signMfaSetupToken } from "../mfa-setup-token.js";
9
8
  import { buildOtpauthUri } from "../otpauth-uri.js";
10
9
  import { generateRecoveryCodes, hashRecoveryCodes } from "../recovery-codes.js";
11
10
  import { generateTotpSecret } from "../totp.js";
11
+ import { MFA_SETUP_TOKEN_TTL_MINUTES } from "../web/constants.js";
12
12
  const FALLBACK_ACCOUNT_LABEL = "account";
13
13
  // The authenticator app shows this label, so an internal user id must never leak into it.
14
14
  function readableAccountLabel(me) {