@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,3 +1,3 @@
1
- export { CUSTOM_FIELDS_FORM_EXTENSION_NAME, CustomFieldsHandlers, CustomFieldsQueries, } from "../constants.js";
2
- export { customFieldsClient } from "./client-plugin.js";
3
- export { CustomFieldsFormSection } from "./custom-fields-form-section.js";
1
+ export { CUSTOM_FIELDS_FORM_EXTENSION_NAME, CustomFieldsHandlers, CustomFieldsQueries, } from "../constants.ts";
2
+ export { customFieldsClient } from "./client-plugin.tsx";
3
+ export { CustomFieldsFormSection } from "./custom-fields-form-section.tsx";
@@ -1,2 +1,2 @@
1
- import type { RetentionOverride } from "../resolver.js";
1
+ import type { RetentionOverride } from "../resolver.ts";
2
2
  export declare function parseRetentionOverrideOrNull(raw: string | null, tenantId: string, callerLabel: string): RetentionOverride | null;
@@ -1,9 +1,9 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- export { retentionOverrideSchema } from "./override-schema.js";
3
- export { RETENTION_PRESETS, type RetentionPreset, type RetentionPresetKey, SELECTABLE_RETENTION_PRESETS, } from "./presets.js";
4
- export { type ResolveForTenantArgs, resolveRetentionPolicyForTenant, } from "./resolve-for-tenant.js";
5
- export { type ResolveTenantPresetArgs, resolveTenantRetentionPreset, } from "./resolve-tenant-preset.js";
6
- export { type EffectiveRetentionPolicy, type ResolveRetentionPolicyArgs, type RetentionOverride, resolveRetentionPolicy, } from "./resolver.js";
7
- export { type RetentionCleanupSkip, type RunRetentionCleanupArgs, type RunRetentionCleanupResult, runRetentionCleanup, } from "./run-retention-cleanup.js";
8
- export { tenantRetentionOverrideEntity, tenantRetentionOverrideTable, } from "./schema/tenant-retention-override.js";
2
+ export { retentionOverrideSchema } from "./override-schema.ts";
3
+ export { RETENTION_PRESETS, type RetentionPreset, type RetentionPresetKey, SELECTABLE_RETENTION_PRESETS, } from "./presets.ts";
4
+ export { type ResolveForTenantArgs, resolveRetentionPolicyForTenant, } from "./resolve-for-tenant.ts";
5
+ export { type ResolveTenantPresetArgs, resolveTenantRetentionPreset, } from "./resolve-tenant-preset.ts";
6
+ export { type EffectiveRetentionPolicy, type ResolveRetentionPolicyArgs, type RetentionOverride, resolveRetentionPolicy, } from "./resolver.ts";
7
+ export { type RetentionCleanupSkip, type RunRetentionCleanupArgs, type RunRetentionCleanupResult, runRetentionCleanup, } from "./run-retention-cleanup.ts";
8
+ export { tenantRetentionOverrideEntity, tenantRetentionOverrideTable, } from "./schema/tenant-retention-override.ts";
9
9
  export declare function createDataRetentionFeature(): FeatureDefinition;
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import type { EffectiveRetentionPolicy } from "../resolver.js";
2
+ import type { EffectiveRetentionPolicy } from "../resolver.ts";
3
3
  export declare const policyForQuery: import("@cosmicdrift/kumiko-types/define-handler").QueryHandlerDefinition<"policy-for", z.ZodObject<{
4
4
  entityName: z.ZodString;
5
5
  }, z.core.$strip>, EffectiveRetentionPolicy, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap>;
@@ -1,3 +1,3 @@
1
- export type { EffectiveRetentionPolicy, ResolveForTenantArgs, ResolveRetentionPolicyArgs, ResolveTenantPresetArgs, RetentionOverride, RetentionPreset, RetentionPresetKey, } from "./feature.js";
2
- export { createDataRetentionFeature, RETENTION_PRESETS, resolveRetentionPolicy, resolveRetentionPolicyForTenant, resolveTenantRetentionPreset, retentionOverrideSchema, SELECTABLE_RETENTION_PRESETS, tenantRetentionOverrideEntity, tenantRetentionOverrideTable, } from "./feature.js";
3
- export { computeCutoff, type Instant } from "./keep-for.js";
1
+ export type { EffectiveRetentionPolicy, ResolveForTenantArgs, ResolveRetentionPolicyArgs, ResolveTenantPresetArgs, RetentionOverride, RetentionPreset, RetentionPresetKey, } from "./feature.ts";
2
+ export { createDataRetentionFeature, RETENTION_PRESETS, resolveRetentionPolicy, resolveRetentionPolicyForTenant, resolveTenantRetentionPreset, retentionOverrideSchema, SELECTABLE_RETENTION_PRESETS, tenantRetentionOverrideEntity, tenantRetentionOverrideTable, } from "./feature.ts";
3
+ export { computeCutoff, type Instant } from "./keep-for.ts";
@@ -1,7 +1,7 @@
1
1
  import type { DbRunner, TenantDb } from "@cosmicdrift/kumiko-framework/db";
2
2
  import type { Registry, TenantId } from "@cosmicdrift/kumiko-framework/engine";
3
- import type { RetentionPresetKey } from "./presets.js";
4
- import { type EffectiveRetentionPolicy } from "./resolver.js";
3
+ import type { RetentionPresetKey } from "./presets.ts";
4
+ import { type EffectiveRetentionPolicy } from "./resolver.ts";
5
5
  export interface ResolveForTenantArgs {
6
6
  readonly db: DbRunner | TenantDb;
7
7
  readonly registry: Registry;
@@ -1,7 +1,7 @@
1
1
  import type { ComplianceProfileKey } from "@cosmicdrift/kumiko-framework/compliance";
2
2
  import type { DbRunner, TenantDb } from "@cosmicdrift/kumiko-framework/db";
3
3
  import type { Registry, TenantId } from "@cosmicdrift/kumiko-framework/engine";
4
- import type { RetentionPresetKey } from "./presets.js";
4
+ import type { RetentionPresetKey } from "./presets.ts";
5
5
  declare const PROFILE_TO_PRESET: Readonly<Record<ComplianceProfileKey, RetentionPresetKey>>;
6
6
  export interface ResolveTenantPresetArgs {
7
7
  readonly db: DbRunner | TenantDb;
@@ -1,5 +1,5 @@
1
1
  import type { EntityDefinition, RetentionDef } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type RetentionPresetKey } from "./presets.js";
2
+ import { type RetentionPresetKey } from "./presets.ts";
3
3
  /**
4
4
  * Roh-Override aus der DB-Tabelle (config-Spalte als JSON-String).
5
5
  * Nicht das gleiche wie RetentionDef weil hier alles optional ist —
@@ -2,8 +2,8 @@ import { type KmsAdapter } from "@cosmicdrift/kumiko-framework/crypto";
2
2
  import { type DbRunner } from "@cosmicdrift/kumiko-framework/db";
3
3
  import { type Registry, type TenantId } from "@cosmicdrift/kumiko-framework/engine";
4
4
  import { type FileContext } from "@cosmicdrift/kumiko-framework/files";
5
- import { type Instant } from "./keep-for.js";
6
- import type { RetentionPresetKey } from "./presets.js";
5
+ import { type Instant } from "./keep-for.ts";
6
+ import type { RetentionPresetKey } from "./presets.ts";
7
7
  export interface RunRetentionCleanupArgs {
8
8
  readonly db: DbRunner;
9
9
  readonly registry: Registry;
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import type { FileAttachmentRef, InlineAttachmentRef, RenderedPdfAttachmentRef } from "../renderer-foundation/index.js";
2
+ import type { FileAttachmentRef, InlineAttachmentRef, RenderedPdfAttachmentRef } from "../renderer-foundation/index.ts";
3
3
  export type { FileAttachmentRef, InlineAttachmentRef, RenderedPdfAttachmentRef };
4
4
  export type EmailAttachmentRef = InlineAttachmentRef | FileAttachmentRef | RenderedPdfAttachmentRef;
5
5
  export declare const MAX_EMAIL_ATTACHMENTS = 20;
@@ -1,5 +1,5 @@
1
1
  import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
2
2
  import type { Registry } from "@cosmicdrift/kumiko-framework/engine";
3
- import { type DeliveryLogEntry } from "./types.js";
3
+ import { type DeliveryLogEntry } from "./types.ts";
4
4
  export declare function appendAttemptEvent(db: DbConnection, registry: Registry, attemptId: string, entry: DeliveryLogEntry): Promise<void>;
5
5
  export declare function logAttempt(db: DbConnection, registry: Registry, entry: DeliveryLogEntry): Promise<string>;
@@ -3,8 +3,8 @@ import { type DbConnection, type TenantDb } from "@cosmicdrift/kumiko-framework/
3
3
  import type { ConfigAccessor, Registry, TenantId } from "@cosmicdrift/kumiko-framework/engine";
4
4
  import type { FileContext } from "@cosmicdrift/kumiko-framework/files";
5
5
  import type { SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
6
- import { type MailPayload } from "../renderer-foundation/index.js";
7
- import type { ChannelContext, RenderedMail } from "./types.js";
6
+ import { type MailPayload } from "../renderer-foundation/index.ts";
7
+ import type { ChannelContext, RenderedMail } from "./types.ts";
8
8
  export declare function createTemplateMailRenderer(db: DbConnection | TenantDb, registry: Registry, tenantId: TenantId, config: ConfigAccessor | undefined): (payload: MailPayload) => Promise<RenderedMail>;
9
9
  export declare function createEmailAttachmentReader(db: DbConnection | TenantDb, registry: Registry, tenantId: TenantId, config: ConfigAccessor | undefined, filesForTenant: (tenantId: string) => FileContext | undefined): NonNullable<ChannelContext["readAttachment"]>;
10
10
  export declare function buildChannelContext(db: DbConnection, registry: Registry, sseBroker: SseBroker | undefined, tenantId: TenantId, secrets?: SecretsContext, tenantConfig?: ConfigAccessor, filesForTenant?: (tenantId: string) => FileContext | undefined): ChannelContext;
@@ -1,5 +1,5 @@
1
- import { type ChatSendResult, type ChatWebhookRequest, type ChatWebhookTarget } from "./chat-webhook-sender.js";
2
- import type { ChannelMessage, ChannelResult, DeliveryChannel } from "./types.js";
1
+ import { type ChatSendResult, type ChatWebhookRequest, type ChatWebhookTarget } from "./chat-webhook-sender.ts";
2
+ import type { ChannelMessage, ChannelResult, DeliveryChannel } from "./types.ts";
3
3
  export type ChatWebhookChannelOptions = {
4
4
  readonly allowedHosts?: readonly string[];
5
5
  readonly requireHttps?: boolean;
@@ -1,7 +1,7 @@
1
1
  import type { NotifyPriority } from "@cosmicdrift/kumiko-framework/engine";
2
2
  export declare const DELIVERY_CHANNEL_EXTENSION: "deliveryChannel";
3
3
  export declare const EMAIL_CHANNEL_NAME: "email";
4
- export { DELIVERY_ATTEMPT_ADDRESS_ERASED_EVENT, DELIVERY_ATTEMPT_EVENT, DELIVERY_CHANNEL_CELL_COMPONENT, DELIVERY_ERROR_CELL_COMPONENT, DELIVERY_FEATURE, DELIVERY_LOG_SCREEN_ID, DELIVERY_RESUBSCRIBE_PATH, DELIVERY_STATUS_CELL_COMPONENT, DELIVERY_TIME_CELL_COMPONENT, DELIVERY_TYPE_CELL_COMPONENT, DELIVERY_UNSUBSCRIBE_PATH, DeliveryErrors, DeliveryHandlers, DeliveryJobNames, DeliveryQueries, DeliveryStatus, type DeliveryStatusValue, } from "./public-names.js";
4
+ export { DELIVERY_ATTEMPT_ADDRESS_ERASED_EVENT, DELIVERY_ATTEMPT_EVENT, DELIVERY_CHANNEL_CELL_COMPONENT, DELIVERY_ERROR_CELL_COMPONENT, DELIVERY_FEATURE, DELIVERY_LOG_SCREEN_ID, DELIVERY_RESUBSCRIBE_PATH, DELIVERY_STATUS_CELL_COMPONENT, DELIVERY_TIME_CELL_COMPONENT, DELIVERY_TYPE_CELL_COMPONENT, DELIVERY_UNSUBSCRIBE_PATH, DeliveryErrors, DeliveryHandlers, DeliveryJobNames, DeliveryQueries, DeliveryStatus, type DeliveryStatusValue, } from "./public-names.ts";
5
5
  export declare function deliveryIdempotencyRedisKey(tenantId: string, key: string): string;
6
6
  export declare const deliveryPriorityRank: Record<NotifyPriority, number>;
7
7
  export declare const DeliveryJobs: {
@@ -5,8 +5,8 @@ import type { FileContext } from "@cosmicdrift/kumiko-framework/files";
5
5
  import { type Logger } from "@cosmicdrift/kumiko-framework/logging";
6
6
  import type { SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
7
7
  import type { Redis } from "ioredis";
8
- import { type DeliveryChannel, type DeliveryService } from "./types.js";
9
- import { type UnsubscribeLinkConfig } from "./unsubscribe-link.js";
8
+ import { type DeliveryChannel, type DeliveryService } from "./types.ts";
9
+ import { type UnsubscribeLinkConfig } from "./unsubscribe-link.ts";
10
10
  export declare function redactedMessageOf(err: unknown): string;
11
11
  export type RateLimitConfig = {
12
12
  readonly redis: Redis;
@@ -10,6 +10,7 @@ import { resubscribeAddressWrite } from "./handlers/resubscribe-address.write.js
10
10
  import { resubscribeUserWrite } from "./handlers/resubscribe-user.write.js";
11
11
  import { setPreferenceWrite } from "./handlers/set-preference.write.js";
12
12
  import { unsubscribeAddressWrite } from "./handlers/unsubscribe-address.write.js";
13
+ import { unsubscribePageChromeQuery } from "./handlers/unsubscribe-page-chrome.query.js";
13
14
  import { unsubscribeUserWrite } from "./handlers/unsubscribe-user.write.js";
14
15
  import { DELIVERY_I18N } from "./i18n.js";
15
16
  import { deliveryRenderJob, deliverySendJob } from "./jobs.js";
@@ -19,7 +20,7 @@ export function createDeliveryFeature(options) {
19
20
  const resolvedAccess = options?.access ?? access.admin;
20
21
  const attemptLogRetentionDays = resolveAttemptLogRetentionDays(options?.attemptLogRetentionDays);
21
22
  return defineFeature("delivery", (r) => {
22
- r.describe("The notification dispatch core: call `ctx.notify(notificationType, { to, route, data, priority, idempotencyKey })` from any handler to fan out a notification across all registered channels (email, in-app, push). Inside a write handler the delivery runs after the write has committed (the call returns `{ kind: \"deferred\" }`, a rolled-back write sends nothing); `immediate: true` delivers synchronously and returns `{ kind: \"dispatched\", deliveries }`. It stores per-user channel preferences in the `notification-preference` entity, opt-outs for no-account recipient addresses in `notification-address-opt-out` (keyed by a blind-index hash, never the plaintext address), logs every attempt to `store_delivery_attempts`, and enforces idempotency and rate-limiting \u2014 add `channel-email`, `channel-in-app`, or `channel-push` on top to actually send anything. Unsubscribe/resubscribe links are served by `createUnsubscribeRoutes({ secret })` mounted via the app's `extraRoutes` at `/api/delivery/unsubscribe` and `/api/delivery/resubscribe`: `GET /unsubscribe?token=` renders a confirmation page (no write), `POST /unsubscribe` performs the opt-out (RFC 8058 one-click, token from the form body or query), `POST /resubscribe` undoes it (JSON `{token}` or form body only, never the query — reachable by a mail-client link prefetcher) — sign links with `signUnsubscribeToken` / `signAddressUnsubscribeToken` using the same secret. `channel-email` sets `List-Unsubscribe` / `List-Unsubscribe-Post` automatically when a message's `data.unsubscribeUrl` points at the unsubscribe route. A notification declared with `unsubscribe: true` gets that link from delivery itself when the service has `unsubscribeLinks` (`runProdApp` option `unsubscribe: { secret }` mounts the routes and wires it; base URL from `auth.publicOrigin`, `auth.mail.baseUrl` or `APP_BASE_URL`): user recipients get a user token, `route` recipients an address token (needs a blind-index key, otherwise no link); a `data.unsubscribeUrl` from the caller wins. `unsubscribe.tenantOrigin: (ctx) => origin | null` points the link at the tenant's own host (subdomain or custom domain, must serve this app's `/api`); null, a throw or a non-https value fall back to the app origin. The token carries the mail's locale, so the confirmation and result pages render in the mail's language. To react to a no-account opt-out (e.g. remove the app's own subscriber row), declare `r.job(name, { trigger: { on: DeliveryHandlers.unsubscribeAddress } }, handler)` on a lane the app consumes: it runs after each committed opt-out, also an idempotent repeat, with `unsubscribeAddressPayloadSchema` (`addressHash`, `notificationType`, `channel`) as payload and the tenant in `ctx.triggeredBy.tenantId`; match the subscriber via `hashUnsubscribeAddress(email)`. Declare `unsubscribeUrl` as an optional template variable if the mail body shows it.");
23
+ r.describe("The notification dispatch core: call `ctx.notify(notificationType, { to, route, data, priority, idempotencyKey })` from any handler to fan out a notification across all registered channels (email, in-app, push). Inside a write handler the delivery runs after the write has committed (the call returns `{ kind: \"deferred\" }`, a rolled-back write sends nothing); `immediate: true` delivers synchronously and returns `{ kind: \"dispatched\", deliveries }`. It stores per-user channel preferences in the `notification-preference` entity, opt-outs for no-account recipient addresses in `notification-address-opt-out` (keyed by a blind-index hash, never the plaintext address), logs every attempt to `store_delivery_attempts`, and enforces idempotency and rate-limiting \u2014 add `channel-email`, `channel-in-app`, or `channel-push` on top to actually send anything. Unsubscribe/resubscribe links are served by `createUnsubscribeRoutes({ secret })` mounted via the app's `extraRoutes` at `/api/delivery/unsubscribe` and `/api/delivery/resubscribe`: `GET /unsubscribe?token=` renders a confirmation page (no write), `POST /unsubscribe` performs the opt-out (RFC 8058 one-click, token from the form body or query), `POST /resubscribe` undoes it (JSON `{token}` or form body only, never the query — reachable by a mail-client link prefetcher) — sign links with `signUnsubscribeToken` / `signAddressUnsubscribeToken` using the same secret. `channel-email` sets `List-Unsubscribe` / `List-Unsubscribe-Post` automatically when a message's `data.unsubscribeUrl` points at the unsubscribe route. A notification declared with `unsubscribe: true` gets that link from delivery itself when the service has `unsubscribeLinks` (the `runProdApp` and `runDevApp` option `unsubscribe: { secret }` mounts the routes and wires it; base URL from `auth.publicOrigin`, `auth.mail.baseUrl` or `APP_BASE_URL`): user recipients get a user token, `route` recipients an address token (needs a blind-index key, otherwise no link); a `data.unsubscribeUrl` from the caller wins. `unsubscribe.tenantOrigin: (ctx) => origin | null` points the link at the tenant's own host (subdomain or custom domain, must serve this app's `/api`); null, a throw or a non-https value fall back to the app origin. The token carries the mail's locale, so the confirmation and result pages render in the mail's language. An app serving its own (e.g. legacy) unsubscribe links renders the same result page with `renderUnsubscribeResultPage({ kind, locale })`. To react to a no-account opt-out (e.g. remove the app's own subscriber row), declare `r.job(name, { trigger: { on: DeliveryHandlers.unsubscribeAddress } }, handler)` on a lane the app consumes: it runs after each committed opt-out, also an idempotent repeat, with `unsubscribeAddressPayloadSchema` (`addressHash`, `notificationType`, `channel`) as payload and the tenant in `ctx.triggeredBy.tenantId`; match the subscriber via `hashUnsubscribeAddress(email)`. Declare `unsubscribeUrl` as an optional template variable if the mail body shows it.");
23
24
  r.uiHints({
24
25
  displayLabel: "Notifications \u00b7 Dispatch Core",
25
26
  category: "notifications",
@@ -156,6 +157,7 @@ export function createDeliveryFeature(options) {
156
157
  const queries = {
157
158
  log: r.queryHandler({ ...logQuery, access: { roles: resolvedAccess } }),
158
159
  preferences: r.queryHandler(preferencesQuery),
160
+ unsubscribePageChrome: r.queryHandler(unsubscribePageChromeQuery),
159
161
  };
160
162
  r.screen({
161
163
  id: DELIVERY_LOG_SCREEN_ID,
@@ -1,6 +1,6 @@
1
1
  import { type DeliveryErrorCode, type NotifyPriority } from "@cosmicdrift/kumiko-framework/engine";
2
2
  import * as z from "zod";
3
- import type { DeliveryStatusValue } from "../constants.js";
3
+ import type { DeliveryStatusValue } from "../constants.ts";
4
4
  export declare const logQuery: import("@cosmicdrift/kumiko-framework/engine").PagedQueryHandlerDefinition<"log", z.ZodObject<{
5
5
  cursor: z.ZodOptional<z.ZodString>;
6
6
  limit: z.ZodDefault<z.ZodNumber>;
@@ -0,0 +1,5 @@
1
+ import * as z from "zod";
2
+ import { type MailChrome } from "../../renderer-foundation/index.ts";
3
+ export declare const unsubscribePageChromeQuery: import("@cosmicdrift/kumiko-types/define-handler").QueryHandlerDefinition<"unsubscribePageChrome", z.ZodObject<{
4
+ locale: z.ZodString;
5
+ }, z.core.$strip>, MailChrome | null, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap>;
@@ -0,0 +1,44 @@
1
+ import { access, defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
2
+ import { InternalError } from "@cosmicdrift/kumiko-framework/errors";
3
+ import * as z from "zod";
4
+ import { collectRendererPlugins, createRendererFoundationApi, RendererError, } from "../../renderer-foundation/index.js";
5
+ function mailChromePlugin(plugins, tenantId) {
6
+ try {
7
+ const plugin = createRendererFoundationApi(plugins).createRendererForTenant({
8
+ tenantId,
9
+ kind: "mail",
10
+ });
11
+ return plugin.readMailChrome === undefined ? null : plugin;
12
+ }
13
+ catch (e) {
14
+ if (e instanceof RendererError && e.code === "no_plugin_for_kind")
15
+ return null;
16
+ throw e;
17
+ }
18
+ }
19
+ export const unsubscribePageChromeQuery = defineQueryHandler({
20
+ name: "unsubscribePageChrome",
21
+ schema: z.object({ locale: z.string().min(2).max(35) }),
22
+ access: { roles: access.systemAdmin },
23
+ // Only reachable via createUnsubscribeRoutes' dispatchSystemQuery once verify()
24
+ // proved the token signature.
25
+ agent: { expose: false },
26
+ description: "Returns the tenant's mail brand row and footer resolved for one locale, or null without a mail renderer; dispatched by the signed unsubscribe route to dress its pages like the mail, not meant for UI callers.",
27
+ handler: async (query, ctx) => {
28
+ const { tenantId } = query.user;
29
+ if (!ctx.systemDb) {
30
+ throw new InternalError({
31
+ message: "unsubscribePageChrome: ctx.systemDb missing on a system-scoped handler",
32
+ });
33
+ }
34
+ const plugin = mailChromePlugin(collectRendererPlugins(ctx.registry), tenantId);
35
+ if (plugin?.readMailChrome === undefined)
36
+ return null;
37
+ return plugin.readMailChrome({ locale: query.payload.locale }, {
38
+ db: ctx.systemDb.assertTenantMatch(tenantId),
39
+ registry: ctx.registry,
40
+ tenantId,
41
+ ...(ctx.config !== undefined && { config: ctx.config }),
42
+ });
43
+ },
44
+ });
@@ -1,19 +1,20 @@
1
- export { sanitizePdfAttachmentFileName } from "../shared/index.js";
2
- export { hashUnsubscribeAddress } from "./address-opt-out.js";
3
- export { DELIVERY_ENVELOPE_DATA_KEYS, type EmailAttachmentRef, emailAttachmentRefSchema, type FileAttachmentRef, fileAttachmentRefSchema, type InlineAttachmentRef, inlineAttachmentRefSchema, MAX_EMAIL_ATTACHMENTS, MAX_RENDERED_PDF_VARIABLES_BYTES, type RenderedPdfAttachmentRef, renderedPdfAttachmentRefSchema, toAttachmentRef, withoutDeliveryEnvelopeKeys, } from "./attachment-ref.js";
4
- export { type AttemptLogRetentionOptions, DEFAULT_ATTEMPT_LOG_RETENTION_DAYS, runAttemptLogRetention, } from "./attempt-log-retention.js";
5
- export { createEmailAttachmentReader, createTemplateMailRenderer } from "./channel-context.js";
6
- export { type ChatWebhookChannelOptions, chatMessageText, createChatWebhookChannel, resolveChatWebhookTarget, toChannelResult, } from "./chat-webhook-channel.js";
7
- export { type ChatSendFailureCode, type ChatSendResult, type ChatWebhookRequest, type ChatWebhookResponse, type ChatWebhookTarget, chatConnectionNameSchema, chatWebhookUrlSchema, checkChatWebhookTarget, DEFAULT_CHAT_TIMEOUT_MS, postChatWebhook, truncateChars, } from "./chat-webhook-sender.js";
8
- export type { DeliveryStatusValue } from "./constants.js";
9
- export { DELIVERY_ATTEMPT_ADDRESS_ERASED_EVENT, DELIVERY_CHANNEL_EXTENSION, DELIVERY_FEATURE, DELIVERY_LOG_SCREEN_ID, DELIVERY_UNSUBSCRIBE_PATH, DeliveryErrors, DeliveryHandlers, DeliveryJobs, DeliveryQueries, DeliveryStatus, EMAIL_CHANNEL_NAME, } from "./constants.js";
10
- export { collectChannels, createDeliveryService, type DeliveryServiceOptions, type KillSwitchResolver, type RateLimitConfig, } from "./delivery-service.js";
11
- export { createDeliveryFeature, type DeliveryFeatureOptions } from "./feature.js";
12
- export { type UnsubscribeAddressPayload, unsubscribeAddressPayloadSchema, } from "./handlers/unsubscribe-address.write.js";
13
- export { createDeliveryNotifyFactory } from "./notify-factory.js";
14
- export { deliveryAttemptsTable, notificationAddressOptOutEntity, notificationAddressOptOutsTable, notificationPreferenceEntity, notificationPreferencesTable, } from "./tables.js";
15
- export { type CreateDeliveryTestContextOptions, createDeliveryTestContext } from "./testing.js";
16
- export { type AttachmentOrigin, type ChannelContext, type ChannelMessage, type ChannelResult, type DeliveryChannel, type DeliveryChannelMode, type DeliveryChannelPlugin, type DeliveryLogEntry, type DeliveryService, isDeliveryChannelPlugin, type RenderedMessage, } from "./types.js";
17
- export { type AddressUnsubscribeTokenPayload, createUnsubscribeRoutes, DELIVERY_UNSUBSCRIBE_ONE_CLICK_HEADER_VALUE, signAddressUnsubscribeToken, signUnsubscribeToken, type UnsubscribeRouteOptions, type UnsubscribeTokenPayload, } from "./unsubscribe.js";
18
- export type { UnsubscribeLinkConfig } from "./unsubscribe-link.js";
19
- export { UNSUBSCRIBE_PAGE_EN } from "./unsubscribe-page-strings.js";
1
+ export { sanitizePdfAttachmentFileName } from "../shared/index.ts";
2
+ export { hashUnsubscribeAddress } from "./address-opt-out.ts";
3
+ export { DELIVERY_ENVELOPE_DATA_KEYS, type EmailAttachmentRef, emailAttachmentRefSchema, type FileAttachmentRef, fileAttachmentRefSchema, type InlineAttachmentRef, inlineAttachmentRefSchema, MAX_EMAIL_ATTACHMENTS, MAX_RENDERED_PDF_VARIABLES_BYTES, type RenderedPdfAttachmentRef, renderedPdfAttachmentRefSchema, toAttachmentRef, withoutDeliveryEnvelopeKeys, } from "./attachment-ref.ts";
4
+ export { type AttemptLogRetentionOptions, DEFAULT_ATTEMPT_LOG_RETENTION_DAYS, runAttemptLogRetention, } from "./attempt-log-retention.ts";
5
+ export { buildChannelContext, createEmailAttachmentReader, createTemplateMailRenderer, } from "./channel-context.ts";
6
+ export { type ChatWebhookChannelOptions, chatMessageText, createChatWebhookChannel, resolveChatWebhookTarget, toChannelResult, } from "./chat-webhook-channel.ts";
7
+ export { type ChatSendFailureCode, type ChatSendResult, type ChatWebhookRequest, type ChatWebhookResponse, type ChatWebhookTarget, chatConnectionNameSchema, chatWebhookUrlSchema, checkChatWebhookTarget, DEFAULT_CHAT_TIMEOUT_MS, postChatWebhook, truncateChars, } from "./chat-webhook-sender.ts";
8
+ export type { DeliveryStatusValue } from "./constants.ts";
9
+ export { DELIVERY_ATTEMPT_ADDRESS_ERASED_EVENT, DELIVERY_CHANNEL_EXTENSION, DELIVERY_FEATURE, DELIVERY_LOG_SCREEN_ID, DELIVERY_UNSUBSCRIBE_PATH, DeliveryErrors, DeliveryHandlers, DeliveryJobs, DeliveryQueries, DeliveryStatus, EMAIL_CHANNEL_NAME, } from "./constants.ts";
10
+ export { collectChannels, createDeliveryService, type DeliveryServiceOptions, type KillSwitchResolver, type RateLimitConfig, } from "./delivery-service.ts";
11
+ export { createDeliveryFeature, type DeliveryFeatureOptions } from "./feature.ts";
12
+ export { type UnsubscribeAddressPayload, unsubscribeAddressPayloadSchema, } from "./handlers/unsubscribe-address.write.ts";
13
+ export { currentNotificationType } from "./notification-type-aliases.ts";
14
+ export { createDeliveryNotifyFactory } from "./notify-factory.ts";
15
+ export { deliveryAttemptsTable, notificationAddressOptOutEntity, notificationAddressOptOutsTable, notificationPreferenceEntity, notificationPreferencesTable, } from "./tables.ts";
16
+ export { type CreateDeliveryTestContextOptions, createDeliveryTestContext } from "./testing.ts";
17
+ export { type AttachmentOrigin, type ChannelContext, type ChannelMessage, type ChannelResult, type DeliveryChannel, type DeliveryChannelMode, type DeliveryChannelPlugin, type DeliveryLogEntry, type DeliveryService, isDeliveryChannelPlugin, type RenderedMessage, } from "./types.ts";
18
+ export { type AddressUnsubscribeTokenPayload, createUnsubscribeRoutes, DELIVERY_UNSUBSCRIBE_ONE_CLICK_HEADER_VALUE, renderUnsubscribeResultPage, signAddressUnsubscribeToken, signUnsubscribeToken, type UnsubscribeResultPage, type UnsubscribeRouteOptions, type UnsubscribeTokenPayload, } from "./unsubscribe.ts";
19
+ export type { UnsubscribeLinkConfig } from "./unsubscribe-link.ts";
20
+ export { UNSUBSCRIBE_PAGE_EN } from "./unsubscribe-page-strings.ts";
@@ -2,16 +2,17 @@ export { sanitizePdfAttachmentFileName } from "../shared/index.js";
2
2
  export { hashUnsubscribeAddress } from "./address-opt-out.js";
3
3
  export { DELIVERY_ENVELOPE_DATA_KEYS, emailAttachmentRefSchema, fileAttachmentRefSchema, inlineAttachmentRefSchema, MAX_EMAIL_ATTACHMENTS, MAX_RENDERED_PDF_VARIABLES_BYTES, renderedPdfAttachmentRefSchema, toAttachmentRef, withoutDeliveryEnvelopeKeys, } from "./attachment-ref.js";
4
4
  export { DEFAULT_ATTEMPT_LOG_RETENTION_DAYS, runAttemptLogRetention, } from "./attempt-log-retention.js";
5
- export { createEmailAttachmentReader, createTemplateMailRenderer } from "./channel-context.js";
5
+ export { buildChannelContext, createEmailAttachmentReader, createTemplateMailRenderer, } from "./channel-context.js";
6
6
  export { chatMessageText, createChatWebhookChannel, resolveChatWebhookTarget, toChannelResult, } from "./chat-webhook-channel.js";
7
7
  export { chatConnectionNameSchema, chatWebhookUrlSchema, checkChatWebhookTarget, DEFAULT_CHAT_TIMEOUT_MS, postChatWebhook, truncateChars, } from "./chat-webhook-sender.js";
8
8
  export { DELIVERY_ATTEMPT_ADDRESS_ERASED_EVENT, DELIVERY_CHANNEL_EXTENSION, DELIVERY_FEATURE, DELIVERY_LOG_SCREEN_ID, DELIVERY_UNSUBSCRIBE_PATH, DeliveryErrors, DeliveryHandlers, DeliveryJobs, DeliveryQueries, DeliveryStatus, EMAIL_CHANNEL_NAME, } from "./constants.js";
9
9
  export { collectChannels, createDeliveryService, } from "./delivery-service.js";
10
10
  export { createDeliveryFeature } from "./feature.js";
11
11
  export { unsubscribeAddressPayloadSchema, } from "./handlers/unsubscribe-address.write.js";
12
+ export { currentNotificationType } from "./notification-type-aliases.js";
12
13
  export { createDeliveryNotifyFactory } from "./notify-factory.js";
13
14
  export { deliveryAttemptsTable, notificationAddressOptOutEntity, notificationAddressOptOutsTable, notificationPreferenceEntity, notificationPreferencesTable, } from "./tables.js";
14
15
  export { createDeliveryTestContext } from "./testing.js";
15
16
  export { isDeliveryChannelPlugin, } from "./types.js";
16
- export { createUnsubscribeRoutes, DELIVERY_UNSUBSCRIBE_ONE_CLICK_HEADER_VALUE, signAddressUnsubscribeToken, signUnsubscribeToken, } from "./unsubscribe.js";
17
+ export { createUnsubscribeRoutes, DELIVERY_UNSUBSCRIBE_ONE_CLICK_HEADER_VALUE, renderUnsubscribeResultPage, signAddressUnsubscribeToken, signUnsubscribeToken, } from "./unsubscribe.js";
17
18
  export { UNSUBSCRIBE_PAGE_EN } from "./unsubscribe-page-strings.js";
@@ -1,5 +1,5 @@
1
1
  import type { NotifyFactory } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { DeliveryService } from "./types.js";
2
+ import type { DeliveryService } from "./types.ts";
3
3
  export declare function createDeliveryNotifyFactory(deliveryService: Pick<DeliveryService, "notify">, options?: {
4
4
  readonly deliverQueuedInline?: boolean;
5
5
  }): NotifyFactory;
@@ -11,6 +11,7 @@ export declare const DELIVERY_RESUBSCRIBE_PATH: "/api/delivery/resubscribe";
11
11
  export declare const DeliveryQueries: {
12
12
  readonly log: "delivery:query:log";
13
13
  readonly preferences: "delivery:query:preferences";
14
+ readonly unsubscribePageChrome: "delivery:query:unsubscribe-page-chrome";
14
15
  };
15
16
  export declare const DELIVERY_LOG_SCREEN_ID: "delivery-log";
16
17
  export declare const DELIVERY_STATUS_CELL_COMPONENT: "DeliveryStatusCell";
@@ -20,6 +20,7 @@ export const DELIVERY_RESUBSCRIBE_PATH = "/api/delivery/resubscribe";
20
20
  export const DeliveryQueries = {
21
21
  log: "delivery:query:log",
22
22
  preferences: "delivery:query:preferences",
23
+ unsubscribePageChrome: "delivery:query:unsubscribe-page-chrome",
23
24
  };
24
25
  export const DELIVERY_LOG_SCREEN_ID = "delivery-log";
25
26
  // Client column-renderer registered for the delivery-log screen's status
@@ -6,9 +6,9 @@ import type { JobRunner } from "@cosmicdrift/kumiko-framework/jobs";
6
6
  import type { Logger } from "@cosmicdrift/kumiko-framework/logging";
7
7
  import type { SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
8
8
  import type { Redis } from "ioredis";
9
- import type { KillSwitchResolver, RateLimitConfig } from "./delivery-service.js";
10
- import type { DeliveryService } from "./types.js";
11
- import type { UnsubscribeLinkConfig } from "./unsubscribe-link.js";
9
+ import type { KillSwitchResolver, RateLimitConfig } from "./delivery-service.ts";
10
+ import type { DeliveryService } from "./types.ts";
11
+ import type { UnsubscribeLinkConfig } from "./unsubscribe-link.ts";
12
12
  export type CreateDeliveryTestContextOptions = {
13
13
  readonly tenantUserIdsQuery?: string;
14
14
  readonly rateLimit?: RateLimitConfig;
@@ -3,9 +3,9 @@ import type { DbConnection, TenantDb } from "@cosmicdrift/kumiko-framework/db";
3
3
  import type { ConfigAccessor, DeliveryErrorCode, NotifyDeliveryStatus, NotifyDispatched, NotifyJobDispatcher, NotifyOptions, NotifyPriority, Registry, SessionUser, TenantId } from "@cosmicdrift/kumiko-framework/engine";
4
4
  import type { FileProviderResolver } from "@cosmicdrift/kumiko-framework/files";
5
5
  import type { SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
6
- import type { MailPayload, RenderedTemplateRef } from "../renderer-foundation/index.js";
7
- import type { EmailAttachmentRef } from "./attachment-ref.js";
8
- import { DELIVERY_CHANNEL_EXTENSION } from "./constants.js";
6
+ import type { MailPayload, RenderedTemplateRef } from "../renderer-foundation/index.ts";
7
+ import type { EmailAttachmentRef } from "./attachment-ref.ts";
8
+ import { DELIVERY_CHANNEL_EXTENSION } from "./constants.ts";
9
9
  export type RenderedMail = {
10
10
  readonly subject: string;
11
11
  readonly html: string;
@@ -1,5 +1,5 @@
1
1
  import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { ChannelContext } from "./types.js";
2
+ import type { ChannelContext } from "./types.ts";
3
3
  /** Secret shared with `createUnsubscribeRoutes` plus the public origin the links point at. */
4
4
  export type UnsubscribeLinkConfig = {
5
5
  readonly secret: string;
@@ -5,7 +5,11 @@ export declare const UNSUBSCRIBE_PAGE_EN: {
5
5
  readonly "mail.unsubscribe.doneTitle": "Unsubscribed";
6
6
  readonly "mail.unsubscribe.doneMessage": "You have been unsubscribed.";
7
7
  readonly "mail.unsubscribe.undoButton": "Undo";
8
+ readonly "mail.unsubscribe.undoHint": "Unsubscribed by mistake? You can undo it within the next hour.";
8
9
  readonly "mail.unsubscribe.resubscribedTitle": "Subscribed again";
9
10
  readonly "mail.unsubscribe.resubscribedMessage": "You have been subscribed again.";
10
11
  readonly "mail.unsubscribe.failed": "That did not work. Please try again later.";
12
+ readonly "mail.unsubscribe.failedTitle": "Something went wrong";
13
+ readonly "mail.unsubscribe.invalidTitle": "Link no longer valid";
14
+ readonly "mail.unsubscribe.invalidMessage": "This link is invalid or has expired. Please use the unsubscribe link in a more recent email.";
11
15
  };
@@ -8,8 +8,12 @@ export const UNSUBSCRIBE_PAGE_EN = {
8
8
  "mail.unsubscribe.doneTitle": "Unsubscribed",
9
9
  "mail.unsubscribe.doneMessage": "You have been unsubscribed.",
10
10
  "mail.unsubscribe.undoButton": "Undo",
11
+ "mail.unsubscribe.undoHint": "Unsubscribed by mistake? You can undo it within the next hour.",
11
12
  "mail.unsubscribe.resubscribedTitle": "Subscribed again",
12
13
  "mail.unsubscribe.resubscribedMessage": "You have been subscribed again.",
13
14
  "mail.unsubscribe.failed": "That did not work. Please try again later.",
15
+ "mail.unsubscribe.failedTitle": "Something went wrong",
16
+ "mail.unsubscribe.invalidTitle": "Link no longer valid",
17
+ "mail.unsubscribe.invalidMessage": "This link is invalid or has expired. Please use the unsubscribe link in a more recent email.",
14
18
  };
15
19
  registerMailTranslations("en", UNSUBSCRIBE_PAGE_EN);
@@ -0,0 +1,27 @@
1
+ import type { MailChrome } from "../renderer-foundation/index.ts";
2
+ import "./unsubscribe-page-strings.ts";
3
+ export type UnsubscribePageState = {
4
+ readonly kind: "confirm";
5
+ readonly token: string;
6
+ } | {
7
+ readonly kind: "unsubscribed";
8
+ readonly resubscribeToken?: string;
9
+ } | {
10
+ readonly kind: "resubscribed";
11
+ } | {
12
+ readonly kind: "failed";
13
+ } | {
14
+ readonly kind: "invalid";
15
+ };
16
+ export type UnsubscribePageInput = {
17
+ readonly state: UnsubscribePageState;
18
+ /** A locale with registered mail translations (see resolveMailLocale). */
19
+ readonly locale: string;
20
+ /** The tenant's mail look; without it the page shows the plain card. */
21
+ readonly chrome?: MailChrome | null | undefined;
22
+ };
23
+ export type RenderedUnsubscribePage = {
24
+ readonly html: string;
25
+ readonly contentSecurityPolicy: string;
26
+ };
27
+ export declare function renderUnsubscribePage(input: UnsubscribePageInput): RenderedUnsubscribePage;