@cosmicdrift/kumiko-bundled-features 0.386.0 → 0.388.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 (643) hide show
  1. package/LICENSE +21 -57
  2. package/dist/agent-tools/tool-catalog.js +1 -1
  3. package/dist/agent-tools/tool-dispatch.d.ts +7 -7
  4. package/dist/agent-tools/tool-dispatch.js +9 -9
  5. package/dist/audit/handlers/audit-events.js +1 -1
  6. package/dist/audit/screens.js +1 -1
  7. package/dist/auth-email-password/feature.js +1 -1
  8. package/dist/auth-email-password/handlers/change-password.write.js +3 -3
  9. package/dist/auth-email-password/handlers/confirm-token-flow.js +5 -5
  10. package/dist/auth-email-password/handlers/invite-accept-with-login.write.js +1 -1
  11. package/dist/auth-email-password/handlers/invite-accept.write.js +18 -18
  12. package/dist/auth-email-password/handlers/invite-create.write.d.ts +2 -2
  13. package/dist/auth-email-password/handlers/invite-create.write.js +10 -10
  14. package/dist/auth-email-password/handlers/invite-info.query.js +1 -1
  15. package/dist/auth-email-password/handlers/invite-signup-complete.write.js +24 -26
  16. package/dist/auth-email-password/handlers/login.write.d.ts +1 -1
  17. package/dist/auth-email-password/handlers/login.write.js +1 -1
  18. package/dist/auth-email-password/handlers/self-registration-status.query.js +1 -1
  19. package/dist/auth-email-password/handlers/signup-confirm.write.js +34 -37
  20. package/dist/auth-email-password/handlers/signup-request.write.js +6 -7
  21. package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.d.ts +1 -1
  22. package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.js +1 -4
  23. package/dist/auth-email-password/index.js +5 -5
  24. package/dist/auth-email-password/lockout-store.js +1 -1
  25. package/dist/auth-email-password/seeding.d.ts +42 -45
  26. package/dist/auth-email-password/seeding.js +51 -53
  27. package/dist/auth-email-password/signup-token-store.js +8 -8
  28. package/dist/auth-email-password/testing.js +3 -3
  29. package/dist/auth-email-password/web/auth-client.d.ts +2 -2
  30. package/dist/auth-email-password/web/auth-client.js +36 -37
  31. package/dist/auth-email-password/web/auth-form-primitives.js +10 -10
  32. package/dist/auth-email-password/web/auth-gate.js +15 -16
  33. package/dist/auth-email-password/web/client-plugin.d.ts +7 -7
  34. package/dist/auth-email-password/web/client-plugin.js +4 -5
  35. package/dist/auth-email-password/web/confirm-account-unlock-screen.js +1 -1
  36. package/dist/auth-email-password/web/constants.js +3 -3
  37. package/dist/auth-email-password/web/default-topbar-actions.d.ts +8 -8
  38. package/dist/auth-email-password/web/default-topbar-actions.js +6 -6
  39. package/dist/auth-email-password/web/forgot-password-screen.d.ts +2 -2
  40. package/dist/auth-email-password/web/forgot-password-screen.js +9 -9
  41. package/dist/auth-email-password/web/index.js +5 -5
  42. package/dist/auth-email-password/web/invite-accept-screen.d.ts +1 -1
  43. package/dist/auth-email-password/web/invite-accept-screen.js +16 -16
  44. package/dist/auth-email-password/web/login-screen.d.ts +1 -1
  45. package/dist/auth-email-password/web/login-screen.js +2 -3
  46. package/dist/auth-email-password/web/reset-password-screen.d.ts +4 -4
  47. package/dist/auth-email-password/web/reset-password-screen.js +12 -13
  48. package/dist/auth-email-password/web/session.d.ts +10 -9
  49. package/dist/auth-email-password/web/session.js +28 -29
  50. package/dist/auth-email-password/web/signup-complete-screen.js +3 -3
  51. package/dist/auth-email-password/web/signup-screen.d.ts +1 -1
  52. package/dist/auth-email-password/web/signup-screen.js +13 -13
  53. package/dist/auth-email-password/web/tenant-switcher.d.ts +4 -4
  54. package/dist/auth-email-password/web/tenant-switcher.js +21 -22
  55. package/dist/auth-email-password/web/use-shell-user.js +12 -13
  56. package/dist/auth-email-password/web/user-menu.d.ts +4 -4
  57. package/dist/auth-email-password/web/user-menu.js +12 -13
  58. package/dist/auth-email-password/web/verify-email-screen.d.ts +2 -2
  59. package/dist/auth-email-password/web/verify-email-screen.js +9 -10
  60. package/dist/auth-foundation/boot-checks.js +4 -4
  61. package/dist/auth-foundation/resolve-anonymous-access.d.ts +1 -1
  62. package/dist/auth-foundation/resolve-anonymous-access.js +3 -3
  63. package/dist/auth-foundation/types.js +2 -2
  64. package/dist/auth-mfa/feature-exports.d.ts +2 -2
  65. package/dist/auth-mfa/feature.js +8 -0
  66. package/dist/auth-mfa/handlers/disable.write.js +3 -3
  67. package/dist/auth-mfa/handlers/enable-confirm-preauth.write.js +4 -4
  68. package/dist/auth-mfa/handlers/enable-confirm.write.js +2 -2
  69. package/dist/auth-mfa/handlers/enable-start-preauth.write.js +1 -1
  70. package/dist/auth-mfa/handlers/reencrypt.job.js +1 -1
  71. package/dist/auth-mfa/handlers/regenerate-recovery.write.js +5 -5
  72. package/dist/auth-mfa/handlers/verify.write.js +1 -1
  73. package/dist/auth-mfa/token-secrets.js +1 -1
  74. package/dist/auth-mfa/web/client-plugin.d.ts +1 -1
  75. package/dist/auth-mfa/web/client-plugin.js +1 -1
  76. package/dist/auth-mfa/web/i18n.js +8 -4
  77. package/dist/auth-mfa/web/index.js +4 -4
  78. package/dist/auth-mfa/web/mfa-client.js +17 -16
  79. package/dist/auth-mfa/web/mfa-code-or-recovery-field.d.ts +11 -0
  80. package/dist/auth-mfa/web/mfa-code-or-recovery-field.js +12 -0
  81. package/dist/auth-mfa/web/mfa-disable-dialog.js +14 -3
  82. package/dist/auth-mfa/web/mfa-regenerate-recovery-dialog.js +14 -3
  83. package/dist/auth-mfa/web/mfa-setup-preauth-screen.js +10 -5
  84. package/dist/auth-mfa/web/mfa-verify-screen.js +32 -11
  85. package/dist/billing-foundation/aggregate-id.d.ts +5 -5
  86. package/dist/billing-foundation/aggregate-id.js +10 -11
  87. package/dist/billing-foundation/checkout-core.d.ts +9 -14
  88. package/dist/billing-foundation/checkout-core.js +24 -39
  89. package/dist/billing-foundation/consumer-protection/confirmation-mail.js +8 -2
  90. package/dist/billing-foundation/consumer-protection/consent-gate.d.ts +1 -0
  91. package/dist/billing-foundation/consumer-protection/consent-gate.js +1 -0
  92. package/dist/billing-foundation/consumer-protection/issue-confirmation.js +9 -3
  93. package/dist/billing-foundation/consumer-protection/mail-notifications.js +3 -1
  94. package/dist/billing-foundation/consumer-protection/termination-receipt-limit.d.ts +4 -2
  95. package/dist/billing-foundation/consumer-protection/termination-receipt-limit.js +6 -5
  96. package/dist/billing-foundation/consumer-protection/termination-record.d.ts +5 -1
  97. package/dist/billing-foundation/consumer-protection/termination-record.js +27 -17
  98. package/dist/billing-foundation/consumer-protection/termination-request.js +12 -7
  99. package/dist/billing-foundation/consumer-protection/termination-revoke.js +12 -7
  100. package/dist/billing-foundation/consumer-protection/termination-texts.d.ts +1 -1
  101. package/dist/billing-foundation/consumer-protection/termination-texts.js +3 -0
  102. package/dist/billing-foundation/consumer-protection/withdrawal-period.d.ts +5 -2
  103. package/dist/billing-foundation/consumer-protection/withdrawal-period.js +8 -9
  104. package/dist/billing-foundation/entities.js +27 -27
  105. package/dist/billing-foundation/events.d.ts +1 -0
  106. package/dist/billing-foundation/events.js +19 -17
  107. package/dist/billing-foundation/feature.js +45 -44
  108. package/dist/billing-foundation/get-subscription-for-tenant.d.ts +3 -3
  109. package/dist/billing-foundation/get-subscription-for-tenant.js +3 -5
  110. package/dist/billing-foundation/handlers/billing-plans.query.js +35 -5
  111. package/dist/billing-foundation/handlers/create-checkout-session.write.js +19 -17
  112. package/dist/billing-foundation/handlers/create-portal-session.write.js +11 -12
  113. package/dist/billing-foundation/handlers/list-subscriptions.query.js +4 -4
  114. package/dist/billing-foundation/handlers/plan-switch-preview.query.d.ts +13 -0
  115. package/dist/billing-foundation/handlers/plan-switch-preview.query.js +48 -0
  116. package/dist/billing-foundation/handlers/process-event.write.d.ts +6 -0
  117. package/dist/billing-foundation/handlers/process-event.write.js +28 -22
  118. package/dist/billing-foundation/handlers/start-plan-checkout.write.js +32 -5
  119. package/dist/billing-foundation/handlers/switch-plan.write.d.ts +2 -2
  120. package/dist/billing-foundation/handlers/switch-plan.write.js +56 -64
  121. package/dist/billing-foundation/handlers/sync-subscription.write.js +12 -1
  122. package/dist/billing-foundation/i18n.js +22 -0
  123. package/dist/billing-foundation/index.d.ts +1 -1
  124. package/dist/billing-foundation/plan-catalog.d.ts +21 -5
  125. package/dist/billing-foundation/plan-catalog.js +25 -16
  126. package/dist/billing-foundation/plan-switch.d.ts +12 -0
  127. package/dist/billing-foundation/plan-switch.js +60 -0
  128. package/dist/billing-foundation/projection.d.ts +15 -11
  129. package/dist/billing-foundation/projection.js +38 -37
  130. package/dist/billing-foundation/subscription-tier-sync.js +3 -3
  131. package/dist/billing-foundation/tenant-destroy-hook.d.ts +2 -2
  132. package/dist/billing-foundation/tenant-destroy-hook.js +7 -7
  133. package/dist/billing-foundation/types.d.ts +97 -42
  134. package/dist/billing-foundation/types.js +29 -20
  135. package/dist/billing-foundation/validate-options.js +17 -0
  136. package/dist/billing-foundation/web/billing-plans-panel.js +82 -36
  137. package/dist/billing-foundation/web/checkout-consent-dialog.d.ts +17 -3
  138. package/dist/billing-foundation/web/checkout-consent-dialog.js +14 -10
  139. package/dist/billing-foundation/web/constants.d.ts +4 -0
  140. package/dist/billing-foundation/web/constants.js +4 -0
  141. package/dist/billing-foundation/web/plan-price.d.ts +15 -0
  142. package/dist/billing-foundation/web/plan-price.js +32 -0
  143. package/dist/billing-foundation/web/plan-switch-confirm-dialog.d.ts +15 -0
  144. package/dist/billing-foundation/web/plan-switch-confirm-dialog.js +66 -0
  145. package/dist/cap-counter/aggregate-id.js +8 -9
  146. package/dist/cap-counter/cap-reservation.js +5 -1
  147. package/dist/cap-counter/constants.js +11 -12
  148. package/dist/cap-counter/enforce-cap.d.ts +59 -62
  149. package/dist/cap-counter/enforce-cap.js +49 -49
  150. package/dist/cap-counter/entity.js +29 -29
  151. package/dist/cap-counter/feature.js +34 -35
  152. package/dist/cap-counter/handlers/increment-rolling.write.d.ts +2 -2
  153. package/dist/cap-counter/handlers/increment-rolling.write.js +31 -31
  154. package/dist/cap-counter/handlers/mark-soft-warned.write.js +4 -5
  155. package/dist/cap-counter/stock-cap-guard.js +8 -2
  156. package/dist/cap-counter/with-cap-enforcement.d.ts +3 -5
  157. package/dist/channel-email/feature.js +1 -1
  158. package/dist/channel-email/smtp-transport.d.ts +18 -17
  159. package/dist/channel-email/smtp-transport.js +24 -21
  160. package/dist/channel-in-app/handlers/unread-count.query.js +3 -4
  161. package/dist/compliance-profiles/feature.js +4 -4
  162. package/dist/compliance-profiles/handlers/for-tenant.query.js +3 -6
  163. package/dist/compliance-profiles/handlers/list-profiles.query.js +5 -5
  164. package/dist/compliance-profiles/handlers/needs-profile.query.js +4 -4
  165. package/dist/compliance-profiles/handlers/set-profile.write.js +13 -14
  166. package/dist/compliance-profiles/handlers/sub-processors.query.js +9 -11
  167. package/dist/compliance-profiles/resolve-for-tenant.js +7 -7
  168. package/dist/compliance-profiles/schema/profile-selection.js +18 -23
  169. package/dist/compliance-profiles/seeding.js +14 -15
  170. package/dist/compliance-profiles-ops/handlers/tenants-missing-profile.query.js +3 -3
  171. package/dist/compliance-profiles-ops/index.js +2 -2
  172. package/dist/config/handlers/cascade.query.d.ts +5 -0
  173. package/dist/config/handlers/cascade.query.js +4 -3
  174. package/dist/config/handlers/readiness.query.d.ts +4 -4
  175. package/dist/config/handlers/readiness.query.js +1 -1
  176. package/dist/config/handlers/reencrypt.job.js +4 -5
  177. package/dist/config/handlers/set.write.js +4 -4
  178. package/dist/config/handlers/values.query.d.ts +5 -0
  179. package/dist/config/handlers/values.query.js +4 -3
  180. package/dist/config/resolver.js +4 -4
  181. package/dist/config/table.js +10 -10
  182. package/dist/config/write-helpers.d.ts +1 -0
  183. package/dist/config/write-helpers.js +19 -10
  184. package/dist/crypto-shredding/handlers/forget-subject.write.d.ts +2 -2
  185. package/dist/crypto-shredding/handlers/forget-subject.write.js +25 -21
  186. package/dist/custom-fields/aggregate-id.d.ts +12 -13
  187. package/dist/custom-fields/aggregate-id.js +16 -17
  188. package/dist/custom-fields/entity.js +49 -47
  189. package/dist/custom-fields/events.js +7 -8
  190. package/dist/custom-fields/feature.d.ts +14 -14
  191. package/dist/custom-fields/feature.js +53 -54
  192. package/dist/custom-fields/handlers/clear-custom-field.write.d.ts +3 -2
  193. package/dist/custom-fields/handlers/clear-custom-field.write.js +9 -8
  194. package/dist/custom-fields/handlers/define-tenant-field.write.d.ts +1 -1
  195. package/dist/custom-fields/handlers/define-tenant-field.write.js +2 -2
  196. package/dist/custom-fields/handlers/delete-system-field.write.js +6 -7
  197. package/dist/custom-fields/handlers/delete-tenant-field.write.d.ts +1 -1
  198. package/dist/custom-fields/handlers/delete-tenant-field.write.js +3 -3
  199. package/dist/custom-fields/handlers/set-custom-field.write.d.ts +3 -3
  200. package/dist/custom-fields/handlers/set-custom-field.write.js +25 -28
  201. package/dist/custom-fields/handlers/update-tenant-field.write.d.ts +1 -1
  202. package/dist/custom-fields/handlers/update-tenant-field.write.js +1 -1
  203. package/dist/custom-fields/lib/field-access.js +2 -2
  204. package/dist/custom-fields/lib/parse-serialized-field.js +1 -1
  205. package/dist/custom-fields/lib/quota.js +1 -1
  206. package/dist/custom-fields/lib/value-schema.js +10 -12
  207. package/dist/custom-fields/run-retention.js +3 -3
  208. package/dist/custom-fields/schemas.js +14 -14
  209. package/dist/custom-fields/web/client-plugin.js +2 -5
  210. package/dist/custom-fields/web/constants.js +2 -2
  211. package/dist/custom-fields/web/custom-fields-form-section.d.ts +4 -4
  212. package/dist/custom-fields/web/custom-fields-form-section.js +22 -22
  213. package/dist/custom-fields/wire-for-entity.js +65 -67
  214. package/dist/custom-fields/wire-user-data-rights.js +3 -3
  215. package/dist/data-retention/_internal/parse-override.js +2 -3
  216. package/dist/data-retention/feature.js +11 -18
  217. package/dist/data-retention/handlers/policy-for.query.js +6 -6
  218. package/dist/data-retention/keep-for.d.ts +7 -7
  219. package/dist/data-retention/keep-for.js +15 -15
  220. package/dist/data-retention/override-schema.d.ts +3 -4
  221. package/dist/data-retention/override-schema.js +13 -15
  222. package/dist/data-retention/presets.d.ts +4 -5
  223. package/dist/data-retention/presets.js +18 -23
  224. package/dist/data-retention/resolve-tenant-preset.js +17 -16
  225. package/dist/data-retention/resolver.d.ts +12 -12
  226. package/dist/data-retention/resolver.js +24 -23
  227. package/dist/data-retention/run-retention-cleanup.d.ts +8 -3
  228. package/dist/data-retention/run-retention-cleanup.js +61 -51
  229. package/dist/data-retention/schema/tenant-retention-override.js +13 -11
  230. package/dist/delivery/channel-context.js +6 -3
  231. package/dist/delivery/db/queries/preferences.js +2 -2
  232. package/dist/delivery/delivery-service.js +22 -7
  233. package/dist/delivery/feature.js +2 -2
  234. package/dist/delivery/handlers/log.query.js +1 -1
  235. package/dist/delivery/handlers/preferences.query.d.ts +1 -1
  236. package/dist/delivery/handlers/preferences.query.js +20 -1
  237. package/dist/delivery/handlers/unsubscribe-page-chrome.query.js +1 -1
  238. package/dist/delivery/tables.js +9 -8
  239. package/dist/delivery/unsubscribe-link.d.ts +3 -1
  240. package/dist/delivery/unsubscribe-page-strings.d.ts +1 -0
  241. package/dist/delivery/unsubscribe-page-strings.js +1 -0
  242. package/dist/delivery/unsubscribe-page.d.ts +2 -0
  243. package/dist/delivery/unsubscribe-page.js +5 -0
  244. package/dist/delivery/unsubscribe.js +29 -11
  245. package/dist/document-ingest-foundation/entity.js +4 -4
  246. package/dist/document-ingest-foundation/events.js +2 -2
  247. package/dist/document-ingest-foundation/feature.js +2 -2
  248. package/dist/document-ingest-foundation/pages.js +1 -1
  249. package/dist/document-ingest-foundation/tenant-destroy-hook.js +4 -4
  250. package/dist/feature-toggles/compose-tier-resolver.js +1 -1
  251. package/dist/feature-toggles/feature.js +1 -1
  252. package/dist/feature-toggles/global-feature-state-table.js +1 -1
  253. package/dist/feature-toggles/handlers/registered.query.js +5 -5
  254. package/dist/feature-toggles/toggle-sync-signal.js +1 -1
  255. package/dist/feature-toggles/web/constants.js +1 -1
  256. package/dist/file-derivatives/feature.d.ts +1 -1
  257. package/dist/file-derivatives/feature.js +1 -1
  258. package/dist/file-derivatives/handlers/public-variant.query.js +1 -1
  259. package/dist/file-derivatives/presets.js +1 -1
  260. package/dist/file-foundation/feature.js +6 -6
  261. package/dist/file-foundation/index.d.ts +1 -1
  262. package/dist/file-foundation/index.js +1 -1
  263. package/dist/file-foundation/read-file-ref-content.d.ts +3 -0
  264. package/dist/file-foundation/read-file-ref-content.js +6 -1
  265. package/dist/file-provider-inmemory/feature.d.ts +1 -1
  266. package/dist/file-provider-inmemory/feature.js +16 -16
  267. package/dist/file-provider-s3/env-named-feature.d.ts +0 -2
  268. package/dist/file-provider-s3/feature.js +16 -16
  269. package/dist/file-provider-s3/lib/s3-provider.js +6 -6
  270. package/dist/files/feature.js +6 -6
  271. package/dist/files-tenant-data/handlers/sweep-orphaned-derivatives.job.js +4 -4
  272. package/dist/files-tenant-data/hooks.js +24 -26
  273. package/dist/files-tenant-data/index.js +1 -1
  274. package/dist/folders/feature.d.ts +1 -1
  275. package/dist/folders/web/folder-manager.js +2 -2
  276. package/dist/folders/web/tree.js +5 -5
  277. package/dist/form-draft/db/queries/cleanup.js +3 -3
  278. package/dist/form-draft/db/queries/owned-file-refs.js +1 -1
  279. package/dist/form-draft/decrypt-draft.js +5 -1
  280. package/dist/form-draft/entity.js +3 -3
  281. package/dist/form-draft/feature.js +4 -5
  282. package/dist/form-draft/handlers/discard.write.js +1 -1
  283. package/dist/form-draft/release-file-refs.js +6 -6
  284. package/dist/form-draft/schemas.js +3 -3
  285. package/dist/form-draft/web/constants.js +0 -2
  286. package/dist/host-routing/dispatch.js +11 -20
  287. package/dist/inbound-mail-foundation/aggregate-id.d.ts +13 -13
  288. package/dist/inbound-mail-foundation/aggregate-id.js +19 -19
  289. package/dist/inbound-mail-foundation/connect-routes.js +4 -3
  290. package/dist/inbound-mail-foundation/constants.d.ts +22 -24
  291. package/dist/inbound-mail-foundation/constants.js +30 -33
  292. package/dist/inbound-mail-foundation/entities.d.ts +12 -12
  293. package/dist/inbound-mail-foundation/entities.js +47 -48
  294. package/dist/inbound-mail-foundation/events.d.ts +4 -3
  295. package/dist/inbound-mail-foundation/events.js +50 -47
  296. package/dist/inbound-mail-foundation/feature.js +39 -39
  297. package/dist/inbound-mail-foundation/handlers/account-state.js +8 -8
  298. package/dist/inbound-mail-foundation/handlers/connect-account.write.js +25 -26
  299. package/dist/inbound-mail-foundation/handlers/disconnect-account.write.js +7 -7
  300. package/dist/inbound-mail-foundation/handlers/ingest-message.write.js +50 -51
  301. package/dist/inbound-mail-foundation/handlers/list-accounts.query.js +8 -8
  302. package/dist/inbound-mail-foundation/handlers/list-messages.query.js +10 -10
  303. package/dist/inbound-mail-foundation/handlers/scope-visibility.js +3 -4
  304. package/dist/inbound-mail-foundation/handlers/update-account.write.d.ts +2 -2
  305. package/dist/inbound-mail-foundation/handlers/update-account.write.js +22 -14
  306. package/dist/inbound-mail-foundation/i18n.js +0 -1
  307. package/dist/inbound-mail-foundation/oauth-state.d.ts +5 -5
  308. package/dist/inbound-mail-foundation/oauth-state.js +11 -10
  309. package/dist/inbound-mail-foundation/projection.d.ts +4 -4
  310. package/dist/inbound-mail-foundation/projection.js +31 -29
  311. package/dist/inbound-mail-foundation/provider-factory.d.ts +4 -4
  312. package/dist/inbound-mail-foundation/provider-factory.js +9 -9
  313. package/dist/inbound-mail-foundation/retention-sweep.d.ts +5 -3
  314. package/dist/inbound-mail-foundation/retention-sweep.js +38 -36
  315. package/dist/inbound-mail-foundation/screens.js +0 -3
  316. package/dist/inbound-mail-foundation/tenant-destroy-hook.js +14 -16
  317. package/dist/inbound-mail-foundation/types.d.ts +49 -49
  318. package/dist/inbound-mail-foundation/types.js +21 -21
  319. package/dist/inbound-mail-foundation/watch-supervisor.d.ts +10 -10
  320. package/dist/inbound-mail-foundation/watch-supervisor.js +85 -67
  321. package/dist/inbound-provider-imap/credential-document.js +13 -13
  322. package/dist/inbound-provider-imap/feature.d.ts +2 -2
  323. package/dist/inbound-provider-imap/feature.js +42 -40
  324. package/dist/inbound-provider-imap/imap-client.d.ts +12 -11
  325. package/dist/inbound-provider-imap/imap-client.js +20 -19
  326. package/dist/inbound-provider-inmemory/feature.d.ts +9 -9
  327. package/dist/inbound-provider-inmemory/feature.js +19 -19
  328. package/dist/jobs/db/queries/retention.js +2 -2
  329. package/dist/jobs/db/queries/stale-run-sweep.js +3 -3
  330. package/dist/jobs/events.js +1 -1
  331. package/dist/jobs/feature.d.ts +1 -0
  332. package/dist/jobs/feature.js +13 -10
  333. package/dist/jobs/handlers/detail.query.js +4 -4
  334. package/dist/jobs/handlers/list.query.js +1 -1
  335. package/dist/jobs/handlers/projection-rebuild.job.js +1 -1
  336. package/dist/jobs/handlers/reindex-entity.job.js +1 -1
  337. package/dist/jobs/handlers/retry.write.js +1 -1
  338. package/dist/jobs/handlers/tenant-failures.query.d.ts +1 -1
  339. package/dist/jobs/handlers/tenant-failures.query.js +45 -41
  340. package/dist/jobs/handlers/tenant-runs.query.d.ts +1 -1
  341. package/dist/jobs/handlers/tenant-runs.query.js +54 -50
  342. package/dist/jobs/job-instant.js +1 -1
  343. package/dist/jobs/job-run-logger.js +15 -15
  344. package/dist/jobs/job-run-table.js +3 -3
  345. package/dist/jobs/screens.js +1 -1
  346. package/dist/jobs/tenant-job-failure-table.js +1 -1
  347. package/dist/jobs/tenant-job-run-table.js +1 -1
  348. package/dist/ledger/entity.js +5 -5
  349. package/dist/ledger/feature.js +3 -3
  350. package/dist/ledger/handlers/confirm-schedule-period.write.js +3 -3
  351. package/dist/ledger/recurring.js +12 -12
  352. package/dist/ledger/schemas.js +1 -1
  353. package/dist/ledger/web/constants.js +2 -2
  354. package/dist/ledger/web/index.js +7 -7
  355. package/dist/legal-pages/feature.d.ts +4 -4
  356. package/dist/legal-pages/feature.js +25 -26
  357. package/dist/legal-pages/markdown.js +3 -3
  358. package/dist/legal-pages/web/client-plugin.js +23 -24
  359. package/dist/legal-pages/web/index.js +0 -1
  360. package/dist/mail-foundation/feature.d.ts +5 -5
  361. package/dist/mail-foundation/feature.js +27 -25
  362. package/dist/mail-transport-inmemory/feature.d.ts +4 -4
  363. package/dist/mail-transport-inmemory/feature.js +27 -28
  364. package/dist/mail-transport-smtp/feature.js +20 -20
  365. package/dist/managed-pages/branding.js +6 -6
  366. package/dist/managed-pages/feature.d.ts +26 -26
  367. package/dist/managed-pages/feature.js +34 -34
  368. package/dist/managed-pages/handlers/by-slug.query.js +5 -6
  369. package/dist/managed-pages/handlers/by-tenant-published.query.js +2 -2
  370. package/dist/managed-pages/handlers/set.write.js +5 -7
  371. package/dist/managed-pages/screens/page-screens.js +11 -11
  372. package/dist/managed-pages/seeding.js +8 -8
  373. package/dist/managed-pages/table.js +13 -12
  374. package/dist/managed-pages/web/client-plugin.d.ts +1 -1
  375. package/dist/managed-pages/web/client-plugin.js +5 -5
  376. package/dist/managed-pages/web/i18n.js +1 -1
  377. package/dist/notes-history/entity.js +4 -4
  378. package/dist/notes-history/feature.d.ts +2 -2
  379. package/dist/notes-history-user-data/hooks.js +1 -1
  380. package/dist/page-render/layout.js +9 -9
  381. package/dist/page-render/markdown.js +11 -11
  382. package/dist/page-render/security-headers.js +7 -6
  383. package/dist/personal-access-tokens/feature.d.ts +1 -1
  384. package/dist/personal-access-tokens/feature.js +9 -5
  385. package/dist/personal-access-tokens/roles.js +2 -2
  386. package/dist/readiness/handlers/status.query.js +3 -3
  387. package/dist/renderer-foundation/api.js +12 -13
  388. package/dist/renderer-foundation/constants.js +2 -2
  389. package/dist/renderer-foundation/feature.js +7 -7
  390. package/dist/renderer-pdf/render-table-pdf.d.ts +1 -1
  391. package/dist/renderer-pdf/render-table-pdf.js +22 -10
  392. package/dist/secrets/feature.js +9 -9
  393. package/dist/secrets/web/constants.js +2 -2
  394. package/dist/seo/feature.js +3 -3
  395. package/dist/sessions/constants.d.ts +1 -1
  396. package/dist/sessions/constants.js +1 -1
  397. package/dist/sessions/feature.d.ts +2 -2
  398. package/dist/sessions/feature.js +12 -8
  399. package/dist/sessions/handlers/revoke-all-for-user.write.js +2 -2
  400. package/dist/sessions/handlers/revoke-all-others.write.js +2 -2
  401. package/dist/sessions/handlers/revoke.write.js +1 -1
  402. package/dist/sessions/schema/user-session.js +4 -4
  403. package/dist/sessions/screens.js +2 -2
  404. package/dist/sessions/session-callbacks.js +2 -2
  405. package/dist/sessions/session-revoked-event.js +2 -2
  406. package/dist/shared/assert-no-where-rule-in-ownership-write.js +1 -1
  407. package/dist/shared/decrypt-stored-pii.d.ts +1 -0
  408. package/dist/shared/decrypt-stored-pii.js +7 -2
  409. package/dist/shared/encrypt-for-direct-write.js +1 -1
  410. package/dist/shared/index.d.ts +1 -1
  411. package/dist/shared/index.js +1 -1
  412. package/dist/shared/mail-template-body.d.ts +6 -2
  413. package/dist/shared/mail-template-body.js +7 -4
  414. package/dist/shared/map-with-concurrency.js +5 -4
  415. package/dist/shared/parent-visibility.js +2 -2
  416. package/dist/shared/password-hashing.js +1 -1
  417. package/dist/shared/signup-handover.js +1 -2
  418. package/dist/shared/single-use-token-store.js +1 -1
  419. package/dist/step-dispatcher/feature.js +1 -0
  420. package/dist/subscription-dodo/client.d.ts +17 -0
  421. package/dist/subscription-dodo/client.js +31 -0
  422. package/dist/subscription-dodo/constants.d.ts +12 -0
  423. package/dist/subscription-dodo/constants.js +19 -0
  424. package/dist/subscription-dodo/feature.d.ts +37 -0
  425. package/dist/subscription-dodo/feature.js +144 -0
  426. package/dist/subscription-dodo/index.d.ts +2 -0
  427. package/dist/subscription-dodo/index.js +4 -0
  428. package/dist/subscription-dodo/plugin-methods.d.ts +23 -0
  429. package/dist/subscription-dodo/plugin-methods.js +260 -0
  430. package/dist/subscription-dodo/runtime.d.ts +27 -0
  431. package/dist/subscription-dodo/runtime.js +89 -0
  432. package/dist/subscription-dodo/verify-webhook.d.ts +37 -0
  433. package/dist/subscription-dodo/verify-webhook.js +189 -0
  434. package/dist/subscription-mollie/constants.js +15 -17
  435. package/dist/subscription-mollie/feature.d.ts +17 -18
  436. package/dist/subscription-mollie/feature.js +24 -24
  437. package/dist/subscription-mollie/index.js +3 -3
  438. package/dist/subscription-mollie/plugin-methods.d.ts +2 -2
  439. package/dist/subscription-mollie/plugin-methods.js +15 -14
  440. package/dist/subscription-mollie/verify-webhook.d.ts +10 -10
  441. package/dist/subscription-mollie/verify-webhook.js +27 -27
  442. package/dist/subscription-stripe/constants.js +4 -6
  443. package/dist/subscription-stripe/feature.d.ts +14 -14
  444. package/dist/subscription-stripe/feature.js +36 -34
  445. package/dist/subscription-stripe/index.js +6 -6
  446. package/dist/subscription-stripe/plugin-methods.js +18 -18
  447. package/dist/subscription-stripe/runtime.d.ts +1 -1
  448. package/dist/subscription-stripe/runtime.js +8 -7
  449. package/dist/subscription-stripe/verify-webhook.d.ts +11 -11
  450. package/dist/subscription-stripe/verify-webhook.js +59 -61
  451. package/dist/tags/feature.d.ts +3 -3
  452. package/dist/tags/screens.js +1 -1
  453. package/dist/template-resolver/api.d.ts +3 -2
  454. package/dist/template-resolver/api.js +34 -12
  455. package/dist/template-resolver/compile-document-body.js +1 -0
  456. package/dist/template-resolver/feature.js +2 -2
  457. package/dist/template-resolver/handlers/bundle-import.js +3 -3
  458. package/dist/template-resolver/handlers/copy-locale.write.d.ts +5 -1
  459. package/dist/template-resolver/handlers/copy-locale.write.js +22 -7
  460. package/dist/template-resolver/handlers/diff-to-system.query.js +3 -2
  461. package/dist/template-resolver/handlers/document-base.js +3 -2
  462. package/dist/template-resolver/handlers/find-by-id.query.js +8 -7
  463. package/dist/template-resolver/handlers/list.query.js +6 -7
  464. package/dist/template-resolver/handlers/overview.query.d.ts +3 -0
  465. package/dist/template-resolver/handlers/overview.query.js +6 -3
  466. package/dist/template-resolver/handlers/shared.js +2 -2
  467. package/dist/template-resolver/handlers/template-write.js +3 -3
  468. package/dist/template-resolver/handlers/tenant-override-counts.query.js +1 -3
  469. package/dist/template-resolver/handlers/tenant-override-selection.d.ts +2 -1
  470. package/dist/template-resolver/handlers/tenant-overrides.query.js +28 -5
  471. package/dist/template-resolver/handlers/upsert-system.write.js +3 -4
  472. package/dist/template-resolver/handlers/upsert-tenant.write.js +4 -5
  473. package/dist/template-resolver/handlers/usage.query.d.ts +2 -1
  474. package/dist/template-resolver/handlers/usage.query.js +26 -16
  475. package/dist/template-resolver/handlers/validate.query.js +7 -2
  476. package/dist/template-resolver/seeding.js +30 -14
  477. package/dist/template-resolver/store-template-resource.d.ts +1 -0
  478. package/dist/template-resolver/store-template-resource.js +19 -4
  479. package/dist/template-resolver/table.js +10 -11
  480. package/dist/template-resolver/template-delivery-policy.d.ts +0 -5
  481. package/dist/template-resolver/template-delivery-policy.js +0 -6
  482. package/dist/template-resolver/template-meta.js +7 -4
  483. package/dist/template-resolver/template-preview.js +4 -3
  484. package/dist/template-resolver/web/client-plugin.js +2 -2
  485. package/dist/template-resolver/web/constants.d.ts +2 -2
  486. package/dist/template-resolver/web/constants.js +3 -3
  487. package/dist/template-resolver/web/index.d.ts +1 -0
  488. package/dist/template-resolver/web/index.js +1 -0
  489. package/dist/template-resolver/web/mail-layout-constants.d.ts +5 -0
  490. package/dist/template-resolver/web/mail-layout-constants.js +7 -0
  491. package/dist/tenant/feature.js +7 -7
  492. package/dist/tenant/handlers/member-directory.query.d.ts +1 -0
  493. package/dist/tenant/handlers/member-directory.query.js +11 -4
  494. package/dist/tenant/handlers/members.query.js +1 -1
  495. package/dist/tenant/handlers/team-list.query.js +1 -1
  496. package/dist/tenant/handlers/tenant-directory.query.d.ts +1 -0
  497. package/dist/tenant/handlers/tenant-directory.query.js +9 -5
  498. package/dist/tenant/invitation-table.js +37 -40
  499. package/dist/tenant/membership-table.js +3 -3
  500. package/dist/tenant/schema/tenant.js +7 -9
  501. package/dist/tenant/screens.js +1 -1
  502. package/dist/tenant/seeding.d.ts +6 -5
  503. package/dist/tenant/seeding.js +12 -12
  504. package/dist/tenant/testing.js +5 -6
  505. package/dist/tenant/web/constants.js +2 -2
  506. package/dist/tenant-handover/events.js +5 -7
  507. package/dist/tenant-handover/feature.js +1 -1
  508. package/dist/tenant-handover/grant.js +1 -1
  509. package/dist/tenant-handover/handlers/claim.write.js +1 -1
  510. package/dist/tenant-handover/move-entity-graph.js +8 -9
  511. package/dist/tenant-handover/signup-handover-provider.js +1 -2
  512. package/dist/tenant-handover/transfer-graph.js +4 -5
  513. package/dist/tenant-lifecycle/boot-checks.js +1 -1
  514. package/dist/tenant-lifecycle/constants.d.ts +1 -0
  515. package/dist/tenant-lifecycle/constants.js +4 -0
  516. package/dist/tenant-lifecycle/feature.js +1 -1
  517. package/dist/tenant-lifecycle/run-tenant-destroy.js +2 -2
  518. package/dist/tenant-settings/constants.js +1 -1
  519. package/dist/tenant-settings/tenant-defaults.d.ts +1 -1
  520. package/dist/tenant-settings/tenant-defaults.js +9 -2
  521. package/dist/tier-engine/aggregate-id.d.ts +11 -11
  522. package/dist/tier-engine/aggregate-id.js +15 -16
  523. package/dist/tier-engine/compose-app.d.ts +14 -14
  524. package/dist/tier-engine/compose-app.js +1 -1
  525. package/dist/tier-engine/entity.js +18 -19
  526. package/dist/tier-engine/feature.d.ts +19 -17
  527. package/dist/tier-engine/feature.js +68 -69
  528. package/dist/tier-engine/handlers/active-tier.query.js +6 -7
  529. package/dist/tier-engine/handlers/get-tenant-tier.query.js +4 -4
  530. package/dist/tier-engine/handlers/set-tenant-tier.write.d.ts +7 -8
  531. package/dist/tier-engine/handlers/set-tenant-tier.write.js +7 -4
  532. package/dist/tier-engine/tier-resolver.js +2 -2
  533. package/dist/tier-engine/trial.js +8 -8
  534. package/dist/tier-engine/web/constants.js +2 -2
  535. package/dist/tier-engine/web/index.js +4 -4
  536. package/dist/user/db/queries/stream-tenant-backfill.js +8 -8
  537. package/dist/user/handlers/create.write.js +4 -4
  538. package/dist/user/schema/user.d.ts +11 -11
  539. package/dist/user/schema/user.js +45 -44
  540. package/dist/user/seeding.d.ts +15 -15
  541. package/dist/user/seeding.js +28 -28
  542. package/dist/user/testing.js +3 -3
  543. package/dist/user-data-rights/audit-download.d.ts +8 -8
  544. package/dist/user-data-rights/audit-download.js +19 -20
  545. package/dist/user-data-rights/boot-checks.js +1 -1
  546. package/dist/user-data-rights/deletion-token.js +1 -1
  547. package/dist/user-data-rights/feature.d.ts +49 -50
  548. package/dist/user-data-rights/feature.js +54 -53
  549. package/dist/user-data-rights/handlers/cancel-deletion.write.js +9 -9
  550. package/dist/user-data-rights/handlers/confirm-deletion-by-token.write.js +8 -8
  551. package/dist/user-data-rights/handlers/download-by-job.query.js +29 -30
  552. package/dist/user-data-rights/handlers/download-by-token.query.js +40 -42
  553. package/dist/user-data-rights/handlers/export-status.query.js +8 -9
  554. package/dist/user-data-rights/handlers/lift-restriction.write.js +7 -8
  555. package/dist/user-data-rights/handlers/list-download-attempts.query.js +2 -2
  556. package/dist/user-data-rights/handlers/my-audit-log.query.js +4 -4
  557. package/dist/user-data-rights/handlers/request-deletion-by-email.write.d.ts +5 -5
  558. package/dist/user-data-rights/handlers/request-deletion-by-email.write.js +16 -15
  559. package/dist/user-data-rights/handlers/request-deletion.write.d.ts +2 -2
  560. package/dist/user-data-rights/handlers/request-deletion.write.js +7 -9
  561. package/dist/user-data-rights/handlers/request-export.write.js +42 -41
  562. package/dist/user-data-rights/handlers/restrict-account.write.js +22 -19
  563. package/dist/user-data-rights/handlers/run-forget-cleanup.write.js +8 -8
  564. package/dist/user-data-rights/index.js +8 -10
  565. package/dist/user-data-rights/lib/default-mailers.js +3 -3
  566. package/dist/user-data-rights/lib/update-user-lifecycle.js +14 -17
  567. package/dist/user-data-rights/run-export-jobs.d.ts +38 -42
  568. package/dist/user-data-rights/run-export-jobs.js +130 -237
  569. package/dist/user-data-rights/run-forget-cleanup.d.ts +16 -20
  570. package/dist/user-data-rights/run-forget-cleanup.js +65 -83
  571. package/dist/user-data-rights/run-user-export.d.ts +34 -33
  572. package/dist/user-data-rights/run-user-export.js +55 -57
  573. package/dist/user-data-rights/schema/download-attempt.js +11 -11
  574. package/dist/user-data-rights/schema/download-token.js +37 -41
  575. package/dist/user-data-rights/schema/export-job.d.ts +4 -4
  576. package/dist/user-data-rights/schema/export-job.js +65 -67
  577. package/dist/user-data-rights/token-helpers.d.ts +8 -9
  578. package/dist/user-data-rights/token-helpers.js +21 -25
  579. package/dist/user-data-rights/web/client-plugin.d.ts +5 -5
  580. package/dist/user-data-rights/web/client-plugin.js +1 -1
  581. package/dist/user-data-rights/web/confirm-deletion-screen.js +6 -5
  582. package/dist/user-data-rights/web/constants.js +1 -1
  583. package/dist/user-data-rights/web/index.js +5 -5
  584. package/dist/user-data-rights/web/privacy-center-screen.js +14 -13
  585. package/dist/user-data-rights/web/public-deletion-gate.d.ts +4 -4
  586. package/dist/user-data-rights/web/request-deletion-screen.js +6 -6
  587. package/dist/user-data-rights/zip-path.d.ts +15 -15
  588. package/dist/user-data-rights/zip-path.js +41 -40
  589. package/dist/user-data-rights-defaults/feature.js +15 -15
  590. package/dist/user-data-rights-defaults/hooks/delivery-attempt.userdata-hook.js +3 -5
  591. package/dist/user-data-rights-defaults/hooks/file-ref.userdata-hook.js +45 -51
  592. package/dist/user-data-rights-defaults/hooks/job-run.userdata-hook.js +2 -2
  593. package/dist/user-data-rights-defaults/hooks/notification-preference.userdata-hook.js +1 -1
  594. package/dist/user-data-rights-defaults/hooks/user-session.userdata-hook.js +3 -3
  595. package/dist/user-data-rights-defaults/hooks/user.userdata-hook.js +32 -31
  596. package/dist/user-profile/handlers/change-email.write.js +13 -13
  597. package/dist/user-profile/index.js +3 -3
  598. package/dist/user-profile/web/client-plugin.js +1 -1
  599. package/dist/user-profile/web/constants.js +1 -1
  600. package/dist/user-profile/web/profile-screen.js +1 -1
  601. package/dist/waitlist/handlers/export-purge.write.js +2 -1
  602. package/dist/waitlist/handlers/submit.write.js +5 -5
  603. package/dist/waitlist/import.d.ts +1 -0
  604. package/dist/waitlist/import.js +4 -0
  605. package/dist/waitlist/legacy-migrate.js +17 -6
  606. package/dist/waitlist/link-on-signup.js +18 -6
  607. package/dist/waitlist/options.d.ts +3 -0
  608. package/dist/workflow-runner/aggregate-id.d.ts +1 -1
  609. package/dist/workflow-runner/aggregate-id.js +1 -1
  610. package/dist/workflow-runner/event-subscriber.js +4 -5
  611. package/dist/workflow-runner/event-trigger.js +4 -17
  612. package/dist/workflow-runner/feature.js +2 -2
  613. package/dist/workflow-runner/handlers/resume-run.write.js +4 -4
  614. package/dist/workflow-runner/pending-projection.js +6 -7
  615. package/dist/workflow-runner/runner.js +6 -6
  616. package/dist/workflow-runner/tables.js +6 -6
  617. package/dist/workflow-runner/workflow-registry.js +1 -1
  618. package/package.json +20 -10
  619. package/src/agent-tools/changes.json +6 -0
  620. package/src/audit/changes.json +12 -0
  621. package/src/auth-mfa/changes.json +6 -0
  622. package/src/billing-foundation/changes.json +55 -0
  623. package/src/cap-counter/changes.json +18 -0
  624. package/src/channel-email/changes.json +6 -0
  625. package/src/config/changes.json +12 -0
  626. package/src/crypto-shredding/changes.json +6 -0
  627. package/src/delivery/changes.json +30 -0
  628. package/src/form-draft/changes.json +6 -0
  629. package/src/host-routing/changes.json +6 -0
  630. package/src/inbound-mail-foundation/changes.json +18 -0
  631. package/src/jobs/changes.json +13 -0
  632. package/src/mail-foundation/changes.json +6 -0
  633. package/src/renderer-pdf/changes.json +6 -0
  634. package/src/step-dispatcher/changes.json +6 -0
  635. package/src/subscription-dodo/changes.json +14 -0
  636. package/src/subscription-stripe/changes.json +12 -0
  637. package/src/template-resolver/changes.json +48 -0
  638. package/src/tenant/changes.json +6 -0
  639. package/src/tenant-lifecycle/changes.json +6 -0
  640. package/src/tier-engine/changes.json +6 -0
  641. package/src/waitlist/changes.json +18 -0
  642. package/dist/billing-foundation/consumer-protection/stored-user-email.d.ts +0 -1
  643. package/dist/billing-foundation/consumer-protection/stored-user-email.js +0 -8
@@ -1,28 +1,30 @@
1
- // Inbound-mail data-retention (#957). DSGVO Art. 5 (Datenminimierung):
2
- // ohne Retention wachsen read_inbound_messages + die File-Storage-Bodies
3
- // unbegrenzt. Zwei Targets, zwei Mechanismen — der Unterschied ist
4
- // event-sourced vs. unmanaged:
1
+ // Inbound-mail data retention. DSGVO Art. 5 (data minimization):
2
+ // without retention, read_inbound_messages and the file-storage bodies grow
3
+ // without bound. Two targets, two mechanisms—the difference is
4
+ // event-sourced versus unmanaged:
5
5
  //
6
- // read_inbound_messages (event-sourced, EXPLIZITE r.projection):
7
- // pro Row aelter als messageRetentionDays → archiveStream + Row-Delete
8
- // (+ bodyRef-Objekt loeschen). archiveStream statt executor.forget, weil
9
- // die Projection nur das received-Domain-Event mappt, nicht den
10
- // forgotten-Auto-Verb (den registriert nur ImplicitProjection). Ein
11
- // forget-Event wuerde beim Rebuild ignoriert und die Row aus dem
12
- // received-Event resurrecten (#648-Klasse). Der archivierte Stream macht
13
- // loadAggregate leer → received wird gar nicht erst repliziert. Gleiches
14
- // Muster wie tenant-destroy-hook, nur per-Row-cutoff statt ganzer Tenant.
6
+ // read_inbound_messages (event-sourced, EXPLICIT r.projection):
7
+ // each Row older than messageRetentionDays → archiveStream + Row delete
8
+ // (+ delete the bodyRef object). archiveStream instead of executor.forget
9
+ // because the projection maps only the received domain event, not the
10
+ // forgotten auto-verb (which only ImplicitProjection registers). A
11
+ // forget event would be ignored during a rebuild, causing the Row to be
12
+ // resurrected from the received event. The archived stream makes
13
+ // loadAggregate empty, so received is not replicated in the first place.
14
+ // Same pattern as tenant-destroy-hook, but with a per-Row cutoff instead
15
+ // of an entire Tenant.
15
16
  //
16
- // store_mail_seen_messages (unmanaged, direct-write, nicht event-sourced):
17
- // Dedup-Anker braucht nur das Backfill-/Replay-Fenster → seenAt-cutoff
18
- // via plain deleteMany, kein Stream/Archiv. Gescoped direkt über die
19
- // tenant_id-Spalte der Tabelle (table-builder-Konvention), kein Account-Join.
17
+ // store_mail_seen_messages (unmanaged, direct-write, not event-sourced):
18
+ // The deduplication anchor is needed only for the backfill/replay window →
19
+ // seenAt cutoff via plain deleteMany, with no stream/archive. Scoped
20
+ // directly through the table's tenant_id column (table-builder convention),
21
+ // without an Account join.
20
22
  //
21
- // GRENZE (#957 Teil 2, Plan §3.4): die PII in den Message-Events bleibt
22
- // unter dem TENANT-Subject-Key entschluesselbar — per-Row-Retention
23
- // shreddet keinen Key. Echte Art.-17-Erasure der Event-Payloads passiert
24
- // erst bei tenant-destroy (Key-Erase). Read-Row + Body-File sind nach dem
25
- // Sweep weg; das Event-Log ist append-only by design.
23
+ // LIMITATION: the PII in the message events remains decryptable under the
24
+ // TENANT subject key—per-Row retention does not shred a key. Actual Art.-17
25
+ // erasure of event payloads happens only during tenant-destroy (key erasure).
26
+ // The read Row and body file are gone after the sweep; the event log is
27
+ // append-only by design.
26
28
  import { deleteMany, selectMany } from "@cosmicdrift/kumiko-framework/db";
27
29
  import { archiveStream, deleteRowsWithoutReplayableStream, } from "@cosmicdrift/kumiko-framework/event-store";
28
30
  import { seenMessageTable } from "./entities.js";
@@ -46,18 +48,18 @@ async function purgeExpiredMessages(args, cutoff) {
46
48
  let messagesPurged = 0;
47
49
  let bodyObjectsDeleted = 0;
48
50
  let bodyObjectErrors = 0;
49
- // Drain-Loop: jede Page loescht die Rows die sie liest, die naechste ist
50
- // damit frisch. archiveStream VOR dem Delete (crash dazwischen → naechster
51
- // Lauf re-archiviert idempotent + loescht). Delete strikt nach den
52
- // archivierten ids, nie per cutoff-WHERE — sonst koennte eine zwischen
53
- // select und delete eingegangene Alt-Mail unarchiviert geloescht werden
54
- // und beim Rebuild resurrecten.
51
+ // Drain loop: each page deletes the Rows it reads, so the next page is fresh.
52
+ // Run archiveStream BEFORE deletion: if a crash occurs in between, the next
53
+ // run re-archives idempotently and deletes the Row. Delete strictly by the
54
+ // archived IDs, never with a cutoff WHERE; otherwise an old mail arriving
55
+ // between select and delete could be deleted without being archived and
56
+ // resurrected during a rebuild.
55
57
  //
56
- // Ein Row deren deleteBodyObject fehlschlaegt wird NICHT geloescht — sonst
57
- // ginge die einzige Referenz auf das (dann verwaiste) File-Objekt verloren
58
- // (kein Retry, kein Dead-Letter). Die Row bleibt fuer den naechsten Sweep
59
- // stehen (archiveStream ist idempotent). failedIds verhindert, dass so ein
60
- // Row innerhalb DIESES Laufs endlos re-selektiert wird.
58
+ // A Row whose deleteBodyObject fails is NOT deleted; otherwise the only
59
+ // reference to the now-orphaned file object would be lost (no retry or
60
+ // dead-letter). The Row remains for the next sweep (archiveStream is
61
+ // idempotent). failedIds prevents such a Row from being selected endlessly
62
+ // during THIS run.
61
63
  const failedIds = new Set();
62
64
  for (;;) {
63
65
  const rows = (await selectMany(args.db, inboundMessagesProjectionTable, { receivedAt: { lt: cutoff }, tenantId: args.tenantId }, { limit: BATCH_LIMIT })).filter((row) => !failedIds.has(row.id));
@@ -99,9 +101,9 @@ async function purgeExpiredMessages(args, cutoff) {
99
101
  return { messagesPurged, bodyObjectsDeleted, bodyObjectErrors };
100
102
  }
101
103
  async function purgeExpiredSeenAnchors(db, tenantId, cutoff) {
102
- // Seen-Anker erben tenantId (table-builder: jede Entity hat tenant_id) →
103
- // direkt tenant-scoped, kein Account-Join. Trifft auch Anker, deren Account
104
- // schon disconnected/geloescht ist.
104
+ // Seen anchors inherit tenantId (table-builder: every Entity has tenant_id) →
105
+ // scoped directly to the tenant, without an Account join. This also includes
106
+ // anchors whose Account has already been disconnected or deleted.
105
107
  const where = { tenantId, seenAt: { lt: cutoff } };
106
108
  const expired = await selectMany(db, seenMessageTable, where);
107
109
  if (expired.length === 0)
@@ -63,8 +63,6 @@ export const mailAccountListScreen = {
63
63
  access: MAIL_ACCOUNT_ADMIN_ACCESS,
64
64
  dormant: true,
65
65
  };
66
- // The reason is the audit label update-account requires; it is not in the
67
- // layout, so the default is what gets written.
68
66
  export const mailAccountEditScreen = {
69
67
  id: MAIL_ACCOUNT_EDIT_SCREEN_ID,
70
68
  type: "actionForm",
@@ -73,7 +71,6 @@ export const mailAccountEditScreen = {
73
71
  fields: {
74
72
  accountId: { type: "text", required: true },
75
73
  displayName: { type: "text", required: true, maxLength: 200 },
76
- reason: { type: "text", default: "tenant_admin" },
77
74
  },
78
75
  layout: {
79
76
  sections: [{ fields: [{ field: "accountId", readOnly: true }, "displayName"] }],
@@ -1,21 +1,19 @@
1
- // Tenant-destroy hooks — räumen beim Tenant-Destroy alle Inbound-Mail-
2
- // Spuren des Tenants ab. Ein Hook PRO tenant-subject-Entity (der
3
- // gdpr-storage-Boot-Validator prüft die EXT_TENANT_DATA-Registrierung
4
- // entity-genau), jeweils:
1
+ // Tenant-destroy hooks remove all inbound-mail traces belonging to the tenant.
2
+ // One hook per tenant-subject entity (the gdpr-storage boot validator checks
3
+ // the EXT_TENANT_DATA registration per entity), each of which:
5
4
  //
6
- // 1. Streams archivieren — ein künftiger Projection-Rebuild kann
7
- // Gelöschtes nicht resurrecten (Muster billing-foundation #800).
8
- // Message-Streams sind viele → Loop über die Projection-Rows
9
- // (Row-PK = Stream-ID); tenant-destroy ist ein seltener
10
- // Batch-Vorgang, O(n) ist ok.
11
- // 2. Projection-Rows löschen.
12
- // 3. Nur mail-account: unmanaged Sync-State (Cursors, Seen-Anchors)
13
- // löschen — gekeyt per accountId, deshalb aus den Account-Rows
14
- // VOR dem Delete eingesammelt.
5
+ // 1. Archives streams so a future projection rebuild cannot resurrect
6
+ // deleted data. Message streams are numerous, so loop over the
7
+ // projection rows (row PK = stream ID); tenant-destroy is a rare batch
8
+ // operation, so O(n) is acceptable.
9
+ // 2. Deletes the projection rows.
10
+ // 3. For mail-account only, deletes unmanaged sync state (cursors,
11
+ // seen anchors), which is keyed by accountId and must therefore be
12
+ // collected from the account rows BEFORE deletion.
15
13
  //
16
- // Die eigentliche PII-Erasure macht crypto-shredding: eraseSubjectKeys
17
- // löscht den Tenant-Subject-Key, damit werden Event-Log-Payloads UND
18
- // etwaige Ciphertext-Kopien unlesbar. Diese Hooks entsorgen die Rows.
14
+ // The actual PII erasure uses crypto-shredding: eraseSubjectKeys deletes the
15
+ // tenant subject key, making event-log payloads AND any ciphertext copies
16
+ // unreadable. These hooks dispose of the rows.
19
17
  import { declareEscapeHatch } from "@cosmicdrift/kumiko-framework/engine";
20
18
  import { archiveStream } from "@cosmicdrift/kumiko-framework/event-store";
21
19
  import { seenMessageTable, syncCursorTable } from "./entities.js";
@@ -8,8 +8,9 @@ import { INBOUND_MAIL_PROVIDER_EXTENSION, type InboundMailAccountStatus } from "
8
8
  * config — tenant config reads (host/port/... of the plugins)
9
9
  * registry — extension lookup in the factory (not plugin-internal)
10
10
  * secrets — tenant secret reads (IMAP password, OAuth refresh token)
11
- * auditUserId — audit identity for secret reads. Handler path: the dispatcher
12
- * sets the caller user ID; worker path: system identity.
11
+ * auditUserId — audit identity for secret reads. Handler path: unset,
12
+ * requireSecretsContext falls back to ctx.user.id; worker/provider
13
+ * path: system identity set by the resolver.
13
14
  * metricsFor — metrics handle of a feature by name, same behavior as
14
15
  * HandlerContext.metricsFor: unregistered metrics are a silent
15
16
  * no-op instead of a throw.
@@ -22,23 +23,23 @@ export type InboundMailContext = {
22
23
  readonly metricsFor?: (featureName: string) => MetricsHandle;
23
24
  };
24
25
  /**
25
- * Plaintext-Sicht auf ein verbundenes Postfach, wie Provider sie sehen.
26
- * Die Foundation decryptet `address` VOR dem Provider-Call — Provider
27
- * arbeiten nie mit `kumiko-pii:`-Ciphertext (Guard analog
28
- * withPiiCiphertextGuard im Transport-Pfad).
26
+ * Plaintext view of a connected mailbox exposed to providers.
27
+ * The Foundation decrypts `address` BEFORE the provider call; providers
28
+ * never receive `kumiko-pii:` ciphertext (guard analogous to
29
+ * withPiiCiphertextGuard in the transport path).
29
30
  */
30
31
  export type MailAccountRecord = {
31
- /** = aggregateId des mail-account-Streams; zugleich Secret-Slot-Key. */
32
+ /** = aggregateId of the mail-account stream and the secret-slot key. */
32
33
  readonly id: string;
33
34
  readonly tenantId: string;
34
- /** Provider-Key wie bei der Extension registriert ("imap", "m365-graph",
35
+ /** Provider key registered with the extension ("imap", "m365-graph",
35
36
  * "gmail-rest"). */
36
37
  readonly provider: string;
37
- /** "password" | "xoauth2" | "oauth" — imap unterscheidet hierüber
38
- * Formular-Connect vs. XOAUTH2-Fallback (Plan §2). */
38
+ /** "password" | "xoauth2" | "oauth" — imap uses this to distinguish
39
+ * form-based connect from the XOAUTH2 fallback. */
39
40
  readonly authMethod: string;
40
- /** null = tenant-geteiltes Postfach, sonst persönliches Postfach
41
- * dieses Users (Sichtbarkeits-Scope, Plan Entscheidung 2). */
41
+ /** null = tenant-shared mailbox; otherwise this user's personal mailbox
42
+ * (visibility scope). */
42
43
  readonly ownerUserId: string | null;
43
44
  /** Postfach-Adresse, Plaintext (decrypted). */
44
45
  readonly address: string;
@@ -47,36 +48,35 @@ export type MailAccountRecord = {
47
48
  readonly watchState: string;
48
49
  };
49
50
  /**
50
- * Normalisierte eingehende Mail — Provider-Output, Ingest-Input.
51
- * Provider-raw-Strukturen (IMAP-Flags, Graph-Objekte) bleiben im
52
- * Provider; hier nur der domain-clean Schnitt.
51
+ * Normalized incoming mail — provider output and ingest input.
52
+ * Provider-specific structures (IMAP flags, Graph objects) remain in the
53
+ * provider; this type contains only the domain-level boundary.
53
54
  */
54
55
  export type RawInboundMessage = {
55
- /** Provider-native Message-ID (IMAP UID, Graph id, Gmail id) —
56
- * Idempotency-Anchor zusammen mit providerName. */
56
+ /** Provider-native message ID (IMAP UID, Graph id, Gmail id) — the
57
+ * idempotency anchor together with providerName. */
57
58
  readonly providerMessageId: string;
58
- /** RFC-5322 Message-ID-Header ohne <>; null wenn der Header fehlt
59
- * (Foundation fällt auf deterministischen Ersatz zurück). */
59
+ /** RFC-5322 Message-ID header without <>; null when the header is missing
60
+ * (the Foundation falls back to a deterministic replacement). */
60
61
  readonly messageIdHeader: string | null;
61
- /** Provider-native Thread-/Conversation-ID falls vorhanden (Graph
62
- * conversationId, Gmail threadId); Foundation bevorzugt sie vor der
63
- * References-Chain beim threadKey-Bau. */
62
+ /** Provider-native thread/conversation ID when available (Graph
63
+ * conversationId, Gmail threadId); the Foundation prefers it over the
64
+ * References chain when building threadKey. */
64
65
  readonly providerThreadId: string | null;
65
- /** References/In-Reply-To-Chain (Message-IDs ohne <>), älteste zuerst. */
66
+ /** References/In-Reply-To chain (message IDs without <>), oldest first. */
66
67
  readonly references: readonly string[];
67
68
  readonly from: string;
68
69
  readonly to: readonly string[];
69
70
  readonly cc: readonly string[];
70
71
  readonly subject: string;
71
- /** Plaintext-Vorschau, provider-generiert oder aus dem Body geschnitten. */
72
+ /** Plaintext preview generated by the provider or truncated from the body. */
72
73
  readonly snippet: string;
73
- /** ISO-Instant — INTERNALDATE bzw. receivedDateTime, nicht Ingest-Zeit. */
74
+ /** ISO instant — INTERNALDATE or receivedDateTime, not ingest time. */
74
75
  readonly receivedAtIso: string;
75
- /** Raw MIME; null im snippet-only-Mode. Foundation persisted ihn nach
76
- * file-foundation und schreibt bodyRef — der Event-Store bleibt
77
- * blob-frei. */
76
+ /** Raw MIME; null in snippet-only mode. The Foundation persists it through
77
+ * file-foundation and writes bodyRef, so the event store remains blob-free. */
78
78
  readonly rawMime: Uint8Array | null;
79
- /** Generischer Scope-Hint ("inbox", Folder-Name) — keine App-Semantik. */
79
+ /** Generic scope hint ("inbox", folder name), with no application semantics. */
80
80
  readonly scope: string;
81
81
  };
82
82
  /** Provider-opaker Cursor: IMAP {uidValidity,lastUid} · Graph {deltaLink}
@@ -86,8 +86,8 @@ export type SyncCursorPayload = Readonly<Record<string, unknown>>;
86
86
  export type InboundFetchResult = {
87
87
  readonly messages: readonly RawInboundMessage[];
88
88
  readonly nextCursor: SyncCursorPayload;
89
- /** true ⇒ Foundation ruft fetch im selben Poll-Tick erneut auf
90
- * (Pagination), bis false oder maxMessages-Budget erschöpft. */
89
+ /** true ⇒ the Foundation calls fetch again in the same poll tick
90
+ * (pagination) until false or the maxMessages budget is exhausted. */
91
91
  readonly hasMore: boolean;
92
92
  };
93
93
  export type OAuthTokenSet = {
@@ -98,13 +98,13 @@ export type OAuthTokenSet = {
98
98
  readonly scopesGranted: readonly string[];
99
99
  };
100
100
  /**
101
- * OAuth-Teil des Contracts — nur OAuth-Provider; imap (Passwort-Modus)
102
- * lässt `oauth` weg. Die Routen (`/inbound-mail/connect`,
103
- * `/inbound-mail/oauth/callback`) stellt die Foundation generisch —
104
- * Provider registrieren KEINE eigenen Routen.
101
+ * OAuth portion of the contract — OAuth providers only; imap in password
102
+ * mode omits `oauth`. The Foundation provides the routes
103
+ * (`/inbound-mail/connect`, `/inbound-mail/oauth/callback`) generically;
104
+ * providers MUST NOT register their own routes.
105
105
  */
106
106
  export type InboundOAuthFlow = {
107
- /** Scopes: Empfang UND Send in EINEM Consent — Re-Consent ist teuer. */
107
+ /** Scopes: request receive AND send in a SINGLE consent; re-consent is costly. */
108
108
  readonly scopes: {
109
109
  readonly receive: readonly string[];
110
110
  readonly send?: readonly string[];
@@ -128,17 +128,17 @@ export type InboundOAuthFlow = {
128
128
  }) => Promise<OAuthTokenSet>;
129
129
  };
130
130
  /**
131
- * Inbound-Mail-Provider-Plugin contract. Jedes Provider-Feature
132
- * (inbound-provider-imap, -m365-graph, -gmail-rest) registriert eine
133
- * Implementation via `r.useExtension(INBOUND_MAIL_PROVIDER_EXTENSION,
131
+ * Inbound-mail provider plugin contract. Each provider feature
132
+ * (inbound-provider-imap, -m365-graph, -gmail-rest) registers an
133
+ * implementation via `r.useExtension(INBOUND_MAIL_PROVIDER_EXTENSION,
134
134
  * "<key>", plugin)`.
135
135
  */
136
136
  export type InboundMailProviderPlugin = {
137
- /** Credentials-/Erreichbarkeits-Check beim Connect-Flow — wirft
138
- * typisiert (InboundAuthError etc.), kein Rückgabewert. */
137
+ /** Credential/reachability check during the connect flow — throws a
138
+ * typed error (InboundAuthError, etc.) and returns no value. */
139
139
  readonly verify: (ctx: InboundMailContext, account: MailAccountRecord) => Promise<void>;
140
- /** Pull seit cursor. `cursor === null` ⇒ Erst-Befüllung, begrenzt
141
- * durch backfillWindowDays. */
140
+ /** Fetch since cursor. `cursor === null` means initial population,
141
+ * limited by backfillWindowDays. */
142
142
  readonly fetch: (ctx: InboundMailContext, account: MailAccountRecord, cursor: SyncCursorPayload | null, opts: {
143
143
  readonly backfillWindowDays: number;
144
144
  readonly maxMessages: number;
@@ -147,18 +147,18 @@ export type InboundMailProviderPlugin = {
147
147
  * for password accounts and providers without an oauth flow. */
148
148
  readonly accessToken?: string;
149
149
  /** Batch lookup of the provider message ids not yet ingested for this
150
- * account (committed seen anchors, one query per call). Call it after
150
+ * account (committed seen anchors; lists of any size are fine, queried in chunks). Call it after
151
151
  * the listing/delta page and download MIME only for the returned ids.
152
152
  * Ingest dedup stays the correctness anchor; this only saves downloads. */
153
153
  readonly filterUnknownMessageIds?: (providerMessageIds: readonly string[]) => Promise<ReadonlySet<string>>;
154
154
  }) => Promise<InboundFetchResult>;
155
155
  /** Nur OAuth-Provider. */
156
156
  readonly oauth?: InboundOAuthFlow;
157
- /** Optional: Live-Push (IMAP IDLE, später Graph/Gmail-Webhooks).
158
- * Liefert stop(). Poll bleibt Reconciliation — watch ist Latenz-
159
- * Optimierung, nie Korrektheits-Anker. `onError` meldet den Tod der
160
- * Live-Verbindung (Drop, Auth-Revoke) an den Supervisor, der mit
161
- * Backoff neu startet — der Provider reconnected NICHT selbst. */
157
+ /** Optional live push (IMAP IDLE, later Graph/Gmail webhooks).
158
+ * Returns stop(). Polling remains reconciliation: watch optimizes
159
+ * latency but is never the correctness anchor. `onError` reports a dead
160
+ * live connection (drop, auth revocation) to the supervisor, which
161
+ * restarts it with backoff; the provider does NOT reconnect itself. */
162
162
  readonly watch?: (ctx: InboundMailContext, account: MailAccountRecord, handlers: {
163
163
  readonly onMessages: (msgs: readonly RawInboundMessage[]) => Promise<void>;
164
164
  readonly onError: (err: unknown) => void;
@@ -1,17 +1,18 @@
1
- // Provider-Contract für inbound-mail-Provider-Plugins (Plan §2).
1
+ // Provider contract for inbound-mail provider plugins.
2
2
  //
3
- // Gespiegelt von mail-foundation's MailTransportContext/-Plugin —
4
- // gleiche Trennung Foundation ↔ Provider, gleicher Slim-Context.
3
+ // Mirrored from mail-foundation's MailTransportContext/-Plugin —
4
+ // the Foundation/provider separation and slim context are identical.
5
5
  //
6
- // **Warum kein voller HandlerContext?** fetch()/watch() laufen im
7
- // Worker-Pfad (Poll-Cron, IDLE-Supervisor) — dort gibt es keinen
8
- // per-request `tx`/`actor`. Ein Plugin das mehr liest würde den
9
- // Worker-Pfad zur Runtime brechen, und das fiele nur in production
10
- // auf. Plugin das mehr braucht: InboundMailContext explizit erweitern
11
- // (sichtbarer breaking change) statt ctx-cast.
6
+ // **Why not a full HandlerContext?** fetch()/watch() run in the worker
7
+ // path (poll cron, IDLE supervisor), where there is no per-request
8
+ // `tx`/`actor`. A plugin that reads more would break the worker path at
9
+ // runtime, and this would only be noticed in production. Plugins that need
10
+ // more must explicitly extend InboundMailContext (a visible breaking change)
11
+ // instead of casting ctx.
12
12
  import { INBOUND_MAIL_PROVIDER_EXTENSION } from "./constants.js";
13
- // extension-usage `options` ist engine-payload (unknown) — strukturell
14
- // validieren statt blind casten (Muster isMailTransportPlugin).
13
+ // `options` in the extension usage is an engine payload (unknown), so
14
+ // validate its structure instead of casting blindly (patterned after
15
+ // isMailTransportPlugin).
15
16
  export function isInboundMailProviderPlugin(o) {
16
17
  return (typeof o === "object" &&
17
18
  o !== null &&
@@ -21,18 +22,17 @@ export function isInboundMailProviderPlugin(o) {
21
22
  typeof o.fetch === "function");
22
23
  }
23
24
  // =============================================================================
24
- // Typisierte Fehlerklassen — Foundation reagiert einheitlich im Poll
25
- // (Plan §2, Fehler-Tabelle):
26
- // InboundAuthError → status=auth_error, kein Retry
27
- // InboundRateLimitError → Poll-Abbruch, nächster Cron-Tick
28
- // InboundCursorInvalidError → Cursor-Reset + Voll-Resync im Backfill-
29
- // Fenster; Dedup fängt Dubletten
30
- // InboundTransientError → Job-Retry (retries: 3, exponential)
25
+ // Typed errors handled uniformly by the Foundation during polling:
26
+ // InboundAuthError → status=auth_error, no retry
27
+ // InboundRateLimitError → abort poll, wait for the next cron tick
28
+ // InboundCursorInvalidError → reset cursor + full resync in the backfill
29
+ // window; deduplication handles duplicates
30
+ // InboundTransientError → job retry (retries: 3, exponential)
31
31
  // =============================================================================
32
32
  //
33
- // `kind`-Discriminant statt instanceof: Plugin und Foundation können in
34
- // getrennten Bundles leben (dual-package-hazard), instanceof über
35
- // Realm-/Kopie-Grenzen ist unzuverlässig.
33
+ // Use a `kind` discriminant instead of instanceof: plugins and the Foundation
34
+ // may run in separate bundles (dual-package-hazard), and instanceof is
35
+ // unreliable across realm or package-copy boundaries.
36
36
  export class InboundAuthError extends Error {
37
37
  kind = "inbound-auth-error";
38
38
  constructor(message) {
@@ -3,13 +3,13 @@ import type { DistributedLock } from "@cosmicdrift/kumiko-framework/pipeline";
3
3
  import { type OAuthAccessTokenManager } from "./oauth-access-token.ts";
4
4
  import { type InboundMailContext, type MailAccountRecord, type RawInboundMessage } from "./types.ts";
5
5
  export type InboundMailSupervisorDeps = {
6
- /** Slim-Context für Provider-Calls (registry Pflicht, secrets für
7
- * Credential-Reads der Provider). */
6
+ /** Slim context for provider calls (`registry` is required; `secrets` is
7
+ * used for provider credential reads). */
8
8
  readonly providerCtx: InboundMailContext;
9
- /** App-DB — direct reads auf read_mail_accounts (Account-Snapshot)
10
- * + direct writes auf store_mail_sync_cursors (unmanaged store). */
9
+ /** App database — direct reads from read_mail_accounts (account snapshot)
10
+ * and direct writes to store_mail_sync_cursors (unmanaged store). */
11
11
  readonly db: DbConnection;
12
- /** Standard-Dispatcher mit SystemUser — trägt ingest-message +
12
+ /** Standard dispatcher with SystemUser — carries ingest-message and
13
13
  * update-account. */
14
14
  readonly dispatchWrite: (args: {
15
15
  readonly handlerQn: string;
@@ -20,8 +20,8 @@ export type InboundMailSupervisorDeps = {
20
20
  readonly data?: unknown;
21
21
  readonly error?: unknown;
22
22
  }>;
23
- /** Persisted den raw MIME-Body (file-foundation) und liefert den
24
- * bodyRef fürs Event. Fehlt der Hook, läuft snippet-only-Mode
23
+ /** Persists the raw MIME body (file-foundation) and returns its bodyRef
24
+ * for the event. Without this hook, runs in snippet-only mode
25
25
  * (bodyRef = ""). */
26
26
  readonly storeBody?: (account: MailAccountRecord, msg: RawInboundMessage) => Promise<string>;
27
27
  readonly pollIntervalMs?: number;
@@ -33,7 +33,7 @@ export type InboundMailSupervisorDeps = {
33
33
  * before `plugin.watch()`, ensureWatcher claims a TTL lease for the
34
34
  * account via `lock.acquire` and renews it via `lock.renew` while the
35
35
  * watcher lives. Omit for single-process deployments — every active
36
- * account is watched locally, same as before #1719. */
36
+ * account is watched locally, same as before. */
37
37
  readonly lock?: DistributedLock;
38
38
  /** Access-token lifecycle for OAuth accounts. Defaults to a manager built
39
39
  * from `db` + `providerCtx.secrets`; pass the instance shared with
@@ -46,8 +46,8 @@ export type InboundMailSupervisorDeps = {
46
46
  };
47
47
  export type InboundMailSupervisor = {
48
48
  readonly start: () => Promise<void>;
49
- /** Ein Reconciliation-Durchlauf über alle aktiven Accounts — auch
50
- * standalone nutzbar (Tests, manueller Ops-Trigger). */
49
+ /** Reconciliation run across all active accounts; also usable standalone
50
+ * for tests and manual operational triggers. */
51
51
  readonly pollOnce: () => Promise<void>;
52
52
  readonly stop: () => Promise<void>;
53
53
  };