@cosmicdrift/kumiko-bundled-features 0.386.0 → 0.388.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 (643) hide show
  1. package/LICENSE +21 -57
  2. package/dist/agent-tools/tool-catalog.js +1 -1
  3. package/dist/agent-tools/tool-dispatch.d.ts +7 -7
  4. package/dist/agent-tools/tool-dispatch.js +9 -9
  5. package/dist/audit/handlers/audit-events.js +1 -1
  6. package/dist/audit/screens.js +1 -1
  7. package/dist/auth-email-password/feature.js +1 -1
  8. package/dist/auth-email-password/handlers/change-password.write.js +3 -3
  9. package/dist/auth-email-password/handlers/confirm-token-flow.js +5 -5
  10. package/dist/auth-email-password/handlers/invite-accept-with-login.write.js +1 -1
  11. package/dist/auth-email-password/handlers/invite-accept.write.js +18 -18
  12. package/dist/auth-email-password/handlers/invite-create.write.d.ts +2 -2
  13. package/dist/auth-email-password/handlers/invite-create.write.js +10 -10
  14. package/dist/auth-email-password/handlers/invite-info.query.js +1 -1
  15. package/dist/auth-email-password/handlers/invite-signup-complete.write.js +24 -26
  16. package/dist/auth-email-password/handlers/login.write.d.ts +1 -1
  17. package/dist/auth-email-password/handlers/login.write.js +1 -1
  18. package/dist/auth-email-password/handlers/self-registration-status.query.js +1 -1
  19. package/dist/auth-email-password/handlers/signup-confirm.write.js +34 -37
  20. package/dist/auth-email-password/handlers/signup-request.write.js +6 -7
  21. package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.d.ts +1 -1
  22. package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.js +1 -4
  23. package/dist/auth-email-password/index.js +5 -5
  24. package/dist/auth-email-password/lockout-store.js +1 -1
  25. package/dist/auth-email-password/seeding.d.ts +42 -45
  26. package/dist/auth-email-password/seeding.js +51 -53
  27. package/dist/auth-email-password/signup-token-store.js +8 -8
  28. package/dist/auth-email-password/testing.js +3 -3
  29. package/dist/auth-email-password/web/auth-client.d.ts +2 -2
  30. package/dist/auth-email-password/web/auth-client.js +36 -37
  31. package/dist/auth-email-password/web/auth-form-primitives.js +10 -10
  32. package/dist/auth-email-password/web/auth-gate.js +15 -16
  33. package/dist/auth-email-password/web/client-plugin.d.ts +7 -7
  34. package/dist/auth-email-password/web/client-plugin.js +4 -5
  35. package/dist/auth-email-password/web/confirm-account-unlock-screen.js +1 -1
  36. package/dist/auth-email-password/web/constants.js +3 -3
  37. package/dist/auth-email-password/web/default-topbar-actions.d.ts +8 -8
  38. package/dist/auth-email-password/web/default-topbar-actions.js +6 -6
  39. package/dist/auth-email-password/web/forgot-password-screen.d.ts +2 -2
  40. package/dist/auth-email-password/web/forgot-password-screen.js +9 -9
  41. package/dist/auth-email-password/web/index.js +5 -5
  42. package/dist/auth-email-password/web/invite-accept-screen.d.ts +1 -1
  43. package/dist/auth-email-password/web/invite-accept-screen.js +16 -16
  44. package/dist/auth-email-password/web/login-screen.d.ts +1 -1
  45. package/dist/auth-email-password/web/login-screen.js +2 -3
  46. package/dist/auth-email-password/web/reset-password-screen.d.ts +4 -4
  47. package/dist/auth-email-password/web/reset-password-screen.js +12 -13
  48. package/dist/auth-email-password/web/session.d.ts +10 -9
  49. package/dist/auth-email-password/web/session.js +28 -29
  50. package/dist/auth-email-password/web/signup-complete-screen.js +3 -3
  51. package/dist/auth-email-password/web/signup-screen.d.ts +1 -1
  52. package/dist/auth-email-password/web/signup-screen.js +13 -13
  53. package/dist/auth-email-password/web/tenant-switcher.d.ts +4 -4
  54. package/dist/auth-email-password/web/tenant-switcher.js +21 -22
  55. package/dist/auth-email-password/web/use-shell-user.js +12 -13
  56. package/dist/auth-email-password/web/user-menu.d.ts +4 -4
  57. package/dist/auth-email-password/web/user-menu.js +12 -13
  58. package/dist/auth-email-password/web/verify-email-screen.d.ts +2 -2
  59. package/dist/auth-email-password/web/verify-email-screen.js +9 -10
  60. package/dist/auth-foundation/boot-checks.js +4 -4
  61. package/dist/auth-foundation/resolve-anonymous-access.d.ts +1 -1
  62. package/dist/auth-foundation/resolve-anonymous-access.js +3 -3
  63. package/dist/auth-foundation/types.js +2 -2
  64. package/dist/auth-mfa/feature-exports.d.ts +2 -2
  65. package/dist/auth-mfa/feature.js +8 -0
  66. package/dist/auth-mfa/handlers/disable.write.js +3 -3
  67. package/dist/auth-mfa/handlers/enable-confirm-preauth.write.js +4 -4
  68. package/dist/auth-mfa/handlers/enable-confirm.write.js +2 -2
  69. package/dist/auth-mfa/handlers/enable-start-preauth.write.js +1 -1
  70. package/dist/auth-mfa/handlers/reencrypt.job.js +1 -1
  71. package/dist/auth-mfa/handlers/regenerate-recovery.write.js +5 -5
  72. package/dist/auth-mfa/handlers/verify.write.js +1 -1
  73. package/dist/auth-mfa/token-secrets.js +1 -1
  74. package/dist/auth-mfa/web/client-plugin.d.ts +1 -1
  75. package/dist/auth-mfa/web/client-plugin.js +1 -1
  76. package/dist/auth-mfa/web/i18n.js +8 -4
  77. package/dist/auth-mfa/web/index.js +4 -4
  78. package/dist/auth-mfa/web/mfa-client.js +17 -16
  79. package/dist/auth-mfa/web/mfa-code-or-recovery-field.d.ts +11 -0
  80. package/dist/auth-mfa/web/mfa-code-or-recovery-field.js +12 -0
  81. package/dist/auth-mfa/web/mfa-disable-dialog.js +14 -3
  82. package/dist/auth-mfa/web/mfa-regenerate-recovery-dialog.js +14 -3
  83. package/dist/auth-mfa/web/mfa-setup-preauth-screen.js +10 -5
  84. package/dist/auth-mfa/web/mfa-verify-screen.js +32 -11
  85. package/dist/billing-foundation/aggregate-id.d.ts +5 -5
  86. package/dist/billing-foundation/aggregate-id.js +10 -11
  87. package/dist/billing-foundation/checkout-core.d.ts +9 -14
  88. package/dist/billing-foundation/checkout-core.js +24 -39
  89. package/dist/billing-foundation/consumer-protection/confirmation-mail.js +8 -2
  90. package/dist/billing-foundation/consumer-protection/consent-gate.d.ts +1 -0
  91. package/dist/billing-foundation/consumer-protection/consent-gate.js +1 -0
  92. package/dist/billing-foundation/consumer-protection/issue-confirmation.js +9 -3
  93. package/dist/billing-foundation/consumer-protection/mail-notifications.js +3 -1
  94. package/dist/billing-foundation/consumer-protection/termination-receipt-limit.d.ts +4 -2
  95. package/dist/billing-foundation/consumer-protection/termination-receipt-limit.js +6 -5
  96. package/dist/billing-foundation/consumer-protection/termination-record.d.ts +5 -1
  97. package/dist/billing-foundation/consumer-protection/termination-record.js +27 -17
  98. package/dist/billing-foundation/consumer-protection/termination-request.js +12 -7
  99. package/dist/billing-foundation/consumer-protection/termination-revoke.js +12 -7
  100. package/dist/billing-foundation/consumer-protection/termination-texts.d.ts +1 -1
  101. package/dist/billing-foundation/consumer-protection/termination-texts.js +3 -0
  102. package/dist/billing-foundation/consumer-protection/withdrawal-period.d.ts +5 -2
  103. package/dist/billing-foundation/consumer-protection/withdrawal-period.js +8 -9
  104. package/dist/billing-foundation/entities.js +27 -27
  105. package/dist/billing-foundation/events.d.ts +1 -0
  106. package/dist/billing-foundation/events.js +19 -17
  107. package/dist/billing-foundation/feature.js +45 -44
  108. package/dist/billing-foundation/get-subscription-for-tenant.d.ts +3 -3
  109. package/dist/billing-foundation/get-subscription-for-tenant.js +3 -5
  110. package/dist/billing-foundation/handlers/billing-plans.query.js +35 -5
  111. package/dist/billing-foundation/handlers/create-checkout-session.write.js +19 -17
  112. package/dist/billing-foundation/handlers/create-portal-session.write.js +11 -12
  113. package/dist/billing-foundation/handlers/list-subscriptions.query.js +4 -4
  114. package/dist/billing-foundation/handlers/plan-switch-preview.query.d.ts +13 -0
  115. package/dist/billing-foundation/handlers/plan-switch-preview.query.js +48 -0
  116. package/dist/billing-foundation/handlers/process-event.write.d.ts +6 -0
  117. package/dist/billing-foundation/handlers/process-event.write.js +28 -22
  118. package/dist/billing-foundation/handlers/start-plan-checkout.write.js +32 -5
  119. package/dist/billing-foundation/handlers/switch-plan.write.d.ts +2 -2
  120. package/dist/billing-foundation/handlers/switch-plan.write.js +56 -64
  121. package/dist/billing-foundation/handlers/sync-subscription.write.js +12 -1
  122. package/dist/billing-foundation/i18n.js +22 -0
  123. package/dist/billing-foundation/index.d.ts +1 -1
  124. package/dist/billing-foundation/plan-catalog.d.ts +21 -5
  125. package/dist/billing-foundation/plan-catalog.js +25 -16
  126. package/dist/billing-foundation/plan-switch.d.ts +12 -0
  127. package/dist/billing-foundation/plan-switch.js +60 -0
  128. package/dist/billing-foundation/projection.d.ts +15 -11
  129. package/dist/billing-foundation/projection.js +38 -37
  130. package/dist/billing-foundation/subscription-tier-sync.js +3 -3
  131. package/dist/billing-foundation/tenant-destroy-hook.d.ts +2 -2
  132. package/dist/billing-foundation/tenant-destroy-hook.js +7 -7
  133. package/dist/billing-foundation/types.d.ts +97 -42
  134. package/dist/billing-foundation/types.js +29 -20
  135. package/dist/billing-foundation/validate-options.js +17 -0
  136. package/dist/billing-foundation/web/billing-plans-panel.js +82 -36
  137. package/dist/billing-foundation/web/checkout-consent-dialog.d.ts +17 -3
  138. package/dist/billing-foundation/web/checkout-consent-dialog.js +14 -10
  139. package/dist/billing-foundation/web/constants.d.ts +4 -0
  140. package/dist/billing-foundation/web/constants.js +4 -0
  141. package/dist/billing-foundation/web/plan-price.d.ts +15 -0
  142. package/dist/billing-foundation/web/plan-price.js +32 -0
  143. package/dist/billing-foundation/web/plan-switch-confirm-dialog.d.ts +15 -0
  144. package/dist/billing-foundation/web/plan-switch-confirm-dialog.js +66 -0
  145. package/dist/cap-counter/aggregate-id.js +8 -9
  146. package/dist/cap-counter/cap-reservation.js +5 -1
  147. package/dist/cap-counter/constants.js +11 -12
  148. package/dist/cap-counter/enforce-cap.d.ts +59 -62
  149. package/dist/cap-counter/enforce-cap.js +49 -49
  150. package/dist/cap-counter/entity.js +29 -29
  151. package/dist/cap-counter/feature.js +34 -35
  152. package/dist/cap-counter/handlers/increment-rolling.write.d.ts +2 -2
  153. package/dist/cap-counter/handlers/increment-rolling.write.js +31 -31
  154. package/dist/cap-counter/handlers/mark-soft-warned.write.js +4 -5
  155. package/dist/cap-counter/stock-cap-guard.js +8 -2
  156. package/dist/cap-counter/with-cap-enforcement.d.ts +3 -5
  157. package/dist/channel-email/feature.js +1 -1
  158. package/dist/channel-email/smtp-transport.d.ts +18 -17
  159. package/dist/channel-email/smtp-transport.js +24 -21
  160. package/dist/channel-in-app/handlers/unread-count.query.js +3 -4
  161. package/dist/compliance-profiles/feature.js +4 -4
  162. package/dist/compliance-profiles/handlers/for-tenant.query.js +3 -6
  163. package/dist/compliance-profiles/handlers/list-profiles.query.js +5 -5
  164. package/dist/compliance-profiles/handlers/needs-profile.query.js +4 -4
  165. package/dist/compliance-profiles/handlers/set-profile.write.js +13 -14
  166. package/dist/compliance-profiles/handlers/sub-processors.query.js +9 -11
  167. package/dist/compliance-profiles/resolve-for-tenant.js +7 -7
  168. package/dist/compliance-profiles/schema/profile-selection.js +18 -23
  169. package/dist/compliance-profiles/seeding.js +14 -15
  170. package/dist/compliance-profiles-ops/handlers/tenants-missing-profile.query.js +3 -3
  171. package/dist/compliance-profiles-ops/index.js +2 -2
  172. package/dist/config/handlers/cascade.query.d.ts +5 -0
  173. package/dist/config/handlers/cascade.query.js +4 -3
  174. package/dist/config/handlers/readiness.query.d.ts +4 -4
  175. package/dist/config/handlers/readiness.query.js +1 -1
  176. package/dist/config/handlers/reencrypt.job.js +4 -5
  177. package/dist/config/handlers/set.write.js +4 -4
  178. package/dist/config/handlers/values.query.d.ts +5 -0
  179. package/dist/config/handlers/values.query.js +4 -3
  180. package/dist/config/resolver.js +4 -4
  181. package/dist/config/table.js +10 -10
  182. package/dist/config/write-helpers.d.ts +1 -0
  183. package/dist/config/write-helpers.js +19 -10
  184. package/dist/crypto-shredding/handlers/forget-subject.write.d.ts +2 -2
  185. package/dist/crypto-shredding/handlers/forget-subject.write.js +25 -21
  186. package/dist/custom-fields/aggregate-id.d.ts +12 -13
  187. package/dist/custom-fields/aggregate-id.js +16 -17
  188. package/dist/custom-fields/entity.js +49 -47
  189. package/dist/custom-fields/events.js +7 -8
  190. package/dist/custom-fields/feature.d.ts +14 -14
  191. package/dist/custom-fields/feature.js +53 -54
  192. package/dist/custom-fields/handlers/clear-custom-field.write.d.ts +3 -2
  193. package/dist/custom-fields/handlers/clear-custom-field.write.js +9 -8
  194. package/dist/custom-fields/handlers/define-tenant-field.write.d.ts +1 -1
  195. package/dist/custom-fields/handlers/define-tenant-field.write.js +2 -2
  196. package/dist/custom-fields/handlers/delete-system-field.write.js +6 -7
  197. package/dist/custom-fields/handlers/delete-tenant-field.write.d.ts +1 -1
  198. package/dist/custom-fields/handlers/delete-tenant-field.write.js +3 -3
  199. package/dist/custom-fields/handlers/set-custom-field.write.d.ts +3 -3
  200. package/dist/custom-fields/handlers/set-custom-field.write.js +25 -28
  201. package/dist/custom-fields/handlers/update-tenant-field.write.d.ts +1 -1
  202. package/dist/custom-fields/handlers/update-tenant-field.write.js +1 -1
  203. package/dist/custom-fields/lib/field-access.js +2 -2
  204. package/dist/custom-fields/lib/parse-serialized-field.js +1 -1
  205. package/dist/custom-fields/lib/quota.js +1 -1
  206. package/dist/custom-fields/lib/value-schema.js +10 -12
  207. package/dist/custom-fields/run-retention.js +3 -3
  208. package/dist/custom-fields/schemas.js +14 -14
  209. package/dist/custom-fields/web/client-plugin.js +2 -5
  210. package/dist/custom-fields/web/constants.js +2 -2
  211. package/dist/custom-fields/web/custom-fields-form-section.d.ts +4 -4
  212. package/dist/custom-fields/web/custom-fields-form-section.js +22 -22
  213. package/dist/custom-fields/wire-for-entity.js +65 -67
  214. package/dist/custom-fields/wire-user-data-rights.js +3 -3
  215. package/dist/data-retention/_internal/parse-override.js +2 -3
  216. package/dist/data-retention/feature.js +11 -18
  217. package/dist/data-retention/handlers/policy-for.query.js +6 -6
  218. package/dist/data-retention/keep-for.d.ts +7 -7
  219. package/dist/data-retention/keep-for.js +15 -15
  220. package/dist/data-retention/override-schema.d.ts +3 -4
  221. package/dist/data-retention/override-schema.js +13 -15
  222. package/dist/data-retention/presets.d.ts +4 -5
  223. package/dist/data-retention/presets.js +18 -23
  224. package/dist/data-retention/resolve-tenant-preset.js +17 -16
  225. package/dist/data-retention/resolver.d.ts +12 -12
  226. package/dist/data-retention/resolver.js +24 -23
  227. package/dist/data-retention/run-retention-cleanup.d.ts +8 -3
  228. package/dist/data-retention/run-retention-cleanup.js +61 -51
  229. package/dist/data-retention/schema/tenant-retention-override.js +13 -11
  230. package/dist/delivery/channel-context.js +6 -3
  231. package/dist/delivery/db/queries/preferences.js +2 -2
  232. package/dist/delivery/delivery-service.js +22 -7
  233. package/dist/delivery/feature.js +2 -2
  234. package/dist/delivery/handlers/log.query.js +1 -1
  235. package/dist/delivery/handlers/preferences.query.d.ts +1 -1
  236. package/dist/delivery/handlers/preferences.query.js +20 -1
  237. package/dist/delivery/handlers/unsubscribe-page-chrome.query.js +1 -1
  238. package/dist/delivery/tables.js +9 -8
  239. package/dist/delivery/unsubscribe-link.d.ts +3 -1
  240. package/dist/delivery/unsubscribe-page-strings.d.ts +1 -0
  241. package/dist/delivery/unsubscribe-page-strings.js +1 -0
  242. package/dist/delivery/unsubscribe-page.d.ts +2 -0
  243. package/dist/delivery/unsubscribe-page.js +5 -0
  244. package/dist/delivery/unsubscribe.js +29 -11
  245. package/dist/document-ingest-foundation/entity.js +4 -4
  246. package/dist/document-ingest-foundation/events.js +2 -2
  247. package/dist/document-ingest-foundation/feature.js +2 -2
  248. package/dist/document-ingest-foundation/pages.js +1 -1
  249. package/dist/document-ingest-foundation/tenant-destroy-hook.js +4 -4
  250. package/dist/feature-toggles/compose-tier-resolver.js +1 -1
  251. package/dist/feature-toggles/feature.js +1 -1
  252. package/dist/feature-toggles/global-feature-state-table.js +1 -1
  253. package/dist/feature-toggles/handlers/registered.query.js +5 -5
  254. package/dist/feature-toggles/toggle-sync-signal.js +1 -1
  255. package/dist/feature-toggles/web/constants.js +1 -1
  256. package/dist/file-derivatives/feature.d.ts +1 -1
  257. package/dist/file-derivatives/feature.js +1 -1
  258. package/dist/file-derivatives/handlers/public-variant.query.js +1 -1
  259. package/dist/file-derivatives/presets.js +1 -1
  260. package/dist/file-foundation/feature.js +6 -6
  261. package/dist/file-foundation/index.d.ts +1 -1
  262. package/dist/file-foundation/index.js +1 -1
  263. package/dist/file-foundation/read-file-ref-content.d.ts +3 -0
  264. package/dist/file-foundation/read-file-ref-content.js +6 -1
  265. package/dist/file-provider-inmemory/feature.d.ts +1 -1
  266. package/dist/file-provider-inmemory/feature.js +16 -16
  267. package/dist/file-provider-s3/env-named-feature.d.ts +0 -2
  268. package/dist/file-provider-s3/feature.js +16 -16
  269. package/dist/file-provider-s3/lib/s3-provider.js +6 -6
  270. package/dist/files/feature.js +6 -6
  271. package/dist/files-tenant-data/handlers/sweep-orphaned-derivatives.job.js +4 -4
  272. package/dist/files-tenant-data/hooks.js +24 -26
  273. package/dist/files-tenant-data/index.js +1 -1
  274. package/dist/folders/feature.d.ts +1 -1
  275. package/dist/folders/web/folder-manager.js +2 -2
  276. package/dist/folders/web/tree.js +5 -5
  277. package/dist/form-draft/db/queries/cleanup.js +3 -3
  278. package/dist/form-draft/db/queries/owned-file-refs.js +1 -1
  279. package/dist/form-draft/decrypt-draft.js +5 -1
  280. package/dist/form-draft/entity.js +3 -3
  281. package/dist/form-draft/feature.js +4 -5
  282. package/dist/form-draft/handlers/discard.write.js +1 -1
  283. package/dist/form-draft/release-file-refs.js +6 -6
  284. package/dist/form-draft/schemas.js +3 -3
  285. package/dist/form-draft/web/constants.js +0 -2
  286. package/dist/host-routing/dispatch.js +11 -20
  287. package/dist/inbound-mail-foundation/aggregate-id.d.ts +13 -13
  288. package/dist/inbound-mail-foundation/aggregate-id.js +19 -19
  289. package/dist/inbound-mail-foundation/connect-routes.js +4 -3
  290. package/dist/inbound-mail-foundation/constants.d.ts +22 -24
  291. package/dist/inbound-mail-foundation/constants.js +30 -33
  292. package/dist/inbound-mail-foundation/entities.d.ts +12 -12
  293. package/dist/inbound-mail-foundation/entities.js +47 -48
  294. package/dist/inbound-mail-foundation/events.d.ts +4 -3
  295. package/dist/inbound-mail-foundation/events.js +50 -47
  296. package/dist/inbound-mail-foundation/feature.js +39 -39
  297. package/dist/inbound-mail-foundation/handlers/account-state.js +8 -8
  298. package/dist/inbound-mail-foundation/handlers/connect-account.write.js +25 -26
  299. package/dist/inbound-mail-foundation/handlers/disconnect-account.write.js +7 -7
  300. package/dist/inbound-mail-foundation/handlers/ingest-message.write.js +50 -51
  301. package/dist/inbound-mail-foundation/handlers/list-accounts.query.js +8 -8
  302. package/dist/inbound-mail-foundation/handlers/list-messages.query.js +10 -10
  303. package/dist/inbound-mail-foundation/handlers/scope-visibility.js +3 -4
  304. package/dist/inbound-mail-foundation/handlers/update-account.write.d.ts +2 -2
  305. package/dist/inbound-mail-foundation/handlers/update-account.write.js +22 -14
  306. package/dist/inbound-mail-foundation/i18n.js +0 -1
  307. package/dist/inbound-mail-foundation/oauth-state.d.ts +5 -5
  308. package/dist/inbound-mail-foundation/oauth-state.js +11 -10
  309. package/dist/inbound-mail-foundation/projection.d.ts +4 -4
  310. package/dist/inbound-mail-foundation/projection.js +31 -29
  311. package/dist/inbound-mail-foundation/provider-factory.d.ts +4 -4
  312. package/dist/inbound-mail-foundation/provider-factory.js +9 -9
  313. package/dist/inbound-mail-foundation/retention-sweep.d.ts +5 -3
  314. package/dist/inbound-mail-foundation/retention-sweep.js +38 -36
  315. package/dist/inbound-mail-foundation/screens.js +0 -3
  316. package/dist/inbound-mail-foundation/tenant-destroy-hook.js +14 -16
  317. package/dist/inbound-mail-foundation/types.d.ts +49 -49
  318. package/dist/inbound-mail-foundation/types.js +21 -21
  319. package/dist/inbound-mail-foundation/watch-supervisor.d.ts +10 -10
  320. package/dist/inbound-mail-foundation/watch-supervisor.js +85 -67
  321. package/dist/inbound-provider-imap/credential-document.js +13 -13
  322. package/dist/inbound-provider-imap/feature.d.ts +2 -2
  323. package/dist/inbound-provider-imap/feature.js +42 -40
  324. package/dist/inbound-provider-imap/imap-client.d.ts +12 -11
  325. package/dist/inbound-provider-imap/imap-client.js +20 -19
  326. package/dist/inbound-provider-inmemory/feature.d.ts +9 -9
  327. package/dist/inbound-provider-inmemory/feature.js +19 -19
  328. package/dist/jobs/db/queries/retention.js +2 -2
  329. package/dist/jobs/db/queries/stale-run-sweep.js +3 -3
  330. package/dist/jobs/events.js +1 -1
  331. package/dist/jobs/feature.d.ts +1 -0
  332. package/dist/jobs/feature.js +13 -10
  333. package/dist/jobs/handlers/detail.query.js +4 -4
  334. package/dist/jobs/handlers/list.query.js +1 -1
  335. package/dist/jobs/handlers/projection-rebuild.job.js +1 -1
  336. package/dist/jobs/handlers/reindex-entity.job.js +1 -1
  337. package/dist/jobs/handlers/retry.write.js +1 -1
  338. package/dist/jobs/handlers/tenant-failures.query.d.ts +1 -1
  339. package/dist/jobs/handlers/tenant-failures.query.js +45 -41
  340. package/dist/jobs/handlers/tenant-runs.query.d.ts +1 -1
  341. package/dist/jobs/handlers/tenant-runs.query.js +54 -50
  342. package/dist/jobs/job-instant.js +1 -1
  343. package/dist/jobs/job-run-logger.js +15 -15
  344. package/dist/jobs/job-run-table.js +3 -3
  345. package/dist/jobs/screens.js +1 -1
  346. package/dist/jobs/tenant-job-failure-table.js +1 -1
  347. package/dist/jobs/tenant-job-run-table.js +1 -1
  348. package/dist/ledger/entity.js +5 -5
  349. package/dist/ledger/feature.js +3 -3
  350. package/dist/ledger/handlers/confirm-schedule-period.write.js +3 -3
  351. package/dist/ledger/recurring.js +12 -12
  352. package/dist/ledger/schemas.js +1 -1
  353. package/dist/ledger/web/constants.js +2 -2
  354. package/dist/ledger/web/index.js +7 -7
  355. package/dist/legal-pages/feature.d.ts +4 -4
  356. package/dist/legal-pages/feature.js +25 -26
  357. package/dist/legal-pages/markdown.js +3 -3
  358. package/dist/legal-pages/web/client-plugin.js +23 -24
  359. package/dist/legal-pages/web/index.js +0 -1
  360. package/dist/mail-foundation/feature.d.ts +5 -5
  361. package/dist/mail-foundation/feature.js +27 -25
  362. package/dist/mail-transport-inmemory/feature.d.ts +4 -4
  363. package/dist/mail-transport-inmemory/feature.js +27 -28
  364. package/dist/mail-transport-smtp/feature.js +20 -20
  365. package/dist/managed-pages/branding.js +6 -6
  366. package/dist/managed-pages/feature.d.ts +26 -26
  367. package/dist/managed-pages/feature.js +34 -34
  368. package/dist/managed-pages/handlers/by-slug.query.js +5 -6
  369. package/dist/managed-pages/handlers/by-tenant-published.query.js +2 -2
  370. package/dist/managed-pages/handlers/set.write.js +5 -7
  371. package/dist/managed-pages/screens/page-screens.js +11 -11
  372. package/dist/managed-pages/seeding.js +8 -8
  373. package/dist/managed-pages/table.js +13 -12
  374. package/dist/managed-pages/web/client-plugin.d.ts +1 -1
  375. package/dist/managed-pages/web/client-plugin.js +5 -5
  376. package/dist/managed-pages/web/i18n.js +1 -1
  377. package/dist/notes-history/entity.js +4 -4
  378. package/dist/notes-history/feature.d.ts +2 -2
  379. package/dist/notes-history-user-data/hooks.js +1 -1
  380. package/dist/page-render/layout.js +9 -9
  381. package/dist/page-render/markdown.js +11 -11
  382. package/dist/page-render/security-headers.js +7 -6
  383. package/dist/personal-access-tokens/feature.d.ts +1 -1
  384. package/dist/personal-access-tokens/feature.js +9 -5
  385. package/dist/personal-access-tokens/roles.js +2 -2
  386. package/dist/readiness/handlers/status.query.js +3 -3
  387. package/dist/renderer-foundation/api.js +12 -13
  388. package/dist/renderer-foundation/constants.js +2 -2
  389. package/dist/renderer-foundation/feature.js +7 -7
  390. package/dist/renderer-pdf/render-table-pdf.d.ts +1 -1
  391. package/dist/renderer-pdf/render-table-pdf.js +22 -10
  392. package/dist/secrets/feature.js +9 -9
  393. package/dist/secrets/web/constants.js +2 -2
  394. package/dist/seo/feature.js +3 -3
  395. package/dist/sessions/constants.d.ts +1 -1
  396. package/dist/sessions/constants.js +1 -1
  397. package/dist/sessions/feature.d.ts +2 -2
  398. package/dist/sessions/feature.js +12 -8
  399. package/dist/sessions/handlers/revoke-all-for-user.write.js +2 -2
  400. package/dist/sessions/handlers/revoke-all-others.write.js +2 -2
  401. package/dist/sessions/handlers/revoke.write.js +1 -1
  402. package/dist/sessions/schema/user-session.js +4 -4
  403. package/dist/sessions/screens.js +2 -2
  404. package/dist/sessions/session-callbacks.js +2 -2
  405. package/dist/sessions/session-revoked-event.js +2 -2
  406. package/dist/shared/assert-no-where-rule-in-ownership-write.js +1 -1
  407. package/dist/shared/decrypt-stored-pii.d.ts +1 -0
  408. package/dist/shared/decrypt-stored-pii.js +7 -2
  409. package/dist/shared/encrypt-for-direct-write.js +1 -1
  410. package/dist/shared/index.d.ts +1 -1
  411. package/dist/shared/index.js +1 -1
  412. package/dist/shared/mail-template-body.d.ts +6 -2
  413. package/dist/shared/mail-template-body.js +7 -4
  414. package/dist/shared/map-with-concurrency.js +5 -4
  415. package/dist/shared/parent-visibility.js +2 -2
  416. package/dist/shared/password-hashing.js +1 -1
  417. package/dist/shared/signup-handover.js +1 -2
  418. package/dist/shared/single-use-token-store.js +1 -1
  419. package/dist/step-dispatcher/feature.js +1 -0
  420. package/dist/subscription-dodo/client.d.ts +17 -0
  421. package/dist/subscription-dodo/client.js +31 -0
  422. package/dist/subscription-dodo/constants.d.ts +12 -0
  423. package/dist/subscription-dodo/constants.js +19 -0
  424. package/dist/subscription-dodo/feature.d.ts +37 -0
  425. package/dist/subscription-dodo/feature.js +144 -0
  426. package/dist/subscription-dodo/index.d.ts +2 -0
  427. package/dist/subscription-dodo/index.js +4 -0
  428. package/dist/subscription-dodo/plugin-methods.d.ts +23 -0
  429. package/dist/subscription-dodo/plugin-methods.js +260 -0
  430. package/dist/subscription-dodo/runtime.d.ts +27 -0
  431. package/dist/subscription-dodo/runtime.js +89 -0
  432. package/dist/subscription-dodo/verify-webhook.d.ts +37 -0
  433. package/dist/subscription-dodo/verify-webhook.js +189 -0
  434. package/dist/subscription-mollie/constants.js +15 -17
  435. package/dist/subscription-mollie/feature.d.ts +17 -18
  436. package/dist/subscription-mollie/feature.js +24 -24
  437. package/dist/subscription-mollie/index.js +3 -3
  438. package/dist/subscription-mollie/plugin-methods.d.ts +2 -2
  439. package/dist/subscription-mollie/plugin-methods.js +15 -14
  440. package/dist/subscription-mollie/verify-webhook.d.ts +10 -10
  441. package/dist/subscription-mollie/verify-webhook.js +27 -27
  442. package/dist/subscription-stripe/constants.js +4 -6
  443. package/dist/subscription-stripe/feature.d.ts +14 -14
  444. package/dist/subscription-stripe/feature.js +36 -34
  445. package/dist/subscription-stripe/index.js +6 -6
  446. package/dist/subscription-stripe/plugin-methods.js +18 -18
  447. package/dist/subscription-stripe/runtime.d.ts +1 -1
  448. package/dist/subscription-stripe/runtime.js +8 -7
  449. package/dist/subscription-stripe/verify-webhook.d.ts +11 -11
  450. package/dist/subscription-stripe/verify-webhook.js +59 -61
  451. package/dist/tags/feature.d.ts +3 -3
  452. package/dist/tags/screens.js +1 -1
  453. package/dist/template-resolver/api.d.ts +3 -2
  454. package/dist/template-resolver/api.js +34 -12
  455. package/dist/template-resolver/compile-document-body.js +1 -0
  456. package/dist/template-resolver/feature.js +2 -2
  457. package/dist/template-resolver/handlers/bundle-import.js +3 -3
  458. package/dist/template-resolver/handlers/copy-locale.write.d.ts +5 -1
  459. package/dist/template-resolver/handlers/copy-locale.write.js +22 -7
  460. package/dist/template-resolver/handlers/diff-to-system.query.js +3 -2
  461. package/dist/template-resolver/handlers/document-base.js +3 -2
  462. package/dist/template-resolver/handlers/find-by-id.query.js +8 -7
  463. package/dist/template-resolver/handlers/list.query.js +6 -7
  464. package/dist/template-resolver/handlers/overview.query.d.ts +3 -0
  465. package/dist/template-resolver/handlers/overview.query.js +6 -3
  466. package/dist/template-resolver/handlers/shared.js +2 -2
  467. package/dist/template-resolver/handlers/template-write.js +3 -3
  468. package/dist/template-resolver/handlers/tenant-override-counts.query.js +1 -3
  469. package/dist/template-resolver/handlers/tenant-override-selection.d.ts +2 -1
  470. package/dist/template-resolver/handlers/tenant-overrides.query.js +28 -5
  471. package/dist/template-resolver/handlers/upsert-system.write.js +3 -4
  472. package/dist/template-resolver/handlers/upsert-tenant.write.js +4 -5
  473. package/dist/template-resolver/handlers/usage.query.d.ts +2 -1
  474. package/dist/template-resolver/handlers/usage.query.js +26 -16
  475. package/dist/template-resolver/handlers/validate.query.js +7 -2
  476. package/dist/template-resolver/seeding.js +30 -14
  477. package/dist/template-resolver/store-template-resource.d.ts +1 -0
  478. package/dist/template-resolver/store-template-resource.js +19 -4
  479. package/dist/template-resolver/table.js +10 -11
  480. package/dist/template-resolver/template-delivery-policy.d.ts +0 -5
  481. package/dist/template-resolver/template-delivery-policy.js +0 -6
  482. package/dist/template-resolver/template-meta.js +7 -4
  483. package/dist/template-resolver/template-preview.js +4 -3
  484. package/dist/template-resolver/web/client-plugin.js +2 -2
  485. package/dist/template-resolver/web/constants.d.ts +2 -2
  486. package/dist/template-resolver/web/constants.js +3 -3
  487. package/dist/template-resolver/web/index.d.ts +1 -0
  488. package/dist/template-resolver/web/index.js +1 -0
  489. package/dist/template-resolver/web/mail-layout-constants.d.ts +5 -0
  490. package/dist/template-resolver/web/mail-layout-constants.js +7 -0
  491. package/dist/tenant/feature.js +7 -7
  492. package/dist/tenant/handlers/member-directory.query.d.ts +1 -0
  493. package/dist/tenant/handlers/member-directory.query.js +11 -4
  494. package/dist/tenant/handlers/members.query.js +1 -1
  495. package/dist/tenant/handlers/team-list.query.js +1 -1
  496. package/dist/tenant/handlers/tenant-directory.query.d.ts +1 -0
  497. package/dist/tenant/handlers/tenant-directory.query.js +9 -5
  498. package/dist/tenant/invitation-table.js +37 -40
  499. package/dist/tenant/membership-table.js +3 -3
  500. package/dist/tenant/schema/tenant.js +7 -9
  501. package/dist/tenant/screens.js +1 -1
  502. package/dist/tenant/seeding.d.ts +6 -5
  503. package/dist/tenant/seeding.js +12 -12
  504. package/dist/tenant/testing.js +5 -6
  505. package/dist/tenant/web/constants.js +2 -2
  506. package/dist/tenant-handover/events.js +5 -7
  507. package/dist/tenant-handover/feature.js +1 -1
  508. package/dist/tenant-handover/grant.js +1 -1
  509. package/dist/tenant-handover/handlers/claim.write.js +1 -1
  510. package/dist/tenant-handover/move-entity-graph.js +8 -9
  511. package/dist/tenant-handover/signup-handover-provider.js +1 -2
  512. package/dist/tenant-handover/transfer-graph.js +4 -5
  513. package/dist/tenant-lifecycle/boot-checks.js +1 -1
  514. package/dist/tenant-lifecycle/constants.d.ts +1 -0
  515. package/dist/tenant-lifecycle/constants.js +4 -0
  516. package/dist/tenant-lifecycle/feature.js +1 -1
  517. package/dist/tenant-lifecycle/run-tenant-destroy.js +2 -2
  518. package/dist/tenant-settings/constants.js +1 -1
  519. package/dist/tenant-settings/tenant-defaults.d.ts +1 -1
  520. package/dist/tenant-settings/tenant-defaults.js +9 -2
  521. package/dist/tier-engine/aggregate-id.d.ts +11 -11
  522. package/dist/tier-engine/aggregate-id.js +15 -16
  523. package/dist/tier-engine/compose-app.d.ts +14 -14
  524. package/dist/tier-engine/compose-app.js +1 -1
  525. package/dist/tier-engine/entity.js +18 -19
  526. package/dist/tier-engine/feature.d.ts +19 -17
  527. package/dist/tier-engine/feature.js +68 -69
  528. package/dist/tier-engine/handlers/active-tier.query.js +6 -7
  529. package/dist/tier-engine/handlers/get-tenant-tier.query.js +4 -4
  530. package/dist/tier-engine/handlers/set-tenant-tier.write.d.ts +7 -8
  531. package/dist/tier-engine/handlers/set-tenant-tier.write.js +7 -4
  532. package/dist/tier-engine/tier-resolver.js +2 -2
  533. package/dist/tier-engine/trial.js +8 -8
  534. package/dist/tier-engine/web/constants.js +2 -2
  535. package/dist/tier-engine/web/index.js +4 -4
  536. package/dist/user/db/queries/stream-tenant-backfill.js +8 -8
  537. package/dist/user/handlers/create.write.js +4 -4
  538. package/dist/user/schema/user.d.ts +11 -11
  539. package/dist/user/schema/user.js +45 -44
  540. package/dist/user/seeding.d.ts +15 -15
  541. package/dist/user/seeding.js +28 -28
  542. package/dist/user/testing.js +3 -3
  543. package/dist/user-data-rights/audit-download.d.ts +8 -8
  544. package/dist/user-data-rights/audit-download.js +19 -20
  545. package/dist/user-data-rights/boot-checks.js +1 -1
  546. package/dist/user-data-rights/deletion-token.js +1 -1
  547. package/dist/user-data-rights/feature.d.ts +49 -50
  548. package/dist/user-data-rights/feature.js +54 -53
  549. package/dist/user-data-rights/handlers/cancel-deletion.write.js +9 -9
  550. package/dist/user-data-rights/handlers/confirm-deletion-by-token.write.js +8 -8
  551. package/dist/user-data-rights/handlers/download-by-job.query.js +29 -30
  552. package/dist/user-data-rights/handlers/download-by-token.query.js +40 -42
  553. package/dist/user-data-rights/handlers/export-status.query.js +8 -9
  554. package/dist/user-data-rights/handlers/lift-restriction.write.js +7 -8
  555. package/dist/user-data-rights/handlers/list-download-attempts.query.js +2 -2
  556. package/dist/user-data-rights/handlers/my-audit-log.query.js +4 -4
  557. package/dist/user-data-rights/handlers/request-deletion-by-email.write.d.ts +5 -5
  558. package/dist/user-data-rights/handlers/request-deletion-by-email.write.js +16 -15
  559. package/dist/user-data-rights/handlers/request-deletion.write.d.ts +2 -2
  560. package/dist/user-data-rights/handlers/request-deletion.write.js +7 -9
  561. package/dist/user-data-rights/handlers/request-export.write.js +42 -41
  562. package/dist/user-data-rights/handlers/restrict-account.write.js +22 -19
  563. package/dist/user-data-rights/handlers/run-forget-cleanup.write.js +8 -8
  564. package/dist/user-data-rights/index.js +8 -10
  565. package/dist/user-data-rights/lib/default-mailers.js +3 -3
  566. package/dist/user-data-rights/lib/update-user-lifecycle.js +14 -17
  567. package/dist/user-data-rights/run-export-jobs.d.ts +38 -42
  568. package/dist/user-data-rights/run-export-jobs.js +130 -237
  569. package/dist/user-data-rights/run-forget-cleanup.d.ts +16 -20
  570. package/dist/user-data-rights/run-forget-cleanup.js +65 -83
  571. package/dist/user-data-rights/run-user-export.d.ts +34 -33
  572. package/dist/user-data-rights/run-user-export.js +55 -57
  573. package/dist/user-data-rights/schema/download-attempt.js +11 -11
  574. package/dist/user-data-rights/schema/download-token.js +37 -41
  575. package/dist/user-data-rights/schema/export-job.d.ts +4 -4
  576. package/dist/user-data-rights/schema/export-job.js +65 -67
  577. package/dist/user-data-rights/token-helpers.d.ts +8 -9
  578. package/dist/user-data-rights/token-helpers.js +21 -25
  579. package/dist/user-data-rights/web/client-plugin.d.ts +5 -5
  580. package/dist/user-data-rights/web/client-plugin.js +1 -1
  581. package/dist/user-data-rights/web/confirm-deletion-screen.js +6 -5
  582. package/dist/user-data-rights/web/constants.js +1 -1
  583. package/dist/user-data-rights/web/index.js +5 -5
  584. package/dist/user-data-rights/web/privacy-center-screen.js +14 -13
  585. package/dist/user-data-rights/web/public-deletion-gate.d.ts +4 -4
  586. package/dist/user-data-rights/web/request-deletion-screen.js +6 -6
  587. package/dist/user-data-rights/zip-path.d.ts +15 -15
  588. package/dist/user-data-rights/zip-path.js +41 -40
  589. package/dist/user-data-rights-defaults/feature.js +15 -15
  590. package/dist/user-data-rights-defaults/hooks/delivery-attempt.userdata-hook.js +3 -5
  591. package/dist/user-data-rights-defaults/hooks/file-ref.userdata-hook.js +45 -51
  592. package/dist/user-data-rights-defaults/hooks/job-run.userdata-hook.js +2 -2
  593. package/dist/user-data-rights-defaults/hooks/notification-preference.userdata-hook.js +1 -1
  594. package/dist/user-data-rights-defaults/hooks/user-session.userdata-hook.js +3 -3
  595. package/dist/user-data-rights-defaults/hooks/user.userdata-hook.js +32 -31
  596. package/dist/user-profile/handlers/change-email.write.js +13 -13
  597. package/dist/user-profile/index.js +3 -3
  598. package/dist/user-profile/web/client-plugin.js +1 -1
  599. package/dist/user-profile/web/constants.js +1 -1
  600. package/dist/user-profile/web/profile-screen.js +1 -1
  601. package/dist/waitlist/handlers/export-purge.write.js +2 -1
  602. package/dist/waitlist/handlers/submit.write.js +5 -5
  603. package/dist/waitlist/import.d.ts +1 -0
  604. package/dist/waitlist/import.js +4 -0
  605. package/dist/waitlist/legacy-migrate.js +17 -6
  606. package/dist/waitlist/link-on-signup.js +18 -6
  607. package/dist/waitlist/options.d.ts +3 -0
  608. package/dist/workflow-runner/aggregate-id.d.ts +1 -1
  609. package/dist/workflow-runner/aggregate-id.js +1 -1
  610. package/dist/workflow-runner/event-subscriber.js +4 -5
  611. package/dist/workflow-runner/event-trigger.js +4 -17
  612. package/dist/workflow-runner/feature.js +2 -2
  613. package/dist/workflow-runner/handlers/resume-run.write.js +4 -4
  614. package/dist/workflow-runner/pending-projection.js +6 -7
  615. package/dist/workflow-runner/runner.js +6 -6
  616. package/dist/workflow-runner/tables.js +6 -6
  617. package/dist/workflow-runner/workflow-registry.js +1 -1
  618. package/package.json +20 -10
  619. package/src/agent-tools/changes.json +6 -0
  620. package/src/audit/changes.json +12 -0
  621. package/src/auth-mfa/changes.json +6 -0
  622. package/src/billing-foundation/changes.json +55 -0
  623. package/src/cap-counter/changes.json +18 -0
  624. package/src/channel-email/changes.json +6 -0
  625. package/src/config/changes.json +12 -0
  626. package/src/crypto-shredding/changes.json +6 -0
  627. package/src/delivery/changes.json +30 -0
  628. package/src/form-draft/changes.json +6 -0
  629. package/src/host-routing/changes.json +6 -0
  630. package/src/inbound-mail-foundation/changes.json +18 -0
  631. package/src/jobs/changes.json +13 -0
  632. package/src/mail-foundation/changes.json +6 -0
  633. package/src/renderer-pdf/changes.json +6 -0
  634. package/src/step-dispatcher/changes.json +6 -0
  635. package/src/subscription-dodo/changes.json +14 -0
  636. package/src/subscription-stripe/changes.json +12 -0
  637. package/src/template-resolver/changes.json +48 -0
  638. package/src/tenant/changes.json +6 -0
  639. package/src/tenant-lifecycle/changes.json +6 -0
  640. package/src/tier-engine/changes.json +6 -0
  641. package/src/waitlist/changes.json +18 -0
  642. package/dist/billing-foundation/consumer-protection/stored-user-email.d.ts +0 -1
  643. package/dist/billing-foundation/consumer-protection/stored-user-email.js +0 -8
@@ -1,12 +1,11 @@
1
- // Browser-Seite der Auth-Routes. Dünne fetch-Wrapper um /api/auth/*
2
- // mit Cookie-Transport: JWT lebt im HttpOnly kumiko_auth-Cookie,
3
- // Double-Submit-CSRF-Token im JS-lesbaren kumiko_csrf-Cookie. Alle
4
- // state-changing Requests echo'n den CSRF-Token via X-CSRF-Token —
5
- // der Server rejected sonst mit csrf_token_missing.
1
+ // Browser-side wrappers around /api/auth/* using cookie transport: the JWT
2
+ // lives in the HttpOnly kumiko_auth cookie, while the Double-Submit CSRF
3
+ // token lives in the JS-readable kumiko_csrf cookie. Every state-changing
4
+ // request echoes the CSRF token via X-CSRF-Token; otherwise the server
5
+ // rejects it with csrf_token_missing.
6
6
  //
7
- // Die dispatcher-live nutzt denselben readCsrfToken-Helper; wir
8
- // reuse'n ihn hier, damit die Konstanten (Cookie-Name, Header-Name)
9
- // nicht divergieren.
7
+ // dispatcher-live uses the same readCsrfToken helper; reusing it here keeps
8
+ // the cookie and header constants from diverging.
10
9
  import { parseRoles } from "@cosmicdrift/kumiko-framework/utils";
11
10
  import { CSRF_HEADER_NAME, readCsrfToken } from "@cosmicdrift/kumiko-renderer/live";
12
11
  export function csrfHeader() {
@@ -70,8 +69,8 @@ export async function login(req) {
70
69
  return { kind: "success", data: toLoginResponse(body.token, body.user, body.landingPath) };
71
70
  }
72
71
  }
73
- // Der Server schickt error entweder als string ("invalid_body") oder als
74
- // strukturiertes Objekt. Wir ziehen uns den sprechendsten Reason raus.
72
+ // The server sends error either as a string ("invalid_body") or as a
73
+ // structured object. Extract the most descriptive reason.
75
74
  const err = body.error;
76
75
  if (typeof err === "string") {
77
76
  return { kind: "failure", error: { reason: err } };
@@ -87,10 +86,10 @@ export async function login(req) {
87
86
  },
88
87
  };
89
88
  }
90
- // POST /api/auth/logout. Server revoked die Session (wenn sessionRevoker
91
- // gewired ist) und clear't die Cookies. Wir triggern hinterher einen
92
- // Navigation-Refresh, damit alle caches (React-State, query-cache) auf
93
- // Null gehen — billigster Weg zu sauberer Ausgangslage.
89
+ // POST /api/auth/logout. The server revokes the session when
90
+ // sessionRevoker is wired and clears the cookies. A navigation refresh
91
+ // afterward ensures that all caches (React state, query cache) return to
92
+ // an unauthenticated state—the simplest way to restore a clean baseline.
94
93
  export async function logout() {
95
94
  await fetch("/api/auth/logout", {
96
95
  method: "POST",
@@ -98,11 +97,11 @@ export async function logout() {
98
97
  headers: { "Content-Type": "application/json", ...csrfHeader() },
99
98
  });
100
99
  }
101
- // 4xx/5xx → typed AuthTokenFailure parsen. 429 (Rate-Limit) hat einen
102
- // dedizierten reason damit das UI einen Retry-Hinweis zeigen kann.
100
+ // Parse 4xx/5xx responses into AuthTokenFailure. 429 uses a dedicated
101
+ // reason so the UI can display a retry hint.
103
102
  async function parseTokenFailure(res) {
104
103
  if (res.status === 429) {
105
- // @cast-boundary engine-payload — server schickt details.retryAfterSeconds bei 429
104
+ // @cast-boundary engine-payload — the server sends details.retryAfterSeconds for 429
106
105
  const body = (await res.json().catch(() => ({})));
107
106
  const retry = body.error?.details?.retryAfterSeconds;
108
107
  return { reason: "rate_limited", ...(retry !== undefined && { retryAfterSeconds: retry }) };
@@ -127,11 +126,12 @@ export async function requestPasswordReset(email) {
127
126
  return { ok: true };
128
127
  return { ok: false, error: await parseTokenFailure(res) };
129
128
  }
130
- // POST /api/auth/reset-password. Token aus URL + neues Passwort. Auf
131
- // 422 collapses der Server alle Token-Verify-Fehler (malformed / bad-
132
- // signature / expired) auf den einzigen Code `invalid_reset_token` —
133
- // anti-enumeration. Plus zod-validation-failures (newPassword < 8) als
134
- // eigene 4xx mit code "validation_failed". UI mappt reason → i18n-Key.
129
+ // POST /api/auth/reset-password. The token comes from the URL and the
130
+ // request includes the new password. On 422, the server collapses all
131
+ // token-verification errors (malformed, bad signature, expired) into the
132
+ // single code `invalid_reset_token` to prevent enumeration. Zod validation
133
+ // failures (newPassword < 8) use a separate 4xx code, "validation_failed".
134
+ // The UI maps reason to an i18n key.
135
135
  export async function resetPassword(token, newPassword) {
136
136
  const res = await fetch("/api/auth/reset-password", {
137
137
  method: "POST",
@@ -156,9 +156,9 @@ export async function requestEmailVerification(email) {
156
156
  return { ok: true };
157
157
  return { ok: false, error: await parseTokenFailure(res) };
158
158
  }
159
- // POST /api/auth/verify-email. Auto-submitted vom VerifyEmailScreen
160
- // nach `?token=...`-parse. Server collapses alle Verify-Failures auf
161
- // `invalid_verification_token` (anti-enumeration, parallel zu reset).
159
+ // POST /api/auth/verify-email. VerifyEmailScreen submits this automatically
160
+ // after parsing `?token=...`. The server collapses all verification failures
161
+ // into `invalid_verification_token` to prevent enumeration, as with reset.
162
162
  export async function verifyEmail(token) {
163
163
  const res = await fetch("/api/auth/verify-email", {
164
164
  method: "POST",
@@ -199,14 +199,13 @@ export async function confirmAccountUnlock(token) {
199
199
  return { ok: true };
200
200
  return { ok: false, error: await parseTokenFailure(res) };
201
201
  }
202
- // POST /api/auth/signup-request. Always-200 (anti-enumeration; wir
203
- // sagen nicht ob die Email schon registriert ist). Server schickt
204
- // Activation-Mail an die Adresse — beim Klick auf den Link landet der
205
- // User auf /signup/complete?token=… wo er sein Password setzt.
202
+ // POST /api/auth/signup-request. Always returns 200 to prevent enumeration;
203
+ // the response does not reveal whether the email is already registered. The
204
+ // server sends an activation email to the address; following its link takes
205
+ // the user to /signup/complete?token=… to set a password.
206
206
  export async function requestSignup(email,
207
- // Cross-device try-first handover (kumiko-framework#3035 follow-up,
208
- // offlot-app#454): forwards a row-bound tenant-handover grant so the
209
- // server can verify + rebind it to the signup token. The grant never
207
+ // Cross-device try-first handover: forwards a row-bound tenant-handover
208
+ // grant so the server can verify + rebind it to the signup token. The grant never
210
209
  // travels any further than this request — never in the URL, the mail,
211
210
  // or the confirm response.
212
211
  handover) {
@@ -243,8 +242,8 @@ export async function confirmSignup(token, password) {
243
242
  }
244
243
  return { ok: false, error: await parseTokenFailure(res) };
245
244
  }
246
- // GET /api/auth/tenants. Liefert die Memberships des aktuellen Users;
247
- // der Server liefert 401 wenn das Cookie fehlt oder abgelaufen ist.
245
+ // GET /api/auth/tenants. Returns the current user's memberships; the server
246
+ // returns 401 when the cookie is missing or expired.
248
247
  export async function fetchTenants() {
249
248
  const res = await fetch("/api/auth/tenants", {
250
249
  method: "GET",
@@ -258,9 +257,9 @@ export async function fetchTenants() {
258
257
  // @cast-boundary engine-payload — HTTP-API contract, server-side schema-validated
259
258
  return (await res.json());
260
259
  }
261
- // POST /api/auth/switch-tenant. Mintet ein neues JWT für den Ziel-Tenant
262
- // und rotated beide Cookies. 400 wenn already_in_tenant oder tenant_
263
- // switch_not_available, 403 wenn not_a_member.
260
+ // POST /api/auth/switch-tenant. Mints a new JWT for the target tenant and
261
+ // rotates both cookies. Returns 400 for already_in_tenant or
262
+ // tenant_switch_not_available, and 403 for not_a_member.
264
263
  export async function switchTenant(tenantId) {
265
264
  const res = await fetch("/api/auth/switch-tenant", {
266
265
  method: "POST",
@@ -25,21 +25,21 @@ export function useAuthShell() {
25
25
  export function AuthCard({ title, subtitle, className, headerClassName, titleClassName, bodyClassName, children, }) {
26
26
  const { Card } = usePrimitives();
27
27
  const shell = useAuthShell() ?? defaultAuthShell;
28
- // h1 (Seiten-Hauptüberschrift) via Header-Slot erhalten — die Card-Default-
29
- // Header wäre h3. padded:false = Form sitzt randlos wie bisher (bare form).
28
+ // Keep an h1 (page heading) through the header slot; the Card's default
29
+ // header would be h3. padded:false keeps the form edge-to-edge as before
30
+ // (bare form).
30
31
  const card = (_jsx(Card, { className: cn("w-full max-w-sm", className), options: { padded: false }, slots: {
31
32
  header: title !== undefined || subtitle !== undefined ? (_jsxs("div", { className: cn("flex flex-col space-y-1.5 p-6 pb-4", headerClassName), children: [title !== undefined && (_jsx("h1", { className: cn("text-xl font-semibold tracking-tight", titleClassName), children: title })), subtitle !== undefined && (_jsx("p", { className: "text-sm text-muted-foreground", children: subtitle }))] })) : undefined,
32
33
  }, children: _jsx(BareFormProvider, { children: _jsx("div", { className: cn("p-6 pt-0 flex flex-col gap-4", bodyClassName), children: children }) }) }));
33
34
  return shell(card);
34
35
  }
35
- // Liest `?<paramName>=<value>` aus der aktuellen URL — typisches
36
- // Pattern für Token-bearing Pages (reset, verify). Returnt "" wenn der
37
- // Browser nicht da ist (SSR-safety) oder der Parameter fehlt.
36
+ // Reads `?<paramName>=<value>` from the current URL, as used by token-bearing
37
+ // pages (reset, verify). Returns "" during SSR or when the parameter is absent.
38
38
  //
39
- // Nicht über useState/useEffect - das wäre ein read-once-on-mount
40
- // pattern aber URL-changes sind hier irrelevant (Token-Pages re-loaden
41
- // für neue Tokens). Caller setzt useState(() => parseUrlToken(...)) wenn
42
- // gewünscht.
39
+ // This is intentionally not read through useState/useEffect: that would be a
40
+ // read-once-on-mount pattern, while URL changes are irrelevant here because
41
+ // token pages reload for new tokens. Callers can use
42
+ // useState(() => parseUrlToken(...)) when needed.
43
43
  export function parseUrlToken(paramName = "token") {
44
44
  if (typeof window === "undefined")
45
45
  return "";
@@ -47,7 +47,7 @@ export function parseUrlToken(paramName = "token") {
47
47
  }
48
48
  // Reads the magic-link token from `?<paramName>=` once on mount, then strips
49
49
  // that param from the URL via history.replaceState so the single-use token
50
- // doesn't linger in browser history / Referer (#774). An explicit `override`
50
+ // doesn't linger in browser history / Referer. An explicit `override`
51
51
  // (server-injected token) short-circuits both the URL read and the scrub.
52
52
  export function useUrlToken(override, paramName = "token") {
53
53
  const [token] = useState(() => override ?? parseUrlToken(paramName));
@@ -1,13 +1,13 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
- // Auth-Gate: rendert den LoginScreen solange der Session-Status
3
- // "unauthenticated" ist, sonst die Kinder. "loading" zeigt einen
4
- // minimalen Placeholder — die initiale Refresh-Runde liefert in der
5
- // Regel in <100ms, also kein Spinner-Overkill.
2
+ // Auth gate: renders the LoginScreen while the session status is
3
+ // "unauthenticated" and the children otherwise. "loading" shows a
4
+ // minimal placeholder—the initial refresh usually completes in <100ms,
5
+ // so a spinner would be excessive.
6
6
  //
7
- // Die Factory makeAuthGate schließt die LoginScreen-Komponente in,
8
- // damit das Gate der ClientFeatureDefinition-Signatur entspricht
9
- // (nur `{ children }`-Prop). Der Sample kann so einen eigenen Login-
10
- // Screen rein konfigurieren, ohne den Gate selbst ersetzen zu müssen.
7
+ // The makeAuthGate factory closes over the LoginScreen component so the
8
+ // gate matches the ClientFeatureDefinition signature (only a `{ children }`
9
+ // prop). This lets the sample configure a custom login screen without
10
+ // replacing the gate.
11
11
  import { useLocale } from "@cosmicdrift/kumiko-renderer";
12
12
  import { useEffect, useMemo, useState } from "react";
13
13
  import { assertNavigableUrl, buildLoginRedirectUrl, followNextOrLandingAfterLogin, } from "./auth-redirect.js";
@@ -20,12 +20,11 @@ import { SessionBootstrapErrorScreen } from "./session-bootstrap-error.js";
20
20
  // their own standalone login route outside any gate (createPublicSurface
21
21
  // apex pages stack providers, not gates — see auth-mount.tsx recipes).
22
22
  // Handing an app raw LoginScreen + telling it to hand-roll the challenge-
23
- // token swap itself is exactly how kumiko-framework#266's login-time MFA
24
- // step went missing in a real apex surface; this prevents the *most common*
25
- // version of that mistake. MFA still only actually works once a consumer
26
- // wires `mfaVerifyScreen` — omitting it is a silent no-MFA fallback, not
27
- // something this route can catch on its own (auth-mfa is a separate,
28
- // optional package).
23
+ // token swap itself is exactly how the login-time MFA step went missing in a
24
+ // real apex surface; this prevents the *most common* version of that mistake.
25
+ // MFA still only actually works once a consumer wires `mfaVerifyScreen` —
26
+ // omitting it is a silent no-MFA fallback, not something this route can catch
27
+ // on its own (auth-mfa is a separate, optional package).
29
28
  export function createLoginRoute(opts = {}) {
30
29
  const LoginComponent = opts.loginScreen ?? LoginScreen;
31
30
  const MfaVerifyComponent = opts.mfaVerifyScreen;
@@ -38,7 +37,7 @@ export function createLoginRoute(opts = {}) {
38
37
  // never considers this session authenticated until verify succeeds.
39
38
  const [challengeToken, setChallengeToken] = useState(null);
40
39
  const [setupRequest, setSetupRequest] = useState(null);
41
- // kumiko-lint-ignore no-raw-hooks Phase-3 conversion tracked in #2312
40
+ // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
42
41
  useEffect(() => {
43
42
  if (status === "authenticated")
44
43
  onAuthenticated?.();
@@ -125,7 +124,7 @@ export function makeAuthGate(opts = {}) {
125
124
  ? resolveLoginRedirectOrNull(loginUrl, locale, { origin, pathname, search, hash })
126
125
  : null, [status, locale, origin, pathname, search, hash]);
127
126
  const redirectUrl = loginRedirect?.kind === "redirect" ? loginRedirect.url : null;
128
- // kumiko-lint-ignore no-raw-hooks Phase-3 conversion tracked in #2312
127
+ // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
129
128
  useEffect(() => {
130
129
  if (redirectUrl !== null)
131
130
  window.location.replace(redirectUrl);
@@ -3,9 +3,9 @@ import type { ComponentType, ReactNode } from "react";
3
3
  import { type AuthGateOptions, type MfaSetupComponentProps, type MfaVerifyComponentProps } from "./auth-gate.tsx";
4
4
  import type { LoginScreenProps } from "./login-screen.tsx";
5
5
  export type EmailPasswordClientOptions = {
6
- /** Eigener Login-Screen. Default: der shadcn-stylte LoginScreen
7
- * aus diesem Modul. Für Branding- oder Layout-Overrides einfach
8
- * eine eigene Komponente mit derselben Signatur reichen. */
6
+ /** Custom login screen. Default: the shadcn-styled LoginScreen
7
+ * from this module. Provide a component with the same signature for
8
+ * branding or layout overrides. */
9
9
  readonly loginScreen?: ComponentType<LoginScreenProps>;
10
10
  readonly loginScreenProps?: LoginScreenProps;
11
11
  /** auth-mfa's MfaVerifyScreen, wired in from the app so this feature
@@ -26,10 +26,10 @@ export type EmailPasswordClientOptions = {
26
26
  readonly loginUrl?: AuthGateOptions["loginUrl"];
27
27
  /** Where logout navigates to (root-relative path or http(s) URL). Default: reload. */
28
28
  readonly postLogoutUrl?: string;
29
- /** Key-Overrides pro Locale. Wird mit den Default-Bundles (de/en)
30
- * aus `translations.ts` gemerged — jeder hier gesetzte Key gewinnt.
31
- * Für Branding ("Sign in" → "Login to Acme") oder weitere Sprachen
32
- * (`fr`, `es`, …) zusätzlich. */
29
+ /** Per-locale key overrides. Merged with the default bundles (de/en)
30
+ * from `translations.ts`; each key supplied here takes precedence.
31
+ * Use this for branding ("Sign in" → "Login to Acme") or to add
32
+ * further languages (`fr`, `es`, …). */
33
33
  readonly translations?: TranslationsByLocale;
34
34
  /** Serve the forgot-password, reset-password and unlock-account pages at
35
35
  * their convention paths for signed-out visitors. Apps with their own
@@ -1,8 +1,7 @@
1
- // Client-Feature-Factory für auth-email-password. Wird vom App-Code
2
- // in createKumikoApp({ clientFeatures: [emailPasswordClient()] })
3
- // eingehängt und bringt Session-Context + AuthGate + Default-UI-
4
- // Translations (de/en) mit. Alles ist overridbar — Login-Screen,
5
- // Strings pro Locale, pro Key.
1
+ // Client feature factory for auth-email-password. App code mounts it in
2
+ // createKumikoApp({ clientFeatures: [emailPasswordClient()] }) to provide
3
+ // session context, AuthGate, and default UI translations (de/en). All of
4
+ // these can be overridden: the login screen and strings per locale and key.
6
5
  import { makeSessionAuthGate, } from "./auth-gate.js";
7
6
  import { emailPasswordClientActions } from "./client-actions.js";
8
7
  import { DefaultAuthPagesGate } from "./default-auth-pages-gate.js";
@@ -16,7 +16,7 @@ export function ConfirmAccountUnlockScreen({ title, token: tokenProp, loginHref
16
16
  const token = useUrlToken(tokenProp);
17
17
  const [status, setStatus] = useState(token === "" ? "missing-token" : "verifying");
18
18
  const startedRef = useRef(false);
19
- // kumiko-lint-ignore no-raw-hooks Phase-3 conversion tracked in #2312
19
+ // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
20
20
  useEffect(() => {
21
21
  if (status !== "verifying")
22
22
  return;
@@ -15,7 +15,7 @@ export const AuthHandlers = {
15
15
  requestEmailVerification: "auth-email-password:write:request-email-verification",
16
16
  verifyEmail: "auth-email-password:write:verify-email",
17
17
  // Account-Unlock Magic-Link (fixes the lockout-DoS where the monotonic
18
- // failure-counter re-locks immediately after expiry, #1266). Mirrors
18
+ // failure-counter re-locks immediately after expiry). Mirrors
19
19
  // reset: request mints an HMAC token + mails it, confirm clears the
20
20
  // Redis lockout state.
21
21
  requestAccountUnlock: "auth-email-password:write:request-account-unlock",
@@ -81,7 +81,7 @@ export const AuthErrors = {
81
81
  invalidSignupToken: "invalid_signup_token",
82
82
  signupNotConfigured: "signup_not_configured",
83
83
  // Self-signup: confirm rejects an already-registered email instead of
84
- // reusing the existing user (account takeover, #365). NO
84
+ // reusing the existing user (account takeover). NO
85
85
  // anti-enumeration collapse like invalidSignupToken: whoever gets here
86
86
  // controls the inbox (has the magic link), so revealing "email exists"
87
87
  // is not new information.
@@ -101,7 +101,7 @@ export const AuthErrors = {
101
101
  // deliberate enumeration trade-off: the lockout event itself is already
102
102
  // observable to the attacker, and legit users benefit from a clear signal.
103
103
  accountLocked: "account_locked",
104
- // S2.U6 (GDPR Art. 18) — account is in Restricted status. Login is
104
+ // (GDPR Art. 18) — account is in Restricted status. Login is
105
105
  // explicitly refused with its own code (not collapsed into
106
106
  // invalid_credentials) so the UI can say "account is currently paused,
107
107
  // click here to lift it". Enumeration leak accepted: restriction is
@@ -1,15 +1,15 @@
1
1
  import type { ReactNode } from "react";
2
2
  export type DefaultTopbarActionsProps = {
3
- /** Mapped Tenant-ID auf einen sprechenden Namen (z.B. branded label
4
- * pro Tenant). TenantSwitcher's Default zeigt sonst die ersten 8
5
- * Zeichen der UUID. */
3
+ /** Maps a tenant ID to a human-readable name (for example, a branded label
4
+ * per tenant). TenantSwitcher's default otherwise displays the first 8
5
+ * characters of the UUID. */
6
6
  readonly tenantName?: (tenantId: string) => string;
7
- /** Slot zwischen TenantSwitcher und ThemeToggle. Typischer Use-Case:
8
- * LanguageSwitcher pro App. ReactNode (nicht Array) damit die App
9
- * selbst Reihenfolge + Spacing bestimmt. */
7
+ /** Slot between TenantSwitcher and ThemeToggle. Typical use case:
8
+ * an app-specific LanguageSwitcher. ReactNode, rather than an array, so the
9
+ * app controls the ordering and spacing. */
10
10
  readonly extras?: ReactNode;
11
- /** Light-Mode-Icon im ThemeToggle. Default: Unicode ☀. Apps die
12
- * Lucide-Icons o.ä. wollen, übergeben ein eigenes Icon-Element. */
11
+ /** Light-mode icon for ThemeToggle. Default: Unicode ☀. Apps that want
12
+ * Lucide icons or similar can provide a custom icon element. */
13
13
  readonly lightIcon?: ReactNode;
14
14
  /** Dark-Mode-Icon. Default: Unicode ☾. */
15
15
  readonly darkIcon?: ReactNode;
@@ -1,10 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Standard-Topbar-Actions Komposition für Apps mit Auth + Workspaces.
3
- // Bündelt das Pattern das jeder App-Sample sonst hand-ausschreibt:
4
- // TenantSwitcher (links) → optional Extras (z.B. LanguageSwitcher) →
5
- // ThemeToggle → UserMenu (rechts). Apps mit eigener Anordnung
6
- // importieren weiter die Einzelkomponenten direkt — DefaultTopbarActions
7
- // ist Convenience, kein Muss.
2
+ // Composes the standard top-bar actions for apps with auth and workspaces.
3
+ // This bundles the pattern that each app sample would otherwise write by hand:
4
+ // TenantSwitcher (left) → optional extras (for example, LanguageSwitcher) →
5
+ // ThemeToggle → UserMenu (right). Apps with a custom arrangement can still
6
+ // import the individual components directly; DefaultTopbarActions is
7
+ // convenience, not a requirement.
8
8
  import { ThemeToggle } from "@cosmicdrift/kumiko-renderer/web";
9
9
  import { TenantSwitcher } from "./tenant-switcher.js";
10
10
  import { UserMenu } from "./user-menu.js";
@@ -2,8 +2,8 @@ import { type ReactNode } from "react";
2
2
  export type ForgotPasswordScreenProps = {
3
3
  readonly title?: string;
4
4
  readonly subtitle?: ReactNode;
5
- /** href für den "Zurück zum Login"-Link in success + form. App-
6
- * spezifisch — Default "/login". */
5
+ /** href for the "Back to login" link in the success and form states. App-
6
+ * specific — defaults to "/login". */
7
7
  readonly loginHref?: string;
8
8
  };
9
9
  export declare function ForgotPasswordScreen({ title, subtitle, loginHref, }: ForgotPasswordScreenProps): ReactNode;
@@ -1,13 +1,13 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // ForgotPasswordScreen — Form mit email-input. Submit triggert
3
- // /api/auth/request-password-reset (silent-success, kein account-
4
- // enumeration). UI zeigt unconditional ein "Wenn Account existiert,
5
- // Mail unterwegs"-Confirm — auch wenn der Server intern erkannt hat
6
- // dass die Email nicht existiert.
2
+ // ForgotPasswordScreen — form with an email input. Submission triggers
3
+ // /api/auth/request-password-reset (silent success, no account enumeration).
4
+ // The UI always shows a "If an account exists, the email is on its way"
5
+ // confirmation, even when the server determines internally that the email
6
+ // does not exist.
7
7
  //
8
- // App ist verantwortlich, den Screen unter einer URL zu mounten (z.B.
9
- // /forgot-password) und ihn zu erreichen — der LoginScreen kann einen
10
- // "Passwort vergessen?"-Link auf die App-Route setzen.
8
+ // The app is responsible for mounting and exposing the screen at a URL
9
+ // (for example, /forgot-password); the LoginScreen can link to that app
10
+ // route with a "Forgot password?" link.
11
11
  import { usePrimitives, useTranslation } from "@cosmicdrift/kumiko-renderer";
12
12
  import { useState } from "react";
13
13
  import { requestPasswordReset } from "./auth-client.js";
@@ -19,7 +19,7 @@ export function ForgotPasswordScreen({ title, subtitle, loginHref = "/login", })
19
19
  const [submitting, setSubmitting] = useState(false);
20
20
  const [done, setDone] = useState(false);
21
21
  const [error, setError] = useState(null);
22
- // guard:dup-ok — gleiches Submit-Muster wie signup-screen, aber verschiedene API-Endpoints und State
22
+ // guard:dup-ok — same submission pattern as signup-screen, but with different API endpoints and state
23
23
  const doSubmit = async () => {
24
24
  setSubmitting(true);
25
25
  setError(null);
@@ -1,8 +1,8 @@
1
- // Public exports für die Browser-Seite des auth-email-password Features.
2
- // Wird über den Sub-Path-Export `@cosmicdrift/kumiko-bundled-features/auth-email-
3
- // password/web` konsumiert — die Server-Seite (defineFeature) lebt in
4
- // `@cosmicdrift/kumiko-bundled-features/auth-email-password` und hat keine
5
- // React-/DOM-Deps. Trennung bleibt sauber so wie renderer vs renderer/web.
1
+ // Public exports for the browser side of the auth-email-password feature.
2
+ // Consumed through the subpath export `@cosmicdrift/kumiko-bundled-features/auth-email-
3
+ // password/web`; the server side (defineFeature) lives in
4
+ // `@cosmicdrift/kumiko-bundled-features/auth-email-password` and has no
5
+ // React-/DOM dependencies. This keeps the separation clean, like renderer vs renderer/web.
6
6
  export { AuthRequestError, confirmAccountUnlock, confirmSignup, requestAccountUnlock, requestEmailVerification, requestPasswordReset, requestSignup, resetPassword, toLoginResponse, verifyEmail, } from "./auth-client.js";
7
7
  export { AuthCard, AuthShellProvider, useAuthShell } from "./auth-form-primitives.js";
8
8
  export { createLoginRoute, makeAuthGate, makeSessionAuthGate } from "./auth-gate.js";
@@ -12,7 +12,7 @@ export type InviteAcceptScreenProps = {
12
12
  tenantId: string;
13
13
  roles: readonly string[];
14
14
  }) => string);
15
- /** Login-Href für "Mit anderem Account anmelden". Default "/login". */
15
+ /** Login href for "Mit anderem Account anmelden". Default "/login". */
16
16
  readonly loginHref?: string;
17
17
  };
18
18
  export declare function InviteAcceptScreen({ title, token: tokenProp, loggedInHref, loginHref, }: InviteAcceptScreenProps): ReactNode;
@@ -1,20 +1,20 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // InviteAcceptScreen — Magic-Link-Accept für Tenant-Invitations.
2
+ // InviteAcceptScreen — accepts tenant invitations through a magic link.
3
3
  //
4
- // Liest `?token=...` aus der URL und branched intern je nach session-state:
5
- // - Logged-in + Email-Match: 1-click accept (Branch 1, dispatcher
6
- // invite-accept). Bei Email-Mismatch zeigen wir die fehlermeldung
7
- // und einen "Mit anderem Account anmelden"-Link.
8
- // - Anonymous: Email + Password-Form. Toggle "Schon einen Account?"
9
- // entscheidet Branch 2 (existing user, login + accept) vs Branch 3
10
- // (neuer user, signup + accept).
4
+ // Reads `?token=...` from the URL and selects a flow based on session state:
5
+ // - Logged in with a matching email: one-click accept (Branch 1, via the
6
+ // invite-accept dispatcher). For an email mismatch, show an error and a
7
+ // "Sign in with a different account" link.
8
+ // - Anonymous: email and password form. The "Already have an account?" toggle
9
+ // selects Branch 2 (existing user, login + accept) or Branch 3 (new user,
10
+ // signup + accept).
11
11
  //
12
- // Anti-enumeration: invalidInviteToken collapsed alle Token/User/
13
- // Password-Failures auf einen Code (gleicher Trade-off wie reset).
12
+ // Anti-enumeration: invalidInviteToken collapses token, user, and password
13
+ // failures into one code, using the same trade-off as reset.
14
14
  //
15
- // Auto-Login: Branch 2+3 setzen Cookies via Server, Frontend redirected
16
- // zu loggedInHref. Branch 1 hat schon eine Session — Frontend redirected
17
- // auch zu loggedInHref damit der invitee in seinem neuen Tenant landet.
15
+ // Auto-login: Branches 2 and 3 set cookies through the server, then the
16
+ // frontend redirects to loggedInHref. Branch 1 already has a session, but the
17
+ // frontend also redirects to loggedInHref so the invitee enters the new tenant.
18
18
  import { usePrimitives, useTranslation } from "@cosmicdrift/kumiko-renderer";
19
19
  import { useContext, useState } from "react";
20
20
  import { csrfHeader } from "./auth-client.js";
@@ -60,7 +60,7 @@ export function InviteAcceptScreen({ title, token: tokenProp, loggedInHref = "/"
60
60
  const acceptLoggedIn = async () => {
61
61
  setSubmitting(true);
62
62
  setError(null);
63
- // kumiko-lint-ignore no-raw-hooks Phase-3 conversion tracked in #2312
63
+ // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
64
64
  const res = await fetch("/api/auth/invite-accept", {
65
65
  method: "POST",
66
66
  credentials: "same-origin",
@@ -79,7 +79,7 @@ export function InviteAcceptScreen({ title, token: tokenProp, loggedInHref = "/"
79
79
  const acceptAnonExisting = async () => {
80
80
  setSubmitting(true);
81
81
  setError(null);
82
- // kumiko-lint-ignore no-raw-hooks Phase-3 conversion tracked in #2312
82
+ // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
83
83
  const res = await fetch("/api/auth/invite-accept-with-login", {
84
84
  method: "POST",
85
85
  credentials: "same-origin",
@@ -98,7 +98,7 @@ export function InviteAcceptScreen({ title, token: tokenProp, loggedInHref = "/"
98
98
  const acceptAnonNew = async () => {
99
99
  setSubmitting(true);
100
100
  setError(null);
101
- // kumiko-lint-ignore no-raw-hooks Phase-3 conversion tracked in #2312
101
+ // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
102
102
  const res = await fetch("/api/auth/invite-signup-complete", {
103
103
  method: "POST",
104
104
  credentials: "same-origin",
@@ -12,7 +12,7 @@ export type LoginScreenProps = {
12
12
  * default path once the server offers the reset flow (login-options);
13
13
  * `null` hides the link deliberately. */
14
14
  readonly forgotPasswordHref?: string | null;
15
- /** Optional href to RequestAccountUnlockScreen (#1266). When set, an
15
+ /** Optional href to RequestAccountUnlockScreen. When set, an
16
16
  * account_locked login error renders an "Unlock account?" link inline —
17
17
  * the account-lockout escape hatch, since forgotPasswordHref does NOT
18
18
  * help here: the lockout gate blocks login before password verify even
@@ -9,9 +9,8 @@ import { DEFAULT_AUTH_PATHS, DEFAULT_FORGOT_PASSWORD_PATH } from "./auth-paths.j
9
9
  import { followNextOrLandingAfterLogin } from "./auth-redirect.js";
10
10
  import { AuthQueries } from "./constants.js";
11
11
  import { useSession } from "./session.js";
12
- // Map vom Reason-Code des Login-Handlers auf einen i18n-Key plus
13
- // optional extrahierte Interpolations-Parameter. Ungekannte Codes
14
- // fallen auf `auth.errors.loginFailed` zurück.
12
+ // Maps login-handler reason codes to i18n keys and optional interpolation parameters.
13
+ // Unknown codes fall back to `auth.errors.loginFailed`.
15
14
  function reasonToKey(failure) {
16
15
  switch (failure.reason) {
17
16
  case "invalid_credentials":
@@ -1,11 +1,11 @@
1
1
  import { type ReactNode } from "react";
2
2
  export type ResetPasswordScreenProps = {
3
3
  readonly title?: string;
4
- /** Override für den Token aus der URL — Apps die per server-side-
5
- * Render einen Token reinreichen, brauchen das. Default: parsed aus
6
- * `?token=...` in der URL. */
4
+ /** Override for the token from the URL. Apps that pass a token during
5
+ * server-side rendering need this. Default: parsed from `?token=...` in
6
+ * the URL. */
7
7
  readonly token?: string;
8
- /** href für "Zum Login"-Link nach Success. Default "/login". */
8
+ /** href for the "Zum Login" link after success. Default "/login". */
9
9
  readonly loginHref?: string;
10
10
  };
11
11
  export declare function ResetPasswordScreen({ title, token: tokenProp, loginHref, }: ResetPasswordScreenProps): ReactNode;
@@ -1,14 +1,13 @@
1
1
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // ResetPasswordScreen — liest `?token=...` aus der URL, zeigt Form mit
3
- // new + confirm-password. Submit triggert /api/auth/reset-password mit
4
- // dem Token. Server collapses alle Token-Verify-Failures auf einen
5
- // Code (anti-enumeration); UI zeigt unified "Link ungültig oder
6
- // abgelaufen"-message.
2
+ // ResetPasswordScreen reads `?token=...` from the URL and shows fields for
3
+ // a new and confirmed password. Submission calls /api/auth/reset-password
4
+ // with the token. The server collapses all token-verification failures into
5
+ // one code (anti-enumeration), so the UI shows the unified "link invalid or
6
+ // expired" message.
7
7
  //
8
- // Token-Quelle ist read-once via useUrlToken(): liest `?token=...` beim
9
- // Mount und scrubbt den Param danach aus der URL (#774). Apps die das
10
- // anders brauchen (server-injected Token-Prop) reichen `token` als Prop
11
- // durch — dann bleibt die URL unangetastet.
8
+ // The token is read once via useUrlToken(): `?token=...` is read on mount and
9
+ // then scrubbed from the URL. Apps that need different behavior can pass a
10
+ // server-injected token through the `token` prop; the URL is then left intact.
12
11
  import { usePrimitives, useTranslation } from "@cosmicdrift/kumiko-renderer";
13
12
  import { useState } from "react";
14
13
  import { resetPassword } from "./auth-client.js";
@@ -56,10 +55,10 @@ export function ResetPasswordScreen({ title, token: tokenProp, loginHref = "/log
56
55
  void doSubmit();
57
56
  };
58
57
  const effectiveTitle = title ?? t("auth.resetPassword.title");
59
- // Kein Token in der URL → User soll den Link aus seiner Mail nochmal
60
- // klicken oder einen neuen Reset anfordern. Form ohne Token zu
61
- // submitten würde nur den invalidResetToken-Error zeigen — das ist
62
- // verwirrend. Lieber upfront eine klare Message.
58
+ // No token in the URL: the user should click the link from their email again
59
+ // or request a new reset. Submitting without a token would only show the
60
+ // invalidResetToken error, which is confusing, so show a clear message
61
+ // immediately instead.
63
62
  if (token === "") {
64
63
  return (_jsxs(AuthCard, { title: effectiveTitle, children: [_jsx("p", { className: "text-sm text-muted-foreground", children: t("auth.resetPassword.missingToken") }), _jsx(Link, { href: loginHref, variant: "muted", children: t("auth.resetPassword.goToLogin") })] }));
65
64
  }