@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
@@ -11,29 +11,28 @@ export declare const subscriptionMollieEnvSchema: z.ZodObject<{
11
11
  MOLLIE_API_KEY: z.ZodString;
12
12
  }, z.core.$strip>;
13
13
  export type SubscriptionMollieOptions = {
14
- /** Mollie-API-key (`test_...` oder `live_...`). App-wide, beim Plugin-
15
- * mount aus process.env oder system-config. */
14
+ /** Mollie API key (`test_...` or `live_...`). App-wide, mounted from
15
+ * process.env or system configuration. */
16
16
  readonly apiKey: string;
17
- /** Foundation-webhook-URL die der App-Builder unter Mollie-Dashboard
18
- * als webhook eingetragen hat. Plugin reicht das beim payment-
19
- * create an Mollie weiter — Mollie sendet beim payment-event
20
- * webhooks an diese URL. Typisch:
17
+ /** Foundation webhook URL registered by the app builder in the Mollie
18
+ * dashboard. The plugin passes it to Mollie when creating a payment;
19
+ * Mollie sends payment-event webhooks to this URL. Typically:
21
20
  * `https://app.example.com/api/subscription/webhook/mollie`. */
22
21
  readonly webhookUrl: string;
23
- /** Price-to-tier-Map. Plugin liest die priceId aus dem subscription-
24
- * metadata (= `metadata.priceId` den der App-Builder beim
25
- * createCheckoutSession setzt) und mappt auf einen tier-name. */
22
+ /** Price-to-tier map. The plugin reads the priceId from the subscription
23
+ * metadata (= `metadata.priceId` set by the app builder when calling
24
+ * createCheckoutSession) and maps it to a tier name. */
26
25
  readonly priceToTier: Readonly<Record<string, string>>;
27
- /** Mollie-Subscription-Setup pro priceId. Mollie hat keinen nativen
28
- * price-id-Konzept — App-Builder muss pro virtuellem priceId einen
29
- * amount/interval/description bereitstellen. */
26
+ /** Mollie subscription setup per priceId. Mollie has no native price-ID
27
+ * concept, so the app builder must provide an amount/interval/description
28
+ * for each virtual priceId. */
30
29
  readonly priceToConfig: Readonly<Record<string, MolliePriceConfig>>;
31
- /** @internal Test-only injection-port: ersetzt den verify-webhook-
32
- * fetch-client durch eine Mock-instance. Production left undefined —
33
- * factory baut den Adapter aus `createMollieClient(apiKey)`. Wird
34
- * vom IT (mollie-foundation.integration.ts) genutzt damit der echte
35
- * factory-Code (drift-validation, plugin-registration) im Test-pfad
36
- * durchläuft, ohne dass Mollie-API-Calls passieren. */
30
+ /** @internal Test-only injection port: replaces the verify-webhook fetch
31
+ * client with a mock instance. Production leaves this undefined; the
32
+ * factory builds the adapter from `createMollieClient(apiKey)`. The
33
+ * integration test (mollie-foundation.integration.ts) uses it so the real
34
+ * factory code (drift validation, plugin registration) runs in the test
35
+ * path without making Mollie API calls. */
37
36
  readonly _clientShapeForTests?: MollieClientShape;
38
37
  };
39
38
  export declare function createSubscriptionMollieFeature(options: SubscriptionMollieOptions): FeatureDefinition;
@@ -1,26 +1,26 @@
1
1
  // kumiko-feature-version: 1
2
2
  //
3
- // subscription-mollie — Mollie-Plugin für die subscription-foundation
4
- // Plugin-API (EU-Compliance-Story für DACH-Mid-Market).
3
+ // subscription-mollie — Mollie plugin for subscription-foundation
4
+ // plugin API (EU compliance for the DACH mid-market).
5
5
  //
6
- // **Factory-Pattern (analog subscription-stripe):** liest API-key beim
7
- // mount-time aus den factory-options (typisch process.env aus dem App-
8
- // Builder-bin/server.ts). Mollie hat KEIN webhook-secret — Mollie-SDK
9
- // 4.5.0 bietet keine native HMAC-sig-verify-API. Sicherheit kommt aus
10
- // nicht-guessable IDs + API-Validation; App-Builder kann optional
11
- // einen URL-Token-Wrapper davor schalten.
6
+ // **Factory pattern (analogous to subscription-stripe):** reads the API key
7
+ // at mount time from the factory options (typically process.env from the app
8
+ // builder's bin/server.ts). Mollie has NO webhook secret — Mollie SDK
9
+ // 4.5.0 provides no native HMAC signature verification API. Security comes
10
+ // from non-guessable IDs + API validation; the app builder can optionally
11
+ // add a URL-token wrapper in front.
12
12
  //
13
- // **Phase-5.3-Scope:**
13
+ // **Scope:**
14
14
  // - verifyAndParseWebhook ✓ (lazy-fetch payment + subscription via
15
- // Mollie-API, heuristisches event-type-mapping)
16
- // - createCheckoutSession ✓ (Mollie's mehrstufiger flow: customer
17
- // anlegen + first-payment mit sequenceType="first" → redirectUrl)
18
- // - createPortalSession ✗ (Mollie hat keinen Customer-Portal)
19
- // - cancelSubscription ✗ (Mollie braucht customerId zusätzlich zur
20
- // subId; Plugin-Contract reicht's nicht durch — App-Builder cancelt
21
- // via Mollie-Dashboard oder custom-route)
15
+ // Mollie API, heuristic event-type mapping)
16
+ // - createCheckoutSession ✓ (Mollie's multistep flow: create customer
17
+ // + first payment with sequenceType="first" → redirectUrl)
18
+ // - createPortalSession ✗ (Mollie has no customer portal)
19
+ // - cancelSubscription ✗ (Mollie additionally requires customerId besides
20
+ // subId; the plugin contract does not pass it through — the app builder
21
+ // cancels via the Mollie dashboard or a custom route)
22
22
  //
23
- // **Beispiel-Verwendung in run-config.ts:**
23
+ // **Example usage in run-config.ts:**
24
24
  //
25
25
  // const features = [
26
26
  // billingFoundationFeature,
@@ -64,8 +64,8 @@ export function createSubscriptionMollieFeature(options) {
64
64
  if (options.webhookUrl.length === 0) {
65
65
  throw new Error("subscription-mollie: webhookUrl is empty. Set the foundation-webhook-URL where Mollie sends events.");
66
66
  }
67
- // Drift-Guard: priceToTier + priceToConfig müssen identische Keys
68
- // haben — sonst silent-null-returns aus verifyAndParseWebhook.
67
+ // Drift guard: priceToTier and priceToConfig must have identical keys;
68
+ // otherwise verifyAndParseWebhook silently returns null.
69
69
  const tierKeys = new Set(Object.keys(options.priceToTier));
70
70
  const configKeys = new Set(Object.keys(options.priceToConfig));
71
71
  const missingInConfig = [...tierKeys].filter((k) => !configKeys.has(k));
@@ -76,9 +76,9 @@ export function createSubscriptionMollieFeature(options) {
76
76
  `priceIds in config but missing tier: [${missingInTier.join(", ")}]`);
77
77
  }
78
78
  const client = createMollieClient({ apiKey: options.apiKey });
79
- // Adapter um den Plugin's verify-fetch-client an den vollen Mollie-
80
- // Client zu binden. Plugin-fetch-API ist minimal damit Tests ohne
81
- // den vollen MollieClient mocken können.
79
+ // Adapter that binds the plugin's minimal fetch client to the full Mollie
80
+ // client. The minimal plugin fetch API lets tests mock it without mocking
81
+ // the full MollieClient.
82
82
  const fetchAdapter = options._clientShapeForTests ?? {
83
83
  payments: { get: (id) => client.payments.get(id) },
84
84
  customerSubscriptions: {
@@ -107,8 +107,8 @@ export function createSubscriptionMollieFeature(options) {
107
107
  const plugin = {
108
108
  verifyAndParseWebhook: verifyAndParse,
109
109
  createCheckoutSession: checkoutSession,
110
- // createPortalSession + cancelSubscription bewusst nicht — siehe
111
- // plugin-methods.ts für Begründung.
110
+ // createPortalSession and cancelSubscription are intentionally omitted;
111
+ // see plugin-methods.ts for why.
112
112
  priceToTier: options.priceToTier,
113
113
  };
114
114
  r.useExtension("subscriptionProvider", MOLLIE_PROVIDER_NAME, plugin);
@@ -1,8 +1,8 @@
1
1
  // Public API of the subscription-mollie bundled-feature.
2
2
  //
3
- // **Internal-only** (NICHT im public-barrel — App-Builder nutzt das nie direkt):
4
- // - verifyAndParseMollieWebhook (intern vom feature.ts factory aufgerufen)
3
+ // **Internal-only** (not in the public barrel—the App Builder never uses it directly):
4
+ // - verifyAndParseMollieWebhook (called internally by the feature.ts factory)
5
5
  // - mapMollieEventType / mapMollieStatus / extractMollieId (pure helpers,
6
- // test-only — direct-import aus dem File wenn echt mal extern gebraucht)
6
+ // test-only—direct-import from the file if ever genuinely needed externally)
7
7
  export { MOLLIE_PROVIDER_NAME, SUBSCRIPTION_MOLLIE_FEATURE } from "./constants.js";
8
8
  export { createSubscriptionMollieFeature, subscriptionMollieEnvSchema, } from "./feature.js";
@@ -2,8 +2,8 @@ import type { SubscriptionProviderPlugin } from "@cosmicdrift/kumiko-bundled-fea
2
2
  import type { HandlerContext } from "@cosmicdrift/kumiko-framework/engine";
3
3
  import type { MollieClient } from "@mollie/api-client";
4
4
  export type MollieCheckoutOptions = Parameters<NonNullable<SubscriptionProviderPlugin["createCheckoutSession"]>>[1];
5
- /** Mollie hat keinen nativen price-id-Konzept — App-Builder pflegt
6
- * pro virtuellem priceId einen amount/interval/description. */
5
+ /** Mollie has no native price ID concept; the App Builder maintains
6
+ * an amount/interval/description for each virtual priceId. */
7
7
  export type MolliePriceConfig = {
8
8
  /** Mollie-format: 2-decimal string, z.B. `"9.99"`. */
9
9
  readonly amountValue: string;
@@ -1,17 +1,18 @@
1
- // Mollie-Plugin-Methoden für die POST-tenant-resolution-Phase:
2
- // createCheckoutSession (only). createPortalSession + cancelSubscription
3
- // nicht implementiert weil Mollie's API die Patterns nicht 1:1 bietet:
1
+ // Mollie plugin methods for the POST-tenant-resolution phase:
2
+ // createCheckoutSession only. createPortalSession and cancelSubscription
3
+ // are not implemented because Mollie's API does not provide these patterns
4
+ // 1:1:
4
5
  //
5
- // - **Portal:** Mollie hat keinen Customer-Portal — App-Builder UI muss
6
- // das selbst rendern.
7
- // - **Cancel:** Mollie braucht (customerId, subId), Plugin-Contract
8
- // reicht aber nur subId durch — App-Builder cancelt via Mollie-
9
- // Dashboard oder eigener Route bis Foundation-Contract erweitert ist.
6
+ // - **Portal:** Mollie has no customer portal, so the App Builder UI must
7
+ // render it itself.
8
+ // - **Cancel:** Mollie requires (customerId, subId), but the plugin contract
9
+ // passes through only subId. The App Builder cancels through the Mollie
10
+ // dashboard or a custom route until the Foundation contract is extended.
10
11
  //
11
- // **Mollie-Checkout-Flow ist mehrstufig:** Customer anlegen → first-
12
- // payment mit sequenceType="first" (= Mandate-setup) → User bezahlt →
13
- // Mollie-webhook → verify-webhook erstellt die Mollie-Subscription
14
- // idempotent (siehe verify-webhook.ts ensureSubscriptionForMandate).
12
+ // **The Mollie checkout flow has multiple steps:** create customer → first
13
+ // payment with sequenceType="first" (= mandate setup) → user pays →
14
+ // Mollie webhook → verify-webhook creates the Mollie subscription
15
+ // idempotently (see verify-webhook.ts ensureSubscriptionForMandate).
15
16
  import { SequenceType } from "@mollie/api-client";
16
17
  export function createMollieCheckoutSession(client, priceToConfig, appWebhookUrl) {
17
18
  return async (_ctx, options) => {
@@ -36,8 +37,8 @@ export function createMollieCheckoutSession(client, priceToConfig, appWebhookUrl
36
37
  // sequenceType "first", so verifyAndParseMollieWebhook drops them before
37
38
  // any mandate/subscription handling.
38
39
  const sequenceType = options.mode === "payment" ? SequenceType.oneoff : SequenceType.first;
39
- // payments.create ist overloaded (Promise OR void mit callback);
40
- // explicit cast auf Promise<Payment>-overload.
40
+ // payments.create is overloaded (Promise or void with a callback);
41
+ // explicitly cast to the Promise<Payment> overload.
41
42
  const payment = (await client.payments.create({
42
43
  amount: { currency: priceCfg.amountCurrency, value: priceCfg.amountValue },
43
44
  description: priceCfg.description,
@@ -1,9 +1,9 @@
1
1
  import { type SubscriptionEvent, type SubscriptionEventType, type SubscriptionStatus } from "@cosmicdrift/kumiko-bundled-features/billing-foundation";
2
2
  import type { Payment as MolliePayment, Subscription as MollieSubscription } from "@mollie/api-client";
3
3
  import type { MolliePriceConfig } from "./plugin-methods.ts";
4
- /** Minimal-Subset des Mollie-Clients, das der Plugin nutzt — separat
5
- * damit Tests ohne den vollen MollieClient mocken können. Adapter in
6
- * feature.ts bridged das gegen den echten SDK. */
4
+ /** Minimal subset of the Mollie client used by the plugin — kept separate
5
+ * so tests can mock it without the full MollieClient. The adapter in
6
+ * feature.ts bridges it to the real SDK. */
7
7
  export type MollieClientShape = {
8
8
  readonly payments: {
9
9
  readonly get: (id: string) => Promise<MolliePayment>;
@@ -23,18 +23,18 @@ export type MollieClientShape = {
23
23
  };
24
24
  };
25
25
  export type MollieWebhookOptions = {
26
- /** priceId (= virtueller Schlüssel aus subscription.metadata) → tier-name. */
26
+ /** priceId (= virtual key from subscription.metadata) → tier name. */
27
27
  readonly priceToTier: Readonly<Record<string, string>>;
28
- /** priceId → amount/interval/description. Wird beim mandate-setup-
29
- * flow zum `customerSubscriptions.create`-Call gebraucht. App-
30
- * Builder pflegt die Map einmal in den factory-options. */
28
+ /** priceId → amount/interval/description. Needed for the mandate-setup
29
+ * flow's `customerSubscriptions.create` call. The app builder maintains
30
+ * this map once in the factory options. */
31
31
  readonly priceToConfig: Readonly<Record<string, MolliePriceConfig>>;
32
32
  };
33
33
  export declare function verifyAndParseMollieWebhook(client: MollieClientShape, options: MollieWebhookOptions): (rawBody: string, headers: Record<string, string>) => Promise<SubscriptionEvent | null>;
34
- /** Extract `id` aus rawBody — handelt form-urlencoded + JSON. */
34
+ /** Extracts `id` from rawBody — supports form-urlencoded and JSON. */
35
35
  export declare function extractMollieId(rawBody: string, headers: Record<string, string>): string | null;
36
- /** Mollie-subscription + optional payment → SubscriptionEventType.
37
- * Heuristik (Mollie hat keine explicit-typed events). */
36
+ /** Mollie subscription + optional payment → SubscriptionEventType.
37
+ * Heuristic because Mollie has no explicitly typed events. */
38
38
  export declare function mapMollieEventType(subscription: MollieSubscription, triggerPayment: MolliePayment | null): SubscriptionEventType | null;
39
39
  /** Mollie-status → normalized. */
40
40
  export declare function mapMollieStatus(mollieStatus: MollieSubscription["status"]): SubscriptionStatus;
@@ -1,18 +1,18 @@
1
- // verifyAndParseMollieWebhook — Mollie-spezifische lazy-fetch +
2
- // event-type-Heuristik. Wird vom Plugin-Build (feature.ts) als
3
- // `verifyAndParseWebhook` registriert.
1
+ // verifyAndParseMollieWebhook: Mollie-specific lazy fetch plus event-type
2
+ // heuristic. The plugin build (feature.ts) registers it as
3
+ // `verifyAndParseWebhook`.
4
4
  //
5
- // Mollie's classic-webhook sendet nur eine `id` (form-urlencoded oder
6
- // JSON). Wir lazy-fetchen payment + subscription via Mollie-API. Sub-
7
- // xxx-events werden NICHT supported — App-Builder bekommt sie indirekt
8
- // via tr_xxx-payment-events (Mollie sendet beide parallel bei normalen
9
- // Lifecycle-Events).
5
+ // Mollie's classic webhook sends only an `id` (form-urlencoded or JSON), so
6
+ // the payment and subscription are lazily fetched through the Mollie API.
7
+ // sub_xxx events are NOT supported; app builders get them indirectly through
8
+ // tr_xxx payment events (Mollie sends both in parallel for normal lifecycle
9
+ // events).
10
10
  //
11
- // **Mandate-setup-flow:** first-payment-paid kommt mit
12
- // `payment.subscriptionId === null` (Mollie's Pattern: App-Builder
13
- // muss `customerSubscriptions.create` selbst aufrufen). Wir machen
14
- // das im Plugin (idempotent via list-check), damit Foundation einen
15
- // Created-Event mit subscription-id bekommt.
11
+ // **Mandate setup flow:** the first paid payment arrives with
12
+ // `payment.subscriptionId === null` (Mollie's pattern: the app builder must
13
+ // call `customerSubscriptions.create` itself). The plugin does that
14
+ // (idempotent via a list check) so the foundation receives a created event
15
+ // with a subscription id.
16
16
  import { parseProviderConsentId, SubscriptionEventTypes, SubscriptionStatuses, } from "@cosmicdrift/kumiko-bundled-features/billing-foundation";
17
17
  import { createFallbackLogger } from "@cosmicdrift/kumiko-framework/logging";
18
18
  import { Temporal } from "@cosmicdrift/kumiko-types/temporal";
@@ -53,7 +53,7 @@ export function verifyAndParseMollieWebhook(client, options) {
53
53
  return null;
54
54
  }
55
55
  else {
56
- // One-shot oder first-payment-failed → nicht unsere Domain.
56
+ // One-shot or first-payment-failed events are outside our domain.
57
57
  return null;
58
58
  }
59
59
  }
@@ -80,8 +80,8 @@ export function verifyAndParseMollieWebhook(client, options) {
80
80
  const status = mapMollieStatus(subscription.status);
81
81
  const periodEndSource = subscription.nextPaymentDate ?? subscription.startDate;
82
82
  if (!periodEndSource) {
83
- // Mollie-API-Drift: valid Subs haben mindestens startDate. Loud-
84
- // fail damit App-Owner's monitoring den drift sieht.
83
+ // Mollie API drift: valid subscriptions have at least startDate. Fail
84
+ // loudly so the app owner's monitoring can detect the drift.
85
85
  throw new Error(`subscription-mollie: subscription ${subscription.id} has neither nextPaymentDate nor startDate`);
86
86
  }
87
87
  const currentPeriodEnd = mollieDateStringToInstantIso(periodEndSource);
@@ -103,9 +103,9 @@ export function verifyAndParseMollieWebhook(client, options) {
103
103
  // =============================================================================
104
104
  // Mandate-setup: subscription on-the-fly erstellen
105
105
  // =============================================================================
106
- /** first-payment-paid OHNE subscriptionId → Mollie-Sub erstellen.
107
- * Idempotent via list-check (replay-safe). Returns null bei
108
- * unvollständiger metadata oder unbekanntem priceId. */
106
+ /** `first-payment-paid` without subscriptionId → create a Mollie subscription.
107
+ * Idempotent via a list check (replay-safe). Returns null for incomplete
108
+ * metadata or an unknown priceId. */
109
109
  async function ensureSubscriptionForMandate(client, options, payment) {
110
110
  const customerId = payment.customerId;
111
111
  if (!customerId)
@@ -136,9 +136,9 @@ async function ensureSubscriptionForMandate(client, options, payment) {
136
136
  });
137
137
  }
138
138
  // =============================================================================
139
- // Helpers (exported für Tests)
139
+ // Helpers (exported for tests)
140
140
  // =============================================================================
141
- /** Extract `id` aus rawBody — handelt form-urlencoded + JSON. */
141
+ /** Extracts `id` from rawBody — supports form-urlencoded and JSON. */
142
142
  export function extractMollieId(rawBody, headers) {
143
143
  const contentType = headers["content-type"] ?? "";
144
144
  if (contentType.includes("application/json")) {
@@ -156,8 +156,8 @@ export function extractMollieId(rawBody, headers) {
156
156
  const params = new URLSearchParams(rawBody);
157
157
  return params.get("id");
158
158
  }
159
- /** Mollie-subscription + optional payment → SubscriptionEventType.
160
- * Heuristik (Mollie hat keine explicit-typed events). */
159
+ /** Mollie subscription + optional payment → SubscriptionEventType.
160
+ * Heuristic because Mollie has no explicitly typed events. */
161
161
  export function mapMollieEventType(subscription, triggerPayment) {
162
162
  if (subscription.status === "canceled" || subscription.status === "completed") {
163
163
  return SubscriptionEventTypes.canceled;
@@ -184,10 +184,10 @@ export function mapMollieStatus(mollieStatus) {
184
184
  return SubscriptionStatuses.active;
185
185
  case "canceled":
186
186
  case "completed":
187
- // completed = alle `times`-charges durchgelaufen → wie canceled.
187
+ // completed = all `times` charges have run → treat it like canceled.
188
188
  return SubscriptionStatuses.canceled;
189
189
  case "suspended":
190
- // Mandate ungültig / payment-method failed → grace-period.
190
+ // Invalid mandate / payment method failed → grace period.
191
191
  return SubscriptionStatuses.pastDue;
192
192
  case "pending":
193
193
  return SubscriptionStatuses.incomplete;
@@ -195,8 +195,8 @@ export function mapMollieStatus(mollieStatus) {
195
195
  return SubscriptionStatuses.incomplete;
196
196
  }
197
197
  }
198
- /** Mollie liefert dates als YYYY-MM-DD; foundation will ISO-Instant.
199
- * Throws bei malformed input (= Mollie-API-Drift, soll loud-fail). */
198
+ /** Mollie provides dates as YYYY-MM-DD; Foundation requires an ISO Instant.
199
+ * Throws on malformed input (= Mollie API drift, which should fail loudly). */
200
200
  function mollieDateStringToInstantIso(dateString) {
201
201
  return Temporal.Instant.from(`${dateString.slice(0, 10)}T00:00:00Z`).toString();
202
202
  }
@@ -1,7 +1,7 @@
1
1
  // Feature name
2
2
  export const SUBSCRIPTION_STRIPE_FEATURE = "subscription-stripe";
3
- // entityName under den der Plugin gegen "subscriptionProvider"
4
- // registriert. Matcht den path-segment in der webhook-URL
3
+ // entityName under which the plugin registers itself as
4
+ // "subscriptionProvider". It must match the path segment in the webhook URL
5
5
  // `/api/subscription/webhook/stripe`.
6
6
  export const STRIPE_PROVIDER_NAME = "stripe";
7
7
  // Config-key short-names, qualified to `subscription-stripe:config:<name>`
@@ -11,10 +11,8 @@ export const STRIPE_PROVIDER_NAME = "stripe";
11
11
  export const STRIPE_API_KEY_CONFIG = "api-key";
12
12
  export const STRIPE_WEBHOOK_SECRET_CONFIG = "webhook-secret";
13
13
  export const STRIPE_BILLING_LIVE_CONFIG = "billingLive";
14
- // =============================================================================
15
- // Stripe-event-types die wir auf normalisierte SubscriptionEventTypes
16
- // mappen. Stripe hat ~80 event-types insgesamt; wir filtern auf 5.
17
- // =============================================================================
14
+ // Stripe event types that map to normalized SubscriptionEventTypes.
15
+ // Stripe has approximately 80 event types; we filter to five.
18
16
  export const StripeEventTypes = {
19
17
  customerSubscriptionCreated: "customer.subscription.created",
20
18
  customerSubscriptionUpdated: "customer.subscription.updated",
@@ -28,17 +28,17 @@ export declare function stripeEnvSchema<const TPrice extends string>(options: {
28
28
  STRIPE_API_KEY: z.ZodOptional<z.ZodString>;
29
29
  } & StripePriceEnvShape<TPrice> extends infer T ? { -readonly [P in keyof T]: T[P]; } : never, z.core.$strip>;
30
30
  export type SubscriptionStripeOptions = {
31
- /** Bridge-fallback webhook-secret. Optional: v2 liest aus dem
32
- * `subscription-stripe:config:webhook-secret`-Key (backing:"secrets").
33
- * Gesetzt nur während der env→secrets-Übergangsphase / in Tests. */
31
+ /** Bridge-fallback webhook secret. Optional: v2 reads from the
32
+ * `subscription-stripe:config:webhook-secret` key (backing:"secrets").
33
+ * Set only during the env→secrets transition phase / in tests. */
34
34
  readonly webhookSecret?: string;
35
- /** Bridge-fallback api-key. Optional: v2 liest aus dem
36
- * `subscription-stripe:config:api-key`-Key (backing:"secrets"). */
35
+ /** Bridge-fallback API key. Optional: v2 reads from the
36
+ * `subscription-stripe:config:api-key` key (backing:"secrets"). */
37
37
  readonly apiKey?: string;
38
- /** Price-to-tier-Mapping. Plugin liest die price-id aus dem Stripe-event
39
- * (subscription.items.data[0].price.id) und mappt auf einen tier-name.
40
- * App-spezifisch → bleibt factory-option. Fehlt die price-id im Mapping
41
- * → null (event ignored). */
38
+ /** Price-to-tier mapping. The plugin reads the price ID from the Stripe
39
+ * event (subscription.items.data[0].price.id) and maps it to a tier name.
40
+ * App-specific, so it remains a factory option. If the price ID is absent
41
+ * from the mapping → null (event ignored). */
42
42
  readonly priceToTier?: Readonly<Record<string, string>>;
43
43
  /** Whether a mode:"payment" checkout (one-off top-ups etc.) gets a Stripe
44
44
  * invoice — a receipt/invoice document Stripe generates and sends to the
@@ -56,11 +56,11 @@ export type SubscriptionStripeOptions = {
56
56
  readonly oneOffPriceIds?: readonly string[];
57
57
  };
58
58
  /**
59
- * Factory für das subscription-stripe-feature. Mountet IMMER (kein
60
- * key-presence-Guard mehr) — die Aktivität wird runtime über config/secrets
61
- * gegatet (Muster wie feature-toggles). Der returnte FeatureDefinition
62
- * registriert den Plugin gegen billing-foundation's "subscriptionProvider"-
63
- * extension unter entityName "stripe".
59
+ * Factory for the subscription-stripe feature. Always mounts (no
60
+ * key-presence guard) — activity is gated at runtime through config/secrets
61
+ * (following the feature-toggles pattern). The returned FeatureDefinition
62
+ * registers the plugin under billing-foundation's "subscriptionProvider"
63
+ * extension with entityName "stripe".
64
64
  */
65
65
  export declare function createSubscriptionStripeFeature(options?: SubscriptionStripeOptions): FeatureWithEnvSchema<FeatureDefinition, typeof subscriptionStripeEnvSchema.shape>;
66
66
  export {};
@@ -1,35 +1,36 @@
1
1
  // kumiko-feature-version: 3
2
2
  //
3
- // subscription-stripe — Stripe-Plugin für die billing-foundation
4
- // Plugin-API.
3
+ // subscription-stripe — Stripe plugin for the billing-foundation
4
+ // plugin API.
5
5
  //
6
- // **Runtime-config (v3):** Stripe-credentials + der billing-live-Master-
7
- // Switch kommen ZUR LAUFZEIT aus dem config-Feature, nicht mehr aus einem
8
- // mount-time-Closure. Damit lassen sich Keys rotieren und prod live-
9
- // schalten ohne Redeploy — und die Eingabe-Maske entsteht von selbst.
6
+ // **Runtime config (v3):** Stripe credentials and the billing-live master
7
+ // switch come from the config feature AT RUNTIME, no longer from a
8
+ // mount-time closure. This allows keys to rotate and production to go live
9
+ // without a redeploy — and the input form is generated automatically.
10
10
  // - `subscription-stripe:config:api-key` + `:webhook-secret` → system
11
- // config keys mit **backing:"secrets"**: der Wert lebt envelope-
12
- // verschlüsselt im secrets-Store unter SYSTEM_TENANT_ID, adressiert
13
- // wird er als config-Key. `mask` leitet den Sysadmin-configEdit-Screen
14
- // + Settings-Hub-Nav ab — kein handgeschriebenes r.screen/r.nav in der
15
- // App mehr (v2 hatte die Keys als `r.secret` + App-eigene Maske).
11
+ // config keys with **backing:"secrets"**: the value is envelope-encrypted
12
+ // in the secrets store under SYSTEM_TENANT_ID and addressed as a
13
+ // config key. `mask` derives the sysadmin configEdit screen +
14
+ // Settings-Hub navigation — the app no longer needs handwritten
15
+ // r.screen/r.nav entries (v2 used `r.secret` keys + an app-owned form).
16
16
  // - `subscription-stripe:config:billing-live` (shortKey `billingLive`,
17
- // kebab-qualifiziert von r.config) → **system config**
18
- // (boolean, default false). Der Master-Switch: ohne ihn darf kein
19
- // checkout eine Stripe-Session erzeugen (#104-Invariante, write-side
20
- // im createCheckoutSession-Gate durchgesetzt).
17
+ // kebab-qualified by r.config) → **system config**
18
+ // (boolean, default false). The master switch: without it, checkout may
19
+ // not create a Stripe session; this is enforced in the
20
+ // createCheckoutSession gate.
21
21
  //
22
- // **Factory-options als Fallback:** `createSubscriptionStripeFeature({
23
- // apiKey, webhookSecret, priceToTier })` bleibt — apiKey/webhookSecret
24
- // sind jetzt OPTIONAL und dienen nur als Fallback während der env→secrets-
25
- // Bridge-Phase und in Tests, die keinen secrets-context wiren. `priceToTier`
26
- // (Stripe-price-id → app-tier-name) bleibt eine factory-option: app-
27
- // spezifisch, kein Secret, ändert sich selten.
22
+ // **Factory options as fallback:** `createSubscriptionStripeFeature({
23
+ // apiKey, webhookSecret, priceToTier })` remains — apiKey/webhookSecret
24
+ // are now OPTIONAL and serve only as fallbacks during the env→secrets
25
+ // bridge phase and in tests that do not wire a secrets context. `priceToTier`
26
+ // (Stripe price ID → app tier name) remains a factory option: it is
27
+ // app-specific, is not a secret, and changes infrequently.
28
28
  //
29
- // **Webhook + system-secrets:** verifyAndParseWebhook ist pre-tenant
30
- // (kein ctx). Der billing-foundation-webhook-handler reicht einen system-
31
- // scoped SecretsContext als 3. Arg durch, aus dem der Plugin api-key +
32
- // webhook-secret un-audited liest (sanctioned framework-internal read).
29
+ // **Webhook + system secrets:** verifyAndParseWebhook is pre-tenant
30
+ // (no ctx). The billing-foundation webhook handler passes a system-scoped
31
+ // SecretsContext as the third argument, from which the plugin reads the
32
+ // api key + webhook secret without auditing (a sanctioned framework-internal
33
+ // read).
33
34
  import { access, createSystemConfig, defineFeature, } from "@cosmicdrift/kumiko-framework/engine";
34
35
  import { featureWithEnvSchema } from "@cosmicdrift/kumiko-framework/env";
35
36
  import * as z from "zod";
@@ -92,11 +93,11 @@ function validateOneOffPriceIds(priceIds) {
92
93
  }
93
94
  }
94
95
  /**
95
- * Factory für das subscription-stripe-feature. Mountet IMMER (kein
96
- * key-presence-Guard mehr) — die Aktivität wird runtime über config/secrets
97
- * gegatet (Muster wie feature-toggles). Der returnte FeatureDefinition
98
- * registriert den Plugin gegen billing-foundation's "subscriptionProvider"-
99
- * extension unter entityName "stripe".
96
+ * Factory for the subscription-stripe feature. Always mounts (no
97
+ * key-presence guard) — activity is gated at runtime through config/secrets
98
+ * (following the feature-toggles pattern). The returned FeatureDefinition
99
+ * registers the plugin under billing-foundation's "subscriptionProvider"
100
+ * extension with entityName "stripe".
100
101
  */
101
102
  export function createSubscriptionStripeFeature(options = {}) {
102
103
  validateOneOffPriceIds(options.oneOffPriceIds ?? []);
@@ -118,15 +119,15 @@ export function createSubscriptionStripeFeature(options = {}) {
118
119
  // the value lives envelope-encrypted in the secrets store under
119
120
  // SYSTEM_TENANT_ID, while `mask` derives the sysadmin settings screen +
120
121
  // Settings-Hub nav (no hand-written r.screen/r.nav in the consuming app).
121
- // billingLive is the #104 master switch. The factory-fallback
122
+ // billingLive is the master switch. The factory-fallback
122
123
  // (options.apiKey/.webhookSecret) covers the env→secrets bridge + tests.
123
124
  const configKeys = r.config({
124
125
  keys: {
125
126
  [STRIPE_API_KEY_CONFIG]: createSystemConfig("text", {
126
127
  backing: "secrets",
127
- // Prefix-Guard, deckungsgleich mit subscriptionStripeEnvSchema:
128
- // fängt den Paste-the-wrong-field-Fehler (pk_/price_), ohne den
129
- // base62-Body zu constrainen. Anchored, kein Backtracking → kein ReDoS.
128
+ // Prefix guard, matching subscriptionStripeEnvSchema:
129
+ // catches the wrong-field paste error (pk_/price_) without
130
+ // constraining the base62 body. Anchored, with no backtracking → no ReDoS.
130
131
  pattern: { regex: "^(sk|rk)_(test|live)_" },
131
132
  write: access.systemAdmin,
132
133
  read: access.admin,
@@ -171,6 +172,7 @@ export function createSubscriptionStripeFeature(options = {}) {
171
172
  const priceCache = createStripePriceCache();
172
173
  const portalConfigurationCache = new Map();
173
174
  const plugin = {
175
+ displayName: "Stripe",
174
176
  verifyAndParseWebhook: verifyAndParseStripeWebhook(runtimes.webhook, {
175
177
  priceToTier: options.priceToTier ?? {},
176
178
  }),
@@ -1,9 +1,9 @@
1
- // Public API of the subscription-stripe bundled-feature.
1
+ // Public API of the subscription-stripe bundled feature.
2
2
  //
3
- // **Internal-only** (NICHT im public-barrel — App-Builder nutzt das nie direkt):
4
- // - StripeWebhookOptions / verifyAndParseStripeWebhook (intern vom
5
- // feature.ts factory aufgerufen)
6
- // - mapStripeEventType / mapStripeStatus (pure helpers, test-only;
7
- // direct-import aus dem File wenn echt mal extern gebraucht)
3
+ // **Internal-only** (not in the public barrel — the App Builder never uses it directly):
4
+ // - StripeWebhookOptions / verifyAndParseStripeWebhook (called internally by the
5
+ // feature.ts factory)
6
+ // - mapStripeEventType / mapStripeStatus (pure helpers, for tests only;
7
+ // import directly from the file only if truly needed externally)
8
8
  export { STRIPE_PROVIDER_NAME, StripeEventTypes, SUBSCRIPTION_STRIPE_FEATURE, } from "./constants.js";
9
9
  export { createSubscriptionStripeFeature, stripeEnvSchema, subscriptionStripeEnvSchema, } from "./feature.js";