@cosmicdrift/kumiko-samples 0.378.0 → 0.380.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 (509) hide show
  1. package/package.json +1 -1
  2. package/packages/bundled-features/package.json +18 -17
  3. package/packages/bundled-features/src/account-security/feature.ts +2 -2
  4. package/packages/bundled-features/src/account-security/index.ts +8 -8
  5. package/packages/bundled-features/src/account-security/{constants.ts → web/constants.ts} +0 -2
  6. package/packages/bundled-features/src/account-security/{i18n.ts → web/i18n.ts} +0 -1
  7. package/packages/bundled-features/src/admin-shell/feature.ts +10 -9
  8. package/packages/bundled-features/src/admin-shell/index.ts +8 -8
  9. package/packages/bundled-features/src/admin-shell/web/client-plugin.tsx +2 -3
  10. package/packages/bundled-features/src/admin-shell/{constants.ts → web/constants.ts} +0 -1
  11. package/packages/bundled-features/src/admin-shell/web/default-translations.ts +10 -0
  12. package/packages/bundled-features/src/admin-shell/web/i18n.ts +51 -9
  13. package/packages/bundled-features/src/admin-shell/web/index.ts +0 -1
  14. package/packages/bundled-features/src/audit/changes.json +7 -0
  15. package/packages/bundled-features/src/audit/feature.ts +72 -64
  16. package/packages/bundled-features/src/audit/handlers/audit-events.ts +153 -0
  17. package/packages/bundled-features/src/audit/handlers/audit-system-db.ts +13 -0
  18. package/packages/bundled-features/src/audit/handlers/details-all-tenants.query.ts +26 -0
  19. package/packages/bundled-features/src/audit/handlers/details.query.ts +11 -39
  20. package/packages/bundled-features/src/audit/handlers/list-all-tenants.query.ts +47 -0
  21. package/packages/bundled-features/src/audit/handlers/list.query.ts +16 -123
  22. package/packages/bundled-features/src/audit/handlers/resolve-audit-tenant.ts +21 -7
  23. package/packages/bundled-features/src/audit/index.ts +1 -1
  24. package/packages/bundled-features/src/audit/run-escape-hatch-retention.ts +4 -4
  25. package/packages/bundled-features/src/audit/screens.ts +82 -0
  26. package/packages/bundled-features/src/audit/web/client-plugin.tsx +2 -3
  27. package/packages/bundled-features/src/audit/{constants.ts → web/constants.ts} +11 -1
  28. package/packages/bundled-features/src/audit/web/default-translations.ts +7 -0
  29. package/packages/bundled-features/src/audit/web/i18n.ts +33 -7
  30. package/packages/bundled-features/src/audit/web/index.ts +0 -2
  31. package/packages/bundled-features/src/auth-email-password/bootstrap.ts +6 -6
  32. package/packages/bundled-features/src/auth-email-password/changes.json +6 -0
  33. package/packages/bundled-features/src/auth-email-password/errors.ts +1 -1
  34. package/packages/bundled-features/src/auth-email-password/feature.ts +2 -2
  35. package/packages/bundled-features/src/auth-email-password/handlers/confirm-account-unlock.write.ts +1 -1
  36. package/packages/bundled-features/src/auth-email-password/handlers/invite-accept-with-login.write.ts +4 -4
  37. package/packages/bundled-features/src/auth-email-password/handlers/invite-create.write.ts +3 -3
  38. package/packages/bundled-features/src/auth-email-password/handlers/invite-info.query.ts +1 -1
  39. package/packages/bundled-features/src/auth-email-password/handlers/login.write.ts +38 -4
  40. package/packages/bundled-features/src/auth-email-password/handlers/request-account-unlock.write.ts +1 -1
  41. package/packages/bundled-features/src/auth-email-password/handlers/request-email-verification.write.ts +1 -1
  42. package/packages/bundled-features/src/auth-email-password/handlers/request-password-reset.write.ts +1 -1
  43. package/packages/bundled-features/src/auth-email-password/handlers/reset-password.write.ts +1 -1
  44. package/packages/bundled-features/src/auth-email-password/handlers/verify-email.write.ts +1 -1
  45. package/packages/bundled-features/src/auth-email-password/index.ts +6 -1
  46. package/packages/bundled-features/src/auth-email-password/mail-notifications.ts +1 -1
  47. package/packages/bundled-features/src/auth-email-password/signup-activation.ts +1 -1
  48. package/packages/bundled-features/src/auth-email-password/web/auth-client.ts +0 -1
  49. package/packages/bundled-features/src/auth-email-password/web/auth-form-logic.ts +0 -1
  50. package/packages/bundled-features/src/auth-email-password/web/auth-form-primitives.tsx +0 -1
  51. package/packages/bundled-features/src/auth-email-password/web/auth-gate.tsx +0 -1
  52. package/packages/bundled-features/src/auth-email-password/web/auth-redirect.ts +0 -1
  53. package/packages/bundled-features/src/auth-email-password/web/client-actions.ts +0 -1
  54. package/packages/bundled-features/src/auth-email-password/web/client-plugin.ts +1 -2
  55. package/packages/bundled-features/src/auth-email-password/web/confirm-account-unlock-screen.tsx +0 -1
  56. package/packages/bundled-features/src/auth-email-password/{constants.ts → web/constants.ts} +3 -6
  57. package/packages/bundled-features/src/auth-email-password/web/default-topbar-actions.tsx +0 -1
  58. package/packages/bundled-features/src/auth-email-password/web/forgot-password-screen.tsx +0 -1
  59. package/packages/bundled-features/src/auth-email-password/{i18n.ts → web/i18n.ts} +3 -4
  60. package/packages/bundled-features/src/auth-email-password/web/index.ts +1 -2
  61. package/packages/bundled-features/src/auth-email-password/web/invite-accept-screen.tsx +2 -3
  62. package/packages/bundled-features/src/auth-email-password/web/login-screen.tsx +0 -1
  63. package/packages/bundled-features/src/auth-email-password/{mail-i18n.ts → web/mail-i18n.ts} +0 -1
  64. package/packages/bundled-features/src/auth-email-password/web/request-account-unlock-screen.tsx +0 -1
  65. package/packages/bundled-features/src/auth-email-password/web/reset-password-screen.tsx +0 -1
  66. package/packages/bundled-features/src/auth-email-password/web/session-bootstrap-error.tsx +0 -1
  67. package/packages/bundled-features/src/auth-email-password/web/session.tsx +0 -1
  68. package/packages/bundled-features/src/auth-email-password/web/signup-complete-screen.tsx +2 -3
  69. package/packages/bundled-features/src/auth-email-password/web/signup-screen.tsx +0 -1
  70. package/packages/bundled-features/src/auth-email-password/web/tenant-menu-items.tsx +0 -1
  71. package/packages/bundled-features/src/auth-email-password/web/tenant-switcher.tsx +0 -1
  72. package/packages/bundled-features/src/auth-email-password/web/use-shell-user.ts +0 -1
  73. package/packages/bundled-features/src/auth-email-password/web/user-menu.tsx +0 -1
  74. package/packages/bundled-features/src/auth-email-password/web/verify-email-screen.tsx +0 -1
  75. package/packages/bundled-features/src/auth-mfa/changes.json +6 -0
  76. package/packages/bundled-features/src/auth-mfa/errors.ts +2 -2
  77. package/packages/bundled-features/src/auth-mfa/handlers/enable-confirm-preauth.write.ts +1 -1
  78. package/packages/bundled-features/src/auth-mfa/handlers/enable-start-preauth.write.ts +1 -1
  79. package/packages/bundled-features/src/auth-mfa/handlers/enable-start.write.ts +1 -1
  80. package/packages/bundled-features/src/auth-mfa/handlers/verify.write.ts +1 -1
  81. package/packages/bundled-features/src/auth-mfa/index.ts +8 -8
  82. package/packages/bundled-features/src/auth-mfa/mfa-status-checker.ts +4 -4
  83. package/packages/bundled-features/src/auth-mfa/screens.ts +1 -1
  84. package/packages/bundled-features/src/auth-mfa/web/client-plugin.ts +0 -1
  85. package/packages/bundled-features/src/auth-mfa/{constants.ts → web/constants.ts} +0 -1
  86. package/packages/bundled-features/src/auth-mfa/web/i18n.ts +0 -1
  87. package/packages/bundled-features/src/auth-mfa/web/index.ts +0 -1
  88. package/packages/bundled-features/src/auth-mfa/web/mfa-client.ts +0 -1
  89. package/packages/bundled-features/src/auth-mfa/web/mfa-disable-dialog.tsx +1 -2
  90. package/packages/bundled-features/src/auth-mfa/web/mfa-recovery-codes-reveal.tsx +0 -1
  91. package/packages/bundled-features/src/auth-mfa/web/mfa-regenerate-recovery-dialog.tsx +1 -2
  92. package/packages/bundled-features/src/auth-mfa/web/mfa-setup-preauth-screen.tsx +21 -23
  93. package/packages/bundled-features/src/auth-mfa/web/mfa-verify-screen.tsx +0 -1
  94. package/packages/bundled-features/src/billing-foundation/changes.json +18 -0
  95. package/packages/bundled-features/src/billing-foundation/checkout-core.ts +3 -3
  96. package/packages/bundled-features/src/billing-foundation/consumer-protection/consent-text.ts +2 -2
  97. package/packages/bundled-features/src/billing-foundation/consumer-protection/issue-confirmation.ts +11 -3
  98. package/packages/bundled-features/src/billing-foundation/consumer-protection/mail-notifications.ts +11 -1
  99. package/packages/bundled-features/src/billing-foundation/consumer-protection/register-consent.ts +1 -1
  100. package/packages/bundled-features/src/billing-foundation/consumer-protection/register-termination.ts +12 -1
  101. package/packages/bundled-features/src/billing-foundation/consumer-protection/stored-user-email.ts +12 -0
  102. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-mail.ts +6 -1
  103. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-notify.ts +1 -1
  104. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-pages.ts +167 -28
  105. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-record.ts +102 -3
  106. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-request.ts +43 -12
  107. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-revoke.ts +202 -0
  108. package/packages/bundled-features/src/billing-foundation/consumer-protection/termination-texts.ts +70 -0
  109. package/packages/bundled-features/src/billing-foundation/events.ts +20 -2
  110. package/packages/bundled-features/src/billing-foundation/feature.ts +5 -5
  111. package/packages/bundled-features/src/billing-foundation/handlers/process-event.write.ts +82 -9
  112. package/packages/bundled-features/src/billing-foundation/handlers/switch-plan.write.ts +1 -1
  113. package/packages/bundled-features/src/billing-foundation/handlers/sync-subscription.write.ts +1 -1
  114. package/packages/bundled-features/src/billing-foundation/index.ts +27 -27
  115. package/packages/bundled-features/src/billing-foundation/plan-catalog.ts +7 -7
  116. package/packages/bundled-features/src/billing-foundation/screens.ts +1 -1
  117. package/packages/bundled-features/src/billing-foundation/subscription-tier-sync.ts +1 -1
  118. package/packages/bundled-features/src/billing-foundation/types.ts +17 -3
  119. package/packages/bundled-features/src/billing-foundation/validate-options.ts +3 -3
  120. package/packages/bundled-features/src/billing-foundation/web/billing-contact-plan.tsx +1 -3
  121. package/packages/bundled-features/src/billing-foundation/web/billing-plans-panel.tsx +5 -7
  122. package/packages/bundled-features/src/billing-foundation/web/cancel-contract-dialog.tsx +1 -3
  123. package/packages/bundled-features/src/billing-foundation/web/checkout-consent-dialog.tsx +1 -3
  124. package/packages/bundled-features/src/billing-foundation/web/client-plugin.tsx +1 -2
  125. package/packages/bundled-features/src/billing-foundation/{constants.ts → web/constants.ts} +37 -31
  126. package/packages/bundled-features/src/billing-foundation/{consumer-protection → web/consumer-protection}/consent-locale.ts +0 -1
  127. package/packages/bundled-features/src/billing-foundation/{contact-card.ts → web/contact-card.ts} +0 -2
  128. package/packages/bundled-features/src/billing-foundation/web/index.ts +14 -15
  129. package/packages/bundled-features/src/billing-foundation/web/localized-params.ts +0 -2
  130. package/packages/bundled-features/src/billing-foundation/webhook-handler.ts +5 -2
  131. package/packages/bundled-features/src/cap-overview/feature.ts +1 -1
  132. package/packages/bundled-features/src/cap-overview/handlers/caps-usage.query.ts +1 -1
  133. package/packages/bundled-features/src/cap-overview/handlers/tenant-caps-list.query.ts +2 -2
  134. package/packages/bundled-features/src/cap-overview/index.ts +9 -9
  135. package/packages/bundled-features/src/cap-overview/screens.ts +2 -2
  136. package/packages/bundled-features/src/cap-overview/web/cap-cards-panel.tsx +1 -2
  137. package/packages/bundled-features/src/cap-overview/web/cap-usage-bar.tsx +1 -2
  138. package/packages/bundled-features/src/cap-overview/web/cap-usage-cell.tsx +0 -2
  139. package/packages/bundled-features/src/cap-overview/web/client-plugin.tsx +3 -4
  140. package/packages/bundled-features/src/cap-overview/{constants.ts → web/constants.ts} +0 -1
  141. package/packages/bundled-features/src/cap-overview/web/index.ts +0 -1
  142. package/packages/bundled-features/src/cap-overview/{usage-math.ts → web/usage-math.ts} +1 -2
  143. package/packages/bundled-features/src/compliance-profiles/feature.ts +5 -5
  144. package/packages/bundled-features/src/compliance-profiles/index.ts +6 -6
  145. package/packages/bundled-features/src/compliance-profiles/web/client-plugin.tsx +2 -3
  146. package/packages/bundled-features/src/compliance-profiles/web/compliance-profile-catalog.tsx +1 -2
  147. package/packages/bundled-features/src/compliance-profiles/{constants.ts → web/constants.ts} +0 -1
  148. package/packages/bundled-features/src/compliance-profiles/web/i18n.ts +0 -1
  149. package/packages/bundled-features/src/compliance-profiles/web/index.ts +0 -1
  150. package/packages/bundled-features/src/config/index.ts +6 -6
  151. package/packages/bundled-features/src/config/web/client-plugin.ts +1 -2
  152. package/packages/bundled-features/src/config/{constants.ts → web/constants.ts} +0 -1
  153. package/packages/bundled-features/src/config/web/i18n.ts +0 -1
  154. package/packages/bundled-features/src/config/web/index.ts +1 -3
  155. package/packages/bundled-features/src/config/write-helpers.ts +1 -1
  156. package/packages/bundled-features/src/custom-fields/feature.ts +8 -8
  157. package/packages/bundled-features/src/custom-fields/handlers/clear-custom-field.write.ts +1 -1
  158. package/packages/bundled-features/src/custom-fields/handlers/define-tenant-field.write.ts +1 -1
  159. package/packages/bundled-features/src/custom-fields/handlers/delete-system-field.write.ts +1 -1
  160. package/packages/bundled-features/src/custom-fields/handlers/delete-tenant-field.write.ts +4 -4
  161. package/packages/bundled-features/src/custom-fields/handlers/set-custom-field.write.ts +1 -1
  162. package/packages/bundled-features/src/custom-fields/handlers/update-tenant-field.write.ts +1 -1
  163. package/packages/bundled-features/src/custom-fields/index.ts +8 -8
  164. package/packages/bundled-features/src/custom-fields/lib/value-schema.ts +1 -1
  165. package/packages/bundled-features/src/custom-fields/schemas.ts +1 -1
  166. package/packages/bundled-features/src/custom-fields/web/client-plugin.tsx +1 -2
  167. package/packages/bundled-features/src/custom-fields/{constants.ts → web/constants.ts} +18 -19
  168. package/packages/bundled-features/src/custom-fields/web/custom-fields-form-section.tsx +1 -2
  169. package/packages/bundled-features/src/custom-fields/web/i18n.ts +0 -1
  170. package/packages/bundled-features/src/custom-fields/web/index.ts +2 -3
  171. package/packages/bundled-features/src/custom-fields/wire-for-entity.ts +1 -2
  172. package/packages/bundled-features/src/delivery/address-opt-out.ts +1 -1
  173. package/packages/bundled-features/src/delivery/attempt-log-retention.ts +24 -8
  174. package/packages/bundled-features/src/delivery/changes.json +6 -0
  175. package/packages/bundled-features/src/delivery/constants.ts +2 -2
  176. package/packages/bundled-features/src/delivery/i18n.ts +1 -1
  177. package/packages/bundled-features/src/delivery/unsubscribe-page.ts +1 -1
  178. package/packages/bundled-features/src/delivery/web/client-plugin.tsx +6 -7
  179. package/packages/bundled-features/src/delivery/web/delivery-channel-cell.tsx +0 -1
  180. package/packages/bundled-features/src/delivery/web/delivery-error-cell.tsx +0 -1
  181. package/packages/bundled-features/src/delivery/web/delivery-status-cell.tsx +1 -2
  182. package/packages/bundled-features/src/delivery/web/delivery-time-cell.tsx +0 -1
  183. package/packages/bundled-features/src/delivery/web/delivery-type-cell.tsx +0 -1
  184. package/packages/bundled-features/src/delivery/web/index.ts +0 -1
  185. package/packages/bundled-features/src/delivery/{public-names.ts → web/public-names.ts} +0 -1
  186. package/packages/bundled-features/src/document-ingest-foundation/changes.json +6 -0
  187. package/packages/bundled-features/src/document-ingest-foundation/events.ts +4 -0
  188. package/packages/bundled-features/src/document-ingest-foundation/executor.ts +2 -1
  189. package/packages/bundled-features/src/document-ingest-foundation/feature.ts +18 -4
  190. package/packages/bundled-features/src/document-ingest-foundation/index.ts +1 -0
  191. package/packages/bundled-features/src/feature-toggles/feature.ts +7 -7
  192. package/packages/bundled-features/src/feature-toggles/global-feature-state-table.ts +14 -13
  193. package/packages/bundled-features/src/feature-toggles/handlers/list.query.ts +1 -1
  194. package/packages/bundled-features/src/feature-toggles/handlers/registered.query.ts +1 -1
  195. package/packages/bundled-features/src/feature-toggles/handlers/set.write.ts +3 -3
  196. package/packages/bundled-features/src/feature-toggles/index.ts +6 -6
  197. package/packages/bundled-features/src/feature-toggles/web/client-plugin.tsx +1 -2
  198. package/packages/bundled-features/src/feature-toggles/{constants.ts → web/constants.ts} +0 -1
  199. package/packages/bundled-features/src/feature-toggles/web/i18n.ts +0 -1
  200. package/packages/bundled-features/src/feature-toggles/web/index.ts +0 -1
  201. package/packages/bundled-features/src/files/changes.json +7 -0
  202. package/packages/bundled-features/src/folders/feature.ts +1 -1
  203. package/packages/bundled-features/src/folders/handlers/clear-folder.write.ts +1 -1
  204. package/packages/bundled-features/src/folders/handlers/delete-folder.write.ts +1 -1
  205. package/packages/bundled-features/src/folders/handlers/set-folder.write.ts +1 -1
  206. package/packages/bundled-features/src/folders/index.ts +8 -8
  207. package/packages/bundled-features/src/folders/web/client-plugin.tsx +1 -3
  208. package/packages/bundled-features/src/folders/{constants.ts → web/constants.ts} +0 -1
  209. package/packages/bundled-features/src/folders/web/folder-manager.tsx +1 -2
  210. package/packages/bundled-features/src/folders/web/folder-section.tsx +1 -2
  211. package/packages/bundled-features/src/folders/web/i18n.ts +0 -1
  212. package/packages/bundled-features/src/folders/web/index.ts +1 -2
  213. package/packages/bundled-features/src/folders/web/tree.ts +0 -1
  214. package/packages/bundled-features/src/form-draft/changes.json +7 -0
  215. package/packages/bundled-features/src/form-draft/db/queries/cleanup.ts +25 -11
  216. package/packages/bundled-features/src/form-draft/decrypt-draft.ts +24 -0
  217. package/packages/bundled-features/src/form-draft/entity.ts +6 -9
  218. package/packages/bundled-features/src/form-draft/feature.ts +1 -1
  219. package/packages/bundled-features/src/form-draft/handlers/cleanup.job.ts +26 -5
  220. package/packages/bundled-features/src/form-draft/handlers/discard.write.ts +1 -1
  221. package/packages/bundled-features/src/form-draft/handlers/get.query.ts +6 -7
  222. package/packages/bundled-features/src/form-draft/handlers/list.query.ts +13 -7
  223. package/packages/bundled-features/src/form-draft/handlers/save.write.ts +5 -5
  224. package/packages/bundled-features/src/form-draft/index.ts +8 -8
  225. package/packages/bundled-features/src/form-draft/lookup.ts +10 -4
  226. package/packages/bundled-features/src/form-draft/schemas.ts +1 -1
  227. package/packages/bundled-features/src/form-draft/{constants.ts → web/constants.ts} +0 -1
  228. package/packages/bundled-features/src/form-draft-user-data/hooks.ts +2 -2
  229. package/packages/bundled-features/src/inbound-mail-foundation/retention-sweep.ts +10 -10
  230. package/packages/bundled-features/src/jobs/feature.ts +7 -7
  231. package/packages/bundled-features/src/jobs/handlers/retry.write.ts +1 -1
  232. package/packages/bundled-features/src/jobs/handlers/trigger.write.ts +1 -1
  233. package/packages/bundled-features/src/jobs/index.ts +1 -1
  234. package/packages/bundled-features/src/jobs/job-run-table.ts +4 -3
  235. package/packages/bundled-features/src/jobs/web/client-plugin.tsx +2 -3
  236. package/packages/bundled-features/src/jobs/{constants.ts → web/constants.ts} +0 -1
  237. package/packages/bundled-features/src/jobs/web/default-translations.ts +7 -0
  238. package/packages/bundled-features/src/jobs/web/i18n.ts +53 -7
  239. package/packages/bundled-features/src/jobs/web/index.ts +0 -1
  240. package/packages/bundled-features/src/ledger/changes.json +7 -0
  241. package/packages/bundled-features/src/ledger/entity.ts +1 -1
  242. package/packages/bundled-features/src/ledger/feature.ts +1 -1
  243. package/packages/bundled-features/src/ledger/handlers/confirm-schedule-period.write.ts +2 -10
  244. package/packages/bundled-features/src/ledger/handlers/create-transaction.write.ts +1 -1
  245. package/packages/bundled-features/src/ledger/handlers/reports.query.ts +1 -1
  246. package/packages/bundled-features/src/ledger/handlers/reverse-transaction.write.ts +1 -1
  247. package/packages/bundled-features/src/ledger/index.ts +13 -13
  248. package/packages/bundled-features/src/ledger/recurring.ts +1 -1
  249. package/packages/bundled-features/src/ledger/reports.ts +1 -1
  250. package/packages/bundled-features/src/ledger/schemas.ts +1 -1
  251. package/packages/bundled-features/src/ledger/{constants.ts → web/constants.ts} +0 -1
  252. package/packages/bundled-features/src/ledger/web/index.ts +11 -12
  253. package/packages/bundled-features/src/legal-pages/README.md +1 -1
  254. package/packages/bundled-features/src/legal-pages/feature.ts +5 -5
  255. package/packages/bundled-features/src/legal-pages/index.ts +11 -11
  256. package/packages/bundled-features/src/legal-pages/lib/boot-check.ts +1 -1
  257. package/packages/bundled-features/src/legal-pages/lib/validate-routes.ts +1 -1
  258. package/packages/bundled-features/src/legal-pages/web/client-plugin.ts +1 -2
  259. package/packages/bundled-features/src/legal-pages/{constants.ts → web/constants.ts} +6 -8
  260. package/packages/bundled-features/src/legal-pages/web/index.ts +0 -1
  261. package/packages/bundled-features/src/managed-pages/feature.ts +1 -1
  262. package/packages/bundled-features/src/managed-pages/web/client-plugin.tsx +1 -2
  263. package/packages/bundled-features/src/managed-pages/web/default-translations.ts +17 -0
  264. package/packages/bundled-features/src/managed-pages/web/i18n.ts +59 -16
  265. package/packages/bundled-features/src/managed-pages/web/index.ts +1 -2
  266. package/packages/bundled-features/src/metrics/compute.ts +1 -1
  267. package/packages/bundled-features/src/metrics/feature.ts +6 -6
  268. package/packages/bundled-features/src/metrics/index.ts +8 -8
  269. package/packages/bundled-features/src/metrics/types.ts +1 -1
  270. package/packages/bundled-features/src/metrics/validate.ts +1 -1
  271. package/packages/bundled-features/src/metrics/{constants.ts → web/constants.ts} +0 -1
  272. package/packages/bundled-features/src/metrics/window.ts +1 -1
  273. package/packages/bundled-features/src/notes-history/feature.ts +1 -1
  274. package/packages/bundled-features/src/notes-history/handlers/add-note.write.ts +1 -1
  275. package/packages/bundled-features/src/notes-history/index.ts +8 -8
  276. package/packages/bundled-features/src/notes-history/web/client-plugin.tsx +1 -3
  277. package/packages/bundled-features/src/notes-history/{constants.ts → web/constants.ts} +0 -1
  278. package/packages/bundled-features/src/notes-history/web/i18n.ts +0 -1
  279. package/packages/bundled-features/src/notes-history/web/index.ts +2 -3
  280. package/packages/bundled-features/src/notes-history/web/notes-section.tsx +2 -3
  281. package/packages/bundled-features/src/personal-access-tokens/feature.ts +12 -10
  282. package/packages/bundled-features/src/personal-access-tokens/handlers/available-scopes.query.ts +1 -1
  283. package/packages/bundled-features/src/personal-access-tokens/handlers/create.write.ts +1 -1
  284. package/packages/bundled-features/src/personal-access-tokens/handlers/revoke.write.ts +1 -1
  285. package/packages/bundled-features/src/personal-access-tokens/hash.ts +1 -1
  286. package/packages/bundled-features/src/personal-access-tokens/i18n.ts +2 -2
  287. package/packages/bundled-features/src/personal-access-tokens/index.ts +5 -5
  288. package/packages/bundled-features/src/personal-access-tokens/resolver.ts +1 -1
  289. package/packages/bundled-features/src/personal-access-tokens/schema/api-token.ts +3 -3
  290. package/packages/bundled-features/src/personal-access-tokens/screens.ts +2 -2
  291. package/packages/bundled-features/src/personal-access-tokens/{constants.ts → web/constants.ts} +0 -1
  292. package/packages/bundled-features/src/personal-access-tokens/{scopes.ts → web/scopes.ts} +0 -1
  293. package/packages/bundled-features/src/presets/changes.json +7 -0
  294. package/packages/bundled-features/src/presets/index.ts +0 -1
  295. package/packages/bundled-features/src/presets/security-baseline.ts +1 -1
  296. package/packages/bundled-features/src/renderer-foundation/types.ts +1 -1
  297. package/packages/bundled-features/src/secrets/feature.ts +1 -1
  298. package/packages/bundled-features/src/secrets/handlers/delete.write.ts +1 -1
  299. package/packages/bundled-features/src/secrets/handlers/list.query.ts +1 -1
  300. package/packages/bundled-features/src/secrets/handlers/set.write.ts +1 -1
  301. package/packages/bundled-features/src/secrets/i18n.ts +1 -1
  302. package/packages/bundled-features/src/secrets/index.ts +8 -8
  303. package/packages/bundled-features/src/secrets/{constants.ts → web/constants.ts} +0 -1
  304. package/packages/bundled-features/src/secrets/write-gate.ts +1 -1
  305. package/packages/bundled-features/src/sessions/feature.ts +7 -4
  306. package/packages/bundled-features/src/sessions/schema/user-session.ts +2 -3
  307. package/packages/bundled-features/src/sessions/{i18n.ts → web/i18n.ts} +0 -1
  308. package/packages/bundled-features/src/shared/index.ts +6 -1
  309. package/packages/bundled-features/src/shared/purge-files-reaching-subject.ts +10 -2
  310. package/packages/bundled-features/src/shared/web/translate-or-raw.ts +0 -1
  311. package/packages/bundled-features/src/subscription-stripe/feature.ts +2 -0
  312. package/packages/bundled-features/src/subscription-stripe/plugin-methods.ts +19 -0
  313. package/packages/bundled-features/src/subscription-stripe/verify-webhook.ts +1 -0
  314. package/packages/bundled-features/src/tags/changes.json +6 -0
  315. package/packages/bundled-features/src/tags/feature.ts +1 -1
  316. package/packages/bundled-features/src/tags/handlers/assign-tag.write.ts +11 -7
  317. package/packages/bundled-features/src/tags/handlers/create-tag.write.ts +1 -1
  318. package/packages/bundled-features/src/tags/handlers/delete-tag.write.ts +4 -1
  319. package/packages/bundled-features/src/tags/handlers/remove-tag.write.ts +1 -1
  320. package/packages/bundled-features/src/tags/handlers/update-tag.write.ts +1 -1
  321. package/packages/bundled-features/src/tags/index.ts +12 -12
  322. package/packages/bundled-features/src/tags/screens.ts +1 -1
  323. package/packages/bundled-features/src/tags/web/client-plugin.tsx +1 -3
  324. package/packages/bundled-features/src/tags/{constants.ts → web/constants.ts} +4 -1
  325. package/packages/bundled-features/src/tags/web/entity-tags.tsx +1 -2
  326. package/packages/bundled-features/src/tags/web/i18n.ts +2 -2
  327. package/packages/bundled-features/src/tags/web/index.ts +2 -3
  328. package/packages/bundled-features/src/tags/web/tag-chip.tsx +0 -1
  329. package/packages/bundled-features/src/tags/web/tag-filter.tsx +1 -2
  330. package/packages/bundled-features/src/tags/web/tag-manager.tsx +5 -4
  331. package/packages/bundled-features/src/tags/web/tag-picker.tsx +0 -1
  332. package/packages/bundled-features/src/tags/web/tag-section.tsx +1 -2
  333. package/packages/bundled-features/src/tags/web/tags-cell.tsx +1 -2
  334. package/packages/bundled-features/src/template-resolver/README.md +1 -1
  335. package/packages/bundled-features/src/template-resolver/api.ts +75 -28
  336. package/packages/bundled-features/src/template-resolver/changes.json +43 -0
  337. package/packages/bundled-features/src/template-resolver/compile-document-body.ts +1 -1
  338. package/packages/bundled-features/src/template-resolver/compile-steps-block.ts +2 -2
  339. package/packages/bundled-features/src/template-resolver/document-ops.ts +5 -5
  340. package/packages/bundled-features/src/template-resolver/document-sanitizer.ts +4 -4
  341. package/packages/bundled-features/src/template-resolver/feature.ts +13 -4
  342. package/packages/bundled-features/src/template-resolver/handlers/by-slug.query.ts +6 -1
  343. package/packages/bundled-features/src/template-resolver/handlers/by-tenant.query.ts +6 -2
  344. package/packages/bundled-features/src/template-resolver/handlers/collection-item.query.ts +1 -1
  345. package/packages/bundled-features/src/template-resolver/handlers/collection-list.query.ts +1 -1
  346. package/packages/bundled-features/src/template-resolver/handlers/collection-set.write.ts +19 -2
  347. package/packages/bundled-features/src/template-resolver/handlers/copy-locale.write.ts +2 -2
  348. package/packages/bundled-features/src/template-resolver/handlers/diff-to-system.query.ts +7 -1
  349. package/packages/bundled-features/src/template-resolver/handlers/discard-draft.write.ts +1 -1
  350. package/packages/bundled-features/src/template-resolver/handlers/document-base.ts +8 -2
  351. package/packages/bundled-features/src/template-resolver/handlers/document-blocks.query.ts +2 -2
  352. package/packages/bundled-features/src/template-resolver/handlers/export-bundle.query.ts +5 -2
  353. package/packages/bundled-features/src/template-resolver/handlers/find-by-id.query.ts +4 -2
  354. package/packages/bundled-features/src/template-resolver/handlers/layout-source.query.ts +10 -5
  355. package/packages/bundled-features/src/template-resolver/handlers/list.query.ts +5 -2
  356. package/packages/bundled-features/src/template-resolver/handlers/overview.query.ts +68 -10
  357. package/packages/bundled-features/src/template-resolver/handlers/patch-draft.write.ts +1 -1
  358. package/packages/bundled-features/src/template-resolver/handlers/resource-shared.ts +1 -1
  359. package/packages/bundled-features/src/template-resolver/handlers/resource-upload.write.ts +1 -1
  360. package/packages/bundled-features/src/template-resolver/handlers/send-test.write.ts +2 -2
  361. package/packages/bundled-features/src/template-resolver/handlers/set.write.ts +1 -1
  362. package/packages/bundled-features/src/template-resolver/handlers/shared.ts +1 -1
  363. package/packages/bundled-features/src/template-resolver/handlers/template-gates.ts +6 -6
  364. package/packages/bundled-features/src/template-resolver/handlers/template-write.ts +2 -2
  365. package/packages/bundled-features/src/template-resolver/handlers/usage.query.ts +8 -2
  366. package/packages/bundled-features/src/template-resolver/handlers/validate.query.ts +4 -2
  367. package/packages/bundled-features/src/template-resolver/i18n.ts +25 -0
  368. package/packages/bundled-features/src/template-resolver/index.ts +60 -59
  369. package/packages/bundled-features/src/template-resolver/layout-appearance.ts +1 -1
  370. package/packages/bundled-features/src/template-resolver/layout-regions.ts +1 -1
  371. package/packages/bundled-features/src/template-resolver/seeding.ts +16 -7
  372. package/packages/bundled-features/src/template-resolver/store-template-resource.ts +2 -2
  373. package/packages/bundled-features/src/template-resolver/table.ts +1 -1
  374. package/packages/bundled-features/src/template-resolver/template-bundle.ts +2 -2
  375. package/packages/bundled-features/src/template-resolver/template-delivery-policy.ts +82 -0
  376. package/packages/bundled-features/src/template-resolver/template-draft.ts +1 -1
  377. package/packages/bundled-features/src/template-resolver/template-edit-policy.ts +2 -2
  378. package/packages/bundled-features/src/template-resolver/template-meta.ts +2 -2
  379. package/packages/bundled-features/src/template-resolver/template-preview.ts +14 -10
  380. package/packages/bundled-features/src/template-resolver/template-usage.ts +1 -1
  381. package/packages/bundled-features/src/template-resolver/template-validation.ts +2 -2
  382. package/packages/bundled-features/src/template-resolver/testing.ts +2 -2
  383. package/packages/bundled-features/src/template-resolver/user-content-table.ts +1 -1
  384. package/packages/bundled-features/src/template-resolver/web/client-plugin.tsx +4 -5
  385. package/packages/bundled-features/src/template-resolver/{constants.ts → web/constants.ts} +7 -10
  386. package/packages/bundled-features/src/template-resolver/{document-blocks.ts → web/document-blocks.ts} +0 -1
  387. package/packages/bundled-features/src/template-resolver/web/document-editor-extensions.ts +2 -3
  388. package/packages/bundled-features/src/template-resolver/web/document-editor.tsx +0 -1
  389. package/packages/bundled-features/src/template-resolver/{document-images.ts → web/document-images.ts} +0 -1
  390. package/packages/bundled-features/src/template-resolver/{document-schema.ts → web/document-schema.ts} +0 -1
  391. package/packages/bundled-features/src/template-resolver/{document-steps.ts → web/document-steps.ts} +0 -1
  392. package/packages/bundled-features/src/template-resolver/web/document-tiptap-editor.tsx +6 -7
  393. package/packages/bundled-features/src/template-resolver/web/document-toolbar-blocks.ts +2 -3
  394. package/packages/bundled-features/src/template-resolver/web/editor-handle.ts +1 -2
  395. package/packages/bundled-features/src/template-resolver/web/i18n.ts +2 -1
  396. package/packages/bundled-features/src/template-resolver/web/index.ts +13 -14
  397. package/packages/bundled-features/src/template-resolver/{mail-constants.ts → web/mail-constants.ts} +0 -1
  398. package/packages/bundled-features/src/template-resolver/{pdf-constants.ts → web/pdf-constants.ts} +0 -1
  399. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor-lazy.tsx +0 -1
  400. package/packages/bundled-features/src/template-resolver/web/placeholder-line-editor.tsx +5 -4
  401. package/packages/bundled-features/src/template-resolver/{placeholder-text.ts → web/placeholder-text.ts} +0 -1
  402. package/packages/bundled-features/src/template-resolver/{qualified-names.ts → web/qualified-names.ts} +0 -1
  403. package/packages/bundled-features/src/template-resolver/web/use-stable-by-key.ts +0 -1
  404. package/packages/bundled-features/src/tenant/handlers/add-member.write.ts +1 -1
  405. package/packages/bundled-features/src/tenant/index.ts +7 -7
  406. package/packages/bundled-features/src/tenant/invitation-table.ts +1 -1
  407. package/packages/bundled-features/src/tenant/invited-membership.ts +1 -1
  408. package/packages/bundled-features/src/tenant/last-tenant-admin.ts +1 -1
  409. package/packages/bundled-features/src/tenant/member-role-options.ts +1 -1
  410. package/packages/bundled-features/src/tenant/screens.ts +2 -2
  411. package/packages/bundled-features/src/tenant/web/client-plugin.tsx +1 -2
  412. package/packages/bundled-features/src/tenant/{constants.ts → web/constants.ts} +3 -6
  413. package/packages/bundled-features/src/tenant/web/index.ts +0 -1
  414. package/packages/bundled-features/src/tenant/web/member-roles-cell.tsx +0 -1
  415. package/packages/bundled-features/src/tenant/web/member-status-cell.tsx +0 -1
  416. package/packages/bundled-features/src/tenant-lifecycle/stages.ts +2 -2
  417. package/packages/bundled-features/src/tier-engine/entity.ts +1 -1
  418. package/packages/bundled-features/src/tier-engine/feature.ts +7 -7
  419. package/packages/bundled-features/src/tier-engine/handlers/set-tenant-tier.write.ts +1 -1
  420. package/packages/bundled-features/src/tier-engine/index.ts +8 -8
  421. package/packages/bundled-features/src/tier-engine/web/client-plugin.tsx +2 -3
  422. package/packages/bundled-features/src/tier-engine/{constants.ts → web/constants.ts} +2 -3
  423. package/packages/bundled-features/src/tier-engine/{i18n.ts → web/i18n.ts} +0 -1
  424. package/packages/bundled-features/src/tier-engine/web/index.ts +0 -1
  425. package/packages/bundled-features/src/user/handlers/create.write.ts +1 -1
  426. package/packages/bundled-features/src/user/handlers/update-roles.ts +1 -1
  427. package/packages/bundled-features/src/user/handlers/update.write.ts +1 -1
  428. package/packages/bundled-features/src/user/index.ts +1 -1
  429. package/packages/bundled-features/src/user/invited-global-roles.ts +1 -1
  430. package/packages/bundled-features/src/user/schema/user.ts +1 -1
  431. package/packages/bundled-features/src/user/{constants.ts → web/constants.ts} +0 -1
  432. package/packages/bundled-features/src/user-data-rights/changes.json +14 -0
  433. package/packages/bundled-features/src/user-data-rights/env.ts +1 -1
  434. package/packages/bundled-features/src/user-data-rights/feature.ts +9 -9
  435. package/packages/bundled-features/src/user-data-rights/index.ts +1 -1
  436. package/packages/bundled-features/src/user-data-rights/lib/resolve-tenant-model.ts +1 -1
  437. package/packages/bundled-features/src/user-data-rights/mail-notifications.ts +1 -1
  438. package/packages/bundled-features/src/user-data-rights/web/client-plugin.tsx +2 -3
  439. package/packages/bundled-features/src/user-data-rights/web/confirm-deletion-screen.tsx +0 -1
  440. package/packages/bundled-features/src/user-data-rights/{constants.ts → web/constants.ts} +11 -12
  441. package/packages/bundled-features/src/user-data-rights/web/default-translations.ts +91 -0
  442. package/packages/bundled-features/src/user-data-rights/web/i18n.ts +41 -91
  443. package/packages/bundled-features/src/user-data-rights/web/index.ts +1 -2
  444. package/packages/bundled-features/src/user-data-rights/web/privacy-center-screen.tsx +1 -2
  445. package/packages/bundled-features/src/user-data-rights/web/public-deletion-gate.tsx +0 -1
  446. package/packages/bundled-features/src/user-data-rights/web/request-deletion-screen.tsx +0 -1
  447. package/packages/bundled-features/src/user-data-rights-defaults/hooks/file-ref.userdata-hook.ts +10 -1
  448. package/packages/bundled-features/src/user-profile/feature.ts +2 -2
  449. package/packages/bundled-features/src/user-profile/handlers/change-email.write.ts +1 -1
  450. package/packages/bundled-features/src/user-profile/index.ts +3 -2
  451. package/packages/bundled-features/src/user-profile/web/client-plugin.ts +2 -3
  452. package/packages/bundled-features/src/user-profile/{constants.ts → web/constants.ts} +0 -1
  453. package/packages/bundled-features/src/user-profile/{i18n.ts → web/i18n.ts} +0 -1
  454. package/packages/bundled-features/src/user-profile/web/profile-screen.tsx +2 -3
  455. package/packages/bundled-features/src/waitlist/changes.json +6 -0
  456. package/packages/bundled-features/src/waitlist/entity.ts +1 -1
  457. package/packages/bundled-features/src/waitlist/feature.ts +5 -5
  458. package/packages/bundled-features/src/waitlist/handlers/export-purge.write.ts +3 -3
  459. package/packages/bundled-features/src/waitlist/handlers/invite.write.ts +5 -1
  460. package/packages/bundled-features/src/waitlist/handlers/reject.write.ts +1 -1
  461. package/packages/bundled-features/src/waitlist/handlers/submit.write.ts +3 -3
  462. package/packages/bundled-features/src/waitlist/import.ts +1 -1
  463. package/packages/bundled-features/src/waitlist/index.ts +11 -11
  464. package/packages/bundled-features/src/waitlist/legacy-migrate.ts +1 -1
  465. package/packages/bundled-features/src/waitlist/link-on-signup.ts +1 -1
  466. package/packages/bundled-features/src/waitlist/mail.ts +7 -6
  467. package/packages/bundled-features/src/waitlist/payloads.ts +1 -1
  468. package/packages/bundled-features/src/waitlist/screens.ts +1 -1
  469. package/packages/bundled-features/src/waitlist/{constants.ts → web/constants.ts} +0 -1
  470. package/samples/apps/styleguide/src/features/content/web.tsx +0 -1
  471. package/samples/apps/ui-walkthrough/src/app/client.tsx +2 -0
  472. package/samples/apps/ui-walkthrough/src/app/seed-rental.ts +17 -1
  473. package/samples/apps/ui-walkthrough/src/app/seed-templates.ts +11 -0
  474. package/samples/apps/ui-walkthrough/src/app/server.ts +2 -1
  475. package/samples/apps/ui-walkthrough/src/features/billing/feature.ts +35 -7
  476. package/samples/apps/ui-walkthrough/src/features/billing/i18n.ts +6 -0
  477. package/samples/apps/ui-walkthrough/src/features/rental/entities.ts +27 -0
  478. package/samples/apps/ui-walkthrough/src/features/rental/feature.ts +61 -7
  479. package/samples/apps/ui-walkthrough/src/features/rental/i18n.ts +48 -24
  480. package/samples/apps/ui-walkthrough/src/features/rental/invoice-receive.ts +0 -1
  481. package/samples/apps/ui-walkthrough/src/features/rental/lease-support.ts +17 -1
  482. package/samples/apps/ui-walkthrough/src/features/rental/qualified-names.ts +3 -0
  483. package/samples/apps/ui-walkthrough/src/features/rental/receipts-upload.ts +70 -0
  484. package/samples/apps/ui-walkthrough/src/features/rental/screens.ts +90 -13
  485. package/samples/apps/ui-walkthrough/src/features/rental/web/index.ts +0 -2
  486. package/samples/apps/ui-walkthrough/src/features/subscription-plans/feature.ts +103 -0
  487. package/samples/apps/ui-walkthrough/src/features/subscription-plans/i18n.ts +36 -0
  488. package/samples/apps/ui-walkthrough/src/features/subscription-plans/index.ts +2 -0
  489. package/samples/apps/ui-walkthrough/src/features/subscription-plans/seed.ts +21 -0
  490. package/samples/apps/ui-walkthrough/src/run-config.ts +11 -0
  491. package/samples/apps/use-all-bundled/e2e-billing-gallery/server.ts +1 -1
  492. package/samples/apps/use-all-bundled/feature-manifest.json +4 -4
  493. package/samples/apps/use-all-bundled/scripts/check-coverage.ts +1 -1
  494. package/samples/apps/use-all-bundled/src/app/dev-app-options.ts +3 -1
  495. package/samples/recipes/compose-stacks/README.md +1 -2
  496. package/samples/recipes/embedded/README.md +5 -5
  497. package/samples/recipes/embedded/src/handlers/invoice-receive.write.ts +0 -1
  498. package/samples/recipes/embedded/src/screens/invoice-receive.screen.ts +9 -12
  499. package/samples/recipes/legal-pages/README.md +2 -2
  500. package/samples/recipes/legal-pages/src/feature.ts +1 -1
  501. package/samples/recipes/reference-data/src/feature.ts +3 -7
  502. package/packages/bundled-features/src/admin-shell/i18n.ts +0 -54
  503. package/packages/bundled-features/src/audit/i18n.ts +0 -25
  504. package/packages/bundled-features/src/auth-mfa/web/qrcode-browser.d.ts +0 -11
  505. package/packages/bundled-features/src/jobs/i18n.ts +0 -55
  506. package/packages/bundled-features/src/managed-pages/i18n.ts +0 -63
  507. package/packages/bundled-features/src/presets/dsgvo-self-service.ts +0 -35
  508. package/packages/bundled-features/src/user-data-rights/i18n.ts +0 -44
  509. package/samples/apps/ui-walkthrough/src/features/rental/web/upload-standard-layout.tsx +0 -61
@@ -36,7 +36,7 @@ runProdApp({
36
36
  // only uses the API via ctx)
37
37
  anonymousAccess: { defaultTenantId: SYSTEM_TENANT_ID },
38
38
  extraContext: ({ db }) => ({
39
- templateResolver: createTemplateResolverApi(db),
39
+ templateResolver: createTemplateResolverApi(db, registry),
40
40
  }),
41
41
  });
42
42
  ```
@@ -11,16 +11,16 @@ import {
11
11
  redirectToCanonicalPath,
12
12
  slashVariantOf,
13
13
  } from "../page-render/index.ts";
14
+ import { runLegalPagesBootCheck } from "./lib/boot-check.ts";
15
+ import { validateRoutes } from "./lib/validate-routes.ts";
16
+ import { renderMarkdownToHtml, wrapInLayout } from "./markdown.ts";
14
17
  import {
15
18
  LEGAL_REQUIRED_BLOCKS,
16
19
  LEGAL_ROUTES,
17
20
  LEGAL_TERMS_ROUTES,
18
21
  type LegalPageRoute,
19
22
  type LegalRequiredBlock,
20
- } from "./constants.ts";
21
- import { runLegalPagesBootCheck } from "./lib/boot-check.ts";
22
- import { validateRoutes } from "./lib/validate-routes.ts";
23
- import { renderMarkdownToHtml, wrapInLayout } from "./markdown.ts";
23
+ } from "./web/constants.ts";
24
24
 
25
25
  export { type LegalPagesBootCheckCtx, runLegalPagesBootCheck } from "./lib/boot-check.ts";
26
26
 
@@ -61,7 +61,7 @@ const PUBLIC_PAGE_CACHE = { kind: "revalidate", maxAgeSeconds: 60 } as const;
61
61
  // nicht gegen Cross-Feature-Coupling
62
62
  //
63
63
  // Voraussetzungen für Production:
64
- // • App-Bootstrap muss extraContext: { templateResolver: createTemplateResolverApi(db) }
64
+ // • App-Bootstrap muss extraContext: { templateResolver: createTemplateResolverApi(db, registry) }
65
65
  // setzen — sonst wirft Boot-Check beim Start
66
66
  // • anonymousAccess: { defaultTenantId: SYSTEM_TENANT_ID } — sonst
67
67
  // antworten die Routes mit 503
@@ -1,14 +1,3 @@
1
- export {
2
- LEGAL_OPTIONAL_BLOCKS,
3
- LEGAL_PAGES_FEATURE,
4
- LEGAL_REQUIRED_BLOCKS,
5
- LEGAL_ROUTES,
6
- LEGAL_TERMS_ROUTES,
7
- type LegalPageRoute,
8
- LegalPagesErrors,
9
- type LegalRequiredBlock,
10
- legalPagePath,
11
- } from "./constants.ts";
12
1
  export {
13
2
  createLegalPagesFeature,
14
3
  type LegalPagesBootCheckCtx,
@@ -23,3 +12,14 @@ export {
23
12
  type LegalContentSeedSource,
24
13
  legalContentSeed,
25
14
  } from "./seed.ts";
15
+ export {
16
+ LEGAL_OPTIONAL_BLOCKS,
17
+ LEGAL_PAGES_FEATURE,
18
+ LEGAL_REQUIRED_BLOCKS,
19
+ LEGAL_ROUTES,
20
+ LEGAL_TERMS_ROUTES,
21
+ type LegalPageRoute,
22
+ LegalPagesErrors,
23
+ type LegalRequiredBlock,
24
+ legalPagePath,
25
+ } from "./web/constants.ts";
@@ -4,7 +4,7 @@ import {
4
4
  type TemplateResolverApi,
5
5
  } from "@cosmicdrift/kumiko-bundled-features/template-resolver";
6
6
  import { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-framework/engine";
7
- import { LEGAL_REQUIRED_BLOCKS, type LegalRequiredBlock } from "../constants.ts";
7
+ import { LEGAL_REQUIRED_BLOCKS, type LegalRequiredBlock } from "../web/constants.ts";
8
8
 
9
9
  // Only the fields the check reads, so HandlerContext, AppContext or a hand-built
10
10
  // object in a unit test all fit.
@@ -1,4 +1,4 @@
1
- import type { LegalPageRoute } from "../constants.ts";
1
+ import type { LegalPageRoute } from "../web/constants.ts";
2
2
 
3
3
  // Validated once at feature-build time (not per-request) so a config typo
4
4
  // fails app startup instead of surfacing as a confusing 404 later.
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Client-Feature-Factory für legal-pages Visual-Tree. Liefert statische
3
2
  // Tree-Knoten für die DACH-Compliance-Blöcke (imprint, privacy in de/en).
4
3
  // Jeder Knoten linkt auf text-content's edit-Action — reines Cross-Feature-
@@ -18,7 +17,7 @@
18
17
 
19
18
  import type { TreeChildrenSubscribe, TreeNode } from "@cosmicdrift/kumiko-framework/engine";
20
19
  import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
21
- import { LEGAL_OPTIONAL_BLOCKS, LEGAL_REQUIRED_BLOCKS } from "../constants.ts";
20
+ import { LEGAL_OPTIONAL_BLOCKS, LEGAL_REQUIRED_BLOCKS } from "./constants.ts";
22
21
 
23
22
  const treeProvider: TreeChildrenSubscribe = () => (emit) => {
24
23
  // V.1.5d Slug-first Verschachtelung (Variante C):
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Feature name
3
2
  export const LEGAL_PAGES_FEATURE = "legal-pages" as const;
4
3
 
@@ -22,23 +21,22 @@ export type LegalRequiredBlock = {
22
21
  };
23
22
 
24
23
  // Required slugs that must exist as text-blocks for production-boot.
25
- // Pro Sprache + Slug eine Pflicht-Kombo. Wer mehr Sprachen will, ergänzt
26
- // die Liste — Boot-Check wird dynamisch aus der Liste generiert.
24
+ // One mandatory slug per language; anyone who wants more languages extends
25
+ // the list, the boot check is generated dynamically from it.
27
26
  export const LEGAL_REQUIRED_BLOCKS = [
28
27
  { slug: "imprint", lang: "de" },
29
28
  { slug: "privacy", lang: "de" },
30
29
  ] as const;
31
30
 
32
- // Optionale Blocks die NICHT Boot-fail-relevant sind, aber die Routes
33
- // servieren falls vorhanden. EN-Versionen sind in DACH-Apps oft nur
34
- // "nice-to-have".
31
+ // Optional blocks that are NOT boot-fail relevant, but whose routes are
32
+ // served when present. EN versions are often only nice-to-have in DACH apps.
35
33
  export const LEGAL_OPTIONAL_BLOCKS = [
36
34
  { slug: "imprint", lang: "en" },
37
35
  { slug: "privacy", lang: "en" },
38
36
  ] as const;
39
37
 
40
- // Public-Route-Mapping: URL-Path → (slug, lang). DE nutzt die deutschen
41
- // Standard-Bezeichnungen, EN die englischen.
38
+ // Public route mapping: URL path -> (slug, lang). DE uses the German
39
+ // standard names, EN the English ones.
42
40
  export const LEGAL_ROUTES = [
43
41
  { path: "/legal/impressum", slug: "imprint", lang: "de", titleFallback: "Impressum" },
44
42
  {
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Public exports für die Browser-Seite des legal-pages Features.
3
2
 
4
3
  export { legalPagesClient } from "./client-plugin.ts";
@@ -15,10 +15,10 @@ import { bySlugQuery } from "./handlers/by-slug.query.ts";
15
15
  import { byTenantPublishedQuery } from "./handlers/by-tenant-published.query.ts";
16
16
  import { pageCrudQueries, pageCrudWrites } from "./handlers/page-crud.ts";
17
17
  import { setWrite } from "./handlers/set.write.ts";
18
- import { MANAGED_PAGES_I18N } from "./i18n.ts";
19
18
  import { createBrandingSettingsScreen } from "./screens/branding-screen.ts";
20
19
  import { pageEditScreen, pageListScreen } from "./screens/page-screens.ts";
21
20
  import { pageEntity } from "./table.ts";
21
+ import { MANAGED_PAGES_I18N } from "./web/i18n.ts";
22
22
 
23
23
  // 60s-shared-cache saves the origin-revalidate roundtrip; CMS edits are live within 60s.
24
24
  const PUBLIC_PAGE_CACHE = { kind: "revalidate", maxAgeSeconds: 60 } as const;
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Client-Feature-Factory für managed-pages. Bringt NUR die Übersetzungen mit —
3
2
  // die Screens (page-list/page-edit/branding-settings) sind schema-driven
4
3
  // (entityList/entityEdit/configEdit), also keine custom-React-Components zu
@@ -7,7 +6,7 @@
7
6
 
8
7
  import { mergeTranslations, type TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
9
8
  import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
10
- import { defaultTranslations } from "./i18n.ts";
9
+ import { defaultTranslations } from "./default-translations.ts";
11
10
 
12
11
  export type ManagedPagesClientOptions = {
13
12
  /** Key-wise Overrides über die Default-Bundles (de/en). */
@@ -0,0 +1,17 @@
1
+ // Client i18n bundle for the managed-pages admin screens. The browser renderer
2
+ // builds its fallback locale store ONLY from clientFeatures[].translations; the
3
+ // server-side r.translations bundle (feature.ts) never reaches it. To render the
4
+ // configEdit/entityEdit labels translated instead of raw, we mirror the same keys here.
5
+ //
6
+ // Single source: pivots MANAGED_PAGES_I18N (key-first { key: {de,en} }, server
7
+ // form) into the locale-first TranslationsByLocale form the client expects, so
8
+ // there is no key duplication and no drift.
9
+
10
+ import {
11
+ type TranslationsByLocale,
12
+ translationsByLocaleFromKeys,
13
+ } from "@cosmicdrift/kumiko-renderer";
14
+ import { MANAGED_PAGES_I18N } from "./i18n.ts";
15
+
16
+ export const defaultTranslations: TranslationsByLocale =
17
+ translationsByLocaleFromKeys(MANAGED_PAGES_I18N);
@@ -1,19 +1,62 @@
1
- // @runtime client
2
- // Client-i18n-Bundle für die managed-pages Admin-Screens. Der Browser-Renderer
3
- // baut seinen Fallback-Locale-Store NUR aus clientFeatures[].translations — der
4
- // server-seitige r.translations-Bundle (feature.ts) erreicht ihn nie. Damit die
5
- // configEdit/entityEdit-Labels im Client übersetzt rendern statt roh, spiegeln
6
- // wir hier dieselben Keys.
1
+ // Pure data (i18n keys) that lives under web/ so the web bundle may pivot it into
2
+ // the browser store; feature.ts (server) imports it as well (the server may import
3
+ // client-safe pure data, like PAT constants.ts).
7
4
  //
8
- // Single source: pivotiert MANAGED_PAGES_I18N (key-first { key: {de,en} },
9
- // Server-Form) in die locale-first TranslationsByLocale-Form die der Client
10
- // erwartet — kein Key-Duplikat, kein Drift.
5
+ // Translation bundle for the managed-pages admin screens. Without these keys the
6
+ // UI renders the raw i18n keys (screen:*.title, entity:*:field:*, section
7
+ // headers). Once a feature calls r.translations, the boot validator
8
+ // (required-surface-keys) demands the COMPLETE required-surface set in de+en;
9
+ // this file covers every screen/field/section key managed-pages registers. The
10
+ // two customCss keys are always supplied (harmless with allowCustomCss:false, but
11
+ // required for consumers that enable it).
11
12
 
12
- import {
13
- type TranslationsByLocale,
14
- translationsByLocaleFromKeys,
15
- } from "@cosmicdrift/kumiko-renderer";
16
- import { MANAGED_PAGES_I18N } from "../i18n.ts";
13
+ type LocalizedString = { readonly en: string };
17
14
 
18
- export const defaultTranslations: TranslationsByLocale =
19
- translationsByLocaleFromKeys(MANAGED_PAGES_I18N);
15
+ export const MANAGED_PAGES_I18N: Readonly<Record<string, LocalizedString>> = {
16
+ // Screen titles (global/unprefixed, screenTitleKey = screen:<id>.title)
17
+ "screen:page-list.title": { en: "Pages" },
18
+ "screen:page-edit.title": { en: "Edit page" },
19
+ "screen:branding-settings.title": { en: "Branding" },
20
+
21
+ // Page-Entity Feld-Labels (managed-pages:entity:page:field:*)
22
+ "managed-pages:entity:page:field:slug": { en: "Slug" },
23
+ "managed-pages:entity:page:field:lang": { en: "Language" },
24
+ "managed-pages:entity:page:field:title": { en: "Title" },
25
+ "managed-pages:entity:page:field:published": { en: "Published" },
26
+ "managed-pages:entity:page:field:published:option:true": {
27
+ en: "Published",
28
+ },
29
+ "managed-pages:entity:page:field:published:option:false": { en: "Draft" },
30
+ "managed-pages:entity:page:field:description": { en: "Description" },
31
+ "managed-pages:entity:page:field:ogImage": { en: "OG image" },
32
+ "managed-pages:entity:page:field:body": { en: "Content" },
33
+
34
+ // Config-Edit Feld-Labels (managed-pages:entity:__config-edit__:field:*, camelCase Form-Keys)
35
+ "managed-pages:entity:__config-edit__:field:title": { en: "Site title" },
36
+ "managed-pages:entity:__config-edit__:field:description": {
37
+ en: "Description",
38
+ },
39
+ "managed-pages:entity:__config-edit__:field:siteUrl": { en: "Site URL" },
40
+ "managed-pages:entity:__config-edit__:field:accentColor": {
41
+ en: "Accent color",
42
+ },
43
+ "managed-pages:entity:__config-edit__:field:logoUrl": { en: "Logo URL" },
44
+ "managed-pages:entity:__config-edit__:field:logoFile": { en: "Logo file" },
45
+ "managed-pages:entity:__config-edit__:field:layoutPreset": { en: "Layout" },
46
+
47
+ // Section-Header
48
+ "managed-pages:section.meta": { en: "Metadata" },
49
+ "managed-pages:section.body": { en: "Content" },
50
+ "managed-pages:branding.section.identity": { en: "Identity" },
51
+
52
+ // Row-Actions + Confirm (pageListScreen)
53
+ "managed-pages:actions.edit": { en: "Edit" },
54
+ "managed-pages:actions.delete": { en: "Delete" },
55
+ "managed-pages:confirms.page-delete": {
56
+ en: "Delete this page?",
57
+ },
58
+
59
+ // Nur bei allowCustomCss:true im Screen — unconditional geliefert
60
+ "managed-pages:entity:__config-edit__:field:customCss": { en: "Custom CSS" },
61
+ "managed-pages:branding.section.custom-css": { en: "Custom CSS" },
62
+ };
@@ -1,3 +1,2 @@
1
- // @runtime client
2
1
  export { type ManagedPagesClientOptions, managedPagesClient } from "./client-plugin.tsx";
3
- export { defaultTranslations } from "./i18n.ts";
2
+ export { defaultTranslations } from "./default-translations.ts";
@@ -6,7 +6,6 @@ import type {
6
6
  } from "@cosmicdrift/kumiko-types/aggregate-types";
7
7
  import type { Temporal } from "@cosmicdrift/kumiko-types/temporal";
8
8
  import type { TenantDb } from "@cosmicdrift/kumiko-types/tenant-db-types";
9
- import { MAX_GROUP_ROWS, type MetricRange } from "./constants.ts";
10
9
  import type {
11
10
  MetricDefinition,
12
11
  MetricDeltaDirection,
@@ -16,6 +15,7 @@ import type {
16
15
  MetricSegment,
17
16
  MetricSeries,
18
17
  } from "./types.ts";
18
+ import { MAX_GROUP_ROWS, type MetricRange } from "./web/constants.ts";
19
19
  import { bucketStartsMs, computeWindow, resolveBucket } from "./window.ts";
20
20
 
21
21
  export type MetricRunParams = {
@@ -9,12 +9,6 @@ import { InternalError, ValidationError } from "@cosmicdrift/kumiko-framework/er
9
9
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
10
10
  import * as z from "zod";
11
11
  import { runMetric } from "./compute.ts";
12
- import {
13
- METRIC_RANGES,
14
- METRICS_FEATURE,
15
- METRICS_SYSTEM_FEATURE,
16
- type MetricScope,
17
- } from "./constants.ts";
18
12
  import {
19
13
  metricFilterPayloadShape,
20
14
  metricFilterWhere,
@@ -23,6 +17,12 @@ import {
23
17
  import { METRICS_I18N } from "./i18n.ts";
24
18
  import type { MetricDefinition, MetricsFeatureOptions } from "./types.ts";
25
19
  import { metricHasTenantColumn, validateMetrics } from "./validate.ts";
20
+ import {
21
+ METRIC_RANGES,
22
+ METRICS_FEATURE,
23
+ METRICS_SYSTEM_FEATURE,
24
+ type MetricScope,
25
+ } from "./web/constants.ts";
26
26
  import { isValidTimeZone } from "./window.ts";
27
27
 
28
28
  const DEFAULT_RANGE = "7d";
@@ -1,13 +1,5 @@
1
1
  // Public API of the metrics bundled-feature.
2
2
 
3
- export {
4
- METRIC_RANGES,
5
- METRICS_FEATURE,
6
- METRICS_SYSTEM_FEATURE,
7
- type MetricRange,
8
- type MetricScope,
9
- metricQueryName,
10
- } from "./constants.ts";
11
3
  export {
12
4
  activeTenantsMetric,
13
5
  activeUsersMetric,
@@ -32,3 +24,11 @@ export {
32
24
  type MetricSeries,
33
25
  type MetricsFeatureOptions,
34
26
  } from "./types.ts";
27
+ export {
28
+ METRIC_RANGES,
29
+ METRICS_FEATURE,
30
+ METRICS_SYSTEM_FEATURE,
31
+ type MetricRange,
32
+ type MetricScope,
33
+ metricQueryName,
34
+ } from "./web/constants.ts";
@@ -7,7 +7,7 @@ import type {
7
7
  import type { SchemaTable } from "@cosmicdrift/kumiko-types/schema-table-types";
8
8
  import type { Temporal } from "@cosmicdrift/kumiko-types/temporal";
9
9
  import type { WhereObject } from "@cosmicdrift/kumiko-types/where-clause-types";
10
- import type { MetricRange, MetricScope } from "./constants.ts";
10
+ import type { MetricRange, MetricScope } from "./web/constants.ts";
11
11
 
12
12
  /** Maps a payload value (e.g. a folder id) to the values `column` may have (e.g. the folder and its subfolders' loan ids). Runs with the tenant handler context, so reads stay tenant-scoped; the result only narrows. An empty result yields no rows. */
13
13
  export type MetricFilterResolver = {
@@ -1,7 +1,7 @@
1
1
  import { extractTableInfo, isTimestamptzType } from "@cosmicdrift/kumiko-framework/db";
2
- import { METRIC_RANGES } from "./constants.ts";
3
2
  import { filterValueKindOf, metricFilterEntries, RESERVED_PAYLOAD_KEYS } from "./filters.ts";
4
3
  import type { MetricDefinition } from "./types.ts";
4
+ import { METRIC_RANGES } from "./web/constants.ts";
5
5
 
6
6
  const KEBAB_ID = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;
7
7
  const FILTER_PAYLOAD_KEY = /^[a-z][a-zA-Z0-9]*$/;
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Pure constants — imported by server (feature.ts) and by panel declarations,
3
2
  // so no runtime import from the engine barrel here.
4
3
 
@@ -1,7 +1,7 @@
1
1
  import type { AggregateTimeBucket } from "@cosmicdrift/kumiko-types/aggregate-types";
2
2
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
3
- import type { MetricRange } from "./constants.ts";
4
3
  import type { MetricDefinition } from "./types.ts";
4
+ import type { MetricRange } from "./web/constants.ts";
5
5
 
6
6
  export type MetricWindow = {
7
7
  readonly start: Temporal.Instant;
@@ -21,11 +21,11 @@ import {
21
21
  type FeatureRegistrar,
22
22
  } from "@cosmicdrift/kumiko-framework/engine";
23
23
  import { assertNoWhereRuleInOwnershipWrite } from "../shared/index.ts";
24
- import { DEFAULT_NOTES_HISTORY_ACCESS, NOTES_HISTORY_FEATURE_NAME } from "./constants.ts";
25
24
  import { createNoteEntryEntity, noteMentionEntity } from "./entity.ts";
26
25
  import { createNoteEntryExecutor } from "./executor.ts";
27
26
  import { createAddNoteHandler } from "./handlers/add-note.write.ts";
28
27
  import { NOTES_HISTORY_FEATURE_I18N } from "./i18n.ts";
28
+ import { DEFAULT_NOTES_HISTORY_ACCESS, NOTES_HISTORY_FEATURE_NAME } from "./web/constants.ts";
29
29
 
30
30
  function registerNotesHistory(
31
31
  r: FeatureRegistrar<typeof NOTES_HISTORY_FEATURE_NAME>,
@@ -4,9 +4,9 @@ import { ValidationError, writeFailure } from "@cosmicdrift/kumiko-framework/err
4
4
  import { decryptStoredPii, denyUnlessJoinRowParentVisible } from "../../shared/index.ts";
5
5
  import { tenantMembershipsTable } from "../../tenant/index.ts";
6
6
  import { userTable } from "../../user/index.ts";
7
- import { DEFAULT_NOTES_HISTORY_ACCESS } from "../constants.ts";
8
7
  import { noteEntryExecutor, noteMentionExecutor } from "../executor.ts";
9
8
  import { type AddNotePayload, addNotePayloadSchema } from "../schemas.ts";
9
+ import { DEFAULT_NOTES_HISTORY_ACCESS } from "../web/constants.ts";
10
10
 
11
11
  const READ_AUTHOR_DISPLAY_NAME_REASON =
12
12
  "reads the author's displayName from the global users table inside a savepoint so a missing user feature cannot poison the note transaction";
@@ -1,11 +1,3 @@
1
- export {
2
- DEFAULT_NOTES_HISTORY_ACCESS,
3
- DEFAULT_NOTES_HISTORY_ROLES,
4
- NOTES_HISTORY_FEATURE_NAME,
5
- NOTES_SECTION_EXTENSION_NAME,
6
- NotesHistoryHandlers,
7
- NotesHistoryQueries,
8
- } from "./constants.ts";
9
1
  export { noteEntryEntity, noteMentionEntity } from "./entity.ts";
10
2
  export {
11
3
  noteEntryExecutor,
@@ -22,3 +14,11 @@ export {
22
14
  createAddNoteHandler,
23
15
  } from "./handlers/add-note.write.ts";
24
16
  export { type AddNotePayload, addNotePayloadSchema } from "./schemas.ts";
17
+ export {
18
+ DEFAULT_NOTES_HISTORY_ACCESS,
19
+ DEFAULT_NOTES_HISTORY_ROLES,
20
+ NOTES_HISTORY_FEATURE_NAME,
21
+ NOTES_SECTION_EXTENSION_NAME,
22
+ NotesHistoryHandlers,
23
+ NotesHistoryQueries,
24
+ } from "./web/constants.ts";
@@ -1,7 +1,5 @@
1
- // @runtime client
2
-
3
1
  import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer/web";
4
- import { NOTES_HISTORY_FEATURE_NAME, NOTES_SECTION_EXTENSION_NAME } from "../constants.ts";
2
+ import { NOTES_HISTORY_FEATURE_NAME, NOTES_SECTION_EXTENSION_NAME } from "./constants.ts";
5
3
  import { defaultTranslations } from "./i18n.ts";
6
4
  import { NotesSection } from "./notes-section.tsx";
7
5
 
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // notes-history bundle constants — feature-name + qualified handler/query names.
3
2
  //
4
3
  // Spec: kumiko-platform/docs/plans/notes-history-bundle.md
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // Default translation bundle for the notes-history UI. notesHistoryClient()
3
2
  // hangs it into the LocaleProvider as a fallback bundle — apps override
4
3
  // individual keys via notesHistoryClient({ translations }).
@@ -1,8 +1,7 @@
1
- // @runtime client
1
+ export { notesHistoryClient } from "./client-plugin.tsx";
2
2
  export {
3
3
  NOTES_SECTION_EXTENSION_NAME,
4
4
  NotesHistoryHandlers,
5
5
  NotesHistoryQueries,
6
- } from "../constants.ts";
7
- export { notesHistoryClient } from "./client-plugin.tsx";
6
+ } from "./constants.ts";
8
7
  export { NotesSection } from "./notes-section.tsx";
@@ -1,4 +1,3 @@
1
- // @runtime client
2
1
  // NotesSection — drop-in note history for ANY entity. Shows every note
3
2
  // chronologically (newest first) with author + timestamp, plus a textarea to
4
3
  // append a new one. Append-only: there is no edit/delete affordance because
@@ -19,7 +18,7 @@ import {
19
18
  useTranslation,
20
19
  } from "@cosmicdrift/kumiko-renderer";
21
20
  import { type ReactNode, useState } from "react";
22
- import { NotesHistoryHandlers, NotesHistoryQueries } from "../constants.ts";
21
+ import { NotesHistoryHandlers, NotesHistoryQueries } from "./constants.ts";
23
22
 
24
23
  type NoteRow = {
25
24
  readonly id: string;
@@ -33,7 +32,7 @@ type NoteRow = {
33
32
  };
34
33
 
35
34
  // Matches @cosmicdrift/kumiko-framework/crypto PII_ERASED_SENTINEL — cannot
36
- // import that module from @runtime client (runtime-isolation).
35
+ // import that module from client code (runtime-isolation).
37
36
  const PII_ERASED_SENTINEL = "[[erased]]";
38
37
 
39
38
  function displayAuthorName(authorName: string | null, unknownLabel: string): string {
@@ -9,12 +9,6 @@ import {
9
9
  type FeatureDefinition,
10
10
  type ProjectionListScreenDefinition,
11
11
  } from "@cosmicdrift/kumiko-framework/engine";
12
- import {
13
- API_TOKEN_ENTITY_NAME,
14
- PAT_DEFAULT_RATE_LIMIT,
15
- PAT_FEATURE,
16
- type PatRateLimit,
17
- } from "./constants.ts";
18
12
  import { availabilityQuery } from "./handlers/availability.query.ts";
19
13
  import { buildAvailableScopesQuery } from "./handlers/available-scopes.query.ts";
20
14
  import { type CreatePatOptions, createPatCreateHandler } from "./handlers/create.write.ts";
@@ -24,8 +18,14 @@ import { PAT_FEATURE_I18N, patScopeOptionTranslations } from "./i18n.ts";
24
18
  import { PAT_REVOKED_EVENT_SHORT, patRevokedSchema } from "./pat-revoked-event.ts";
25
19
  import { createPatResolver } from "./resolver.ts";
26
20
  import { apiTokenEntity } from "./schema/api-token.ts";
27
- import type { PatScopeConfig } from "./scopes.ts";
28
21
  import { createPatMintScreen, patListScreen } from "./screens.ts";
22
+ import {
23
+ API_TOKEN_ENTITY_NAME,
24
+ PAT_DEFAULT_RATE_LIMIT,
25
+ PAT_FEATURE,
26
+ type PatRateLimit,
27
+ } from "./web/constants.ts";
28
+ import type { PatScopeConfig } from "./web/scopes.ts";
29
29
 
30
30
  // Password-change is the only field-level trigger — see the postSave hook
31
31
  // below. MFA-enable/disable is wired separately (auth-mfa's
@@ -148,11 +148,14 @@ export function createPersonalAccessTokensFeature(
148
148
  // is r.systemScope()'d (the user aggregate is a systemStream, framework
149
149
  // #497), so a postSave hook on "user" gets a poisoned ctx.db here. The
150
150
  // concrete revoker is bound once run{Prod,Dev}App has a real db handle.
151
- let autoRevokeOnPasswordChange = options.autoRevokeOnPasswordChange;
151
+ // Explicit option wins; the runtime binding is replaceable so a second boot of the same
152
+ // feature instance binds its own database.
153
+ let boundAutoRevoke: ((userId: string) => Promise<number>) | undefined;
152
154
  r.hook({
153
155
  type: "postSave",
154
156
  target: { allOf: "user" },
155
157
  handler: async (result) => {
158
+ const autoRevokeOnPasswordChange = options.autoRevokeOnPasswordChange ?? boundAutoRevoke;
156
159
  // skip: nothing bound — same late-bind pattern as sessions/feature.ts
157
160
  if (!autoRevokeOnPasswordChange) return;
158
161
  // skip: brand-new user, no PATs can exist yet
@@ -165,8 +168,7 @@ export function createPersonalAccessTokensFeature(
165
168
  },
166
169
  });
167
170
  const bindAutoRevokeOnPasswordChange: BindPatAutoRevokeOnPasswordChange = (revoker) => {
168
- // explicit constructor option wins over the runtime binding
169
- autoRevokeOnPasswordChange ??= revoker;
171
+ boundAutoRevoke = revoker;
170
172
  };
171
173
 
172
174
  const handlers = {
@@ -1,6 +1,6 @@
1
1
  import { defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import * as z from "zod";
3
- import type { PatScopeConfig } from "../scopes.ts";
3
+ import type { PatScopeConfig } from "../web/scopes.ts";
4
4
 
5
5
  // Returns the app-declared scope domains ({name, label, canWrite}) so the mint
6
6
  // UI can render a per-domain level picker (no access / read / read & write).
@@ -11,9 +11,9 @@ import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
11
11
  import * as z from "zod";
12
12
  import { encryptForDirectWrite, verifyPassword } from "../../shared/index.ts";
13
13
  import { UserQueries } from "../../user/index.ts";
14
- import { API_TOKEN_ENTITY_NAME, PAT_DEFAULT_EXPIRES_IN_DAYS, PatErrors } from "../constants.ts";
15
14
  import { mintPatToken } from "../hash.ts";
16
15
  import { apiTokenEntity, apiTokenTable } from "../schema/api-token.ts";
16
+ import { API_TOKEN_ENTITY_NAME, PAT_DEFAULT_EXPIRES_IN_DAYS, PatErrors } from "../web/constants.ts";
17
17
 
18
18
  export type PatMfaVerifyResult = { readonly enrolled: boolean; readonly ok: boolean };
19
19
 
@@ -4,9 +4,9 @@ import { UnprocessableError, writeFailure } from "@cosmicdrift/kumiko-framework/
4
4
  import { generateId } from "@cosmicdrift/kumiko-framework/utils";
5
5
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
6
6
  import * as z from "zod";
7
- import { API_TOKEN_ENTITY_NAME, PatErrors } from "../constants.ts";
8
7
  import { PAT_REVOKED_AGGREGATE_TYPE, PAT_REVOKED_EVENT_QN } from "../pat-revoked-event.ts";
9
8
  import { apiTokenTable } from "../schema/api-token.ts";
9
+ import { API_TOKEN_ENTITY_NAME, PatErrors } from "../web/constants.ts";
10
10
 
11
11
  // Revoke one of the caller's own tokens. Ownership is enforced in the WHERE
12
12
  // (userId = caller), so a caller can't revoke another user's token and a miss
@@ -1,6 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { generateToken, PAT_TOKEN_PREFIX } from "@cosmicdrift/kumiko-framework/api";
3
- import { PAT_PREFIX_DISPLAY_LENGTH } from "./constants.ts";
3
+ import { PAT_PREFIX_DISPLAY_LENGTH } from "./web/constants.ts";
4
4
 
5
5
  // A PAT is high-entropy (32 random bytes from generateToken). A single SHA-256
6
6
  // is the right hash here: fast on the per-request auth path, and there's no
@@ -1,7 +1,7 @@
1
1
  import { ACTION_FORM_ENTITY } from "@cosmicdrift/kumiko-framework/ui-types";
2
2
  import { fieldLabelKey, fieldOptionLabelKey } from "@cosmicdrift/kumiko-renderer/headless";
3
- import { PAT_FEATURE } from "./constants.ts";
4
- import type { PatScopeConfig } from "./scopes.ts";
3
+ import { PAT_FEATURE } from "./web/constants.ts";
4
+ import type { PatScopeConfig } from "./web/scopes.ts";
5
5
 
6
6
  const mintFieldKey = (field: string): string =>
7
7
  fieldLabelKey(PAT_FEATURE, ACTION_FORM_ENTITY, field);
@@ -1,8 +1,6 @@
1
1
  import type { FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { PAT_DEFAULT_RATE_LIMIT, type PatRateLimit } from "./constants.ts";
2
+ import { PAT_DEFAULT_RATE_LIMIT, type PatRateLimit } from "./web/constants.ts";
3
3
 
4
- export type { PatRateLimit } from "./constants.ts";
5
- export { PAT_DEFAULT_RATE_LIMIT, PAT_FEATURE, PatHandlers, PatQueries } from "./constants.ts";
6
4
  export type { BindPatAutoRevokeOnPasswordChange, PersonalAccessTokensOptions } from "./feature.ts";
7
5
  export {
8
6
  bindPatAutoRevokeOnPasswordChangeFromFeature,
@@ -20,8 +18,10 @@ export {
20
18
  export { createPatResolver } from "./resolver.ts";
21
19
  export { revokeAllPatTokensForUser } from "./revoke-for-user.ts";
22
20
  export { apiTokenEntity, apiTokenTable } from "./schema/api-token.ts";
23
- export type { PatScopeConfig, PatScopeDef } from "./scopes.ts";
24
- export { expandScopes } from "./scopes.ts";
21
+ export type { PatRateLimit } from "./web/constants.ts";
22
+ export { PAT_DEFAULT_RATE_LIMIT, PAT_FEATURE, PatHandlers, PatQueries } from "./web/constants.ts";
23
+ export type { PatScopeConfig, PatScopeDef } from "./web/scopes.ts";
24
+ export { expandScopes } from "./web/scopes.ts";
25
25
 
26
26
  // Reads the per-token rate-limit config off a mounted PAT feature's exports.
27
27
  // Falls back to the default when absent. run-prod-app uses this to build the