@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
@@ -2,9 +2,10 @@
2
2
  // Client-feature factory for tier-engine. Supplies the default translations
3
3
  // for the declarative tier-admin actionForm (registered server-side via
4
4
  // r.screen in the feature); the app places the screen only via r.nav.
5
- import { mergeTranslations } from "@cosmicdrift/kumiko-renderer";
5
+ import { mergeTranslations, translationsByLocaleFromKeys, } from "@cosmicdrift/kumiko-renderer";
6
6
  import { TIER_ENGINE_FEATURE } from "../constants.js";
7
- import { defaultTranslations } from "../i18n.js";
7
+ import { TIER_ENGINE_I18N } from "../i18n.js";
8
+ const defaultTranslations = translationsByLocaleFromKeys(TIER_ENGINE_I18N);
8
9
  export function tierEngineClient(options) {
9
10
  return {
10
11
  name: TIER_ENGINE_FEATURE,
@@ -1 +1 @@
1
- export { type TierEngineClientOptions, tierEngineClient } from "./client-plugin.js";
1
+ export { type TierEngineClientOptions, tierEngineClient } from "./client-plugin.tsx";
@@ -1,8 +1,8 @@
1
- export { UserCommandSchemas } from "./command-schemas.js";
2
- export { USER_FEATURE, UserErrors, UserHandlers, UserQueries } from "./constants.js";
3
- export { backfillUserStreamTenants, type UserStreamBackfillResult, } from "./db/queries/stream-tenant-backfill.js";
4
- export { createUserFeature } from "./feature.js";
5
- export { isPrincipalBlocked, isPrincipalRowBlocked, principalStatusPlugin, } from "./principal-status.js";
6
- export { resolveUserDisplayNames } from "./resolve-display-names.js";
7
- export type { UserStatus } from "./schema/user.js";
8
- export { USER_ANONYMIZED_DISPLAY_NAME, USER_ANONYMIZED_EMAIL_DOMAIN, USER_ANONYMIZED_EMAIL_PREFIX, USER_DELETED_DISPLAY_NAME, USER_DELETED_EMAIL_PREFIX, USER_STATUS, userEntity, userTable, } from "./schema/user.js";
1
+ export { UserCommandSchemas } from "./command-schemas.ts";
2
+ export { USER_FEATURE, UserErrors, UserHandlers, UserQueries } from "./constants.ts";
3
+ export { backfillUserStreamTenants, type UserStreamBackfillResult, } from "./db/queries/stream-tenant-backfill.ts";
4
+ export { createUserFeature } from "./feature.ts";
5
+ export { isPrincipalBlocked, isPrincipalRowBlocked, principalStatusPlugin, } from "./principal-status.ts";
6
+ export { resolveUserDisplayNames } from "./resolve-display-names.ts";
7
+ export type { UserStatus } from "./schema/user.ts";
8
+ export { USER_ANONYMIZED_DISPLAY_NAME, USER_ANONYMIZED_EMAIL_DOMAIN, USER_ANONYMIZED_EMAIL_PREFIX, USER_DELETED_DISPLAY_NAME, USER_DELETED_EMAIL_PREFIX, USER_STATUS, userEntity, userTable, } from "./schema/user.ts";
@@ -1,5 +1,5 @@
1
1
  import { type DbRunner } from "@cosmicdrift/kumiko-framework/db";
2
- import { type GlobalRole } from "./constants.js";
2
+ import { type GlobalRole } from "./constants.ts";
3
3
  export declare function parseInvitedGlobalRoles(raw: unknown): readonly GlobalRole[];
4
4
  export declare function grantInvitedGlobalRoles(db: DbRunner, options: {
5
5
  readonly userId: string;
@@ -1,5 +1,5 @@
1
1
  import type { PrincipalStatusPlugin } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type UserStatus } from "./schema/user.js";
2
+ import { type UserStatus } from "./schema/user.ts";
3
3
  export declare function isPrincipalBlocked(status: UserStatus): boolean;
4
4
  export declare function isPrincipalRowBlocked(row: {
5
5
  readonly status: UserStatus;
@@ -1,6 +1,6 @@
1
1
  import { type DbConnection } from "@cosmicdrift/kumiko-framework/db";
2
2
  import type { SessionUser } from "@cosmicdrift/kumiko-framework/engine";
3
- import { type SeedTenantHooks } from "../tenant/seeding.js";
3
+ import { type SeedTenantHooks } from "../tenant/seeding.ts";
4
4
  export type SeedUserOptions = {
5
5
  readonly email: string;
6
6
  readonly displayName: string;
@@ -1 +1 @@
1
- export * from "./seeding.js";
1
+ export * from "./seeding.ts";
@@ -1,5 +1,5 @@
1
1
  import type { Temporal } from "@cosmicdrift/kumiko-types/temporal";
2
- import { type RowBoundGrantResult } from "../shared/index.js";
2
+ import { type RowBoundGrantResult } from "../shared/index.ts";
3
3
  export declare function signDeletionToken(userId: string, requestId: string, ttlMinutes: number, secret: string, now?: Temporal.Instant): {
4
4
  readonly token: string;
5
5
  readonly expiresAt: Temporal.Instant;
@@ -1,9 +1,9 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type SendDeletionRequestedEmailFn } from "./handlers/request-deletion.write.js";
3
- import { type SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.js";
4
- import { type GdprMailDefaults } from "./lib/default-mailers.js";
5
- import { type SendExportFailedEmailFn, type SendExportReadyEmailFn } from "./run-export-jobs.js";
6
- import { type SendDeletionExecutedEmailFn } from "./run-forget-cleanup.js";
2
+ import { type SendDeletionRequestedEmailFn } from "./handlers/request-deletion.write.ts";
3
+ import { type SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.ts";
4
+ import { type GdprMailDefaults } from "./lib/default-mailers.ts";
5
+ import { type SendExportFailedEmailFn, type SendExportReadyEmailFn } from "./run-export-jobs.ts";
6
+ import { type SendDeletionExecutedEmailFn } from "./run-forget-cleanup.ts";
7
7
  /**
8
8
  * Options fuer createUserDataRightsFeature. Notification-Callbacks
9
9
  * (Atom 5) folgen dem password-reset-Pattern aus auth-routes.ts.
@@ -521,15 +521,18 @@ export function createUserDataRightsFeature(opts = {}) {
521
521
  db: forgetDb,
522
522
  userId: forgetUserId,
523
523
  });
524
- // Without an app callback the default mail goes out when a mail transport and a
525
- // mail renderer are mounted. The user is already erased here, so it bypasses the
526
- // delivery log: an attempt row would be new personal data.
524
+ // Without an app callback the default mail goes out when an email channel or a
525
+ // mail transport, plus a mail renderer, are mounted. The user is already erased
526
+ // here, so it bypasses the delivery log: an attempt row would be new personal data.
527
527
  const forgetConfigResolver = ctx.configResolver;
528
528
  const sendDeletionExecutedEmail = opts.sendDeletionExecutedEmail ??
529
- (isMailTransportAvailable(forgetRegistry) && isMailRendererAvailable(forgetRegistry)
529
+ ((isGdprMailDeliveryAvailable(forgetRegistry) ||
530
+ isMailTransportAvailable(forgetRegistry)) &&
531
+ isMailRendererAvailable(forgetRegistry)
530
532
  ? makeDefaultDeletionExecutedEmail({
531
533
  registry: forgetRegistry,
532
534
  db: forgetDb,
535
+ ...(ctx.secrets !== undefined && { secrets: ctx.secrets }),
533
536
  resolveTransport: makeTenantMailTransportResolver({
534
537
  registry: forgetRegistry,
535
538
  configResolver: forgetConfigResolver,
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import { type GdprMailDefaults } from "../lib/default-mailers.js";
2
+ import { type GdprMailDefaults } from "../lib/default-mailers.ts";
3
3
  export type SendDeletionRequestedEmailFn = (args: {
4
4
  readonly userId: string;
5
5
  readonly userEmail: string;
@@ -1,5 +1,5 @@
1
1
  import * as z from "zod";
2
- import { type SendDeletionExecutedEmailFn } from "../run-forget-cleanup.js";
2
+ import { type SendDeletionExecutedEmailFn } from "../run-forget-cleanup.ts";
3
3
  export type RunForgetCleanupOptions = {
4
4
  readonly sendDeletionExecutedEmail?: SendDeletionExecutedEmailFn;
5
5
  };
@@ -7,7 +7,7 @@ export declare function createRunForgetCleanupHandler(opts?: RunForgetCleanupOpt
7
7
  processedUserIds: readonly string[];
8
8
  hookCallsAttempted: number;
9
9
  errorCount: number;
10
- errors: readonly import("../run-forget-cleanup.js").ForgetCleanupError[];
10
+ errors: readonly import("../run-forget-cleanup.ts").ForgetCleanupError[];
11
11
  incompleteCount: number;
12
- incomplete: readonly import("../run-forget-cleanup.js").ForgetCleanupIncomplete[];
12
+ incomplete: readonly import("../run-forget-cleanup.ts").ForgetCleanupIncomplete[];
13
13
  }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
@@ -1,13 +1,13 @@
1
- export { TENANT_MODEL_CONFIG_KEY } from "./constants.js";
2
- export { createUserDataRightsFeature, type UserDataRightsOptions } from "./feature.js";
3
- export type { SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.js";
4
- export { denyIfTargetOutsideAdminTenant, TARGET_USER_NOT_IN_ADMIN_TENANT, } from "./lib/deny-if-target-outside-admin-tenant.js";
5
- export { isSystemAdminActor } from "./lib/is-admin-actor.js";
6
- export { backfillUserLifecycleEvents, updateUserLifecycle } from "./lib/update-user-lifecycle.js";
7
- export type { SendExportFailedEmailFn, SendExportReadyEmailFn, } from "./run-export-jobs.js";
8
- export type { SendDeletionExecutedEmailFn } from "./run-forget-cleanup.js";
9
- export { policyToStrategy, runForgetCleanup } from "./run-forget-cleanup.js";
10
- export type { UserExportBundle } from "./run-user-export.js";
11
- export { runUserExport } from "./run-user-export.js";
12
- export { downloadAttemptEntity, downloadAttemptsTable } from "./schema/download-attempt.js";
13
- export { ACTIVE_JOB_CONSTRAINT, EXPORT_JOB_STATUS, type ExportJobStatus, exportJobEntity, exportJobsTable, } from "./schema/export-job.js";
1
+ export { TENANT_MODEL_CONFIG_KEY } from "./constants.ts";
2
+ export { createUserDataRightsFeature, type UserDataRightsOptions } from "./feature.ts";
3
+ export type { SendDeletionVerificationEmailFn } from "./handlers/request-deletion-by-email.write.ts";
4
+ export { denyIfTargetOutsideAdminTenant, TARGET_USER_NOT_IN_ADMIN_TENANT, } from "./lib/deny-if-target-outside-admin-tenant.ts";
5
+ export { isSystemAdminActor } from "./lib/is-admin-actor.ts";
6
+ export { backfillUserLifecycleEvents, updateUserLifecycle } from "./lib/update-user-lifecycle.ts";
7
+ export type { SendExportFailedEmailFn, SendExportReadyEmailFn, } from "./run-export-jobs.ts";
8
+ export type { SendDeletionExecutedEmailFn } from "./run-forget-cleanup.ts";
9
+ export { policyToStrategy, runForgetCleanup } from "./run-forget-cleanup.ts";
10
+ export type { UserExportBundle } from "./run-user-export.ts";
11
+ export { runUserExport } from "./run-user-export.ts";
12
+ export { downloadAttemptEntity, downloadAttemptsTable } from "./schema/download-attempt.ts";
13
+ export { ACTIVE_JOB_CONSTRAINT, EXPORT_JOB_STATUS, type ExportJobStatus, exportJobEntity, exportJobsTable, } from "./schema/export-job.ts";
@@ -1,10 +1,11 @@
1
1
  import type { EmailTransport } from "@cosmicdrift/kumiko-bundled-features/channel-email";
2
2
  import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
3
3
  import type { ConfigAccessor, NotifyFn, Registry, TenantId } from "@cosmicdrift/kumiko-framework/engine";
4
- import { type GdprMailLocale } from "../email-templates.js";
5
- import type { SendDeletionRequestedEmailFn } from "../handlers/request-deletion.write.js";
6
- import type { SendExportFailedEmailFn, SendExportReadyEmailFn } from "../run-export-jobs.js";
7
- import type { SendDeletionExecutedEmailFn } from "../run-forget-cleanup.js";
4
+ import type { SecretsContext } from "@cosmicdrift/kumiko-framework/secrets";
5
+ import { type GdprMailLocale } from "../email-templates.ts";
6
+ import type { SendDeletionRequestedEmailFn } from "../handlers/request-deletion.write.ts";
7
+ import type { SendExportFailedEmailFn, SendExportReadyEmailFn } from "../run-export-jobs.ts";
8
+ import type { SendDeletionExecutedEmailFn } from "../run-forget-cleanup.ts";
8
9
  export type GdprMailDefaults = {
9
10
  readonly locale?: GdprMailLocale;
10
11
  readonly appName?: string;
@@ -19,7 +20,9 @@ export declare function makeDefaultDeletionRequestedEmail(notify: NotifyFn, defa
19
20
  export type DeletionExecutedMailDeps = {
20
21
  readonly registry: Registry;
21
22
  readonly db: DbConnection;
23
+ /** Used only when no email delivery channel is mounted. */
22
24
  readonly resolveTransport: (tenantId: string) => Promise<EmailTransport>;
23
25
  readonly configFor: (tenantId: TenantId) => ConfigAccessor | undefined;
26
+ readonly secrets?: SecretsContext;
24
27
  };
25
28
  export declare function makeDefaultDeletionExecutedEmail(deps: DeletionExecutedMailDeps, defaults?: GdprMailDefaults): SendDeletionExecutedEmailFn;
@@ -7,11 +7,11 @@
7
7
  // to the user, so delivery resolves the address and the attempt row carries
8
8
  // the recipientId the forget path erases. Deletion-executed cannot: the user
9
9
  // is gone by then, and an attempt row written after the erasure would be new
10
- // personal data. It renders the seeded template and sends over the tenant's
11
- // mail transport, with no delivery log.
10
+ // personal data. It renders the seeded template and sends it straight through the
11
+ // email channel (or, without one, the tenant's mail transport), with no delivery log.
12
12
  import { MAIL_TRANSPORT_EXTENSION } from "@cosmicdrift/kumiko-bundled-features/mail-foundation";
13
13
  import { hasMailTranslations, mailT } from "@cosmicdrift/kumiko-framework/i18n";
14
- import { DELIVERY_CHANNEL_EXTENSION } from "../../delivery/index.js";
14
+ import { buildChannelContext, collectChannels, DELIVERY_CHANNEL_EXTENSION, EMAIL_CHANNEL_NAME, } from "../../delivery/index.js";
15
15
  import { collectRendererPlugins, createRendererFoundationApi, } from "../../renderer-foundation/index.js";
16
16
  import { formatGdprMailTimestamp, normalizeGdprMailLocale, } from "../email-templates.js";
17
17
  import { GdprMailNotificationTypes, gdprMailTemplateLocale } from "../mail-notifications.js";
@@ -88,6 +88,9 @@ export function makeDefaultDeletionRequestedEmail(notify, defaults = {}) {
88
88
  });
89
89
  };
90
90
  }
91
+ function emailChannelOf(registry) {
92
+ return collectChannels(registry).find((channel) => channel.name === EMAIL_CHANNEL_NAME);
93
+ }
91
94
  export function makeDefaultDeletionExecutedEmail(deps, defaults = {}) {
92
95
  return async (args) => {
93
96
  // Der User ist global, der Mail-Transport per-Tenant — wir senden ueber den
@@ -121,6 +124,25 @@ export function makeDefaultDeletionExecutedEmail(deps, defaults = {}) {
121
124
  if (rendered.kind !== "mail") {
122
125
  throw new Error(`deletion-executed mail: renderer answered with kind "${rendered.kind}"`);
123
126
  }
127
+ // The channel picks the same transport as every other mail of this notification
128
+ // (the app transport unless it is declared tenantTransport), so a tenant without
129
+ // its own mail provider still gets the confirmation. channel.send writes no attempt row.
130
+ const channel = emailChannelOf(deps.registry);
131
+ if (channel !== undefined) {
132
+ const result = await channel.send(args.userEmail, {
133
+ notificationType: type,
134
+ title: rendered.subject,
135
+ body: undefined,
136
+ data: undefined,
137
+ locale,
138
+ }, buildChannelContext(deps.db, deps.registry, undefined, tenantId, deps.secrets, config), { subject: rendered.subject, html: rendered.html, text: rendered.text });
139
+ if (result.status !== "sent") {
140
+ // No address in the message: the user is already erased.
141
+ throw new Error(`deletion-executed mail not sent: ${result.error ?? result.status}`);
142
+ }
143
+ // skip: the channel delivered it, the transport fallback below is for apps without one
144
+ return;
145
+ }
124
146
  const transport = await deps.resolveTransport(tenantId);
125
147
  await transport.send({
126
148
  to: args.userEmail,
@@ -1,6 +1,6 @@
1
1
  import { type TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
2
2
  import type { ClientFeatureDefinition } from "@cosmicdrift/kumiko-renderer-web";
3
- import { type PublicDeletionRoutes } from "./public-deletion-gate.js";
3
+ import { type PublicDeletionRoutes } from "./public-deletion-gate.tsx";
4
4
  export type UserDataRightsClientOptions = {
5
5
  /** Key-weise Overrides über die Default-Bundles (de/en). */
6
6
  readonly translations?: TranslationsByLocale;
@@ -1,8 +1,8 @@
1
- export { type UserDataRightsClientOptions, userDataRightsClient } from "./client-plugin.js";
2
- export type { ConfirmAccountDeletionScreenProps } from "./confirm-deletion-screen.js";
3
- export { ConfirmAccountDeletionScreen } from "./confirm-deletion-screen.js";
4
- export { defaultTranslations } from "./i18n.js";
5
- export { formatDate } from "./privacy-center-screen.js";
6
- export { makePublicDeletionGate, type PublicDeletionRoutes } from "./public-deletion-gate.js";
7
- export type { RequestAccountDeletionScreenProps } from "./request-deletion-screen.js";
8
- export { RequestAccountDeletionScreen } from "./request-deletion-screen.js";
1
+ export { type UserDataRightsClientOptions, userDataRightsClient } from "./client-plugin.tsx";
2
+ export type { ConfirmAccountDeletionScreenProps } from "./confirm-deletion-screen.tsx";
3
+ export { ConfirmAccountDeletionScreen } from "./confirm-deletion-screen.tsx";
4
+ export { defaultTranslations } from "./i18n.ts";
5
+ export { formatDate } from "./privacy-center-screen.tsx";
6
+ export { makePublicDeletionGate, type PublicDeletionRoutes } from "./public-deletion-gate.tsx";
7
+ export type { RequestAccountDeletionScreenProps } from "./request-deletion-screen.tsx";
8
+ export { RequestAccountDeletionScreen } from "./request-deletion-screen.tsx";
@@ -1,11 +1,11 @@
1
- export { createUserDataRightsDefaultsFeature } from "./feature.js";
2
- export { apiTokenDeleteHook, apiTokenExportHook } from "./hooks/api-token.userdata-hook.js";
3
- export { configValueDeleteHook, configValueExportHook, } from "./hooks/config-value.userdata-hook.js";
4
- export { deliveryAttemptDeleteHook, deliveryAttemptExportHook, } from "./hooks/delivery-attempt.userdata-hook.js";
5
- export { fileRefDeleteHook, fileRefExportHook, } from "./hooks/file-ref.userdata-hook.js";
6
- export { inAppMessageDeleteHook, inAppMessageExportHook, } from "./hooks/in-app-message.userdata-hook.js";
7
- export { jobRunDeleteHook, jobRunExportHook } from "./hooks/job-run.userdata-hook.js";
8
- export { notificationPreferenceDeleteHook, notificationPreferenceExportHook, } from "./hooks/notification-preference.userdata-hook.js";
9
- export { tenantInvitationDeleteHook, tenantInvitationExportHook, } from "./hooks/tenant-invitation.userdata-hook.js";
10
- export { userDeleteHook, userExportHook } from "./hooks/user.userdata-hook.js";
11
- export { userSessionDeleteHook, userSessionExportHook, } from "./hooks/user-session.userdata-hook.js";
1
+ export { createUserDataRightsDefaultsFeature } from "./feature.ts";
2
+ export { apiTokenDeleteHook, apiTokenExportHook } from "./hooks/api-token.userdata-hook.ts";
3
+ export { configValueDeleteHook, configValueExportHook, } from "./hooks/config-value.userdata-hook.ts";
4
+ export { deliveryAttemptDeleteHook, deliveryAttemptExportHook, } from "./hooks/delivery-attempt.userdata-hook.ts";
5
+ export { fileRefDeleteHook, fileRefExportHook, } from "./hooks/file-ref.userdata-hook.ts";
6
+ export { inAppMessageDeleteHook, inAppMessageExportHook, } from "./hooks/in-app-message.userdata-hook.ts";
7
+ export { jobRunDeleteHook, jobRunExportHook } from "./hooks/job-run.userdata-hook.ts";
8
+ export { notificationPreferenceDeleteHook, notificationPreferenceExportHook, } from "./hooks/notification-preference.userdata-hook.ts";
9
+ export { tenantInvitationDeleteHook, tenantInvitationExportHook, } from "./hooks/tenant-invitation.userdata-hook.ts";
10
+ export { userDeleteHook, userExportHook } from "./hooks/user.userdata-hook.ts";
11
+ export { userSessionDeleteHook, userSessionExportHook, } from "./hooks/user-session.userdata-hook.ts";
@@ -1,2 +1,2 @@
1
- export { USER_PROFILE_FEATURE, UserDataRightsHandlers, UserProfileErrors, UserProfileHandlers, UserProfileQueries, } from "./constants.js";
2
- export { createUserProfileFeature, type UserProfileFeatureOptions } from "./feature.js";
1
+ export { USER_PROFILE_FEATURE, UserDataRightsHandlers, UserProfileErrors, UserProfileHandlers, UserProfileQueries, } from "./constants.ts";
2
+ export { createUserProfileFeature, type UserProfileFeatureOptions } from "./feature.ts";
@@ -1,2 +1,2 @@
1
- export { type UserProfileClientFeature, type UserProfileClientOptions, userProfileClient, } from "./client-plugin.js";
2
- export { ChangeEmailSection, ChangePasswordSection } from "./profile-screen.js";
1
+ export { type UserProfileClientFeature, type UserProfileClientOptions, userProfileClient, } from "./client-plugin.ts";
2
+ export { ChangeEmailSection, ChangePasswordSection } from "./profile-screen.tsx";
@@ -2,6 +2,7 @@ export declare const WAITLIST_FEATURE: "waitlist";
2
2
  export declare const WAITLIST_STATUS: {
3
3
  readonly Pending: "pending";
4
4
  readonly Invited: "invited";
5
+ readonly Provisioned: "provisioned";
5
6
  readonly Rejected: "rejected";
6
7
  };
7
8
  export type WaitlistStatus = (typeof WAITLIST_STATUS)[keyof typeof WAITLIST_STATUS];
@@ -9,6 +10,8 @@ export declare const WaitlistHandlers: {
9
10
  readonly submit: "waitlist:write:submit";
10
11
  readonly invite: "waitlist:write:invite";
11
12
  readonly reject: "waitlist:write:reject";
13
+ readonly export: "waitlist:write:export";
14
+ readonly purge: "waitlist:write:purge";
12
15
  };
13
16
  export declare const WaitlistQueries: {
14
17
  readonly list: "waitlist:query:waitlist-entry:list";
@@ -16,6 +19,7 @@ export declare const WaitlistQueries: {
16
19
  export declare const WaitlistErrors: {
17
20
  readonly notInvitable: "waitlist_not_invitable";
18
21
  readonly notRejectable: "waitlist_not_rejectable";
22
+ readonly confirmCountMismatch: "waitlist_confirm_count_mismatch";
19
23
  };
20
24
  export declare const WAITLIST_NOTIFICATION_TYPES: {
21
25
  readonly confirmation: "waitlist:notify:confirmation";
@@ -31,3 +35,8 @@ export declare const WAITLIST_FIELD_LIMITS: {
31
35
  readonly locale: 35;
32
36
  readonly honeypot: 500;
33
37
  };
38
+ export declare const WAITLIST_EXPORTED_EVENT_SHORT: "exported";
39
+ export declare const WAITLIST_PURGED_EVENT_SHORT: "purged";
40
+ export declare const WAITLIST_EXPORTED_EVENT_QN: "waitlist:event:exported";
41
+ export declare const WAITLIST_PURGED_EVENT_QN: "waitlist:event:purged";
42
+ export declare const WAITLIST_AUDIT_AGGREGATE_TYPE: "waitlist-audit";
@@ -4,12 +4,15 @@ export const WAITLIST_FEATURE = "waitlist";
4
4
  export const WAITLIST_STATUS = {
5
5
  Pending: "pending",
6
6
  Invited: "invited",
7
+ Provisioned: "provisioned",
7
8
  Rejected: "rejected",
8
9
  };
9
10
  export const WaitlistHandlers = {
10
11
  submit: "waitlist:write:submit",
11
12
  invite: "waitlist:write:invite",
12
13
  reject: "waitlist:write:reject",
14
+ export: "waitlist:write:export",
15
+ purge: "waitlist:write:purge",
13
16
  };
14
17
  // Entity-convention list QN: entityList screens resolve their query by this shape.
15
18
  export const WaitlistQueries = {
@@ -18,6 +21,7 @@ export const WaitlistQueries = {
18
21
  export const WaitlistErrors = {
19
22
  notInvitable: "waitlist_not_invitable",
20
23
  notRejectable: "waitlist_not_rejectable",
24
+ confirmCountMismatch: "waitlist_confirm_count_mismatch",
21
25
  };
22
26
  export const WAITLIST_NOTIFICATION_TYPES = {
23
27
  confirmation: "waitlist:notify:confirmation",
@@ -33,3 +37,10 @@ export const WAITLIST_FIELD_LIMITS = {
33
37
  locale: 35,
34
38
  honeypot: 500,
35
39
  };
40
+ // Audit trail for the export/purge handlers: own aggregate per occurrence, payload
41
+ // carries counts only (never addresses).
42
+ export const WAITLIST_EXPORTED_EVENT_SHORT = "exported";
43
+ export const WAITLIST_PURGED_EVENT_SHORT = "purged";
44
+ export const WAITLIST_EXPORTED_EVENT_QN = "waitlist:event:exported";
45
+ export const WAITLIST_PURGED_EVENT_QN = "waitlist:event:purged";
46
+ export const WAITLIST_AUDIT_AGGREGATE_TYPE = "waitlist-audit";
@@ -134,23 +134,24 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
134
134
  status: {
135
135
  readonly type: "select";
136
136
  readonly description?: string;
137
- readonly options: readonly ["pending", "invited", "rejected"];
137
+ readonly options: readonly ["pending", "invited", "provisioned", "rejected"];
138
138
  readonly required?: boolean;
139
139
  readonly sortable?: boolean;
140
140
  readonly filterable?: boolean;
141
141
  readonly sensitive?: boolean;
142
- readonly default?: "invited" | "pending" | "rejected" | undefined;
142
+ readonly default?: "invited" | "pending" | "provisioned" | "rejected" | undefined;
143
143
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
144
144
  readonly display?: "radio" | "dropdown";
145
145
  readonly optionTones?: {
146
146
  readonly invited?: "bad" | "neutral" | "ok" | "warn" | undefined;
147
147
  readonly pending?: "bad" | "neutral" | "ok" | "warn" | undefined;
148
+ readonly provisioned?: "bad" | "neutral" | "ok" | "warn" | undefined;
148
149
  readonly rejected?: "bad" | "neutral" | "ok" | "warn" | undefined;
149
150
  } | undefined;
150
151
  readonly optionsQuery?: string;
151
152
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
152
153
  readonly optionsAvailabilityQuery?: string;
153
- readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "rejected">[] | undefined;
154
+ readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "provisioned" | "rejected">[] | undefined;
154
155
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
155
156
  required: true;
156
157
  };
@@ -207,6 +208,21 @@ export declare const waitlistEntryEntity: import("@cosmicdrift/kumiko-types/fiel
207
208
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
208
209
  required: false;
209
210
  };
211
+ provisionedAt: {
212
+ readonly type: "timestamp";
213
+ readonly description?: string;
214
+ readonly required?: boolean;
215
+ readonly sortable?: boolean;
216
+ readonly filterable?: boolean;
217
+ readonly sensitive?: boolean;
218
+ readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
219
+ readonly locatedBy?: string;
220
+ readonly min?: string;
221
+ readonly max?: string;
222
+ readonly locale?: string;
223
+ } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
224
+ required: false;
225
+ };
210
226
  linkedTenantId: {
211
227
  readonly type: "text";
212
228
  readonly description?: string;
@@ -366,23 +382,24 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
366
382
  status: {
367
383
  readonly type: "select";
368
384
  readonly description?: string;
369
- readonly options: readonly ["pending", "invited", "rejected"];
385
+ readonly options: readonly ["pending", "invited", "provisioned", "rejected"];
370
386
  readonly required?: boolean;
371
387
  readonly sortable?: boolean;
372
388
  readonly filterable?: boolean;
373
389
  readonly sensitive?: boolean;
374
- readonly default?: "invited" | "pending" | "rejected" | undefined;
390
+ readonly default?: "invited" | "pending" | "provisioned" | "rejected" | undefined;
375
391
  readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
376
392
  readonly display?: "radio" | "dropdown";
377
393
  readonly optionTones?: {
378
394
  readonly invited?: "bad" | "neutral" | "ok" | "warn" | undefined;
379
395
  readonly pending?: "bad" | "neutral" | "ok" | "warn" | undefined;
396
+ readonly provisioned?: "bad" | "neutral" | "ok" | "warn" | undefined;
380
397
  readonly rejected?: "bad" | "neutral" | "ok" | "warn" | undefined;
381
398
  } | undefined;
382
399
  readonly optionsQuery?: string;
383
400
  readonly optionsQueryPayload?: import("@cosmicdrift/kumiko-types/fields").OptionsQueryPayload;
384
401
  readonly optionsAvailabilityQuery?: string;
385
- readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "rejected">[] | undefined;
402
+ readonly conditionalOptions?: readonly import("@cosmicdrift/kumiko-types/fields").SelectConditionalOptions<"invited" | "pending" | "provisioned" | "rejected">[] | undefined;
386
403
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
387
404
  required: true;
388
405
  };
@@ -439,6 +456,21 @@ export declare const waitlistEntryTable: import("@cosmicdrift/kumiko-framework/d
439
456
  } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
440
457
  required: false;
441
458
  };
459
+ provisionedAt: {
460
+ readonly type: "timestamp";
461
+ readonly description?: string;
462
+ readonly required?: boolean;
463
+ readonly sortable?: boolean;
464
+ readonly filterable?: boolean;
465
+ readonly sensitive?: boolean;
466
+ readonly access?: import("@cosmicdrift/kumiko-types/fields").FieldAccess;
467
+ readonly locatedBy?: string;
468
+ readonly min?: string;
469
+ readonly max?: string;
470
+ readonly locale?: string;
471
+ } & import("@cosmicdrift/kumiko-types/fields").ResolvedPiiFlags & {
472
+ required: false;
473
+ };
442
474
  linkedTenantId: {
443
475
  readonly type: "text";
444
476
  readonly description?: string;
@@ -4,13 +4,14 @@ import { WAITLIST_STATUS } from "./constants.js";
4
4
  const WAITLIST_STATUS_OPTIONS = [
5
5
  WAITLIST_STATUS.Pending,
6
6
  WAITLIST_STATUS.Invited,
7
+ WAITLIST_STATUS.Provisioned,
7
8
  WAITLIST_STATUS.Rejected,
8
9
  ];
9
10
  const OPEN_WAITLIST_STATUSES = [
10
11
  WAITLIST_STATUS.Pending,
11
12
  WAITLIST_STATUS.Invited,
12
13
  ];
13
- // Entries still awaiting a decision; rejected is terminal.
14
+ // Entries still awaiting a decision; provisioned and rejected are terminal.
14
15
  export function isOpenWaitlistStatus(status) {
15
16
  return OPEN_WAITLIST_STATUSES.some((open) => open === status);
16
17
  }
@@ -22,7 +23,7 @@ export function isOpenWaitlistStatus(status) {
22
23
  // SYSTEM_TENANT_ID, which also lets the per-tenant GDPR hooks read them.
23
24
  export const waitlistEntryEntity = createEntity({
24
25
  table: "read_waitlist_entries",
25
- description: "A prospect's signup on the platform waitlist, tracked through pending, invited and rejected status as admins process it; name, email and message are the entry's own personal data.",
26
+ description: "A prospect's signup on the platform waitlist, tracked through pending, invited, provisioned and rejected status as admins process it; name, email and message are the entry's own personal data.",
26
27
  systemStream: true,
27
28
  tenancy: "global",
28
29
  fields: {
@@ -57,6 +58,7 @@ export const waitlistEntryEntity = createEntity({
57
58
  }),
58
59
  invitedAt: createTimestampField(),
59
60
  invitedBy: createTextField({ personal: false, reason: "is_admin_audit_id" }),
61
+ provisionedAt: createTimestampField(),
60
62
  // Not named tenantId: that is the framework's physical tenant column.
61
63
  linkedTenantId: createTextField({ personal: false, reason: "is_tenant_reference" }),
62
64
  },
@@ -0,0 +1,4 @@
1
+ import type { TenantDb } from "@cosmicdrift/kumiko-framework/db";
2
+ export type WaitlistRow = Record<string, unknown>;
3
+ export declare function listAllWaitlistRows(db: TenantDb): Promise<readonly WaitlistRow[]>;
4
+ export declare function purgeWaitlistRows(db: TenantDb, rows: readonly WaitlistRow[], requestedBy: string): Promise<void>;
@@ -0,0 +1,42 @@
1
+ import { configuredPiiSubjectKms } from "@cosmicdrift/kumiko-framework/crypto";
2
+ import { collectErasureFailure, throwIfErasureFailed } from "../shared/index.js";
3
+ import { platformActor, waitlistExecutor } from "./lib.js";
4
+ const PAGE_SIZE = 200;
5
+ const PURGE_REASON = "waitlist:purge";
6
+ // Pages by offset on a stable sort; the list is small (a marketing waitlist) and
7
+ // the callers hold the whole result anyway.
8
+ export async function listAllWaitlistRows(db) {
9
+ const rows = [];
10
+ for (let offset = 0;; offset += PAGE_SIZE) {
11
+ const page = await waitlistExecutor.list({ sort: "submittedAt", sortDirection: "asc", limit: PAGE_SIZE, offset }, platformActor(), db);
12
+ rows.push(...page.rows);
13
+ if (page.rows.length < PAGE_SIZE)
14
+ return rows;
15
+ }
16
+ }
17
+ // Same two-step erasure as the user-data delete hook: the executor forgets the
18
+ // row (replays on rebuild), then the record subject key is shredded so the event
19
+ // log's ciphertext becomes unreadable. Keys are shredded only after every forget
20
+ // succeeded: a thrown failure rolls the handler transaction back, and a shredded
21
+ // key cannot be restored.
22
+ export async function purgeWaitlistRows(db, rows, requestedBy) {
23
+ const failures = [];
24
+ const forgottenIds = [];
25
+ for (const row of rows) {
26
+ const id = row["id"];
27
+ if (typeof id !== "string")
28
+ continue;
29
+ const forgotten = await waitlistExecutor.forget({ id }, platformActor(), db);
30
+ collectErasureFailure(forgotten, "waitlistEntry", id, failures);
31
+ if (forgotten.isSuccess)
32
+ forgottenIds.push(id);
33
+ }
34
+ throwIfErasureFailed(failures);
35
+ const kms = configuredPiiSubjectKms();
36
+ // skip: no PII key service configured, so there are no record keys to shred.
37
+ if (!kms)
38
+ return;
39
+ for (const id of forgottenIds) {
40
+ await kms.eraseKey({ kind: "record", entity: "waitlistEntry", id }, { requestId: PURGE_REASON, userId: requestedBy, eraseReason: PURGE_REASON });
41
+ }
42
+ }
@@ -1,3 +1,3 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { WaitlistOptions } from "./options.js";
2
+ import type { WaitlistOptions } from "./options.ts";
3
3
  export declare function createWaitlistFeature(opts?: WaitlistOptions): FeatureDefinition;
@@ -1,13 +1,16 @@
1
1
  import { defineFeature, EXT_USER_DATA, i18nKey, } from "@cosmicdrift/kumiko-framework/engine";
2
- import { WAITLIST_FEATURE } from "./constants.js";
2
+ import { WAITLIST_EXPORTED_EVENT_SHORT, WAITLIST_FEATURE, WAITLIST_PURGED_EVENT_SHORT, } from "./constants.js";
3
3
  import { waitlistEntryEntity } from "./entity.js";
4
+ import { exportHandler, purgeHandler } from "./handlers/export-purge.write.js";
4
5
  import { createInviteHandler } from "./handlers/invite.write.js";
5
6
  import { listQuery } from "./handlers/list.query.js";
6
7
  import { rejectHandler } from "./handlers/reject.write.js";
7
8
  import { createSubmitHandler } from "./handlers/submit.write.js";
8
9
  import { WAITLIST_I18N } from "./i18n.js";
9
10
  import { adminAccess } from "./lib.js";
11
+ import { linkWaitlistOnSignup, WAITLIST_MEMBERSHIP_CREATED_EVENT } from "./link-on-signup.js";
10
12
  import { WAITLIST_ADMIN_NOTICE_RECORD, WAITLIST_ADMIN_NOTICE_VARIABLES, WAITLIST_CONFIRMATION_VARIABLES, waitlistAdminNoticeTemplate, waitlistConfirmationTemplate, } from "./mail.js";
13
+ import { WaitlistAuditEventSchema } from "./payloads.js";
11
14
  import { waitlistListScreen } from "./screens.js";
12
15
  import { waitlistEntryDeleteHook, waitlistEntryExportHook } from "./user-data-hooks.js";
13
16
  export function createWaitlistFeature(opts = {}) {
@@ -31,6 +34,18 @@ export function createWaitlistFeature(opts = {}) {
31
34
  r.writeHandler(createInviteHandler(opts.invite));
32
35
  r.writeHandler(rejectHandler);
33
36
  r.queryHandler(listQuery);
37
+ if (opts.exportPurge !== false) {
38
+ r.defineEvent(WAITLIST_EXPORTED_EVENT_SHORT, WaitlistAuditEventSchema, { piiFields: "none" });
39
+ r.defineEvent(WAITLIST_PURGED_EVENT_SHORT, WaitlistAuditEventSchema, { piiFields: "none" });
40
+ r.writeHandler(exportHandler);
41
+ r.writeHandler(purgeHandler);
42
+ }
43
+ if (opts.linkOnSignup === true) {
44
+ r.multiStreamProjection({
45
+ name: "link-on-signup",
46
+ apply: { [WAITLIST_MEMBERSHIP_CREATED_EVENT]: linkWaitlistOnSignup },
47
+ });
48
+ }
34
49
  r.screen(waitlistListScreen);
35
50
  r.nav({
36
51
  id: "waitlist",