@cosmicdrift/kumiko-bundled-features 0.368.0 → 0.370.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. package/dist/account-security/constants.d.ts +4 -0
  2. package/dist/account-security/constants.js +5 -0
  3. package/dist/account-security/feature.d.ts +14 -0
  4. package/dist/account-security/feature.js +62 -0
  5. package/dist/account-security/i18n.d.ts +6 -0
  6. package/dist/account-security/i18n.js +6 -0
  7. package/dist/account-security/index.d.ts +3 -0
  8. package/dist/account-security/index.js +3 -0
  9. package/dist/admin-shell/feature.d.ts +1 -1
  10. package/dist/admin-shell/index.d.ts +4 -4
  11. package/dist/admin-shell/overview-panels.d.ts +1 -1
  12. package/dist/admin-shell/web/index.d.ts +1 -1
  13. package/dist/agent-tools/agent-manifest.d.ts +1 -1
  14. package/dist/agent-tools/index.d.ts +8 -8
  15. package/dist/agent-tools/manifest-deny-qns.d.ts +1 -1
  16. package/dist/agent-tools/tool-catalog.d.ts +1 -1
  17. package/dist/agent-tools/tool-dispatch.d.ts +1 -1
  18. package/dist/audit/handlers/resolve-audit-tenant.d.ts +1 -1
  19. package/dist/audit/index.d.ts +3 -3
  20. package/dist/audit/web/index.d.ts +1 -1
  21. package/dist/auth-email-password/bootstrap.d.ts +1 -1
  22. package/dist/auth-email-password/feature.d.ts +7 -6
  23. package/dist/auth-email-password/feature.js +3 -1
  24. package/dist/auth-email-password/handlers/confirm-token-flow.d.ts +1 -1
  25. package/dist/auth-email-password/handlers/invite-accept-with-login.write.d.ts +1 -1
  26. package/dist/auth-email-password/handlers/invite-create.write.d.ts +2 -2
  27. package/dist/auth-email-password/handlers/invite-signup-complete.write.d.ts +1 -1
  28. package/dist/auth-email-password/handlers/login.write.d.ts +1 -1
  29. package/dist/auth-email-password/handlers/request-account-unlock.write.d.ts +1 -1
  30. package/dist/auth-email-password/handlers/request-email-verification.write.d.ts +1 -1
  31. package/dist/auth-email-password/handlers/request-password-reset.write.d.ts +1 -1
  32. package/dist/auth-email-password/handlers/signup-confirm.write.d.ts +1 -1
  33. package/dist/auth-email-password/handlers/signup-request.write.d.ts +1 -1
  34. package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.d.ts +1 -1
  35. package/dist/auth-email-password/handlers/token-request-handler.d.ts +2 -2
  36. package/dist/auth-email-password/index.d.ts +13 -13
  37. package/dist/auth-email-password/lockout-store.d.ts +1 -1
  38. package/dist/auth-email-password/magic-link-mail.d.ts +1 -1
  39. package/dist/auth-email-password/seeding.d.ts +3 -3
  40. package/dist/auth-email-password/signed-token.d.ts +1 -1
  41. package/dist/auth-email-password/signup-token-store.d.ts +1 -1
  42. package/dist/auth-email-password/testing.d.ts +1 -1
  43. package/dist/auth-email-password/web/auth-gate.d.ts +1 -1
  44. package/dist/auth-email-password/web/client-plugin.d.ts +2 -2
  45. package/dist/auth-email-password/web/index.d.ts +42 -42
  46. package/dist/auth-email-password/web/session-bootstrap-error.d.ts +1 -1
  47. package/dist/auth-email-password/web/session.d.ts +1 -1
  48. package/dist/auth-email-password/web/signup-complete-screen.d.ts +1 -1
  49. package/dist/auth-foundation/feature.d.ts +2 -6
  50. package/dist/auth-foundation/feature.js +0 -2
  51. package/dist/auth-foundation/index.d.ts +3 -3
  52. package/dist/auth-foundation/index.js +1 -1
  53. package/dist/auth-foundation/resolve-anonymous-access.d.ts +1 -1
  54. package/dist/auth-mfa/env.d.ts +13 -0
  55. package/dist/auth-mfa/env.js +24 -0
  56. package/dist/auth-mfa/errors.d.ts +1 -1
  57. package/dist/auth-mfa/feature-exports.d.ts +12 -0
  58. package/dist/auth-mfa/feature-exports.js +72 -0
  59. package/dist/auth-mfa/feature.d.ts +6 -12
  60. package/dist/auth-mfa/feature.js +53 -70
  61. package/dist/auth-mfa/handlers/reencrypt.job.d.ts +1 -1
  62. package/dist/auth-mfa/index.d.ts +12 -9
  63. package/dist/auth-mfa/index.js +4 -2
  64. package/dist/auth-mfa/mfa-challenge-token.d.ts +1 -1
  65. package/dist/auth-mfa/mfa-preauth-setup-token.d.ts +1 -1
  66. package/dist/auth-mfa/mfa-status-checker.d.ts +1 -1
  67. package/dist/auth-mfa/mfa-verify-attempts.d.ts +1 -1
  68. package/dist/auth-mfa/testing.d.ts +1 -1
  69. package/dist/auth-mfa/token-secrets.d.ts +7 -0
  70. package/dist/auth-mfa/token-secrets.js +13 -0
  71. package/dist/auth-mfa/verify-factor.d.ts +1 -1
  72. package/dist/auth-mfa/web/index.d.ts +15 -15
  73. package/dist/auth-mfa/web/mfa-client.d.ts +1 -1
  74. package/dist/auth-mfa-user-data/index.d.ts +0 -4
  75. package/dist/auth-mfa-user-data/index.js +0 -2
  76. package/dist/billing-foundation/checkout-core.d.ts +2 -2
  77. package/dist/billing-foundation/consumer-protection/confirmation-mail.d.ts +2 -2
  78. package/dist/billing-foundation/consumer-protection/consent-gate.d.ts +1 -1
  79. package/dist/billing-foundation/consumer-protection/consent-text.d.ts +2 -2
  80. package/dist/billing-foundation/consumer-protection/issue-confirmation.d.ts +1 -1
  81. package/dist/billing-foundation/consumer-protection/register-consent.d.ts +1 -1
  82. package/dist/billing-foundation/consumer-protection/register-termination.d.ts +1 -1
  83. package/dist/billing-foundation/consumer-protection/termination-mail.d.ts +3 -3
  84. package/dist/billing-foundation/consumer-protection/termination-notify.d.ts +5 -5
  85. package/dist/billing-foundation/consumer-protection/termination-pages.d.ts +2 -2
  86. package/dist/billing-foundation/consumer-protection/termination-record.d.ts +3 -3
  87. package/dist/billing-foundation/consumer-protection/termination-request.d.ts +2 -2
  88. package/dist/billing-foundation/consumer-protection/termination-texts.d.ts +2 -2
  89. package/dist/billing-foundation/feature.d.ts +1 -3
  90. package/dist/billing-foundation/feature.js +0 -2
  91. package/dist/billing-foundation/handlers/billing-plans.query.d.ts +1 -1
  92. package/dist/billing-foundation/handlers/create-checkout-session.write.d.ts +1 -1
  93. package/dist/billing-foundation/handlers/create-portal-session.write.d.ts +1 -1
  94. package/dist/billing-foundation/handlers/start-plan-checkout.write.d.ts +1 -1
  95. package/dist/billing-foundation/handlers/switch-plan.write.d.ts +1 -1
  96. package/dist/billing-foundation/index.d.ts +16 -16
  97. package/dist/billing-foundation/index.js +1 -1
  98. package/dist/billing-foundation/plan-catalog.d.ts +1 -1
  99. package/dist/billing-foundation/subscription-tier-sync.d.ts +3 -1
  100. package/dist/billing-foundation/subscription-tier-sync.js +3 -2
  101. package/dist/billing-foundation/types.d.ts +3 -3
  102. package/dist/billing-foundation/validate-options.d.ts +1 -1
  103. package/dist/billing-foundation/web/checkout-consent-dialog.d.ts +1 -1
  104. package/dist/billing-foundation/web/index.d.ts +6 -6
  105. package/dist/cap-counter/calendar-cap-usage-reservation.d.ts +4 -4
  106. package/dist/cap-counter/cap-reservation.d.ts +1 -1
  107. package/dist/cap-counter/enforce-cap.d.ts +1 -1
  108. package/dist/cap-counter/feature.d.ts +0 -4
  109. package/dist/cap-counter/feature.js +0 -2
  110. package/dist/cap-counter/index.d.ts +13 -13
  111. package/dist/cap-counter/index.js +1 -1
  112. package/dist/cap-counter/value-cap-guard.d.ts +1 -1
  113. package/dist/cap-counter/with-cap-enforcement.d.ts +1 -1
  114. package/dist/cap-overview/feature.d.ts +1 -1
  115. package/dist/cap-overview/handlers/caps-usage.query.d.ts +1 -1
  116. package/dist/cap-overview/handlers/tenant-caps-list.query.d.ts +1 -1
  117. package/dist/cap-overview/index.d.ts +6 -6
  118. package/dist/cap-overview/screens.d.ts +1 -1
  119. package/dist/cap-overview/types.d.ts +1 -1
  120. package/dist/cap-overview/usage-math.d.ts +1 -1
  121. package/dist/cap-overview/web/cap-usage-bar.d.ts +1 -1
  122. package/dist/cap-overview/web/index.d.ts +4 -4
  123. package/dist/channel-discord/discord-channel.d.ts +1 -1
  124. package/dist/channel-discord/feature.d.ts +1 -1
  125. package/dist/channel-discord/index.d.ts +2 -2
  126. package/dist/channel-email/email-channel.d.ts +15 -7
  127. package/dist/channel-email/email-channel.js +17 -3
  128. package/dist/channel-email/env.d.ts +14 -0
  129. package/dist/channel-email/env.js +27 -0
  130. package/dist/channel-email/feature.d.ts +14 -3
  131. package/dist/channel-email/feature.js +6 -2
  132. package/dist/channel-email/index.d.ts +6 -5
  133. package/dist/channel-email/index.js +2 -1
  134. package/dist/channel-email/pii-guard.d.ts +1 -1
  135. package/dist/channel-email/smtp-transport.d.ts +1 -1
  136. package/dist/channel-email/types.d.ts +1 -1
  137. package/dist/channel-in-app/in-app-channel.d.ts +1 -1
  138. package/dist/channel-in-app/index.d.ts +4 -4
  139. package/dist/channel-push/feature.d.ts +1 -1
  140. package/dist/channel-push/index.d.ts +3 -3
  141. package/dist/channel-push/push-channel.d.ts +2 -2
  142. package/dist/channel-slack/feature.d.ts +1 -1
  143. package/dist/channel-slack/index.d.ts +2 -2
  144. package/dist/channel-slack/slack-channel.d.ts +1 -1
  145. package/dist/channel-teams/feature.d.ts +1 -1
  146. package/dist/channel-teams/index.d.ts +2 -2
  147. package/dist/channel-teams/teams-channel.d.ts +1 -1
  148. package/dist/channel-telegram/feature.d.ts +1 -1
  149. package/dist/channel-telegram/index.d.ts +2 -2
  150. package/dist/channel-telegram/telegram-channel.d.ts +1 -1
  151. package/dist/compliance-profiles/feature.d.ts +1 -1
  152. package/dist/compliance-profiles/index.d.ts +3 -3
  153. package/dist/compliance-profiles/web/index.d.ts +2 -2
  154. package/dist/compliance-profiles-ops/index.d.ts +0 -8
  155. package/dist/compliance-profiles-ops/index.js +0 -2
  156. package/dist/config/feature.d.ts +1 -1
  157. package/dist/config/handlers/reencrypt.job.d.ts +1 -1
  158. package/dist/config/index.d.ts +8 -8
  159. package/dist/config/web/client-plugin.d.ts +1 -1
  160. package/dist/config/web/i18n.js +1 -2
  161. package/dist/config/web/index.d.ts +2 -2
  162. package/dist/crypto-shredding/env/index.d.ts +21 -0
  163. package/dist/crypto-shredding/env/index.js +78 -0
  164. package/dist/crypto-shredding/feature.d.ts +17 -2
  165. package/dist/crypto-shredding/feature.js +5 -1
  166. package/dist/crypto-shredding/index.d.ts +4 -3
  167. package/dist/crypto-shredding/index.js +1 -0
  168. package/dist/custom-fields/feature.d.ts +0 -17
  169. package/dist/custom-fields/feature.js +0 -2
  170. package/dist/custom-fields/index.d.ts +10 -10
  171. package/dist/custom-fields/index.js +1 -1
  172. package/dist/custom-fields/lib/define-or-resurrect.d.ts +2 -2
  173. package/dist/custom-fields/lib/field-access.d.ts +1 -1
  174. package/dist/custom-fields/lib/field-definition-row.d.ts +1 -1
  175. package/dist/custom-fields/lib/quota.d.ts +1 -1
  176. package/dist/custom-fields/web/index.d.ts +3 -3
  177. package/dist/data-retention/_internal/parse-override.d.ts +1 -1
  178. package/dist/data-retention/feature.d.ts +7 -7
  179. package/dist/data-retention/handlers/policy-for.query.d.ts +1 -1
  180. package/dist/data-retention/index.d.ts +3 -3
  181. package/dist/data-retention/resolve-for-tenant.d.ts +2 -2
  182. package/dist/data-retention/resolve-tenant-preset.d.ts +1 -1
  183. package/dist/data-retention/resolver.d.ts +1 -1
  184. package/dist/data-retention/run-retention-cleanup.d.ts +2 -2
  185. package/dist/delivery/attachment-ref.d.ts +1 -1
  186. package/dist/delivery/attempt-log.d.ts +1 -1
  187. package/dist/delivery/channel-context.d.ts +2 -2
  188. package/dist/delivery/chat-webhook-channel.d.ts +2 -2
  189. package/dist/delivery/constants.d.ts +1 -1
  190. package/dist/delivery/delivery-service.d.ts +2 -2
  191. package/dist/delivery/feature.js +3 -1
  192. package/dist/delivery/handlers/log.query.d.ts +1 -1
  193. package/dist/delivery/handlers/unsubscribe-page-chrome.query.d.ts +5 -0
  194. package/dist/delivery/handlers/unsubscribe-page-chrome.query.js +44 -0
  195. package/dist/delivery/index.d.ts +20 -19
  196. package/dist/delivery/index.js +3 -2
  197. package/dist/delivery/notify-factory.d.ts +1 -1
  198. package/dist/delivery/public-names.d.ts +1 -0
  199. package/dist/delivery/public-names.js +1 -0
  200. package/dist/delivery/testing.d.ts +3 -3
  201. package/dist/delivery/types.d.ts +3 -3
  202. package/dist/delivery/unsubscribe-link.d.ts +1 -1
  203. package/dist/delivery/unsubscribe-page-strings.d.ts +4 -0
  204. package/dist/delivery/unsubscribe-page-strings.js +4 -0
  205. package/dist/delivery/unsubscribe-page.d.ts +27 -0
  206. package/dist/delivery/unsubscribe-page.js +192 -0
  207. package/dist/delivery/unsubscribe.d.ts +22 -1
  208. package/dist/delivery/unsubscribe.js +152 -65
  209. package/dist/delivery/web/index.d.ts +2 -2
  210. package/dist/derivatives-sharp/feature.d.ts +0 -4
  211. package/dist/derivatives-sharp/feature.js +0 -2
  212. package/dist/derivatives-sharp/index.d.ts +2 -2
  213. package/dist/derivatives-sharp/index.js +1 -1
  214. package/dist/document-ingest-foundation/feature.d.ts +0 -7
  215. package/dist/document-ingest-foundation/feature.js +0 -2
  216. package/dist/document-ingest-foundation/index.d.ts +7 -7
  217. package/dist/document-ingest-foundation/index.js +1 -1
  218. package/dist/document-ingest-foundation/pages.d.ts +1 -1
  219. package/dist/document-ingest-foundation/providers.d.ts +1 -1
  220. package/dist/document-ingest-foundation/write-document-extract.d.ts +1 -1
  221. package/dist/feature-toggles/compose-tier-resolver.d.ts +1 -1
  222. package/dist/feature-toggles/feature.d.ts +5 -5
  223. package/dist/feature-toggles/handlers/set.write.d.ts +1 -1
  224. package/dist/feature-toggles/index.d.ts +3 -3
  225. package/dist/feature-toggles/toggle-sync-signal.d.ts +1 -1
  226. package/dist/feature-toggles/web/index.d.ts +1 -1
  227. package/dist/file-derivatives/feature.d.ts +0 -2
  228. package/dist/file-derivatives/feature.js +0 -2
  229. package/dist/file-derivatives/index.d.ts +4 -4
  230. package/dist/file-derivatives/index.js +1 -1
  231. package/dist/file-foundation/feature.d.ts +0 -6
  232. package/dist/file-foundation/feature.js +0 -2
  233. package/dist/file-foundation/index.d.ts +2 -2
  234. package/dist/file-foundation/index.js +1 -1
  235. package/dist/file-provider-inmemory/feature.d.ts +0 -4
  236. package/dist/file-provider-inmemory/feature.js +0 -2
  237. package/dist/file-provider-inmemory/index.d.ts +1 -1
  238. package/dist/file-provider-inmemory/index.js +1 -1
  239. package/dist/file-provider-s3/env-feature.d.ts +12 -2
  240. package/dist/file-provider-s3/env-feature.js +9 -6
  241. package/dist/file-provider-s3/env-schema.d.ts +38 -0
  242. package/dist/file-provider-s3/env-schema.js +51 -0
  243. package/dist/file-provider-s3/feature.d.ts +1 -14
  244. package/dist/file-provider-s3/feature.js +0 -2
  245. package/dist/file-provider-s3/index.d.ts +2 -1
  246. package/dist/file-provider-s3/index.js +2 -1
  247. package/dist/file-provider-s3/lib/env-helper.d.ts +1 -1
  248. package/dist/file-provider-s3/lib/index.d.ts +3 -3
  249. package/dist/files/index.d.ts +1 -1
  250. package/dist/files-tenant-data/index.d.ts +2 -2
  251. package/dist/folders/feature.d.ts +0 -4
  252. package/dist/folders/feature.js +0 -2
  253. package/dist/folders/index.d.ts +7 -7
  254. package/dist/folders/index.js +1 -1
  255. package/dist/folders/web/folder-manager.d.ts +1 -1
  256. package/dist/folders/web/index.d.ts +5 -5
  257. package/dist/folders-user-data/index.d.ts +0 -4
  258. package/dist/folders-user-data/index.js +0 -2
  259. package/dist/form-draft/db/queries/cleanup.d.ts +1 -1
  260. package/dist/form-draft/feature.d.ts +0 -4
  261. package/dist/form-draft/feature.js +0 -2
  262. package/dist/form-draft/handlers/cleanup.job.d.ts +1 -1
  263. package/dist/form-draft/handlers/get.query.d.ts +1 -1
  264. package/dist/form-draft/index.d.ts +10 -10
  265. package/dist/form-draft/index.js +1 -1
  266. package/dist/form-draft/lookup.d.ts +1 -1
  267. package/dist/form-draft/release-file-refs.d.ts +1 -1
  268. package/dist/form-draft-user-data/index.d.ts +0 -4
  269. package/dist/form-draft-user-data/index.js +0 -2
  270. package/dist/foundation-shared/build-info-env.d.ts +7 -0
  271. package/dist/foundation-shared/build-info-env.js +15 -0
  272. package/dist/foundation-shared/demo-admin-env.d.ts +12 -0
  273. package/dist/foundation-shared/demo-admin-env.js +21 -0
  274. package/dist/foundation-shared/index.d.ts +5 -3
  275. package/dist/foundation-shared/index.js +2 -0
  276. package/dist/host-routing/constants.d.ts +8 -0
  277. package/dist/host-routing/constants.js +19 -0
  278. package/dist/host-routing/dispatch.d.ts +24 -0
  279. package/dist/host-routing/dispatch.js +102 -0
  280. package/dist/host-routing/feature.d.ts +3 -0
  281. package/dist/host-routing/feature.js +102 -0
  282. package/dist/host-routing/host.d.ts +14 -0
  283. package/dist/host-routing/host.js +37 -0
  284. package/dist/host-routing/index.d.ts +5 -0
  285. package/dist/host-routing/index.js +4 -0
  286. package/dist/host-routing/options.d.ts +27 -0
  287. package/dist/host-routing/options.js +1 -0
  288. package/dist/host-routing/validate-options.d.ts +2 -0
  289. package/dist/host-routing/validate-options.js +29 -0
  290. package/dist/inbound-mail-foundation/connect-routes.d.ts +2 -2
  291. package/dist/inbound-mail-foundation/feature.d.ts +0 -4
  292. package/dist/inbound-mail-foundation/feature.js +0 -2
  293. package/dist/inbound-mail-foundation/handlers/account-state.d.ts +1 -1
  294. package/dist/inbound-mail-foundation/index.d.ts +12 -12
  295. package/dist/inbound-mail-foundation/index.js +1 -1
  296. package/dist/inbound-mail-foundation/oauth-access-token.d.ts +1 -1
  297. package/dist/inbound-mail-foundation/provider-factory.d.ts +1 -1
  298. package/dist/inbound-mail-foundation/types.d.ts +1 -1
  299. package/dist/inbound-mail-foundation/watch-supervisor.d.ts +2 -2
  300. package/dist/inbound-provider-imap/feature.d.ts +1 -5
  301. package/dist/inbound-provider-imap/feature.js +0 -2
  302. package/dist/inbound-provider-imap/imap-client.d.ts +1 -1
  303. package/dist/inbound-provider-imap/index.d.ts +3 -3
  304. package/dist/inbound-provider-imap/index.js +1 -1
  305. package/dist/inbound-provider-inmemory/feature.d.ts +0 -4
  306. package/dist/inbound-provider-inmemory/feature.js +0 -2
  307. package/dist/inbound-provider-inmemory/index.d.ts +1 -1
  308. package/dist/inbound-provider-inmemory/index.js +1 -1
  309. package/dist/jobs/handlers/tenant-runs.query.d.ts +1 -1
  310. package/dist/jobs/index.d.ts +9 -9
  311. package/dist/jobs/web/index.d.ts +1 -1
  312. package/dist/ledger/feature.d.ts +0 -4
  313. package/dist/ledger/feature.js +0 -2
  314. package/dist/ledger/index.d.ts +10 -10
  315. package/dist/ledger/index.js +1 -1
  316. package/dist/ledger/recurring.d.ts +2 -2
  317. package/dist/ledger/reports.d.ts +2 -2
  318. package/dist/ledger/web/index.d.ts +3 -3
  319. package/dist/legal-pages/constants.d.ts +12 -0
  320. package/dist/legal-pages/constants.js +16 -0
  321. package/dist/legal-pages/feature.d.ts +6 -3
  322. package/dist/legal-pages/feature.js +5 -2
  323. package/dist/legal-pages/index.d.ts +5 -3
  324. package/dist/legal-pages/index.js +3 -1
  325. package/dist/legal-pages/layout.d.ts +10 -0
  326. package/dist/legal-pages/layout.js +32 -0
  327. package/dist/legal-pages/lib/boot-check.d.ts +1 -1
  328. package/dist/legal-pages/lib/validate-routes.d.ts +1 -1
  329. package/dist/legal-pages/markdown.d.ts +2 -2
  330. package/dist/legal-pages/seed.d.ts +12 -0
  331. package/dist/legal-pages/seed.js +38 -0
  332. package/dist/legal-pages/web/index.d.ts +1 -1
  333. package/dist/mail-foundation/feature.d.ts +4 -7
  334. package/dist/mail-foundation/feature.js +16 -14
  335. package/dist/mail-foundation/i18n.d.ts +14 -0
  336. package/dist/mail-foundation/i18n.js +8 -0
  337. package/dist/mail-foundation/index.d.ts +1 -1
  338. package/dist/mail-foundation/index.js +1 -1
  339. package/dist/mail-transport-inmemory/feature.d.ts +0 -4
  340. package/dist/mail-transport-inmemory/feature.js +6 -2
  341. package/dist/mail-transport-inmemory/index.d.ts +1 -1
  342. package/dist/mail-transport-inmemory/index.js +1 -1
  343. package/dist/mail-transport-smtp/config-keys.d.ts +7 -0
  344. package/dist/mail-transport-smtp/config-keys.js +65 -0
  345. package/dist/mail-transport-smtp/feature.d.ts +0 -16
  346. package/dist/mail-transport-smtp/feature.js +5 -35
  347. package/dist/mail-transport-smtp/i18n.d.ts +41 -0
  348. package/dist/mail-transport-smtp/i18n.js +28 -0
  349. package/dist/mail-transport-smtp/index.d.ts +1 -1
  350. package/dist/mail-transport-smtp/index.js +1 -1
  351. package/dist/managed-pages/branding.d.ts +1 -1
  352. package/dist/managed-pages/feature.d.ts +1 -1
  353. package/dist/managed-pages/handlers/branding.query.d.ts +1 -1
  354. package/dist/managed-pages/index.d.ts +5 -5
  355. package/dist/managed-pages/web/index.d.ts +2 -2
  356. package/dist/metrics/compute.d.ts +2 -2
  357. package/dist/metrics/default-metrics.d.ts +9 -9
  358. package/dist/metrics/feature.d.ts +1 -1
  359. package/dist/metrics/filters.d.ts +1 -1
  360. package/dist/metrics/index.d.ts +5 -5
  361. package/dist/metrics/types.d.ts +1 -1
  362. package/dist/metrics/validate.d.ts +1 -1
  363. package/dist/metrics/window.d.ts +2 -2
  364. package/dist/notes-history/feature.d.ts +0 -4
  365. package/dist/notes-history/feature.js +0 -2
  366. package/dist/notes-history/handlers/add-note.write.d.ts +1 -1
  367. package/dist/notes-history/index.d.ts +6 -6
  368. package/dist/notes-history/index.js +1 -1
  369. package/dist/notes-history/web/index.d.ts +3 -3
  370. package/dist/notes-history-user-data/index.d.ts +1 -5
  371. package/dist/notes-history-user-data/index.js +0 -2
  372. package/dist/page-render/index.d.ts +7 -7
  373. package/dist/page-render/layout.d.ts +1 -1
  374. package/dist/page-render/web.d.ts +5 -5
  375. package/dist/personal-access-tokens/feature.d.ts +3 -3
  376. package/dist/personal-access-tokens/handlers/available-scopes.query.d.ts +1 -1
  377. package/dist/personal-access-tokens/i18n.d.ts +1 -1
  378. package/dist/personal-access-tokens/index.d.ts +13 -13
  379. package/dist/personal-access-tokens/resolver.d.ts +1 -1
  380. package/dist/personal-access-tokens/screens.d.ts +1 -1
  381. package/dist/presets/dsgvo-self-service.d.ts +3 -1
  382. package/dist/presets/dsgvo-self-service.js +2 -0
  383. package/dist/presets/index.d.ts +2 -2
  384. package/dist/presets/security-baseline.d.ts +2 -0
  385. package/dist/presets/security-baseline.js +2 -0
  386. package/dist/rate-limiting/index.d.ts +2 -2
  387. package/dist/readiness/feature.d.ts +0 -8
  388. package/dist/readiness/feature.js +0 -2
  389. package/dist/readiness/index.d.ts +3 -3
  390. package/dist/readiness/index.js +1 -1
  391. package/dist/renderer-foundation/api.d.ts +2 -2
  392. package/dist/renderer-foundation/constants.d.ts +2 -2
  393. package/dist/renderer-foundation/feature.d.ts +1 -1
  394. package/dist/renderer-foundation/index.d.ts +5 -5
  395. package/dist/renderer-foundation/types.d.ts +24 -2
  396. package/dist/renderer-pdf/feature.d.ts +1 -1
  397. package/dist/renderer-pdf/index.d.ts +2 -2
  398. package/dist/renderer-pdf/render-table-pdf.d.ts +1 -1
  399. package/dist/secrets/constants.d.ts +7 -0
  400. package/dist/secrets/constants.js +7 -0
  401. package/dist/secrets/db/queries/read.d.ts +1 -1
  402. package/dist/secrets/feature.d.ts +5 -3
  403. package/dist/secrets/feature.js +19 -5
  404. package/dist/secrets/handlers/delete.write.js +4 -3
  405. package/dist/secrets/handlers/rotate.job.d.ts +1 -1
  406. package/dist/secrets/handlers/set.write.js +4 -3
  407. package/dist/secrets/index.d.ts +7 -7
  408. package/dist/secrets/index.js +1 -1
  409. package/dist/secrets/secrets-context.d.ts +1 -1
  410. package/dist/seo/feature.d.ts +3 -3
  411. package/dist/seo/index.d.ts +6 -6
  412. package/dist/sessions/feature.d.ts +1 -1
  413. package/dist/sessions/index.d.ts +8 -8
  414. package/dist/sessions/session-callbacks.d.ts +1 -1
  415. package/dist/sessions/testing.d.ts +1 -1
  416. package/dist/shared/index.d.ts +31 -31
  417. package/dist/step-dispatcher/dispatch-payload.d.ts +2 -2
  418. package/dist/step-dispatcher/index.d.ts +3 -3
  419. package/dist/subscription-mollie/feature.d.ts +2 -2
  420. package/dist/subscription-mollie/index.d.ts +3 -3
  421. package/dist/subscription-mollie/verify-webhook.d.ts +1 -1
  422. package/dist/subscription-stripe/feature.d.ts +17 -1
  423. package/dist/subscription-stripe/feature.js +19 -1
  424. package/dist/subscription-stripe/index.d.ts +2 -2
  425. package/dist/subscription-stripe/index.js +1 -1
  426. package/dist/subscription-stripe/plugin-methods.d.ts +1 -1
  427. package/dist/subscription-stripe/verify-webhook.d.ts +1 -1
  428. package/dist/tags/feature.d.ts +0 -4
  429. package/dist/tags/feature.js +0 -2
  430. package/dist/tags/handlers/assign-tag.write.d.ts +1 -1
  431. package/dist/tags/handlers/remove-tag.write.d.ts +1 -1
  432. package/dist/tags/index.d.ts +11 -11
  433. package/dist/tags/index.js +1 -1
  434. package/dist/tags/web/index.d.ts +9 -9
  435. package/dist/template-resolver/api.d.ts +4 -4
  436. package/dist/template-resolver/constants.d.ts +1 -2
  437. package/dist/template-resolver/constants.js +0 -1
  438. package/dist/template-resolver/document-sanitizer.d.ts +1 -1
  439. package/dist/template-resolver/handlers/bundle-import.d.ts +3 -3
  440. package/dist/template-resolver/handlers/collection-shared.d.ts +2 -2
  441. package/dist/template-resolver/handlers/copy-locale.write.d.ts +1 -1
  442. package/dist/template-resolver/handlers/diff-to-system.query.d.ts +1 -1
  443. package/dist/template-resolver/handlers/find-by-id.query.d.ts +1 -1
  444. package/dist/template-resolver/handlers/import-bundle-system.write.d.ts +1 -1
  445. package/dist/template-resolver/handlers/import-bundle.write.d.ts +1 -1
  446. package/dist/template-resolver/handlers/layout-source.query.d.ts +3 -3
  447. package/dist/template-resolver/handlers/override-diff.d.ts +2 -2
  448. package/dist/template-resolver/handlers/overview.query.d.ts +3 -3
  449. package/dist/template-resolver/handlers/preview.query.d.ts +1 -1
  450. package/dist/template-resolver/handlers/resource-link-pdf.write.d.ts +1 -1
  451. package/dist/template-resolver/handlers/resource-upload.write.d.ts +1 -1
  452. package/dist/template-resolver/handlers/send-test.write.d.ts +1 -1
  453. package/dist/template-resolver/handlers/send-test.write.js +4 -2
  454. package/dist/template-resolver/handlers/shared.d.ts +1 -1
  455. package/dist/template-resolver/handlers/template-gates.d.ts +4 -4
  456. package/dist/template-resolver/handlers/template-write.d.ts +4 -4
  457. package/dist/template-resolver/handlers/tenant-overrides.query.d.ts +1 -1
  458. package/dist/template-resolver/handlers/toggle-status.write.d.ts +1 -1
  459. package/dist/template-resolver/handlers/upsert-system.write.d.ts +1 -1
  460. package/dist/template-resolver/handlers/upsert-tenant.write.d.ts +1 -1
  461. package/dist/template-resolver/handlers/usage.query.d.ts +1 -1
  462. package/dist/template-resolver/handlers/validate.query.d.ts +3 -3
  463. package/dist/template-resolver/index.d.ts +25 -25
  464. package/dist/template-resolver/layout-appearance.d.ts +1 -1
  465. package/dist/template-resolver/layout-regions.d.ts +2 -2
  466. package/dist/template-resolver/linked-resources.d.ts +1 -1
  467. package/dist/template-resolver/preview-display-html.d.ts +1 -1
  468. package/dist/template-resolver/resource-image.d.ts +1 -1
  469. package/dist/template-resolver/seeding.d.ts +2 -2
  470. package/dist/template-resolver/store-template-resource.d.ts +1 -1
  471. package/dist/template-resolver/template-draft.d.ts +2 -2
  472. package/dist/template-resolver/template-meta.d.ts +2 -2
  473. package/dist/template-resolver/template-preview.d.ts +7 -6
  474. package/dist/template-resolver/template-preview.js +19 -12
  475. package/dist/template-resolver/template-resources.d.ts +1 -1
  476. package/dist/template-resolver/template-usage.d.ts +3 -1
  477. package/dist/template-resolver/template-usage.js +1 -0
  478. package/dist/template-resolver/template-validation.d.ts +1 -1
  479. package/dist/template-resolver/testing.d.ts +1 -1
  480. package/dist/template-resolver/user-content-table.d.ts +1 -1
  481. package/dist/template-resolver/web/document-editor-extensions.d.ts +1 -1
  482. package/dist/template-resolver/web/document-editor-extensions.js +6 -2
  483. package/dist/template-resolver/web/document-editor.d.ts +1 -1
  484. package/dist/template-resolver/web/document-tiptap-editor.d.ts +1 -1
  485. package/dist/template-resolver/web/document-tiptap-editor.js +13 -10
  486. package/dist/template-resolver/web/editor-handle.d.ts +1 -1
  487. package/dist/template-resolver/web/index.d.ts +7 -7
  488. package/dist/template-resolver/web/placeholder-line-editor-lazy.d.ts +2 -2
  489. package/dist/template-resolver/web/placeholder-line-editor.d.ts +1 -1
  490. package/dist/template-resolver-user-data/index.d.ts +0 -4
  491. package/dist/template-resolver-user-data/index.js +0 -2
  492. package/dist/tenant/feature.d.ts +1 -1
  493. package/dist/tenant/index.d.ts +10 -10
  494. package/dist/tenant/is-tenant-serving-public-content.d.ts +1 -1
  495. package/dist/tenant/testing.d.ts +1 -1
  496. package/dist/tenant/web/index.d.ts +3 -3
  497. package/dist/tenant-handover/feature.d.ts +1 -1
  498. package/dist/tenant-handover/index.d.ts +3 -3
  499. package/dist/tenant-handover/signup-handover-provider.d.ts +1 -1
  500. package/dist/tenant-lifecycle/feature.d.ts +2 -2
  501. package/dist/tenant-lifecycle/index.d.ts +3 -3
  502. package/dist/tenant-lifecycle/run-tenant-destroy.d.ts +1 -1
  503. package/dist/tenant-lifecycle/stages.d.ts +1 -1
  504. package/dist/tenant-lifecycle/testing.d.ts +1 -1
  505. package/dist/tenant-settings/feature.d.ts +1 -3
  506. package/dist/tenant-settings/feature.js +0 -2
  507. package/dist/tenant-settings/index.d.ts +4 -4
  508. package/dist/tenant-settings/index.js +1 -1
  509. package/dist/tier-engine/entity.d.ts +1 -1
  510. package/dist/tier-engine/feature.d.ts +2 -4
  511. package/dist/tier-engine/feature.js +0 -2
  512. package/dist/tier-engine/handlers/get-tenant-tier.query.d.ts +1 -1
  513. package/dist/tier-engine/i18n.d.ts +0 -2
  514. package/dist/tier-engine/i18n.js +4 -4
  515. package/dist/tier-engine/index.d.ts +8 -8
  516. package/dist/tier-engine/index.js +1 -1
  517. package/dist/tier-engine/tier-option-gate.d.ts +1 -1
  518. package/dist/tier-engine/tier-resolver.d.ts +1 -1
  519. package/dist/tier-engine/web/client-plugin.js +3 -2
  520. package/dist/tier-engine/web/index.d.ts +1 -1
  521. package/dist/user/index.d.ts +8 -8
  522. package/dist/user/invited-global-roles.d.ts +1 -1
  523. package/dist/user/principal-status.d.ts +1 -1
  524. package/dist/user/seeding.d.ts +1 -1
  525. package/dist/user/testing.d.ts +1 -1
  526. package/dist/user-data-rights/deletion-token.d.ts +1 -1
  527. package/dist/user-data-rights/feature.d.ts +5 -5
  528. package/dist/user-data-rights/feature.js +7 -4
  529. package/dist/user-data-rights/handlers/request-deletion.write.d.ts +1 -1
  530. package/dist/user-data-rights/handlers/run-forget-cleanup.write.d.ts +3 -3
  531. package/dist/user-data-rights/index.d.ts +13 -13
  532. package/dist/user-data-rights/lib/default-mailers.d.ts +7 -4
  533. package/dist/user-data-rights/lib/default-mailers.js +25 -3
  534. package/dist/user-data-rights/web/client-plugin.d.ts +1 -1
  535. package/dist/user-data-rights/web/index.d.ts +8 -8
  536. package/dist/user-data-rights-defaults/index.d.ts +11 -11
  537. package/dist/user-profile/index.d.ts +2 -2
  538. package/dist/user-profile/web/index.d.ts +2 -2
  539. package/dist/waitlist/constants.d.ts +9 -0
  540. package/dist/waitlist/constants.js +11 -0
  541. package/dist/waitlist/entity.d.ts +38 -6
  542. package/dist/waitlist/entity.js +4 -2
  543. package/dist/waitlist/entries-admin.d.ts +4 -0
  544. package/dist/waitlist/entries-admin.js +42 -0
  545. package/dist/waitlist/feature.d.ts +1 -1
  546. package/dist/waitlist/feature.js +16 -1
  547. package/dist/waitlist/handlers/export-purge.write.d.ts +12 -0
  548. package/dist/waitlist/handlers/export-purge.write.js +61 -0
  549. package/dist/waitlist/handlers/invite.write.d.ts +1 -1
  550. package/dist/waitlist/handlers/submit.write.d.ts +1 -1
  551. package/dist/waitlist/i18n.js +4 -0
  552. package/dist/waitlist/import.d.ts +24 -0
  553. package/dist/waitlist/import.js +51 -0
  554. package/dist/waitlist/index.d.ts +7 -5
  555. package/dist/waitlist/index.js +2 -0
  556. package/dist/waitlist/legacy-migrate.d.ts +27 -0
  557. package/dist/waitlist/legacy-migrate.js +173 -0
  558. package/dist/waitlist/lib.d.ts +2 -2
  559. package/dist/waitlist/link-on-signup.d.ts +3 -0
  560. package/dist/waitlist/link-on-signup.js +83 -0
  561. package/dist/waitlist/options.d.ts +11 -3
  562. package/dist/waitlist/payloads.d.ts +3 -0
  563. package/dist/waitlist/payloads.js +1 -0
  564. package/dist/workflow-runner/feature.d.ts +0 -4
  565. package/dist/workflow-runner/feature.js +0 -2
  566. package/dist/workflow-runner/index.d.ts +4 -4
  567. package/dist/workflow-runner/index.js +1 -1
  568. package/package.json +43 -27
  569. package/src/account-security/changes.json +8 -0
  570. package/src/auth-email-password/changes.json +6 -0
  571. package/src/auth-foundation/changes.json +8 -0
  572. package/src/auth-mfa/changes.json +6 -0
  573. package/src/auth-mfa-user-data/changes.json +10 -1
  574. package/src/billing-foundation/changes.json +8 -0
  575. package/src/cap-counter/changes.json +8 -0
  576. package/src/channel-email/changes.json +13 -0
  577. package/src/compliance-profiles-ops/changes.json +10 -0
  578. package/src/crypto-shredding/changes.json +6 -0
  579. package/src/custom-fields/changes.json +8 -0
  580. package/src/delivery/changes.json +12 -0
  581. package/src/derivatives-sharp/changes.json +8 -0
  582. package/src/document-ingest-foundation/changes.json +8 -0
  583. package/src/file-derivatives/changes.json +8 -0
  584. package/src/file-foundation/changes.json +8 -0
  585. package/src/file-provider-inmemory/changes.json +10 -1
  586. package/src/file-provider-s3/changes.json +22 -0
  587. package/src/folders/changes.json +8 -0
  588. package/src/folders-user-data/changes.json +10 -1
  589. package/src/form-draft/changes.json +8 -0
  590. package/src/form-draft-user-data/changes.json +10 -1
  591. package/src/foundation-shared/changes.json +8 -1
  592. package/src/host-routing/changes.json +8 -0
  593. package/src/inbound-mail-foundation/changes.json +8 -0
  594. package/src/inbound-provider-imap/changes.json +8 -0
  595. package/src/inbound-provider-inmemory/changes.json +10 -1
  596. package/src/ledger/changes.json +8 -0
  597. package/src/legal-pages/changes.json +6 -0
  598. package/src/mail-foundation/changes.json +10 -1
  599. package/src/mail-transport-inmemory/changes.json +10 -1
  600. package/src/mail-transport-smtp/changes.json +15 -0
  601. package/src/notes-history/changes.json +8 -0
  602. package/src/notes-history-user-data/changes.json +8 -0
  603. package/src/presets/changes.json +6 -0
  604. package/src/readiness/changes.json +10 -1
  605. package/src/secrets/changes.json +18 -0
  606. package/src/subscription-stripe/changes.json +6 -0
  607. package/src/tags/changes.json +8 -0
  608. package/src/template-resolver/changes.json +6 -0
  609. package/src/template-resolver-user-data/changes.json +10 -0
  610. package/src/tenant-settings/changes.json +10 -1
  611. package/src/tier-engine/changes.json +8 -0
  612. package/src/user-data-rights/changes.json +6 -0
  613. package/src/waitlist/changes.json +7 -0
  614. package/src/workflow-runner/changes.json +8 -0
  615. package/dist/file-provider-s3-env/index.d.ts +0 -8
  616. package/dist/file-provider-s3-env/index.js +0 -7
  617. package/dist/files-provider-s3/index.d.ts +0 -5
  618. package/dist/files-provider-s3/index.js +0 -5
  619. package/src/file-provider-s3-env/changes.json +0 -1
  620. package/src/files-provider-s3/changes.json +0 -1
@@ -1 +1 @@
1
- export { createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, INMEMORY_PROVIDER_KEY, inboundProviderInMemoryFeature, isWatching, resetInboundInMemory, seedInboundMessage, } from "./feature.js";
1
+ export { createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, INMEMORY_PROVIDER_KEY, isWatching, resetInboundInMemory, seedInboundMessage, } from "./feature.ts";
@@ -1,2 +1,2 @@
1
1
  // Public API of the inbound-provider-inmemory bundled-feature.
2
- export { createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, INMEMORY_PROVIDER_KEY, inboundProviderInMemoryFeature, isWatching, resetInboundInMemory, seedInboundMessage, } from "./feature.js";
2
+ export { createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, INMEMORY_PROVIDER_KEY, isWatching, resetInboundInMemory, seedInboundMessage, } from "./feature.js";
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import { type TenantJobRunStatus } from "../tenant-job-run-table.js";
2
+ import { type TenantJobRunStatus } from "../tenant-job-run-table.ts";
3
3
  export declare const tenantRunsQuery: import("@cosmicdrift/kumiko-types/define-handler").QueryHandlerDefinition<"tenant-runs", z.ZodObject<{
4
4
  jobName: z.ZodOptional<z.ZodString>;
5
5
  subject: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
@@ -1,9 +1,9 @@
1
- export { JOBS_FEATURE, JobErrors, JobHandlers, JobQueries } from "./constants.js";
2
- export { createJobsFeature, type JobsFeatureOptions } from "./feature.js";
3
- export type { JobRunLoggerCallbacks } from "./job-run-logger.js";
4
- export { createJobRunLogger } from "./job-run-logger.js";
5
- export type { JobLogLevel, JobRunStatus } from "./job-run-table.js";
6
- export { jobRunLogsTable, jobRunsTable } from "./job-run-table.js";
7
- export { tenantJobFailuresTable } from "./tenant-job-failure-table.js";
8
- export type { TenantJobRunStatus } from "./tenant-job-run-table.js";
9
- export { tenantJobRunsTable } from "./tenant-job-run-table.js";
1
+ export { JOBS_FEATURE, JobErrors, JobHandlers, JobQueries } from "./constants.ts";
2
+ export { createJobsFeature, type JobsFeatureOptions } from "./feature.ts";
3
+ export type { JobRunLoggerCallbacks } from "./job-run-logger.ts";
4
+ export { createJobRunLogger } from "./job-run-logger.ts";
5
+ export type { JobLogLevel, JobRunStatus } from "./job-run-table.ts";
6
+ export { jobRunLogsTable, jobRunsTable } from "./job-run-table.ts";
7
+ export { tenantJobFailuresTable } from "./tenant-job-failure-table.ts";
8
+ export type { TenantJobRunStatus } from "./tenant-job-run-table.ts";
9
+ export { tenantJobRunsTable } from "./tenant-job-run-table.ts";
@@ -1 +1 @@
1
- export { type JobsClientOptions, jobsClient } from "./client-plugin.js";
1
+ export { type JobsClientOptions, jobsClient } from "./client-plugin.tsx";
@@ -16,8 +16,4 @@ export type LedgerFeatureOptions = {
16
16
  readonly toggleable?: LedgerToggleable;
17
17
  };
18
18
  export declare function createLedgerFeature(opts?: LedgerFeatureOptions): typeof defaultLedgerFeature;
19
- /** @deprecated Use createLedgerFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
20
- export declare const ledgerFeature: import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
21
- readonly exports: void;
22
- };
23
19
  export {};
@@ -107,5 +107,3 @@ export function createLedgerFeature(opts = {}) {
107
107
  const access = resolveAccess(opts);
108
108
  return defineFeature(LEDGER_FEATURE_NAME, (r) => registerLedger(r, access, opts.toggleable));
109
109
  }
110
- /** @deprecated Use createLedgerFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
111
- export const ledgerFeature = createLedgerFeature();
@@ -1,10 +1,10 @@
1
- export { ACCOUNT_TYPES, type AccountType, DEFAULT_LEDGER_ACCESS, DEFAULT_LEDGER_ROLES, LEDGER_FEATURE_NAME, LedgerHandlers, LedgerQueries, SCHEDULE_INTERVALS, type ScheduleInterval, TRANSACTION_STATUS, type TransactionStatus, } from "./constants.js";
2
- export { accountEntity, scheduleEntity, transactionEntity } from "./entity.js";
3
- export { createLedgerFeature, type LedgerFeatureOptions, ledgerFeature, } from "./feature.js";
4
- export { confirmSchedulePeriodHandler, createConfirmSchedulePeriodHandler, } from "./handlers/confirm-schedule-period.write.js";
5
- export { createCreateTransactionHandler, createTransactionHandler, } from "./handlers/create-transaction.write.js";
6
- export { createBalanceSheetHandler, createBalancesReportHandler, createIncomeStatementHandler, } from "./handlers/reports.query.js";
7
- export { createReverseTransactionHandler, reverseTransactionHandler, } from "./handlers/reverse-transaction.write.js";
8
- export { findReversedIds, type LedgerTxRow, mergeScheduleActuals, type ProjectedPeriod, projectSchedule, type ScheduleDef, type ScheduleMonth, type ScheduleMonthStatus, scheduleReference, } from "./recurring.js";
9
- export { type AccountBalance, accountBalances, type BalanceSheet, type BalancesReport, balanceSheet, type IncomeStatement, incomeStatement, type LedgerAccount, type LedgerEntry, type Period, rawBalances, } from "./reports.js";
10
- export { accountTypeSchema, type ConfirmSchedulePeriodPayload, type CreateTransactionPayload, confirmSchedulePeriodPayloadSchema, createTransactionPayloadSchema, type Posting, postingSchema, type ReverseTransactionPayload, reverseTransactionPayloadSchema, } from "./schemas.js";
1
+ export { ACCOUNT_TYPES, type AccountType, DEFAULT_LEDGER_ACCESS, DEFAULT_LEDGER_ROLES, LEDGER_FEATURE_NAME, LedgerHandlers, LedgerQueries, SCHEDULE_INTERVALS, type ScheduleInterval, TRANSACTION_STATUS, type TransactionStatus, } from "./constants.ts";
2
+ export { accountEntity, scheduleEntity, transactionEntity } from "./entity.ts";
3
+ export { createLedgerFeature, type LedgerFeatureOptions, } from "./feature.ts";
4
+ export { confirmSchedulePeriodHandler, createConfirmSchedulePeriodHandler, } from "./handlers/confirm-schedule-period.write.ts";
5
+ export { createCreateTransactionHandler, createTransactionHandler, } from "./handlers/create-transaction.write.ts";
6
+ export { createBalanceSheetHandler, createBalancesReportHandler, createIncomeStatementHandler, } from "./handlers/reports.query.ts";
7
+ export { createReverseTransactionHandler, reverseTransactionHandler, } from "./handlers/reverse-transaction.write.ts";
8
+ export { findReversedIds, type LedgerTxRow, mergeScheduleActuals, type ProjectedPeriod, projectSchedule, type ScheduleDef, type ScheduleMonth, type ScheduleMonthStatus, scheduleReference, } from "./recurring.ts";
9
+ export { type AccountBalance, accountBalances, type BalanceSheet, type BalancesReport, balanceSheet, type IncomeStatement, incomeStatement, type LedgerAccount, type LedgerEntry, type Period, rawBalances, } from "./reports.ts";
10
+ export { accountTypeSchema, type ConfirmSchedulePeriodPayload, type CreateTransactionPayload, confirmSchedulePeriodPayloadSchema, createTransactionPayloadSchema, type Posting, postingSchema, type ReverseTransactionPayload, reverseTransactionPayloadSchema, } from "./schemas.ts";
@@ -1,6 +1,6 @@
1
1
  export { ACCOUNT_TYPES, DEFAULT_LEDGER_ACCESS, DEFAULT_LEDGER_ROLES, LEDGER_FEATURE_NAME, LedgerHandlers, LedgerQueries, SCHEDULE_INTERVALS, TRANSACTION_STATUS, } from "./constants.js";
2
2
  export { accountEntity, scheduleEntity, transactionEntity } from "./entity.js";
3
- export { createLedgerFeature, ledgerFeature, } from "./feature.js";
3
+ export { createLedgerFeature, } from "./feature.js";
4
4
  export { confirmSchedulePeriodHandler, createConfirmSchedulePeriodHandler, } from "./handlers/confirm-schedule-period.write.js";
5
5
  export { createCreateTransactionHandler, createTransactionHandler, } from "./handlers/create-transaction.write.js";
6
6
  export { createBalanceSheetHandler, createBalancesReportHandler, createIncomeStatementHandler, } from "./handlers/reports.query.js";
@@ -1,5 +1,5 @@
1
- import type { ScheduleInterval } from "./constants.js";
2
- import type { Posting } from "./schemas.js";
1
+ import type { ScheduleInterval } from "./constants.ts";
2
+ import type { Posting } from "./schemas.ts";
3
3
  export type ScheduleDef = {
4
4
  readonly startDate: string;
5
5
  readonly endDate?: string | null;
@@ -1,5 +1,5 @@
1
- import type { AccountType } from "./constants.js";
2
- import type { Posting } from "./schemas.js";
1
+ import type { AccountType } from "./constants.ts";
2
+ import type { Posting } from "./schemas.ts";
3
3
  export type LedgerAccount = {
4
4
  readonly id: string;
5
5
  readonly name: string;
@@ -1,3 +1,3 @@
1
- export { ACCOUNT_TYPES, type AccountType, LEDGER_FEATURE_NAME, LedgerHandlers, LedgerQueries, SCHEDULE_INTERVALS, type ScheduleInterval, TRANSACTION_STATUS, type TransactionStatus, } from "../constants.js";
2
- export { type LedgerTxRow, mergeScheduleActuals, type ProjectedPeriod, projectSchedule, type ScheduleDef, type ScheduleMonth, type ScheduleMonthStatus, scheduleReference, } from "../recurring.js";
3
- export { type ConfirmSchedulePeriodPayload, confirmSchedulePeriodPayloadSchema, type Posting, postingSchema, } from "../schemas.js";
1
+ export { ACCOUNT_TYPES, type AccountType, LEDGER_FEATURE_NAME, LedgerHandlers, LedgerQueries, SCHEDULE_INTERVALS, type ScheduleInterval, TRANSACTION_STATUS, type TransactionStatus, } from "../constants.ts";
2
+ export { type LedgerTxRow, mergeScheduleActuals, type ProjectedPeriod, projectSchedule, type ScheduleDef, type ScheduleMonth, type ScheduleMonthStatus, scheduleReference, } from "../recurring.ts";
3
+ export { type ConfirmSchedulePeriodPayload, confirmSchedulePeriodPayloadSchema, type Posting, postingSchema, } from "../schemas.ts";
@@ -46,6 +46,18 @@ export declare const LEGAL_ROUTES: readonly [{
46
46
  readonly lang: "en";
47
47
  readonly titleFallback: "Privacy Policy";
48
48
  }];
49
+ export declare const LEGAL_TERMS_ROUTES: readonly [{
50
+ readonly path: "/legal/nutzungsbedingungen";
51
+ readonly slug: "terms";
52
+ readonly lang: "de";
53
+ readonly titleFallback: "Nutzungsbedingungen";
54
+ }, {
55
+ readonly path: "/legal/terms";
56
+ readonly slug: "terms";
57
+ readonly lang: "en";
58
+ readonly titleFallback: "Terms of Service";
59
+ }];
60
+ export declare function legalPagePath(routes: readonly LegalPageRoute[], slug: string, lang: string): string | undefined;
49
61
  export declare const LegalPagesErrors: {
50
62
  readonly bootMissingBlock: "legal_pages_boot_missing_block";
51
63
  };
@@ -28,6 +28,22 @@ export const LEGAL_ROUTES = [
28
28
  { path: "/legal/imprint", slug: "imprint", lang: "en", titleFallback: "Imprint" },
29
29
  { path: "/legal/privacy", slug: "privacy", lang: "en", titleFallback: "Privacy Policy" },
30
30
  ];
31
+ // Terms of service are opt-in (`terms: true`) and never boot-required: not every
32
+ // app needs them, and DACH law does not mandate them the way it does imprint.
33
+ export const LEGAL_TERMS_ROUTES = [
34
+ {
35
+ path: "/legal/nutzungsbedingungen",
36
+ slug: "terms",
37
+ lang: "de",
38
+ titleFallback: "Nutzungsbedingungen",
39
+ },
40
+ { path: "/legal/terms", slug: "terms", lang: "en", titleFallback: "Terms of Service" },
41
+ ];
42
+ // Client-safe path lookup so apps that render their own legal pages (e.g. a
43
+ // static marketing site) link to the same paths the feature serves.
44
+ export function legalPagePath(routes, slug, lang) {
45
+ return routes.find((route) => route.slug === slug && route.lang === lang)?.path;
46
+ }
31
47
  export const LegalPagesErrors = {
32
48
  bootMissingBlock: "legal_pages_boot_missing_block",
33
49
  };
@@ -1,7 +1,7 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type PublicPageWrapLayout } from "../page-render/index.js";
3
- import { type LegalPageRoute, type LegalRequiredBlock } from "./constants.js";
4
- export { type LegalPagesBootCheckCtx, runLegalPagesBootCheck } from "./lib/boot-check.js";
2
+ import { type PublicPageWrapLayout } from "../page-render/index.ts";
3
+ import { type LegalPageRoute, type LegalRequiredBlock } from "./constants.ts";
4
+ export { type LegalPagesBootCheckCtx, runLegalPagesBootCheck } from "./lib/boot-check.ts";
5
5
  export type LegalPagesWrapLayout = PublicPageWrapLayout;
6
6
  export type LegalPagesOptions = {
7
7
  /** Custom Layout-Wrapper für die /legal/*-Routes. Default: minimaler
@@ -21,5 +21,8 @@ export type LegalPagesOptions = {
21
21
  * `privacy/de`). Apps whose routes use a different slug/lang set
22
22
  * (e.g. Spanish-default) pass their own list here. */
23
23
  readonly requiredBlocks?: readonly LegalRequiredBlock[];
24
+ /** Also serve LEGAL_TERMS_ROUTES (`/legal/nutzungsbedingungen`,
25
+ * `/legal/terms`, slug `terms`). Appended to `routes`; never boot-required. */
26
+ readonly terms?: boolean;
24
27
  };
25
28
  export declare function createLegalPagesFeature(opts?: LegalPagesOptions): FeatureDefinition;
@@ -2,7 +2,7 @@ import { computeRevisionEtag, etagMatches } from "@cosmicdrift/kumiko-framework/
2
2
  import { defineFeature, SYSTEM_TENANT_ID, } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import { escapeHtml } from "@cosmicdrift/kumiko-headless";
4
4
  import { cachedSecurePageResponse, redirectToCanonicalPath, slashVariantOf, } from "../page-render/index.js";
5
- import { LEGAL_REQUIRED_BLOCKS, LEGAL_ROUTES, } from "./constants.js";
5
+ import { LEGAL_REQUIRED_BLOCKS, LEGAL_ROUTES, LEGAL_TERMS_ROUTES, } from "./constants.js";
6
6
  import { runLegalPagesBootCheck } from "./lib/boot-check.js";
7
7
  import { validateRoutes } from "./lib/validate-routes.js";
8
8
  import { renderMarkdownToHtml, wrapInLayout } from "./markdown.js";
@@ -19,7 +19,10 @@ const TEXT_BLOCK_BY_SLUG_QN = "template-resolver:query:by-slug";
19
19
  const PUBLIC_PAGE_CACHE = { kind: "revalidate", maxAgeSeconds: 60 };
20
20
  export function createLegalPagesFeature(opts = {}) {
21
21
  const wrapLayout = opts.wrapLayout ?? wrapInLayout;
22
- const routes = opts.routes ?? LEGAL_ROUTES;
22
+ const routes = [
23
+ ...(opts.routes ?? LEGAL_ROUTES),
24
+ ...(opts.terms === true ? LEGAL_TERMS_ROUTES : []),
25
+ ];
23
26
  const requiredBlocks = opts.requiredBlocks ?? LEGAL_REQUIRED_BLOCKS;
24
27
  validateRoutes(routes);
25
28
  if (opts.routes !== undefined && opts.routes.length > 0 && opts.requiredBlocks === undefined) {
@@ -1,3 +1,5 @@
1
- export { LEGAL_OPTIONAL_BLOCKS, LEGAL_PAGES_FEATURE, LEGAL_REQUIRED_BLOCKS, LEGAL_ROUTES, type LegalPageRoute, LegalPagesErrors, type LegalRequiredBlock, } from "./constants.js";
2
- export { createLegalPagesFeature, type LegalPagesBootCheckCtx, type LegalPagesOptions, runLegalPagesBootCheck, } from "./feature.js";
3
- export { renderMarkdownToHtml, wrapInLayout } from "./markdown.js";
1
+ export { LEGAL_OPTIONAL_BLOCKS, LEGAL_PAGES_FEATURE, LEGAL_REQUIRED_BLOCKS, LEGAL_ROUTES, LEGAL_TERMS_ROUTES, type LegalPageRoute, LegalPagesErrors, type LegalRequiredBlock, legalPagePath, } from "./constants.ts";
2
+ export { createLegalPagesFeature, type LegalPagesBootCheckCtx, type LegalPagesOptions, runLegalPagesBootCheck, } from "./feature.ts";
3
+ export { createLegalPagesLayout, type LegalPagesLayoutOptions } from "./layout.ts";
4
+ export { renderMarkdownToHtml, wrapInLayout } from "./markdown.ts";
5
+ export { type LegalContentBlock, type LegalContentSeedFn, type LegalContentSeedSource, legalContentSeed, } from "./seed.ts";
@@ -1,3 +1,5 @@
1
- export { LEGAL_OPTIONAL_BLOCKS, LEGAL_PAGES_FEATURE, LEGAL_REQUIRED_BLOCKS, LEGAL_ROUTES, LegalPagesErrors, } from "./constants.js";
1
+ export { LEGAL_OPTIONAL_BLOCKS, LEGAL_PAGES_FEATURE, LEGAL_REQUIRED_BLOCKS, LEGAL_ROUTES, LEGAL_TERMS_ROUTES, LegalPagesErrors, legalPagePath, } from "./constants.js";
2
2
  export { createLegalPagesFeature, runLegalPagesBootCheck, } from "./feature.js";
3
+ export { createLegalPagesLayout } from "./layout.js";
3
4
  export { renderMarkdownToHtml, wrapInLayout } from "./markdown.js";
5
+ export { legalContentSeed, } from "./seed.js";
@@ -0,0 +1,10 @@
1
+ import { type PublicPageWrapLayout } from "../page-render/index.ts";
2
+ export type LegalPagesLayoutOptions = {
3
+ readonly siteName: string;
4
+ readonly css?: string;
5
+ readonly stylesheetHrefs?: readonly string[];
6
+ readonly headerHtml?: (lang: string) => string;
7
+ readonly footerHtml?: (lang: string) => string;
8
+ readonly contentClass?: string;
9
+ };
10
+ export declare function createLegalPagesLayout(options: LegalPagesLayoutOptions): PublicPageWrapLayout;
@@ -0,0 +1,32 @@
1
+ import { escapeHtml, escapeHtmlAttr } from "@cosmicdrift/kumiko-headless";
2
+ import { TENANT_CONTENT_ATTR } from "../page-render/index.js";
3
+ export function createLegalPagesLayout(options) {
4
+ const stylesheets = (options.stylesheetHrefs ?? [])
5
+ .map((href) => `\n<link rel="stylesheet" href="${escapeHtmlAttr(href)}">`)
6
+ .join("");
7
+ // html-ok: css comes from app code (LegalPagesLayoutOptions), never from tenant or user input.
8
+ const style = options.css ? `\n<style>${options.css}</style>` : "";
9
+ const contentClass = options.contentClass
10
+ ? ` class="${escapeHtmlAttr(options.contentClass)}"`
11
+ : "";
12
+ return ({ title, bodyHtml, lang }) => {
13
+ const headerHtml = options.headerHtml?.(lang) ?? "";
14
+ const footerHtml = options.footerHtml?.(lang) ?? "";
15
+ return `<!doctype html>
16
+ <html lang="${escapeHtmlAttr(lang)}">
17
+ <head>
18
+ <meta charset="utf-8">
19
+ <meta name="viewport" content="width=device-width, initial-scale=1">
20
+ <title>${escapeHtml(title)} · ${escapeHtml(options.siteName)}</title>
21
+ <meta name="robots" content="index,follow">${stylesheets}${style}
22
+ </head>
23
+ <body>
24
+ ${headerHtml}
25
+ <main ${TENANT_CONTENT_ATTR}${contentClass}>
26
+ ${bodyHtml}
27
+ </main>
28
+ ${footerHtml}
29
+ </body>
30
+ </html>`;
31
+ };
32
+ }
@@ -1,5 +1,5 @@
1
1
  import { type TemplateResolverApi } from "@cosmicdrift/kumiko-bundled-features/template-resolver";
2
- import { type LegalRequiredBlock } from "../constants.js";
2
+ import { type LegalRequiredBlock } from "../constants.ts";
3
3
  export type LegalPagesBootCheckCtx = {
4
4
  readonly templateResolver?: TemplateResolverApi;
5
5
  readonly log?: {
@@ -1,2 +1,2 @@
1
- import type { LegalPageRoute } from "../constants.js";
1
+ import type { LegalPageRoute } from "../constants.ts";
2
2
  export declare function validateRoutes(routes: readonly LegalPageRoute[]): void;
@@ -1,2 +1,2 @@
1
- export { wrapInLayout } from "../page-render/layout.js";
2
- export { renderSafeMarkdown as renderMarkdownToHtml } from "../page-render/markdown.js";
1
+ export { wrapInLayout } from "../page-render/layout.ts";
2
+ export { renderSafeMarkdown as renderMarkdownToHtml } from "../page-render/markdown.ts";
@@ -0,0 +1,12 @@
1
+ import { type LegalContentBlock } from "@cosmicdrift/kumiko-bundled-features/template-resolver/seeding";
2
+ import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
3
+ export type { LegalContentBlock };
4
+ export type LegalContentSeedSource = {
5
+ readonly blocks: readonly LegalContentBlock[];
6
+ } | {
7
+ readonly path: string;
8
+ };
9
+ export type LegalContentSeedFn = (deps: {
10
+ readonly db: DbConnection;
11
+ }) => Promise<void>;
12
+ export declare function legalContentSeed(source: LegalContentSeedSource): LegalContentSeedFn;
@@ -0,0 +1,38 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { resolve } from "node:path";
10
+ import { pathToFileURL } from "node:url";
11
+ import { seedLegalContentFromJson, } from "@cosmicdrift/kumiko-bundled-features/template-resolver/seeding";
12
+ import * as z from "zod";
13
+ const legalContentBlocksSchema = z.array(z.object({
14
+ slug: z.string().min(1),
15
+ locale: z.string().min(1),
16
+ title: z.string(),
17
+ content: z.string(),
18
+ }));
19
+ const jsonModuleSchema = z.object({ default: z.unknown() });
20
+ async function loadBlocksFromJson(path) {
21
+ const url = pathToFileURL(resolve(process.cwd(), path)).href;
22
+ const module = jsonModuleSchema.parse(await import(__rewriteRelativeImportExtension(url), { with: { type: "json" } }));
23
+ const parsed = legalContentBlocksSchema.safeParse(module.default);
24
+ if (!parsed.success) {
25
+ throw new Error(`legal-pages: ${path} is not a list of { slug, locale, title, content } blocks: ${parsed.error.message}`);
26
+ }
27
+ return parsed.data;
28
+ }
29
+ // Boot seed for runProdApp's `seeds: [...]`. The JSON template is authoritative
30
+ // (ifExists "update"), so legally required text changes reach rows seeded once.
31
+ export function legalContentSeed(source) {
32
+ return async ({ db }) => {
33
+ const blocks = "blocks" in source
34
+ ? legalContentBlocksSchema.parse(source.blocks)
35
+ : await loadBlocksFromJson(source.path);
36
+ await seedLegalContentFromJson(db, blocks);
37
+ };
38
+ }
@@ -1 +1 @@
1
- export { legalPagesClient } from "./client-plugin.js";
1
+ export { legalPagesClient } from "./client-plugin.ts";
@@ -46,6 +46,10 @@ export type MailTransportContext = {
46
46
  */
47
47
  export type MailTransportPlugin = {
48
48
  readonly build: (ctx: MailTransportContext, tenantId: string) => Promise<EmailTransport>;
49
+ /** `false` keeps the provider out of the generated settings: it can still be set by a
50
+ * seed or config write, but a tenant admin is never offered it (e.g. a test inbox
51
+ * that swallows every mail). */
52
+ readonly selectableInSettings?: false;
49
53
  };
50
54
  export declare function isMailTransportPlugin(o: unknown): o is MailTransportPlugin;
51
55
  declare module "@cosmicdrift/kumiko-framework/engine" {
@@ -59,13 +63,6 @@ export declare function createMailFoundationFeature(): import("@cosmicdrift/kumi
59
63
  providerConfigKey: import("@cosmicdrift/kumiko-types/config").ConfigKeyHandle<"text">;
60
64
  };
61
65
  };
62
- /** @deprecated Use createMailFoundationFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
63
- export declare const mailFoundationFeature: import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
64
- readonly exports: {
65
- /** Config-key-handle for the provider-selector. */
66
- providerConfigKey: import("@cosmicdrift/kumiko-types/config").ConfigKeyHandle<"text">;
67
- };
68
- };
69
66
  /**
70
67
  * Resolves the tenant's mail-transport. Reads the `provider` config-key,
71
68
  * looks up the matching plugin in the registry, calls its `build(ctx,
@@ -33,6 +33,7 @@
33
33
  import { withPiiCiphertextGuard, } from "@cosmicdrift/kumiko-bundled-features/channel-email";
34
34
  import { requireDefined } from "@cosmicdrift/kumiko-bundled-features/foundation-shared";
35
35
  import { access, createSystemUser, createTenantConfig, defineFeature, } from "@cosmicdrift/kumiko-framework/engine";
36
+ import { MAIL_FOUNDATION_I18N } from "./i18n.js";
36
37
  const FEATURE_NAME = "mail-foundation";
37
38
  // Extension-point name for transport-provider plugins (mail-transport-smtp,
38
39
  // mail-transport-brevo-api, ...).
@@ -47,7 +48,7 @@ export function isMailTransportPlugin(o) {
47
48
  // =============================================================================
48
49
  export function createMailFoundationFeature() {
49
50
  return defineFeature(FEATURE_NAME, (r) => {
50
- r.describe("Defines the `mailTransport` extension point and a per-tenant `provider` config key that selects which registered transport plugin to use at runtime. Call `createTransportForTenant(ctx, tenantId)` to get an `EmailTransport` ready for sending \u2014 use this feature together with at least one `mail-transport-*` feature; use `delivery` + `channel-email` instead when you need the full notification pipeline with delivery attempts and user preferences. Pass `tenantMailTransport` as `tenantTransport` to `createChannelEmailFeature` so a tenant with a provider configured sends delivery mails through its own transport and other tenants through the app transport.");
51
+ r.describe("Defines the `mailTransport` extension point and a per-tenant `provider` config key that selects which registered transport plugin to use at runtime. Call `createTransportForTenant(ctx, tenantId)` to get an `EmailTransport` ready for sending \u2014 use this feature together with at least one `mail-transport-*` feature; use `delivery` + `channel-email` instead when you need the full notification pipeline with delivery attempts and user preferences. Pass `tenantMailTransport` as `tenantTransport` to `createChannelEmailFeature`: notifications declared with `tenantTransport: true` then go through the tenant's own transport when it has a provider and through the app transport otherwise. Tenant admins pick the provider and fill in its settings on the generated Email sending settings screen; an empty provider is a valid choice and means the platform sends.");
51
52
  r.uiHints({
52
53
  displayLabel: "Mail Transport Foundation",
53
54
  category: "notifications",
@@ -64,24 +65,27 @@ export function createMailFoundationFeature() {
64
65
  // delivery's extendsRegistrar.
65
66
  },
66
67
  });
67
- // Provider-selector. Default empty so the boot-validator throws if a
68
- // tenant tries to send mail without first picking + setting up a
69
- // provider — better than a silent fallback. The actual list of valid
70
- // values lives in the registered plugins, not here — Designer-UI can
71
- // render `getExtensionUsages("mailTransport").map(u => u.entityName)`
72
- // as the option-list.
68
+ // Empty = this tenant has no own provider: tenantMailTransport yields null and
69
+ // channel-email uses the app transport, so empty is a valid choice a tenant can
70
+ // return to (reset in the settings mask) and readiness must not flag it.
71
+ // createTransportForTenant still throws on empty.
73
72
  const providerConfigKey = r.config("provider", createTenantConfig("text", {
74
73
  default: "",
75
- // required: without a chosen provider createTransportForTenant throws —
76
- // readiness used to report ready:true and the first mail send
77
- // surfaced the UnconfiguredError (280/1).
78
- required: true,
79
- write: access.roles("TenantAdmin", "SystemAdmin"),
74
+ // No SystemAdmin: a platform-level provider would be inherited by every tenant,
75
+ // whose own credentials (tenant secrets) are missing, and break all their mail.
76
+ write: access.withSystem(access.roles("TenantAdmin")),
80
77
  read: access.roles("TenantAdmin", "SystemAdmin", "User"),
78
+ mask: {
79
+ title: "mail-foundation.provider",
80
+ description: "mail-foundation.provider.description",
81
+ icon: "mail",
82
+ order: 1,
83
+ },
81
84
  }));
82
85
  // Readiness gating: transport-plugins' required keys/secrets count only
83
86
  // while their plugin is the one this key selects.
84
87
  r.extensionSelector(MAIL_TRANSPORT_EXTENSION, providerConfigKey);
88
+ r.translations({ keys: MAIL_FOUNDATION_I18N });
85
89
  return {
86
90
  /** Config-key-handle for the provider-selector. */
87
91
  providerConfigKey,
@@ -90,8 +94,6 @@ export function createMailFoundationFeature() {
90
94
  }
91
95
  // The typed handles below come from one shared instance; each factory call builds its own handle objects.
92
96
  const sharedMailFoundationFeature = createMailFoundationFeature();
93
- /** @deprecated Use createMailFoundationFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
94
- export const mailFoundationFeature = sharedMailFoundationFeature;
95
97
  // =============================================================================
96
98
  // Transport-factory — looks up the registered plugin + delegates
97
99
  // =============================================================================
@@ -0,0 +1,14 @@
1
+ export declare const MAIL_FOUNDATION_I18N: {
2
+ readonly "screen:mail-foundation-tenant.title": {
3
+ readonly en: "Email sending";
4
+ };
5
+ readonly "mail-foundation.settings": {
6
+ readonly en: "Email sending";
7
+ };
8
+ readonly "mail-foundation.provider": {
9
+ readonly en: "Own mail server";
10
+ };
11
+ readonly "mail-foundation.provider.description": {
12
+ readonly en: "Without one, the platform sends the mails. Reset the choice to go back to that.";
13
+ };
14
+ };
@@ -0,0 +1,8 @@
1
+ export const MAIL_FOUNDATION_I18N = {
2
+ "screen:mail-foundation-tenant.title": { en: "Email sending" },
3
+ "mail-foundation.settings": { en: "Email sending" },
4
+ "mail-foundation.provider": { en: "Own mail server" },
5
+ "mail-foundation.provider.description": {
6
+ en: "Without one, the platform sends the mails. Reset the choice to go back to that.",
7
+ },
8
+ };
@@ -1 +1 @@
1
- export { createMailFoundationFeature, createTransportForTenant, createTransportForTenantIfConfigured, isMailTransportPlugin, MAIL_TRANSPORT_EXTENSION, type MailTransportContext, type MailTransportPlugin, mailFoundationFeature, type TenantMailTransportScope, tenantMailTransport, } from "./feature.js";
1
+ export { createMailFoundationFeature, createTransportForTenant, createTransportForTenantIfConfigured, isMailTransportPlugin, MAIL_TRANSPORT_EXTENSION, type MailTransportContext, type MailTransportPlugin, type TenantMailTransportScope, tenantMailTransport, } from "./feature.ts";
@@ -6,4 +6,4 @@
6
6
  // up the registered transport-plugin, returns its EmailTransport
7
7
  // - `MailTransportPlugin` — type that provider-features implement
8
8
  // when registering via `r.useExtension("mailTransport", ...)`
9
- export { createMailFoundationFeature, createTransportForTenant, createTransportForTenantIfConfigured, isMailTransportPlugin, MAIL_TRANSPORT_EXTENSION, mailFoundationFeature, tenantMailTransport, } from "./feature.js";
9
+ export { createMailFoundationFeature, createTransportForTenant, createTransportForTenantIfConfigured, isMailTransportPlugin, MAIL_TRANSPORT_EXTENSION, tenantMailTransport, } from "./feature.js";
@@ -12,7 +12,3 @@ export declare function clearInbox(tenantId: string): void;
12
12
  export declare function createMailTransportInMemoryFeature(): import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
13
13
  readonly exports: void;
14
14
  };
15
- /** @deprecated Use createMailTransportInMemoryFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
16
- export declare const mailTransportInMemoryFeature: import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
17
- readonly exports: void;
18
- };
@@ -69,6 +69,9 @@ export function createMailTransportInMemoryFeature() {
69
69
  // extension-point "mailTransport" definiert.
70
70
  r.requires({ features: ["mail-foundation"] });
71
71
  const plugin = {
72
+ // Solon and studio mount it next to smtp in production; offering it there would
73
+ // let a tenant admin route every mail into process memory.
74
+ selectableInSettings: false,
72
75
  build: async (_ctx, tenantId) => {
73
76
  // Returns the per-tenant buffer. Identity-stable across calls so the
74
77
  // demo inbox keeps accumulating.
@@ -76,7 +79,8 @@ export function createMailTransportInMemoryFeature() {
76
79
  }, // @wrapper-known semantic-alias
77
80
  };
78
81
  r.useExtension(MAIL_TRANSPORT_EXTENSION, "inmemory", plugin);
82
+ r.translations({
83
+ keys: { "mail-transport-inmemory.settings": { en: "Test inbox (in memory)" } },
84
+ });
79
85
  }, { dedupeOptions: {} });
80
86
  }
81
- /** @deprecated Use createMailTransportInMemoryFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
82
- export const mailTransportInMemoryFeature = createMailTransportInMemoryFeature();
@@ -1 +1 @@
1
- export { clearInbox, createMailTransportInMemoryFeature, getInbox, mailTransportInMemoryFeature, } from "./feature.js";
1
+ export { clearInbox, createMailTransportInMemoryFeature, getInbox, } from "./feature.ts";
@@ -1,2 +1,2 @@
1
1
  // Public API of the mail-transport-inmemory bundled-feature.
2
- export { clearInbox, createMailTransportInMemoryFeature, getInbox, mailTransportInMemoryFeature, } from "./feature.js";
2
+ export { clearInbox, createMailTransportInMemoryFeature, getInbox, } from "./feature.js";
@@ -0,0 +1,7 @@
1
+ export declare const SMTP_CONFIG_KEYS: {
2
+ host: import("@cosmicdrift/kumiko-types/config").ConfigKeyDefinition<"text">;
3
+ port: import("@cosmicdrift/kumiko-types/config").ConfigKeyDefinition<"number">;
4
+ secure: import("@cosmicdrift/kumiko-types/config").ConfigKeyDefinition<"boolean">;
5
+ authUser: import("@cosmicdrift/kumiko-types/config").ConfigKeyDefinition<"text">;
6
+ from: import("@cosmicdrift/kumiko-types/config").ConfigKeyDefinition<"text">;
7
+ };
@@ -0,0 +1,65 @@
1
+ import { access, createTenantConfig } from "@cosmicdrift/kumiko-framework/engine";
2
+ // No SystemAdmin write: the password is a tenant secret, so platform-level SMTP keys
3
+ // could never form a working transport (see mail-foundation's provider key).
4
+ const tenantAdminWrite = access.withSystem(access.roles("TenantAdmin"));
5
+ const tenantAdminRead = access.roles("TenantAdmin", "SystemAdmin");
6
+ // required: true ↔ the requireNonEmpty calls in buildSmtpTransport — keep in sync.
7
+ export const SMTP_CONFIG_KEYS = {
8
+ host: createTenantConfig("text", {
9
+ required: true,
10
+ default: "",
11
+ write: tenantAdminWrite,
12
+ read: tenantAdminRead,
13
+ mask: {
14
+ title: "mail-transport-smtp.host",
15
+ description: "mail-transport-smtp.host.description",
16
+ icon: "server",
17
+ order: 1,
18
+ },
19
+ }),
20
+ port: createTenantConfig("number", {
21
+ default: 587,
22
+ bounds: { min: 1, max: 65535 },
23
+ write: tenantAdminWrite,
24
+ mask: {
25
+ title: "mail-transport-smtp.port",
26
+ description: "mail-transport-smtp.port.description",
27
+ icon: "hash",
28
+ order: 2,
29
+ },
30
+ }),
31
+ secure: createTenantConfig("boolean", {
32
+ default: false,
33
+ write: tenantAdminWrite,
34
+ mask: {
35
+ title: "mail-transport-smtp.secure",
36
+ description: "mail-transport-smtp.secure.description",
37
+ icon: "lock",
38
+ order: 3,
39
+ },
40
+ }),
41
+ authUser: createTenantConfig("text", {
42
+ required: true,
43
+ default: "",
44
+ write: tenantAdminWrite,
45
+ read: tenantAdminRead,
46
+ mask: {
47
+ title: "mail-transport-smtp.authUser",
48
+ description: "mail-transport-smtp.authUser.description",
49
+ icon: "user",
50
+ order: 4,
51
+ },
52
+ }),
53
+ from: createTenantConfig("text", {
54
+ required: true,
55
+ default: "",
56
+ write: tenantAdminWrite,
57
+ read: tenantAdminRead,
58
+ mask: {
59
+ title: "mail-transport-smtp.from",
60
+ description: "mail-transport-smtp.from.description",
61
+ icon: "mail",
62
+ order: 5,
63
+ },
64
+ }),
65
+ };