@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
@@ -0,0 +1,27 @@
1
+ import * as z from "zod";
2
+ /** Env block `createSmtpTransportFromEnv` reads. All optional: without
3
+ * `SMTP_HOST` no app-level transport is built and auth mail flows stay off. */
4
+ export const smtpEnvSchema = z.object({
5
+ SMTP_HOST: z.string().min(1).optional().describe("SMTP host; unset disables app-level mail."),
6
+ SMTP_PORT: z
7
+ .string()
8
+ .regex(/^\d+$/, "must be a port number")
9
+ .optional()
10
+ .describe("SMTP port (default 587)."),
11
+ SMTP_SECURE: z
12
+ .enum(["true", "false"])
13
+ .optional()
14
+ .describe('Implicit TLS ("true") or STARTTLS/plain ("false", default).'),
15
+ SMTP_USER: z.string().min(1).optional().describe("SMTP auth user; auth needs SMTP_PASS too."),
16
+ SMTP_PASS: z
17
+ .string()
18
+ .min(1)
19
+ .optional()
20
+ .describe("SMTP auth password.")
21
+ .meta({ kumiko: { pulumi: { secret: true } } }),
22
+ SMTP_FROM: z
23
+ .string()
24
+ .min(1)
25
+ .optional()
26
+ .describe("Sender address; the app's fallback sender applies when unset."),
27
+ });
@@ -1,3 +1,14 @@
1
- import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type EmailChannelOptions } from "./email-channel.js";
3
- export declare function createChannelEmailFeature(options: EmailChannelOptions): FeatureDefinition;
1
+ import { type EmailChannelOptions } from "./email-channel.ts";
2
+ export declare function createChannelEmailFeature(options: EmailChannelOptions): import("@cosmicdrift/kumiko-framework/env").FeatureWithEnvSchema<import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
3
+ readonly exports: void;
4
+ }, {
5
+ SMTP_HOST: import("zod").ZodOptional<import("zod").ZodString>;
6
+ SMTP_PORT: import("zod").ZodOptional<import("zod").ZodString>;
7
+ SMTP_SECURE: import("zod").ZodOptional<import("zod").ZodEnum<{
8
+ false: "false";
9
+ true: "true";
10
+ }>>;
11
+ SMTP_USER: import("zod").ZodOptional<import("zod").ZodString>;
12
+ SMTP_PASS: import("zod").ZodOptional<import("zod").ZodString>;
13
+ SMTP_FROM: import("zod").ZodOptional<import("zod").ZodString>;
14
+ }>;
@@ -1,16 +1,19 @@
1
1
  import { DELIVERY_CHANNEL_EXTENSION, EMAIL_CHANNEL_NAME, } from "@cosmicdrift/kumiko-bundled-features/delivery";
2
2
  import { defineFeature } from "@cosmicdrift/kumiko-framework/engine";
3
+ import { featureWithEnvSchema } from "@cosmicdrift/kumiko-framework/env";
3
4
  import { createEmailChannel } from "./email-channel.js";
5
+ import { smtpEnvSchema } from "./env.js";
4
6
  export function createChannelEmailFeature(options) {
5
7
  const channel = createEmailChannel(options);
6
- return defineFeature("channel-email", (r) => {
7
- r.describe("Wires an `EmailTransport` (typically `mail-transport-smtp` in production, `createInMemoryTransport()` in tests) into the delivery system as the `email` channel. Requires `delivery`; pass an `EmailChannelOptions` with a `transport` and a `resolveEmail` function that maps a user ID to their email address. Mails render from stored templates (`renderer-mail-html`): a notification routed to this channel needs `template` + `meta` on `r.notification`, otherwise its delivery fails. Pass `tenantTransport: tenantMailTransport` (from `mail-foundation`) to send each tenant's mail through its own configured provider: a broken provider fails the send, a tenant without one uses the app `transport`. Notifications declared with `unsubscribe: true` get a signed `data.unsubscribeUrl` from delivery, which turns into the `List-Unsubscribe` headers.");
8
+ const feature = defineFeature("channel-email", (r) => {
9
+ r.describe("Wires an `EmailTransport` (typically `mail-transport-smtp` in production, `createInMemoryTransport()` in tests) into the delivery system as the `email` channel. Requires `delivery`; pass an `EmailChannelOptions` with a `transport` and a `resolveEmail` function that maps a user ID to their email address. Mails render from stored templates (`renderer-mail-html`): a notification routed to this channel needs `template` + `meta` on `r.notification`, otherwise its delivery fails. Pass `tenantTransport: tenantMailTransport` (from `mail-foundation`) to send the notifications declared with `tenantTransport: true` through the sending tenant's own configured provider: a broken provider fails the send, a tenant without one uses the app `transport`; every other notification (password reset, sign-in) always goes through the app `transport`. `transport` may be left out when `tenantTransport` is set; a mail that then has no transport fails with `missing_credentials`. Notifications declared with `unsubscribe: true` get a signed `data.unsubscribeUrl` from delivery, which turns into the `List-Unsubscribe` headers.");
8
10
  r.uiHints({
9
11
  displayLabel: "Email Channel",
10
12
  category: "notifications",
11
13
  recommended: false,
12
14
  });
13
15
  r.requires({ features: ["delivery"] });
16
+ r.envSchema(smtpEnvSchema);
14
17
  r.translations({ keys: { "delivery.channel.email": { en: "Email" } } });
15
18
  r.useExtension(DELIVERY_CHANNEL_EXTENSION, EMAIL_CHANNEL_NAME, {
16
19
  mode: channel.mode,
@@ -19,4 +22,5 @@ export function createChannelEmailFeature(options) {
19
22
  send: channel.send,
20
23
  });
21
24
  });
25
+ return featureWithEnvSchema(feature, smtpEnvSchema);
22
26
  }
@@ -1,5 +1,6 @@
1
- export { createEmailChannel, type EmailChannelOptions } from "./email-channel.js";
2
- export { createChannelEmailFeature } from "./feature.js";
3
- export { guardEmailMessage, withPiiCiphertextGuard } from "./pii-guard.js";
4
- export { createSmtpTransport, createSmtpTransportFromEnv, type SmtpEnv, type SmtpTransportOptions, } from "./smtp-transport.js";
5
- export { createInMemoryTransport, type EmailAttachment, type EmailAttachmentRef, type EmailMessage, type EmailTransport, } from "./types.js";
1
+ export { createEmailChannel, type EmailChannelOptions, type TenantTransportResolver, } from "./email-channel.ts";
2
+ export { smtpEnvSchema } from "./env.ts";
3
+ export { createChannelEmailFeature } from "./feature.ts";
4
+ export { guardEmailMessage, withPiiCiphertextGuard } from "./pii-guard.ts";
5
+ export { createSmtpTransport, createSmtpTransportFromEnv, type SmtpEnv, type SmtpTransportOptions, } from "./smtp-transport.ts";
6
+ export { createInMemoryTransport, type EmailAttachment, type EmailAttachmentRef, type EmailMessage, type EmailTransport, } from "./types.ts";
@@ -1,4 +1,5 @@
1
- export { createEmailChannel } from "./email-channel.js";
1
+ export { createEmailChannel, } from "./email-channel.js";
2
+ export { smtpEnvSchema } from "./env.js";
2
3
  export { createChannelEmailFeature } from "./feature.js";
3
4
  export { guardEmailMessage, withPiiCiphertextGuard } from "./pii-guard.js";
4
5
  export { createSmtpTransport, createSmtpTransportFromEnv, } from "./smtp-transport.js";
@@ -1,3 +1,3 @@
1
- import type { EmailMessage, EmailTransport } from "./types.js";
1
+ import type { EmailMessage, EmailTransport } from "./types.ts";
2
2
  export declare function guardEmailMessage(message: EmailMessage): EmailMessage;
3
3
  export declare function withPiiCiphertextGuard(transport: EmailTransport): EmailTransport;
@@ -1,4 +1,4 @@
1
- import type { EmailTransport } from "./types.js";
1
+ import type { EmailTransport } from "./types.ts";
2
2
  export type SmtpTransportOptions = {
3
3
  /** SMTP-Server-Host (z.B. "smtp.gmail.com", "in-v3.mailjet.com",
4
4
  * "localhost" für Mailhog/MailCatcher in dev). */
@@ -1,4 +1,4 @@
1
- import type { EmailAttachmentRef, FileAttachmentRef, InlineAttachmentRef, RenderedPdfAttachmentRef } from "../delivery/index.js";
1
+ import type { EmailAttachmentRef, FileAttachmentRef, InlineAttachmentRef, RenderedPdfAttachmentRef } from "../delivery/index.ts";
2
2
  export type { EmailAttachmentRef };
3
3
  export type EmailAttachment = (InlineAttachmentRef | FileAttachmentRef | Pick<RenderedPdfAttachmentRef, "kind" | "templateSlug">) & {
4
4
  readonly content: Uint8Array;
@@ -1,2 +1,2 @@
1
- import type { DeliveryChannel } from "../delivery/index.js";
1
+ import type { DeliveryChannel } from "../delivery/index.ts";
2
2
  export declare const inAppChannel: DeliveryChannel;
@@ -1,4 +1,4 @@
1
- export { CHANNEL_IN_APP_FEATURE, InAppHandlers, InAppQueries } from "./constants.js";
2
- export { createChannelInAppFeature } from "./feature.js";
3
- export { inAppChannel } from "./in-app-channel.js";
4
- export { inAppMessagesTable } from "./tables.js";
1
+ export { CHANNEL_IN_APP_FEATURE, InAppHandlers, InAppQueries } from "./constants.ts";
2
+ export { createChannelInAppFeature } from "./feature.ts";
3
+ export { inAppChannel } from "./in-app-channel.ts";
4
+ export { inAppMessagesTable } from "./tables.ts";
@@ -1,3 +1,3 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type PushChannelOptions } from "./push-channel.js";
2
+ import { type PushChannelOptions } from "./push-channel.ts";
3
3
  export declare function createChannelPushFeature(options: PushChannelOptions): FeatureDefinition;
@@ -1,3 +1,3 @@
1
- export { createChannelPushFeature } from "./feature.js";
2
- export { createPushChannel, type PushChannelOptions } from "./push-channel.js";
3
- export { createInMemoryPushTransport, type PushMessage, type PushTransport } from "./types.js";
1
+ export { createChannelPushFeature } from "./feature.ts";
2
+ export { createPushChannel, type PushChannelOptions } from "./push-channel.ts";
3
+ export { createInMemoryPushTransport, type PushMessage, type PushTransport } from "./types.ts";
@@ -1,6 +1,6 @@
1
1
  import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
2
- import type { DeliveryChannel } from "../delivery/index.js";
3
- import type { PushTransport } from "./types.js";
2
+ import type { DeliveryChannel } from "../delivery/index.ts";
3
+ import type { PushTransport } from "./types.ts";
4
4
  export type PushChannelOptions = {
5
5
  readonly transport: PushTransport;
6
6
  readonly resolveToken: (userId: string, ctx: {
@@ -1,3 +1,3 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type SlackChannelOptions } from "./slack-channel.js";
2
+ import { type SlackChannelOptions } from "./slack-channel.ts";
3
3
  export declare function createChannelSlackFeature(options?: SlackChannelOptions): FeatureDefinition;
@@ -1,2 +1,2 @@
1
- export { createChannelSlackFeature } from "./feature.js";
2
- export { createSlackChannel, SLACK_DEFAULT_ALLOWED_HOSTS, SLACK_SECRET_KEYS, type SlackChannelOptions, } from "./slack-channel.js";
1
+ export { createChannelSlackFeature } from "./feature.ts";
2
+ export { createSlackChannel, SLACK_DEFAULT_ALLOWED_HOSTS, SLACK_SECRET_KEYS, type SlackChannelOptions, } from "./slack-channel.ts";
@@ -1,4 +1,4 @@
1
- import { type ChatWebhookChannelOptions, type DeliveryChannel } from "../delivery/index.js";
1
+ import { type ChatWebhookChannelOptions, type DeliveryChannel } from "../delivery/index.ts";
2
2
  export type SlackChannelOptions = ChatWebhookChannelOptions;
3
3
  export declare const SLACK_SECRET_KEYS: {
4
4
  readonly webhookPrefix: "channel-slack:webhooks.";
@@ -1,3 +1,3 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type TeamsChannelOptions } from "./teams-channel.js";
2
+ import { type TeamsChannelOptions } from "./teams-channel.ts";
3
3
  export declare function createChannelTeamsFeature(options?: TeamsChannelOptions): FeatureDefinition;
@@ -1,2 +1,2 @@
1
- export { createChannelTeamsFeature } from "./feature.js";
2
- export { createTeamsChannel, TEAMS_DEFAULT_ALLOWED_HOSTS, TEAMS_SECRET_KEYS, type TeamsChannelOptions, } from "./teams-channel.js";
1
+ export { createChannelTeamsFeature } from "./feature.ts";
2
+ export { createTeamsChannel, TEAMS_DEFAULT_ALLOWED_HOSTS, TEAMS_SECRET_KEYS, type TeamsChannelOptions, } from "./teams-channel.ts";
@@ -1,4 +1,4 @@
1
- import { type ChatSendResult, type ChatWebhookChannelOptions, type ChatWebhookResponse, type DeliveryChannel } from "../delivery/index.js";
1
+ import { type ChatSendResult, type ChatWebhookChannelOptions, type ChatWebhookResponse, type DeliveryChannel } from "../delivery/index.ts";
2
2
  export type TeamsChannelOptions = ChatWebhookChannelOptions;
3
3
  export declare const TEAMS_SECRET_KEYS: {
4
4
  readonly webhookPrefix: "channel-teams:webhooks.";
@@ -1,3 +1,3 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type TelegramChannelOptions } from "./telegram-channel.js";
2
+ import { type TelegramChannelOptions } from "./telegram-channel.ts";
3
3
  export declare function createChannelTelegramFeature(options?: TelegramChannelOptions): FeatureDefinition;
@@ -1,2 +1,2 @@
1
- export { createChannelTelegramFeature } from "./feature.js";
2
- export { createTelegramChannel, isTelegramBotToken, isTelegramChatId, TELEGRAM_DEFAULT_API_BASE_URL, TELEGRAM_SECRET_KEYS, type TelegramChannelOptions, } from "./telegram-channel.js";
1
+ export { createChannelTelegramFeature } from "./feature.ts";
2
+ export { createTelegramChannel, isTelegramBotToken, isTelegramChatId, TELEGRAM_DEFAULT_API_BASE_URL, TELEGRAM_SECRET_KEYS, type TelegramChannelOptions, } from "./telegram-channel.ts";
@@ -1,4 +1,4 @@
1
- import { type DeliveryChannel } from "../delivery/index.js";
1
+ import { type DeliveryChannel } from "../delivery/index.ts";
2
2
  export type TelegramChannelOptions = {
3
3
  readonly apiBaseUrl?: string;
4
4
  readonly allowedHosts?: readonly string[];
@@ -1,5 +1,5 @@
1
1
  import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- export { tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./schema/profile-selection.js";
2
+ export { tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./schema/profile-selection.ts";
3
3
  export type ComplianceProfilesFeatureOptions = {
4
4
  readonly access?: readonly string[];
5
5
  };
@@ -1,3 +1,3 @@
1
- export { COMPLIANCE_PROFILE_SCREEN_ID, COMPLIANCE_PROFILES_FEATURE, ComplianceProfileHandlers, ComplianceProfileQueries, } from "./constants.js";
2
- export { type ComplianceProfilesFeatureOptions, createComplianceProfilesFeature, tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./feature.js";
3
- export { resolveProfileForTenant } from "./resolve-for-tenant.js";
1
+ export { COMPLIANCE_PROFILE_SCREEN_ID, COMPLIANCE_PROFILES_FEATURE, ComplianceProfileHandlers, ComplianceProfileQueries, } from "./constants.ts";
2
+ export { type ComplianceProfilesFeatureOptions, createComplianceProfilesFeature, tenantComplianceProfileEntity, tenantComplianceProfileTable, } from "./feature.ts";
3
+ export { resolveProfileForTenant } from "./resolve-for-tenant.ts";
@@ -1,2 +1,2 @@
1
- export { type ComplianceProfilesClientOptions, complianceProfilesClient, } from "./client-plugin.js";
2
- export { ComplianceProfileCatalog } from "./compliance-profile-catalog.js";
1
+ export { type ComplianceProfilesClientOptions, complianceProfilesClient, } from "./client-plugin.tsx";
2
+ export { ComplianceProfileCatalog } from "./compliance-profile-catalog.tsx";
@@ -5,11 +5,3 @@ export declare function createComplianceProfilesOpsFeature(): import("@cosmicdri
5
5
  };
6
6
  };
7
7
  };
8
- /** @deprecated Use createComplianceProfilesOpsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
9
- export declare const complianceProfilesOpsFeature: import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
10
- readonly exports: {
11
- queries: {
12
- tenantsMissingProfile: import("@cosmicdrift/kumiko-types/handlers").HandlerRef;
13
- };
14
- };
15
- };
@@ -28,5 +28,3 @@ export function createComplianceProfilesOpsFeature() {
28
28
  return { queries };
29
29
  }, { dedupeOptions: {} });
30
30
  }
31
- /** @deprecated Use createComplianceProfilesOpsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
32
- export const complianceProfilesOpsFeature = createComplianceProfilesOpsFeature();
@@ -1,7 +1,7 @@
1
1
  import type { DbConnection, TenantDb } from "@cosmicdrift/kumiko-framework/db";
2
2
  import { type ConfigAccessor, type ConfigAccessorFactory, type ConfigSecretsReader, type FeatureDefinition, type HandlerContext, type Registry, type TenantId } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import type { EnvelopeCipher } from "@cosmicdrift/kumiko-framework/secrets";
4
- import type { ConfigResolver } from "./resolver.js";
4
+ import type { ConfigResolver } from "./resolver.ts";
5
5
  export type ConfigContext = {
6
6
  readonly config: ConfigAccessor;
7
7
  };
@@ -1,5 +1,5 @@
1
1
  import { type JobHandlerFn } from "@cosmicdrift/kumiko-framework/engine";
2
- import { type ChunkedMigrationStopReason } from "../../shared/index.js";
2
+ import { type ChunkedMigrationStopReason } from "../../shared/index.ts";
3
3
  export type ReencryptJobPayload = {
4
4
  readonly maxDurationMs?: number;
5
5
  readonly maxFailures?: number;
@@ -1,14 +1,14 @@
1
1
  import type { DbConnection } from "@cosmicdrift/kumiko-framework/db";
2
2
  import type { Registry } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import type { EnvelopeCipher } from "@cosmicdrift/kumiko-framework/secrets";
4
- export { CONFIG_FEATURE, ConfigErrors, ConfigHandlers, ConfigQueries, } from "./constants.js";
5
- export type { ConfigContext } from "./feature.js";
6
- export { createConfigAccessor, createConfigAccessorFactory, createConfigFeature, } from "./feature.js";
7
- export type { ReadinessMissingKey, RequiredKeyGate } from "./handlers/readiness.query.js";
8
- export { buildProviderSelectionGate, collectMissingRequiredConfig, } from "./handlers/readiness.query.js";
9
- export type { AppConfigOverrides, ConfigResolver } from "./resolver.js";
10
- export { buildEnvConfigOverrides, createConfigResolver, validateAppOverrides } from "./resolver.js";
11
- export { configValueEntity, configValuesTable } from "./table.js";
4
+ export { CONFIG_FEATURE, ConfigErrors, ConfigHandlers, ConfigQueries, } from "./constants.ts";
5
+ export type { ConfigContext } from "./feature.ts";
6
+ export { createConfigAccessor, createConfigAccessorFactory, createConfigFeature, } from "./feature.ts";
7
+ export type { ReadinessMissingKey, RequiredKeyGate } from "./handlers/readiness.query.ts";
8
+ export { buildProviderSelectionGate, collectMissingRequiredConfig, } from "./handlers/readiness.query.ts";
9
+ export type { AppConfigOverrides, ConfigResolver } from "./resolver.ts";
10
+ export { buildEnvConfigOverrides, createConfigResolver, validateAppOverrides } from "./resolver.ts";
11
+ export { configValueEntity, configValuesTable } from "./table.ts";
12
12
  export declare function seedAllConfigValues(registry: Registry, db: DbConnection, cipher?: EnvelopeCipher): Promise<{
13
13
  created: number;
14
14
  skipped: number;
@@ -1,5 +1,5 @@
1
1
  import { type TranslationsByLocale } from "@cosmicdrift/kumiko-renderer";
2
- import { CONFIG_FEATURE } from "../constants.js";
2
+ import { CONFIG_FEATURE } from "../constants.ts";
3
3
  export type ConfigClientOptions = {
4
4
  /** Key-wise overrides over the default bundles (de/en). */
5
5
  readonly translations?: TranslationsByLocale;
@@ -27,9 +27,8 @@ export const defaultTranslations = {
27
27
  "config.errors.invalidScope": "This scope is not allowed for this key.",
28
28
  "config.errors.unknownKey": "Unknown configuration key.",
29
29
  "config.errors.unknownExtensionPlugin": "This provider is not available.",
30
- "config.settings.extensionSelectorHint": "Choose a provider and save. Its settings appear below.",
30
+ "config.settings.extensionSelectorHint": "Choose a provider. Its settings appear below and are saved together with it.",
31
31
  "config.settings.provider": "Provider",
32
- "config.settings.saveProvider": "Save provider",
33
32
  "config.settings.audience.system": "Applies to every tenant unless a tenant sets its own value.",
34
33
  "config.settings.audience.tenant": "Applies to everyone in this tenant. Platform defaults are shown where nothing is set here.",
35
34
  "config.settings.audience.user": "Only applies to you.",
@@ -1,2 +1,2 @@
1
- export { type ConfigClientFeature, type ConfigClientOptions, configClient, } from "./client-plugin.js";
2
- export { defaultTranslations } from "./i18n.js";
1
+ export { type ConfigClientFeature, type ConfigClientOptions, configClient, } from "./client-plugin.ts";
2
+ export { defaultTranslations } from "./i18n.ts";
@@ -0,0 +1,21 @@
1
+ import * as z from "zod";
2
+ /** Env block of the subject-key KMS: the platform KEK (and its rotation
3
+ * predecessor), the blind-index key, the DEK store, and the Key Manager
4
+ * coordinates for slots delivered as `<NAME>_CIPHERTEXT`. Every field is
5
+ * optional here; an app that requires crypto-shredding in production enforces
6
+ * the all-or-none set in its own boot wiring. */
7
+ export declare const kmsEnvSchema: z.ZodObject<{
8
+ PLATFORM_KEK: z.ZodOptional<z.ZodString>;
9
+ SUBJECT_KEYS_DATABASE_URL: z.ZodOptional<z.ZodString>;
10
+ KUMIKO_BLIND_INDEX_KEY: z.ZodOptional<z.ZodString>;
11
+ PLATFORM_KEK_VERSION: z.ZodOptional<z.ZodString>;
12
+ PLATFORM_KEK_PREVIOUS: z.ZodOptional<z.ZodString>;
13
+ PLATFORM_KEK_PREVIOUS_VERSION: z.ZodOptional<z.ZodString>;
14
+ PLATFORM_KEK_CIPHERTEXT: z.ZodOptional<z.ZodString>;
15
+ PLATFORM_KEK_PREVIOUS_CIPHERTEXT: z.ZodOptional<z.ZodString>;
16
+ KUMIKO_BLIND_INDEX_KEY_CIPHERTEXT: z.ZodOptional<z.ZodString>;
17
+ KUMIKO_SECRETS_MASTER_KEY_V1_CIPHERTEXT: z.ZodOptional<z.ZodString>;
18
+ PLATFORM_KEK_KMS_KEY_ID: z.ZodOptional<z.ZodString>;
19
+ PLATFORM_KEK_KMS_TOKEN: z.ZodOptional<z.ZodString>;
20
+ PLATFORM_KEK_KMS_REGION: z.ZodOptional<z.ZodString>;
21
+ }, z.core.$strip>;
@@ -0,0 +1,78 @@
1
+ import * as z from "zod";
2
+ const GENERATED_KEY = { generator: "openssl rand -base64 32", secret: true };
3
+ /** Env block of the subject-key KMS: the platform KEK (and its rotation
4
+ * predecessor), the blind-index key, the DEK store, and the Key Manager
5
+ * coordinates for slots delivered as `<NAME>_CIPHERTEXT`. Every field is
6
+ * optional here; an app that requires crypto-shredding in production enforces
7
+ * the all-or-none set in its own boot wiring. */
8
+ export const kmsEnvSchema = z.object({
9
+ PLATFORM_KEK: z
10
+ .string()
11
+ .min(1)
12
+ .optional()
13
+ .describe("KEK (base64, 32 bytes) that wraps the subject DEKs in the subject-keys store. Losing it makes every encrypted PII field unreadable.")
14
+ .meta({ kumiko: { kms: true, pulumi: GENERATED_KEY } }),
15
+ SUBJECT_KEYS_DATABASE_URL: z
16
+ .string()
17
+ .min(1)
18
+ .optional()
19
+ .describe("Connection URL of the subject-keys database (DEK store). Comes from the database secret, never from Pulumi config."),
20
+ KUMIKO_BLIND_INDEX_KEY: z
21
+ .string()
22
+ .min(1)
23
+ .optional()
24
+ .describe("HMAC key (base64, 32 bytes) for blind-index columns, the equality lookups on encrypted fields. Kept separate from the KEK.")
25
+ .meta({ kumiko: { kms: true, pulumi: GENERATED_KEY } }),
26
+ PLATFORM_KEK_VERSION: z
27
+ .string()
28
+ .regex(/^\d+$/, "must be a generation number")
29
+ .optional()
30
+ .describe("Active KEK generation (default 1)."),
31
+ PLATFORM_KEK_PREVIOUS: z
32
+ .string()
33
+ .min(1)
34
+ .optional()
35
+ .describe("KEK of the previous generation (base64), set only during a rotation.")
36
+ .meta({ kumiko: { kms: true } }),
37
+ PLATFORM_KEK_PREVIOUS_VERSION: z
38
+ .string()
39
+ .regex(/^\d+$/, "must be a generation number")
40
+ .optional()
41
+ .describe("Generation number of the previous KEK."),
42
+ PLATFORM_KEK_CIPHERTEXT: z
43
+ .string()
44
+ .min(1)
45
+ .optional()
46
+ .describe("Key Manager ciphertext of PLATFORM_KEK, used when PLATFORM_KEK is unset. Not a Pulumi secret: it is useless without the Key Manager key."),
47
+ PLATFORM_KEK_PREVIOUS_CIPHERTEXT: z
48
+ .string()
49
+ .min(1)
50
+ .optional()
51
+ .describe("Key Manager ciphertext of PLATFORM_KEK_PREVIOUS, rotation only."),
52
+ KUMIKO_BLIND_INDEX_KEY_CIPHERTEXT: z
53
+ .string()
54
+ .min(1)
55
+ .optional()
56
+ .describe("Key Manager ciphertext of KUMIKO_BLIND_INDEX_KEY, wrapped by the same key as the KEK."),
57
+ KUMIKO_SECRETS_MASTER_KEY_V1_CIPHERTEXT: z
58
+ .string()
59
+ .min(1)
60
+ .optional()
61
+ .describe("Key Manager ciphertext of KUMIKO_SECRETS_MASTER_KEY_V1, wrapped by the same key as the KEK."),
62
+ PLATFORM_KEK_KMS_KEY_ID: z
63
+ .string()
64
+ .min(1)
65
+ .optional()
66
+ .describe("Scaleway Key Manager key id the ciphertexts were wrapped with."),
67
+ PLATFORM_KEK_KMS_TOKEN: z
68
+ .string()
69
+ .min(1)
70
+ .optional()
71
+ .describe("Scaleway API secret key for the decrypt call. Scope it to KeyManagerKeyDecrypt; a broader key trades the KEK for infrastructure access.")
72
+ .meta({ kumiko: { pulumi: { secret: true } } }),
73
+ PLATFORM_KEK_KMS_REGION: z
74
+ .string()
75
+ .min(1)
76
+ .optional()
77
+ .describe("Key Manager region. Default fr-par."),
78
+ });
@@ -1,2 +1,17 @@
1
- import { type FeatureDefinition } from "@cosmicdrift/kumiko-framework/engine";
2
- export declare function createCryptoShreddingFeature(): FeatureDefinition;
1
+ export declare function createCryptoShreddingFeature(): import("@cosmicdrift/kumiko-framework/env").FeatureWithEnvSchema<import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
2
+ readonly exports: void;
3
+ }, {
4
+ PLATFORM_KEK: import("zod").ZodOptional<import("zod").ZodString>;
5
+ SUBJECT_KEYS_DATABASE_URL: import("zod").ZodOptional<import("zod").ZodString>;
6
+ KUMIKO_BLIND_INDEX_KEY: import("zod").ZodOptional<import("zod").ZodString>;
7
+ PLATFORM_KEK_VERSION: import("zod").ZodOptional<import("zod").ZodString>;
8
+ PLATFORM_KEK_PREVIOUS: import("zod").ZodOptional<import("zod").ZodString>;
9
+ PLATFORM_KEK_PREVIOUS_VERSION: import("zod").ZodOptional<import("zod").ZodString>;
10
+ PLATFORM_KEK_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
11
+ PLATFORM_KEK_PREVIOUS_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
12
+ KUMIKO_BLIND_INDEX_KEY_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
13
+ KUMIKO_SECRETS_MASTER_KEY_V1_CIPHERTEXT: import("zod").ZodOptional<import("zod").ZodString>;
14
+ PLATFORM_KEK_KMS_KEY_ID: import("zod").ZodOptional<import("zod").ZodString>;
15
+ PLATFORM_KEK_KMS_TOKEN: import("zod").ZodOptional<import("zod").ZodString>;
16
+ PLATFORM_KEK_KMS_REGION: import("zod").ZodOptional<import("zod").ZodString>;
17
+ }>;
@@ -1,13 +1,16 @@
1
1
  import { defineFeature } from "@cosmicdrift/kumiko-framework/engine";
2
+ import { featureWithEnvSchema } from "@cosmicdrift/kumiko-framework/env";
2
3
  import { CRYPTO_SHREDDING_FEATURE_NAME } from "./constants.js";
4
+ import { kmsEnvSchema } from "./env/index.js";
3
5
  import { forgetSubjectWrite, subjectForgetDeniedSchema, subjectForgottenSchema, } from "./handlers/forget-subject.write.js";
4
6
  export function createCryptoShreddingFeature() {
5
- return defineFeature(CRYPTO_SHREDDING_FEATURE_NAME, (r) => {
7
+ const feature = defineFeature(CRYPTO_SHREDDING_FEATURE_NAME, (r) => {
6
8
  r.describe("Operator-level crypto-shredding trigger. `forget-subject` erases a user or tenant subject key in the configured KMS adapter, making every PII field encrypted under it permanently unreadable (reads render the `[[erased]]` sentinel), and appends a `subject-forgotten` audit event. Requires a KMS adapter (`runProdApp({ kms })`). The automated Art.-17 deletion pipeline in `user-data-rights` erases keys itself; this command covers manual forgets (authority requests, operator recovery, tenant destroy).");
7
9
  r.uiHints({
8
10
  displayLabel: "Crypto-Shredding",
9
11
  category: "compliance",
10
12
  });
13
+ r.envSchema(kmsEnvSchema);
11
14
  // `reason` is operator free text and may name the subject, yet stays plaintext: the forget
12
15
  // erases the subject key before the audit append, so a forget of the actor's own tenant
13
16
  // would fail to seal the reason under that tenant's key.
@@ -15,4 +18,5 @@ export function createCryptoShreddingFeature() {
15
18
  r.defineEvent("forget-denied", subjectForgetDeniedSchema, { piiFields: "none" });
16
19
  r.writeHandler(forgetSubjectWrite);
17
20
  }, { dedupeOptions: {} });
21
+ return featureWithEnvSchema(feature, kmsEnvSchema);
18
22
  }
@@ -1,3 +1,4 @@
1
- export { CRYPTO_SHREDDING_AGGREGATE_TYPE, CRYPTO_SHREDDING_FEATURE_NAME, SUBJECT_FORGET_DENIED_EVENT_NAME, SUBJECT_FORGOTTEN_EVENT_NAME, } from "./constants.js";
2
- export { createCryptoShreddingFeature } from "./feature.js";
3
- export { forgetSubjectSchema, subjectForgetDeniedSchema, subjectForgottenSchema, subjectIdSchema, } from "./handlers/forget-subject.write.js";
1
+ export { CRYPTO_SHREDDING_AGGREGATE_TYPE, CRYPTO_SHREDDING_FEATURE_NAME, SUBJECT_FORGET_DENIED_EVENT_NAME, SUBJECT_FORGOTTEN_EVENT_NAME, } from "./constants.ts";
2
+ export { kmsEnvSchema } from "./env/index.ts";
3
+ export { createCryptoShreddingFeature } from "./feature.ts";
4
+ export { forgetSubjectSchema, subjectForgetDeniedSchema, subjectForgottenSchema, subjectIdSchema, } from "./handlers/forget-subject.write.ts";
@@ -1,3 +1,4 @@
1
1
  export { CRYPTO_SHREDDING_AGGREGATE_TYPE, CRYPTO_SHREDDING_FEATURE_NAME, SUBJECT_FORGET_DENIED_EVENT_NAME, SUBJECT_FORGOTTEN_EVENT_NAME, } from "./constants.js";
2
+ export { kmsEnvSchema } from "./env/index.js";
2
3
  export { createCryptoShreddingFeature } from "./feature.js";
3
4
  export { forgetSubjectSchema, subjectForgetDeniedSchema, subjectForgottenSchema, subjectIdSchema, } from "./handlers/forget-subject.write.js";
@@ -45,21 +45,4 @@ export type CustomFieldsFeatureOptions = {
45
45
  };
46
46
  export declare function resolveFieldDefinitionListRoles(opts: Pick<CustomFieldsFeatureOptions, "valueWriteRoles" | "fieldDefinitionListRoles" | "fieldDefinitionWriteRoles">): readonly string[];
47
47
  export declare function createCustomFieldsFeature(opts?: CustomFieldsFeatureOptions): typeof defaultCustomFieldsFeature;
48
- /** @deprecated Use createCustomFieldsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
49
- export declare const customFieldsFeature: import("@cosmicdrift/kumiko-types/feature").FeatureDefinition & {
50
- readonly exports: {
51
- setEvent: import("@cosmicdrift/kumiko-types/handlers").EventDef<{
52
- fieldKey: string;
53
- value?: unknown;
54
- }, "custom-fields:event:custom-field-set">;
55
- clearedEvent: import("@cosmicdrift/kumiko-types/handlers").EventDef<{
56
- fieldKey: string;
57
- }, "custom-fields:event:custom-field-cleared">;
58
- fieldDefinitionDeletedEvent: import("@cosmicdrift/kumiko-types/handlers").EventDef<{
59
- entityName: string;
60
- fieldKey: string;
61
- tenantId?: string | undefined;
62
- }, "custom-fields:event:field-definition-deleted">;
63
- };
64
- };
65
48
  export {};
@@ -173,5 +173,3 @@ export function createCustomFieldsFeature(opts = {}) {
173
173
  fieldDefinitionListRoles: resolveFieldDefinitionListRoles(opts),
174
174
  }));
175
175
  }
176
- /** @deprecated Use createCustomFieldsFeature(). Run `bun kumiko-upgrade --apply`. Removed in the first release after 2026-10-29. */
177
- export const customFieldsFeature = createCustomFieldsFeature();
@@ -1,10 +1,10 @@
1
- export { fieldDefinitionAggregateId } from "./aggregate-id.js";
2
- export { CUSTOM_FIELDS_EXTENSION, CUSTOM_FIELDS_FEATURE_NAME, FIELD_DEFINITION_CREATED_EVENT, FIELD_DEFINITION_UPDATED_EVENT, SUPPORTED_FIELD_TYPES, type SupportedFieldType, } from "./constants.js";
3
- export { fieldDefinitionEntity } from "./entity.js";
4
- export { type CustomFieldClearedPayload, type CustomFieldSetPayload, customFieldClearedSchema, customFieldSetSchema, } from "./events.js";
5
- export { type CustomFieldsFeatureOptions, createCustomFieldsFeature, customFieldsFeature, } from "./feature.js";
6
- export { type ClearCustomFieldPayload, clearCustomFieldPayloadSchema, } from "./handlers/clear-custom-field.write.js";
7
- export { type SetCustomFieldPayload, setCustomFieldPayloadSchema, } from "./handlers/set-custom-field.write.js";
8
- export { isFieldDefinitionRow, parseSerializedField, } from "./lib/parse-serialized-field.js";
9
- export { type DefineFieldPayload, type DeleteFieldPayload, defineFieldPayloadSchema, deleteFieldPayloadSchema, } from "./schemas.js";
10
- export { customFieldsField, wireCustomFieldsFor } from "./wire-for-entity.js";
1
+ export { fieldDefinitionAggregateId } from "./aggregate-id.ts";
2
+ export { CUSTOM_FIELDS_EXTENSION, CUSTOM_FIELDS_FEATURE_NAME, FIELD_DEFINITION_CREATED_EVENT, FIELD_DEFINITION_UPDATED_EVENT, SUPPORTED_FIELD_TYPES, type SupportedFieldType, } from "./constants.ts";
3
+ export { fieldDefinitionEntity } from "./entity.ts";
4
+ export { type CustomFieldClearedPayload, type CustomFieldSetPayload, customFieldClearedSchema, customFieldSetSchema, } from "./events.ts";
5
+ export { type CustomFieldsFeatureOptions, createCustomFieldsFeature, } from "./feature.ts";
6
+ export { type ClearCustomFieldPayload, clearCustomFieldPayloadSchema, } from "./handlers/clear-custom-field.write.ts";
7
+ export { type SetCustomFieldPayload, setCustomFieldPayloadSchema, } from "./handlers/set-custom-field.write.ts";
8
+ export { isFieldDefinitionRow, parseSerializedField, } from "./lib/parse-serialized-field.ts";
9
+ export { type DefineFieldPayload, type DeleteFieldPayload, defineFieldPayloadSchema, deleteFieldPayloadSchema, } from "./schemas.ts";
10
+ export { customFieldsField, wireCustomFieldsFor } from "./wire-for-entity.ts";
@@ -2,7 +2,7 @@ export { fieldDefinitionAggregateId } from "./aggregate-id.js";
2
2
  export { CUSTOM_FIELDS_EXTENSION, CUSTOM_FIELDS_FEATURE_NAME, FIELD_DEFINITION_CREATED_EVENT, FIELD_DEFINITION_UPDATED_EVENT, SUPPORTED_FIELD_TYPES, } from "./constants.js";
3
3
  export { fieldDefinitionEntity } from "./entity.js";
4
4
  export { customFieldClearedSchema, customFieldSetSchema, } from "./events.js";
5
- export { createCustomFieldsFeature, customFieldsFeature, } from "./feature.js";
5
+ export { createCustomFieldsFeature, } from "./feature.js";
6
6
  export { clearCustomFieldPayloadSchema, } from "./handlers/clear-custom-field.write.js";
7
7
  export { setCustomFieldPayloadSchema, } from "./handlers/set-custom-field.write.js";
8
8
  export { isFieldDefinitionRow, parseSerializedField, } from "./lib/parse-serialized-field.js";
@@ -1,6 +1,6 @@
1
1
  import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
2
- import { fieldDefinitionExecutor } from "../executor.js";
3
- import type { FieldDefinitionColumns } from "./field-definition-row.js";
2
+ import { fieldDefinitionExecutor } from "../executor.ts";
3
+ import type { FieldDefinitionColumns } from "./field-definition-row.ts";
4
4
  type DefineUser = Parameters<typeof fieldDefinitionExecutor.create>[1];
5
5
  type DefineDb = Parameters<typeof fieldDefinitionExecutor.create>[2];
6
6
  type WriteResult = Awaited<ReturnType<typeof fieldDefinitionExecutor.create>>;
@@ -1,6 +1,6 @@
1
1
  import type { DbRunner } from "@cosmicdrift/kumiko-framework/db";
2
2
  import type { TenantId } from "@cosmicdrift/kumiko-framework/engine";
3
- import { type SerializedFieldShape } from "./parse-serialized-field.js";
3
+ import { type SerializedFieldShape } from "./parse-serialized-field.ts";
4
4
  export type FieldAccessCheckResult = {
5
5
  ok: true;
6
6
  } | {
@@ -1,4 +1,4 @@
1
- import type { DefineFieldPayload } from "../schemas.js";
1
+ import type { DefineFieldPayload } from "../schemas.ts";
2
2
  export interface FieldDefinitionColumns {
3
3
  readonly entityName: string;
4
4
  readonly fieldKey: string;
@@ -1 +1 @@
1
- export { countTenantFieldDefinitions } from "../db/queries/quota.js";
1
+ export { countTenantFieldDefinitions } from "../db/queries/quota.ts";