@cosmicdrift/kumiko-bundled-features 0.392.2 → 0.394.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 (380) hide show
  1. package/dist/account-security/feature.d.ts +2 -0
  2. package/dist/account-security/feature.js +3 -1
  3. package/dist/audit/event-classification.js +1 -0
  4. package/dist/auth-email-password/handlers/change-password.write.d.ts +1 -1
  5. package/dist/auth-email-password/handlers/confirm-account-unlock.write.d.ts +1 -1
  6. package/dist/auth-email-password/handlers/invite-accept-with-login.write.d.ts +1 -1
  7. package/dist/auth-email-password/handlers/invite-accept.write.d.ts +1 -1
  8. package/dist/auth-email-password/handlers/invite-create.write.d.ts +2 -2
  9. package/dist/auth-email-password/handlers/invite-signup-complete.write.d.ts +1 -1
  10. package/dist/auth-email-password/handlers/login.write.d.ts +1 -1
  11. package/dist/auth-email-password/handlers/logout.write.d.ts +1 -1
  12. package/dist/auth-email-password/handlers/request-account-unlock.write.d.ts +1 -1
  13. package/dist/auth-email-password/handlers/request-email-verification.write.d.ts +1 -1
  14. package/dist/auth-email-password/handlers/request-password-reset.write.d.ts +1 -1
  15. package/dist/auth-email-password/handlers/reset-password.write.d.ts +1 -1
  16. package/dist/auth-email-password/handlers/signup-confirm.write.d.ts +1 -1
  17. package/dist/auth-email-password/handlers/signup-request.write.d.ts +1 -1
  18. package/dist/auth-email-password/handlers/switch-tenant-mfa-gate.write.d.ts +1 -1
  19. package/dist/auth-email-password/handlers/token-request-handler.d.ts +1 -1
  20. package/dist/auth-email-password/handlers/verify-email.write.d.ts +1 -1
  21. package/dist/auth-email-password/web/auth-client.d.ts +3 -7
  22. package/dist/auth-email-password/web/auth-client.js +3 -24
  23. package/dist/auth-email-password/web/auth-gate.d.ts +2 -4
  24. package/dist/auth-email-password/web/auth-redirect.d.ts +2 -2
  25. package/dist/auth-email-password/web/auth-redirect.js +3 -12
  26. package/dist/auth-email-password/web/index.d.ts +2 -1
  27. package/dist/auth-email-password/web/index.js +1 -0
  28. package/dist/auth-email-password/web/login-failure.d.ts +9 -0
  29. package/dist/auth-email-password/web/login-failure.js +32 -0
  30. package/dist/auth-email-password/web/login-url.d.ts +5 -0
  31. package/dist/auth-email-password/web/login-url.js +13 -0
  32. package/dist/auth-email-password/web/static-login.d.ts +42 -0
  33. package/dist/auth-email-password/web/static-login.js +122 -0
  34. package/dist/auth-mfa/handlers/disable.write.d.ts +1 -1
  35. package/dist/auth-mfa/handlers/enable-confirm-preauth.write.d.ts +1 -1
  36. package/dist/auth-mfa/handlers/enable-confirm.write.d.ts +1 -1
  37. package/dist/auth-mfa/handlers/enable-start-preauth.write.d.ts +1 -1
  38. package/dist/auth-mfa/handlers/enable-start.write.d.ts +1 -1
  39. package/dist/auth-mfa/handlers/regenerate-recovery.write.d.ts +1 -1
  40. package/dist/auth-mfa/handlers/verify.write.d.ts +1 -1
  41. package/dist/auth-mfa/web/mfa-client.js +4 -43
  42. package/dist/billing-foundation/checkout-core.d.ts +2 -1
  43. package/dist/billing-foundation/checkout-core.js +2 -11
  44. package/dist/billing-foundation/events.d.ts +1 -0
  45. package/dist/billing-foundation/events.js +2 -0
  46. package/dist/billing-foundation/feature.js +1 -1
  47. package/dist/billing-foundation/handlers/create-checkout-session.write.js +9 -2
  48. package/dist/billing-foundation/handlers/process-payment-event.write.d.ts +1 -0
  49. package/dist/billing-foundation/handlers/process-payment-event.write.js +2 -0
  50. package/dist/billing-foundation/index.d.ts +1 -1
  51. package/dist/billing-foundation/one-off-checkout-gate.d.ts +9 -0
  52. package/dist/billing-foundation/one-off-checkout-gate.js +30 -0
  53. package/dist/billing-foundation/one-off-customer.d.ts +6 -0
  54. package/dist/billing-foundation/one-off-customer.js +12 -0
  55. package/dist/billing-foundation/plan-catalog.js +1 -0
  56. package/dist/billing-foundation/types.d.ts +25 -0
  57. package/dist/billing-foundation/web/billing-plans-panel.js +1 -0
  58. package/dist/billing-foundation/web/plan-switch-confirm-dialog.js +7 -3
  59. package/dist/billing-foundation/web/plan-switch-recurring.d.ts +16 -0
  60. package/dist/billing-foundation/web/plan-switch-recurring.js +10 -0
  61. package/dist/billing-foundation/webhook-handler.js +1 -0
  62. package/dist/cap-overview/handlers/caps-usage.query.js +3 -3
  63. package/dist/cap-overview/types.d.ts +2 -0
  64. package/dist/channel-in-app/handlers/mark-all-read.write.d.ts +1 -1
  65. package/dist/channel-in-app/handlers/mark-read.write.d.ts +1 -1
  66. package/dist/compliance-profiles/handlers/set-profile.write.d.ts +1 -1
  67. package/dist/compliance-profiles/web/compliance-profile-catalog.js +8 -1
  68. package/dist/config/handlers/reset.write.d.ts +1 -1
  69. package/dist/config/handlers/set.write.d.ts +1 -1
  70. package/dist/crypto-shredding/handlers/forget-subject.write.d.ts +1 -1
  71. package/dist/delivery/handlers/resubscribe-address.write.d.ts +1 -1
  72. package/dist/delivery/handlers/resubscribe-user.write.d.ts +1 -1
  73. package/dist/delivery/handlers/set-preference.write.d.ts +1 -1
  74. package/dist/delivery/handlers/unsubscribe-address.write.d.ts +1 -1
  75. package/dist/delivery/handlers/unsubscribe-user.write.d.ts +1 -1
  76. package/dist/feature-toggles/handlers/set.write.d.ts +1 -1
  77. package/dist/file-foundation/read-file-ref-content.d.ts +2 -0
  78. package/dist/file-foundation/read-file-ref-content.js +9 -3
  79. package/dist/form-draft/handlers/discard.write.d.ts +1 -1
  80. package/dist/form-draft/handlers/save.write.d.ts +1 -1
  81. package/dist/inbound-mail-foundation/account-health.d.ts +17 -0
  82. package/dist/inbound-mail-foundation/account-health.js +101 -0
  83. package/dist/inbound-mail-foundation/account-poll-schedule.d.ts +19 -0
  84. package/dist/inbound-mail-foundation/account-poll-schedule.js +44 -0
  85. package/dist/inbound-mail-foundation/account-poll.d.ts +24 -0
  86. package/dist/inbound-mail-foundation/account-poll.js +157 -0
  87. package/dist/inbound-mail-foundation/account-record.d.ts +1 -0
  88. package/dist/inbound-mail-foundation/account-record.js +1 -0
  89. package/dist/inbound-mail-foundation/account-wake.d.ts +3 -0
  90. package/dist/inbound-mail-foundation/account-wake.js +17 -0
  91. package/dist/inbound-mail-foundation/connect-callback-verify.d.ts +10 -0
  92. package/dist/inbound-mail-foundation/connect-callback-verify.js +31 -0
  93. package/dist/inbound-mail-foundation/connect-route-responses.d.ts +13 -0
  94. package/dist/inbound-mail-foundation/connect-route-responses.js +16 -0
  95. package/dist/inbound-mail-foundation/connect-routes.js +52 -33
  96. package/dist/inbound-mail-foundation/constants.d.ts +50 -2
  97. package/dist/inbound-mail-foundation/constants.js +53 -3
  98. package/dist/inbound-mail-foundation/content-refetch.d.ts +14 -0
  99. package/dist/inbound-mail-foundation/content-refetch.js +93 -0
  100. package/dist/inbound-mail-foundation/describe-error.d.ts +1 -0
  101. package/dist/inbound-mail-foundation/describe-error.js +5 -0
  102. package/dist/inbound-mail-foundation/entities.d.ts +26 -0
  103. package/dist/inbound-mail-foundation/entities.js +43 -3
  104. package/dist/inbound-mail-foundation/events.d.ts +97 -0
  105. package/dist/inbound-mail-foundation/events.js +57 -2
  106. package/dist/inbound-mail-foundation/feature.d.ts +5 -2
  107. package/dist/inbound-mail-foundation/feature.js +122 -106
  108. package/dist/inbound-mail-foundation/file-storage-failure.d.ts +8 -0
  109. package/dist/inbound-mail-foundation/file-storage-failure.js +19 -0
  110. package/dist/inbound-mail-foundation/handlers/account-address.d.ts +16 -0
  111. package/dist/inbound-mail-foundation/handlers/account-address.js +51 -0
  112. package/dist/inbound-mail-foundation/handlers/acknowledge-quarantine.write.d.ts +8 -0
  113. package/dist/inbound-mail-foundation/handlers/acknowledge-quarantine.write.js +39 -0
  114. package/dist/inbound-mail-foundation/handlers/attach-message-content.write.d.ts +60 -0
  115. package/dist/inbound-mail-foundation/handlers/attach-message-content.write.js +128 -0
  116. package/dist/inbound-mail-foundation/handlers/connect-account.write.d.ts +3 -2
  117. package/dist/inbound-mail-foundation/handlers/connect-account.write.js +97 -56
  118. package/dist/inbound-mail-foundation/handlers/disconnect-account.write.d.ts +2 -1
  119. package/dist/inbound-mail-foundation/handlers/disconnect-account.write.js +55 -42
  120. package/dist/inbound-mail-foundation/handlers/ingest-message-prepare.d.ts +26 -0
  121. package/dist/inbound-mail-foundation/handlers/ingest-message-prepare.js +131 -0
  122. package/dist/inbound-mail-foundation/handlers/ingest-message-schema.d.ts +64 -0
  123. package/dist/inbound-mail-foundation/handlers/ingest-message-schema.js +39 -0
  124. package/dist/inbound-mail-foundation/handlers/ingest-message.write.d.ts +74 -21
  125. package/dist/inbound-mail-foundation/handlers/ingest-message.write.js +57 -134
  126. package/dist/inbound-mail-foundation/handlers/list-accounts.query.d.ts +2 -1
  127. package/dist/inbound-mail-foundation/handlers/list-accounts.query.js +60 -26
  128. package/dist/inbound-mail-foundation/handlers/list-messages.query.d.ts +2 -1
  129. package/dist/inbound-mail-foundation/handlers/list-messages.query.js +43 -29
  130. package/dist/inbound-mail-foundation/handlers/list-quarantine.query.d.ts +3 -0
  131. package/dist/inbound-mail-foundation/handlers/list-quarantine.query.js +75 -0
  132. package/dist/inbound-mail-foundation/handlers/mark-credential-stored.write.d.ts +7 -0
  133. package/dist/inbound-mail-foundation/handlers/mark-credential-stored.write.js +38 -0
  134. package/dist/inbound-mail-foundation/handlers/message-content.d.ts +70 -0
  135. package/dist/inbound-mail-foundation/handlers/message-content.js +137 -0
  136. package/dist/inbound-mail-foundation/handlers/message-content.query.d.ts +19 -0
  137. package/dist/inbound-mail-foundation/handlers/message-content.query.js +59 -0
  138. package/dist/inbound-mail-foundation/handlers/message-detail.query.d.ts +3 -0
  139. package/dist/inbound-mail-foundation/handlers/message-detail.query.js +23 -0
  140. package/dist/inbound-mail-foundation/handlers/reactivate-account.write.d.ts +8 -0
  141. package/dist/inbound-mail-foundation/handlers/reactivate-account.write.js +84 -0
  142. package/dist/inbound-mail-foundation/handlers/retry-quarantined-message.write.d.ts +8 -0
  143. package/dist/inbound-mail-foundation/handlers/retry-quarantined-message.write.js +34 -0
  144. package/dist/inbound-mail-foundation/handlers/scope-visibility.d.ts +10 -2
  145. package/dist/inbound-mail-foundation/handlers/scope-visibility.js +27 -8
  146. package/dist/inbound-mail-foundation/handlers/set-trusted-authserv-id.write.d.ts +13 -0
  147. package/dist/inbound-mail-foundation/handlers/set-trusted-authserv-id.write.js +54 -0
  148. package/dist/inbound-mail-foundation/handlers/thread-rollup.d.ts +24 -0
  149. package/dist/inbound-mail-foundation/handlers/thread-rollup.js +98 -0
  150. package/dist/inbound-mail-foundation/handlers/trusted-authserv-id.d.ts +3 -0
  151. package/dist/inbound-mail-foundation/handlers/trusted-authserv-id.js +3 -0
  152. package/dist/inbound-mail-foundation/handlers/update-account.write.d.ts +13 -3
  153. package/dist/inbound-mail-foundation/handlers/update-account.write.js +62 -46
  154. package/dist/inbound-mail-foundation/i18n.js +72 -2
  155. package/dist/inbound-mail-foundation/inbound-oauth-flow.d.ts +43 -0
  156. package/dist/inbound-mail-foundation/inbound-oauth-flow.js +1 -0
  157. package/dist/inbound-mail-foundation/index.d.ts +19 -6
  158. package/dist/inbound-mail-foundation/index.js +17 -6
  159. package/dist/inbound-mail-foundation/ingest-failures.d.ts +77 -0
  160. package/dist/inbound-mail-foundation/ingest-failures.js +79 -0
  161. package/dist/inbound-mail-foundation/ingest-payload.d.ts +7 -0
  162. package/dist/inbound-mail-foundation/ingest-payload.js +34 -0
  163. package/dist/inbound-mail-foundation/mail-roles.d.ts +21 -0
  164. package/dist/inbound-mail-foundation/mail-roles.js +83 -0
  165. package/dist/inbound-mail-foundation/normalize-inbound-message.d.ts +17 -0
  166. package/dist/inbound-mail-foundation/normalize-inbound-message.js +90 -0
  167. package/dist/inbound-mail-foundation/oauth-access-token.d.ts +3 -1
  168. package/dist/inbound-mail-foundation/oauth-access-token.js +13 -2
  169. package/dist/inbound-mail-foundation/outbound-attachment-access.d.ts +5 -0
  170. package/dist/inbound-mail-foundation/outbound-attachment-access.js +16 -0
  171. package/dist/inbound-mail-foundation/outbound-attachments.d.ts +18 -0
  172. package/dist/inbound-mail-foundation/outbound-attachments.js +77 -0
  173. package/dist/inbound-mail-foundation/outbound-mail.d.ts +15 -1
  174. package/dist/inbound-mail-foundation/outbound-mail.js +4 -0
  175. package/dist/inbound-mail-foundation/probe.js +1 -1
  176. package/dist/inbound-mail-foundation/projection.d.ts +28 -0
  177. package/dist/inbound-mail-foundation/projection.js +25 -3
  178. package/dist/inbound-mail-foundation/provider-errors.d.ts +28 -0
  179. package/dist/inbound-mail-foundation/provider-errors.js +66 -0
  180. package/dist/inbound-mail-foundation/quarantine-entities.d.ts +61 -0
  181. package/dist/inbound-mail-foundation/quarantine-entities.js +47 -0
  182. package/dist/inbound-mail-foundation/quarantine-header-import.d.ts +9 -0
  183. package/dist/inbound-mail-foundation/quarantine-header-import.js +53 -0
  184. package/dist/inbound-mail-foundation/quarantine-retry.d.ts +13 -0
  185. package/dist/inbound-mail-foundation/quarantine-retry.js +97 -0
  186. package/dist/inbound-mail-foundation/quarantine-screens.d.ts +4 -0
  187. package/dist/inbound-mail-foundation/quarantine-screens.js +57 -0
  188. package/dist/inbound-mail-foundation/quarantine.d.ts +13 -0
  189. package/dist/inbound-mail-foundation/quarantine.js +46 -0
  190. package/dist/inbound-mail-foundation/retention-job.d.ts +2 -0
  191. package/dist/inbound-mail-foundation/retention-job.js +62 -0
  192. package/dist/inbound-mail-foundation/retention-sweep.d.ts +4 -0
  193. package/dist/inbound-mail-foundation/retention-sweep.js +35 -8
  194. package/dist/inbound-mail-foundation/screens.d.ts +14 -2
  195. package/dist/inbound-mail-foundation/screens.js +217 -79
  196. package/dist/inbound-mail-foundation/send-from-account.d.ts +11 -1
  197. package/dist/inbound-mail-foundation/send-from-account.js +19 -2
  198. package/dist/inbound-mail-foundation/sender-auth.d.ts +63 -0
  199. package/dist/inbound-mail-foundation/sender-auth.js +198 -0
  200. package/dist/inbound-mail-foundation/supervisor-ingest.d.ts +43 -0
  201. package/dist/inbound-mail-foundation/supervisor-ingest.js +195 -0
  202. package/dist/inbound-mail-foundation/sync-account-now.d.ts +22 -0
  203. package/dist/inbound-mail-foundation/sync-account-now.js +29 -0
  204. package/dist/inbound-mail-foundation/sync-cursor-store.d.ts +9 -0
  205. package/dist/inbound-mail-foundation/sync-cursor-store.js +54 -0
  206. package/dist/inbound-mail-foundation/syncable-accounts.d.ts +16 -0
  207. package/dist/inbound-mail-foundation/syncable-accounts.js +79 -0
  208. package/dist/inbound-mail-foundation/tenant-destroy-hook.js +5 -1
  209. package/dist/inbound-mail-foundation/types.d.ts +61 -62
  210. package/dist/inbound-mail-foundation/types.js +0 -54
  211. package/dist/inbound-mail-foundation/wake-consumer.d.ts +2 -0
  212. package/dist/inbound-mail-foundation/wake-consumer.js +30 -0
  213. package/dist/inbound-mail-foundation/watch-catch-up.d.ts +19 -0
  214. package/dist/inbound-mail-foundation/watch-catch-up.js +33 -0
  215. package/dist/inbound-mail-foundation/watch-lease.d.ts +15 -0
  216. package/dist/inbound-mail-foundation/watch-lease.js +81 -0
  217. package/dist/inbound-mail-foundation/watch-supervisor-types.d.ts +83 -0
  218. package/dist/inbound-mail-foundation/watch-supervisor-types.js +1 -0
  219. package/dist/inbound-mail-foundation/watch-supervisor.d.ts +1 -53
  220. package/dist/inbound-mail-foundation/watch-supervisor.js +123 -290
  221. package/dist/inbound-mail-foundation/web/client-plugin.d.ts +14 -0
  222. package/dist/inbound-mail-foundation/web/client-plugin.js +40 -0
  223. package/dist/inbound-mail-foundation/web/constants.d.ts +5 -0
  224. package/dist/inbound-mail-foundation/web/constants.js +6 -0
  225. package/dist/inbound-mail-foundation/web/index.d.ts +1 -0
  226. package/dist/inbound-mail-foundation/web/index.js +1 -0
  227. package/dist/inbound-provider-imap/connect-mailbox.d.ts +28 -5
  228. package/dist/inbound-provider-imap/connect-mailbox.js +91 -41
  229. package/dist/inbound-provider-imap/connect-my-mailbox.d.ts +13 -0
  230. package/dist/inbound-provider-imap/connect-my-mailbox.js +25 -0
  231. package/dist/inbound-provider-imap/constants.d.ts +12 -1
  232. package/dist/inbound-provider-imap/constants.js +12 -1
  233. package/dist/inbound-provider-imap/credential-document.js +2 -2
  234. package/dist/inbound-provider-imap/download-batch.d.ts +6 -0
  235. package/dist/inbound-provider-imap/download-batch.js +24 -0
  236. package/dist/inbound-provider-imap/feature.d.ts +2 -2
  237. package/dist/inbound-provider-imap/feature.js +49 -32
  238. package/dist/inbound-provider-imap/fetch-content.d.ts +4 -0
  239. package/dist/inbound-provider-imap/fetch-content.js +68 -0
  240. package/dist/inbound-provider-imap/i18n.js +18 -2
  241. package/dist/inbound-provider-imap/imap-client.d.ts +27 -23
  242. package/dist/inbound-provider-imap/imap-client.js +30 -68
  243. package/dist/inbound-provider-imap/index.d.ts +2 -1
  244. package/dist/inbound-provider-imap/index.js +2 -1
  245. package/dist/inbound-provider-imap/mime-content.d.ts +11 -0
  246. package/dist/inbound-provider-imap/mime-content.js +66 -0
  247. package/dist/inbound-provider-imap/parse-message.d.ts +35 -0
  248. package/dist/inbound-provider-imap/parse-message.js +113 -0
  249. package/dist/inbound-provider-imap/reconnect-account.d.ts +17 -0
  250. package/dist/inbound-provider-imap/reconnect-account.js +18 -0
  251. package/dist/inbound-provider-imap/reconnect-mailbox.d.ts +14 -0
  252. package/dist/inbound-provider-imap/reconnect-mailbox.js +71 -0
  253. package/dist/inbound-provider-imap/reconnect-prefill.query.d.ts +3 -0
  254. package/dist/inbound-provider-imap/reconnect-prefill.query.js +34 -0
  255. package/dist/inbound-provider-imap/screens.d.ts +6 -1
  256. package/dist/inbound-provider-imap/screens.js +174 -41
  257. package/dist/inbound-provider-imap/send-mail.d.ts +2 -2
  258. package/dist/inbound-provider-imap/send-mail.js +8 -1
  259. package/dist/inbound-provider-imap/sender-auth-headers.d.ts +3 -0
  260. package/dist/inbound-provider-imap/sender-auth-headers.js +18 -0
  261. package/dist/inbound-provider-inmemory/feature.d.ts +15 -0
  262. package/dist/inbound-provider-inmemory/feature.js +57 -2
  263. package/dist/inbound-provider-inmemory/index.d.ts +1 -1
  264. package/dist/inbound-provider-inmemory/index.js +1 -1
  265. package/dist/jobs/handlers/consumer.write.d.ts +4 -4
  266. package/dist/jobs/handlers/retry.write.d.ts +1 -1
  267. package/dist/jobs/handlers/trigger.write.d.ts +1 -1
  268. package/dist/managed-pages/handlers/set.write.d.ts +1 -1
  269. package/dist/managed-pages/web/i18n.js +1 -0
  270. package/dist/personal-access-tokens/handlers/create.write.d.ts +1 -1
  271. package/dist/personal-access-tokens/handlers/revoke.write.d.ts +1 -1
  272. package/dist/readiness/handlers/run-probes.write.d.ts +1 -1
  273. package/dist/secrets/handlers/delete.write.d.ts +1 -1
  274. package/dist/secrets/handlers/set.write.d.ts +1 -1
  275. package/dist/sessions/handlers/revoke-all-for-user.write.d.ts +1 -1
  276. package/dist/sessions/handlers/revoke-all-others.write.d.ts +1 -1
  277. package/dist/sessions/handlers/revoke.write.d.ts +1 -1
  278. package/dist/subscription-paddle/checkout-config.query.d.ts +3 -0
  279. package/dist/subscription-paddle/checkout-config.query.js +14 -0
  280. package/dist/subscription-paddle/checkout-methods.d.ts +6 -0
  281. package/dist/subscription-paddle/checkout-methods.js +85 -0
  282. package/dist/subscription-paddle/checkout-page.d.ts +19 -0
  283. package/dist/subscription-paddle/checkout-page.js +126 -0
  284. package/dist/subscription-paddle/client.d.ts +24 -0
  285. package/dist/subscription-paddle/client.js +60 -0
  286. package/dist/subscription-paddle/constants.d.ts +16 -0
  287. package/dist/subscription-paddle/constants.js +25 -0
  288. package/dist/subscription-paddle/feature.d.ts +49 -0
  289. package/dist/subscription-paddle/feature.js +192 -0
  290. package/dist/subscription-paddle/index.d.ts +2 -0
  291. package/dist/subscription-paddle/index.js +4 -0
  292. package/dist/subscription-paddle/plan-switch-methods.d.ts +6 -0
  293. package/dist/subscription-paddle/plan-switch-methods.js +114 -0
  294. package/dist/subscription-paddle/price-methods.d.ts +15 -0
  295. package/dist/subscription-paddle/price-methods.js +105 -0
  296. package/dist/subscription-paddle/runtime.d.ts +42 -0
  297. package/dist/subscription-paddle/runtime.js +109 -0
  298. package/dist/subscription-paddle/subscription-state.d.ts +34 -0
  299. package/dist/subscription-paddle/subscription-state.js +48 -0
  300. package/dist/subscription-paddle/tenant-binding.d.ts +8 -0
  301. package/dist/subscription-paddle/tenant-binding.js +26 -0
  302. package/dist/subscription-paddle/verify-webhook.d.ts +4 -0
  303. package/dist/subscription-paddle/verify-webhook.js +55 -0
  304. package/dist/subscription-paddle/webhook-events.d.ts +9 -0
  305. package/dist/subscription-paddle/webhook-events.js +124 -0
  306. package/dist/template-resolver/handlers/collection-item.query.js +2 -2
  307. package/dist/template-resolver/handlers/collection-list.query.js +4 -2
  308. package/dist/template-resolver/handlers/collection-set.write.d.ts +1 -1
  309. package/dist/template-resolver/handlers/collection-shared.d.ts +11 -0
  310. package/dist/template-resolver/handlers/collection-shared.js +16 -0
  311. package/dist/template-resolver/handlers/copy-locale.write.d.ts +1 -1
  312. package/dist/template-resolver/handlers/discard-draft.write.d.ts +2 -2
  313. package/dist/template-resolver/handlers/import-bundle-system.write.d.ts +1 -1
  314. package/dist/template-resolver/handlers/import-bundle.write.d.ts +1 -1
  315. package/dist/template-resolver/handlers/patch-draft.write.d.ts +1 -1
  316. package/dist/template-resolver/handlers/reset-to-system.write.d.ts +1 -1
  317. package/dist/template-resolver/handlers/resource-link-pdf.write.d.ts +1 -1
  318. package/dist/template-resolver/handlers/resource-remove.write.d.ts +1 -1
  319. package/dist/template-resolver/handlers/resource-upload.write.d.ts +1 -1
  320. package/dist/template-resolver/handlers/send-test.write.d.ts +1 -1
  321. package/dist/template-resolver/handlers/set.write.d.ts +1 -1
  322. package/dist/template-resolver/handlers/toggle-status.write.d.ts +4 -4
  323. package/dist/template-resolver/handlers/upsert-system.write.d.ts +1 -1
  324. package/dist/template-resolver/handlers/upsert-tenant.write.d.ts +1 -1
  325. package/dist/template-resolver/web/client-plugin.d.ts +4 -0
  326. package/dist/template-resolver/web/client-plugin.js +134 -52
  327. package/dist/template-resolver/web/i18n.js +1 -1
  328. package/dist/tenant/handlers/add-member.write.d.ts +1 -1
  329. package/dist/tenant/handlers/cancel-invitation.write.d.ts +1 -1
  330. package/dist/tenant/handlers/create.write.d.ts +1 -1
  331. package/dist/tenant/handlers/remove-member.write.d.ts +1 -1
  332. package/dist/tenant/handlers/toggle-enabled.write.d.ts +2 -2
  333. package/dist/tenant/handlers/update-member-roles.write.d.ts +1 -1
  334. package/dist/tenant/handlers/update.write.d.ts +1 -1
  335. package/dist/tenant-handover/handlers/claim.write.d.ts +1 -1
  336. package/dist/tenant-lifecycle/handlers/cancel-destruction.write.d.ts +1 -1
  337. package/dist/tenant-lifecycle/handlers/request-destruction.write.d.ts +1 -1
  338. package/dist/tier-engine/handlers/set-tenant-tier.write.d.ts +1 -1
  339. package/dist/user/handlers/create.write.d.ts +1 -1
  340. package/dist/user/handlers/update.write.d.ts +1 -1
  341. package/dist/user-data-rights/handlers/cancel-deletion.write.d.ts +1 -1
  342. package/dist/user-data-rights/handlers/confirm-deletion-by-token.write.d.ts +1 -1
  343. package/dist/user-data-rights/handlers/lift-restriction.write.d.ts +1 -1
  344. package/dist/user-data-rights/handlers/request-deletion-by-email.write.d.ts +1 -1
  345. package/dist/user-data-rights/handlers/request-deletion.write.d.ts +1 -1
  346. package/dist/user-data-rights/handlers/request-export.write.d.ts +1 -1
  347. package/dist/user-data-rights/handlers/restrict-account.write.d.ts +1 -1
  348. package/dist/user-data-rights/handlers/run-forget-cleanup.write.d.ts +1 -1
  349. package/dist/user-data-rights-defaults/hooks/file-ref.userdata-hook.js +2 -1
  350. package/dist/user-profile/handlers/change-email.write.d.ts +1 -1
  351. package/dist/waitlist/handlers/export-purge.write.d.ts +2 -2
  352. package/dist/waitlist/handlers/invite.write.d.ts +1 -1
  353. package/dist/waitlist/handlers/reject.write.d.ts +1 -1
  354. package/dist/waitlist/handlers/submit.write.d.ts +1 -1
  355. package/package.json +33 -17
  356. package/src/account-security/changes.json +6 -0
  357. package/src/auth-email-password/changes.json +6 -0
  358. package/src/billing-foundation/changes.json +30 -0
  359. package/src/cap-overview/changes.json +6 -0
  360. package/src/files/changes.json +18 -0
  361. package/src/inbound-mail-foundation/changes.json +155 -0
  362. package/src/inbound-provider-imap/changes.json +42 -0
  363. package/src/jobs/changes.json +18 -0
  364. package/src/subscription-paddle/changes.json +15 -0
  365. package/src/template-resolver/changes.json +12 -0
  366. package/dist/subscription-dodo/client.d.ts +0 -17
  367. package/dist/subscription-dodo/client.js +0 -31
  368. package/dist/subscription-dodo/constants.d.ts +0 -12
  369. package/dist/subscription-dodo/constants.js +0 -19
  370. package/dist/subscription-dodo/feature.d.ts +0 -37
  371. package/dist/subscription-dodo/feature.js +0 -144
  372. package/dist/subscription-dodo/index.d.ts +0 -2
  373. package/dist/subscription-dodo/index.js +0 -4
  374. package/dist/subscription-dodo/plugin-methods.d.ts +0 -23
  375. package/dist/subscription-dodo/plugin-methods.js +0 -260
  376. package/dist/subscription-dodo/runtime.d.ts +0 -27
  377. package/dist/subscription-dodo/runtime.js +0 -89
  378. package/dist/subscription-dodo/verify-webhook.d.ts +0 -37
  379. package/dist/subscription-dodo/verify-webhook.js +0 -189
  380. package/src/subscription-dodo/changes.json +0 -14
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-renderer/headless";
3
3
  // Client feature factory for the text-block content tree. Apps mount it via
4
4
  // createKumikoApp({ clientFeatures: [textBlocksClient()] }); it loads the
@@ -11,10 +11,12 @@ import { EMPTY_VALUE_PLACEHOLDER } from "@cosmicdrift/kumiko-renderer/headless";
11
11
  // **State**: TreeNode.state = "filled" when content is set, otherwise "stub"
12
12
  // (a hint that the slug exists but is empty).
13
13
  import { useShellUser } from "@cosmicdrift/kumiko-bundled-features/auth-email-password/web";
14
+ import { isUiAccessGranted } from "@cosmicdrift/kumiko-framework/ui-types";
14
15
  import { ContentPreview, useAppFeatures, useContentEditor, useDispatcher, usePrimitives, useQuery, useTranslation, } from "@cosmicdrift/kumiko-renderer";
15
16
  import { CSRF_HEADER_NAME, readCsrfToken } from "@cosmicdrift/kumiko-renderer/live";
16
17
  import { PlainContentEditor, RichContentEditor, } from "@cosmicdrift/kumiko-renderer/web";
17
18
  import { useEffect, useId, useState } from "react";
19
+ import { DEFAULT_COLLECTION_ACCESS } from "./constants.js";
18
20
  import { DocumentBlocksContext, DocumentContentEditor } from "./document-editor.js";
19
21
  import { documentBlocksForKind } from "./document-toolbar-blocks.js";
20
22
  import { defaultTranslations } from "./i18n.js";
@@ -89,58 +91,122 @@ export function groupBlocksByFolder(blocks, tenantIdOverride, collectionId) {
89
91
  },
90
92
  ];
91
93
  }
94
+ // A save in the editor re-fires the tree of the collection it wrote to. The
95
+ // SSE refresh does not cover every collection: per-user entries carry no
96
+ // entity signal, because naming their ids to every collection reader would
97
+ // reveal when colleagues change their own entries.
98
+ const TEXT_BLOCK_TREE_KEY = "";
99
+ const treeRefreshListeners = new Map();
100
+ function onTreeRefresh(treeKey, listener) {
101
+ const listeners = treeRefreshListeners.get(treeKey) ?? new Set();
102
+ listeners.add(listener);
103
+ treeRefreshListeners.set(treeKey, listeners);
104
+ return () => listeners.delete(listener);
105
+ }
106
+ function refreshTree(treeKey) {
107
+ for (const listener of treeRefreshListeners.get(treeKey) ?? [])
108
+ listener();
109
+ }
110
+ async function postBlockList(queryType, tenantIdOverride) {
111
+ // CSRF header is mandatory on authenticated requests (auth-middleware
112
+ // double-submit pattern). Anonymous/pre-login has no token → header
113
+ // omitted → the server takes the anonymous path.
114
+ const headers = { "content-type": "application/json" };
115
+ const csrf = readCsrfToken();
116
+ if (csrf !== undefined)
117
+ headers[CSRF_HEADER_NAME] = csrf;
118
+ // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
119
+ const response = await fetch("/api/query", {
120
+ method: "POST",
121
+ headers,
122
+ body: JSON.stringify({
123
+ type: queryType,
124
+ payload: tenantIdOverride !== undefined ? { tenantIdOverride } : {},
125
+ }),
126
+ });
127
+ if (!response.ok) {
128
+ return {
129
+ ok: false,
130
+ status: response.status,
131
+ body: await response.text().catch(() => response.statusText),
132
+ };
133
+ }
134
+ const data = await response.json();
135
+ return { ok: true, blocks: data.data.blocks };
136
+ }
137
+ const TENANT_OVERRIDE_DENIED_REASON = "tenant_override_requires_system_admin";
138
+ // The dispatcher accepts tenantIdOverride from a SystemAdmin only, and the
139
+ // provider cannot see the session roles. Everyone else gets this exact denial
140
+ // and reads their session tenant instead, which is the only tenant they may
141
+ // edit anyway.
142
+ function isTenantOverrideDenied(result) {
143
+ return !result.ok && result.status === 403 && result.body.includes(TENANT_OVERRIDE_DENIED_REASON);
144
+ }
145
+ async function loadBlocks(queryType, tenantIdOverride) {
146
+ let result = await postBlockList(queryType, tenantIdOverride);
147
+ let effectiveOverride = tenantIdOverride;
148
+ if (tenantIdOverride !== undefined && isTenantOverrideDenied(result)) {
149
+ result = await postBlockList(queryType, undefined);
150
+ effectiveOverride = undefined;
151
+ }
152
+ if (!result.ok) {
153
+ // 403 (CSRF/auth) or 5xx — explicit error instead of silent empty.
154
+ throw new Error(`text-block load failed: ${result.status} ${result.body}`);
155
+ }
156
+ return {
157
+ blocks: result.blocks,
158
+ ...(effectiveOverride !== undefined && { tenantIdOverride: effectiveOverride }),
159
+ };
160
+ }
92
161
  // tenantIdOverride (SystemAdmin-only) lets an app point the content tree at a
93
162
  // tenant other than the session's — publicstatus seeds marketing/legal blocks
94
163
  // on SYSTEM_TENANT_ID, so its SystemAdmin must read that tenant, not their own.
95
- // Without a collection id: the anonymous-capable by-tenant query, so a public
164
+ // Without a collection: the anonymous-capable by-tenant query, so a public
96
165
  // page keeps its content sidebar without a session. With one: that
97
166
  // collection's own list handler, which carries the collection's access rule.
98
- function makeTreeProvider(tenantIdOverride, collectionId) {
167
+ function makeTreeProvider(tenantIdOverride, collection) {
168
+ const collectionId = collection?.id;
99
169
  const queryType = collectionId === undefined
100
170
  ? TemplateResolverQueries.byTenant
101
171
  : collectionQueryName(collectionId, "list");
172
+ // A per-user entry belongs to its author in the session tenant; pointing the
173
+ // tree at another tenant would only hide the author's own entries.
174
+ const requestedOverride = collection?.ownership === "user" ? undefined : tenantIdOverride;
102
175
  return () => (emit, emitError) => {
103
- // CSRF header is mandatory on authenticated requests (auth-middleware
104
- // double-submit pattern). Anonymous/pre-login has no token → header
105
- // omitted → the server takes the anonymous path.
106
- const headers = { "content-type": "application/json" };
107
- const csrf = readCsrfToken();
108
- if (csrf !== undefined)
109
- headers[CSRF_HEADER_NAME] = csrf;
110
- // kumiko-lint-ignore no-raw-hooks not yet converted to the framework hook set
111
- fetch("/api/query", {
112
- method: "POST",
113
- headers,
114
- body: JSON.stringify({
115
- type: queryType,
116
- payload: tenantIdOverride !== undefined ? { tenantIdOverride } : {},
117
- }),
118
- })
119
- .then(async (r) => {
120
- if (!r.ok) {
121
- // 403 (CSRF/auth) or 5xx — explicit error instead of silent empty.
122
- const text = await r.text().catch(() => r.statusText);
123
- throw new Error(`text-block load failed: ${r.status} ${text}`);
124
- }
125
- return r.json();
126
- })
127
- .then((data) => {
128
- // The app-side r.nav node IS the "Content" container → the provider's
129
- // children are the folders/leaves below it, not the wrapper.
130
- const content = groupBlocksByFolder(data.data.blocks, tenantIdOverride, collectionId)[0];
131
- emit(content !== undefined && Array.isArray(content.children) ? content.children : []);
132
- })
133
- .catch((e) => {
134
- // Explicit error signal via emitError; ProviderBranch shows a banner
135
- // plus retry. Falls back to emit([]) for consumers without emitError.
136
- if (emitError) {
137
- emitError(e instanceof Error ? e : new Error(String(e)));
138
- }
139
- else {
140
- emit([]);
141
- }
142
- });
143
- return () => { };
176
+ let active = true;
177
+ // Each denial logs a client-fault warning on the server, so a reload after a
178
+ // save does not ask again once this subscription learned the answer.
179
+ let override = requestedOverride;
180
+ const load = () => {
181
+ loadBlocks(queryType, override)
182
+ .then(({ blocks, tenantIdOverride: effectiveOverride }) => {
183
+ if (!active)
184
+ return;
185
+ override = effectiveOverride;
186
+ // The app-side r.nav node IS the "Content" container → the provider's
187
+ // children are the folders/leaves below it, not the wrapper.
188
+ const content = groupBlocksByFolder(blocks, effectiveOverride, collectionId)[0];
189
+ emit(content !== undefined && Array.isArray(content.children) ? content.children : []);
190
+ })
191
+ .catch((e) => {
192
+ if (!active)
193
+ return;
194
+ // Explicit error signal via emitError; ProviderBranch shows a banner
195
+ // plus retry. Falls back to emit([]) for consumers without emitError.
196
+ if (emitError) {
197
+ emitError(e instanceof Error ? e : new Error(String(e)));
198
+ }
199
+ else {
200
+ emit([]);
201
+ }
202
+ });
203
+ };
204
+ load();
205
+ const unsubscribe = onTreeRefresh(collectionId ?? TEXT_BLOCK_TREE_KEY, load);
206
+ return () => {
207
+ active = false;
208
+ unsubscribe();
209
+ };
144
210
  };
145
211
  }
146
212
  // A node without a collectionId (the hand-wired text-block tree) has no
@@ -165,6 +231,16 @@ function findContentFormat(features, collectionId) {
165
231
  function findVariableExamples(features, collectionId) {
166
232
  return findCollection(features, collectionId)?.variableSchema ?? {};
167
233
  }
234
+ // Edit form: loads the current values, dispatches set on submit. Who may save
235
+ // follows the server: a collection's set handler carries the collection's own
236
+ // access rule (one rule for list, item and set), the public text-block pair
237
+ // stays TenantAdmin/SystemAdmin. Other users see the form read-only.
238
+ export function canWriteContent(collection, roles) {
239
+ if (collection !== undefined) {
240
+ return isUiAccessGranted(collection.access ?? DEFAULT_COLLECTION_ACCESS, roles);
241
+ }
242
+ return roles?.includes("TenantAdmin") === true || roles?.includes("SystemAdmin") === true;
243
+ }
168
244
  // The collection's declared contentFormat ("plain" | "rich" | "markdown" |
169
245
  // "document", see ContentCollectionDefinition.contentFormat) uses a different vocabulary
170
246
  // than the stored entry's contentFormat ("plain" | "html" | "markdown" |
@@ -197,7 +273,7 @@ function TextBlockEditor({ target, }) {
197
273
  // Which collection the node came from. Absent → the public text-block pair,
198
274
  // which is what the hand-wired content tree uses.
199
275
  const collectionId = args?.collectionId;
200
- const { Form, Field, Input, Button, Banner } = usePrimitives();
276
+ const { Form, Field, Input, Button, Banner, PageHeader } = usePrimitives();
201
277
  const dispatcher = useDispatcher();
202
278
  const user = useShellUser();
203
279
  const t = useTranslation();
@@ -206,9 +282,10 @@ function TextBlockEditor({ target, }) {
206
282
  const contentFormat = findContentFormat(features, collectionId);
207
283
  const variableExamples = findVariableExamples(features, collectionId);
208
284
  const variables = Object.keys(variableExamples);
209
- const documentBlocks = documentBlocksForKind(findCollection(features, collectionId)?.kind);
285
+ const collection = findCollection(features, collectionId);
286
+ const documentBlocks = documentBlocksForKind(collection?.kind);
210
287
  const ContentEditor = useContentEditor(contentFormat);
211
- const canWrite = user?.roles.includes("TenantAdmin") === true || user?.roles.includes("SystemAdmin") === true;
288
+ const canWrite = canWriteContent(collection, user?.roles);
212
289
  // Same split as the tree provider: a node without a collection reads through
213
290
  // the public by-slug, a collection node through that collection's handlers.
214
291
  const readQuery = collectionId === undefined
@@ -249,6 +326,7 @@ function TextBlockEditor({ target, }) {
249
326
  ...(tenantIdOverride !== undefined && { tenantIdOverride }),
250
327
  });
251
328
  if (result.isSuccess) {
329
+ refreshTree(collectionId ?? TEXT_BLOCK_TREE_KEY);
252
330
  setSavedMsg(result.data.isNew
253
331
  ? t("template-resolver.editor.created")
254
332
  : t("template-resolver.editor.saved"));
@@ -270,16 +348,20 @@ function TextBlockEditor({ target, }) {
270
348
  void handleSave();
271
349
  };
272
350
  const disabled = submitting || loading || !canWrite;
273
- return (_jsxs(Form, { onSubmit: onSubmit, testId: "text-block-editor", title: title || slug || EMPTY_VALUE_PLACEHOLDER, subtitle: locale !== "" ? `${slug} · (${locale})` : slug, actions: canWrite ? (_jsx(Button, { type: "submit", loading: submitting, disabled: disabled, children: submitting ? t("template-resolver.editor.saving") : t("template-resolver.editor.save") })) : undefined, children: [loading && _jsx(Banner, { variant: "loading", children: t("template-resolver.editor.loading") }), loadError !== null && (_jsxs(Banner, { variant: "error", children: [t("template-resolver.editor.loadFailed"), ": ", loadError.code] })), !canWrite && !loading && (_jsx(Banner, { variant: "info", children: t("template-resolver.editor.readOnly") })), _jsx(Field, { id: "text-block-title", label: t("template-resolver.editor.titleLabel"), required: true, children: _jsx(Input, { kind: "text", id: "text-block-title", name: "text-block-title", value: title, onChange: setTitle, disabled: disabled, required: true }) }), _jsx(Field, { id: contentEditorId, label: t("template-resolver.editor.contentLabel"), labelAppendix: _jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: () => setPreviewing((p) => !p), children: previewing ? t("kumiko.contentEditor.editMode") : t("kumiko.contentEditor.preview") }), children: previewing ? (_jsx(ContentPreview, { content: content, variables: variableExamples, contentFormat: contentFormat })) : (_jsx(DocumentBlocksContext.Provider, { value: documentBlocks, children: _jsx(ContentEditor, { id: contentEditorId, value: content, onChange: setContent, variables: variables, readOnly: disabled }) })) }), saveError !== null && _jsx(Banner, { variant: "error", children: saveError }), savedMsg !== null && _jsx(Banner, { variant: "info", children: savedMsg })] }));
351
+ const headerTitle = title || slug || undefined;
352
+ return (_jsxs(_Fragment, { children: [PageHeader !== undefined && headerTitle !== undefined && _jsx(PageHeader, { title: headerTitle }), _jsxs(Form, { onSubmit: onSubmit, testId: "text-block-editor", title: title || slug || EMPTY_VALUE_PLACEHOLDER, subtitle: locale !== "" ? `${slug} · (${locale})` : slug, actions: canWrite ? (_jsx(Button, { type: "submit", loading: submitting, disabled: disabled, children: submitting
353
+ ? t("template-resolver.editor.saving")
354
+ : t("template-resolver.editor.save") })) : undefined, children: [loading && _jsx(Banner, { variant: "loading", children: t("template-resolver.editor.loading") }), loadError !== null && (_jsxs(Banner, { variant: "error", children: [t("template-resolver.editor.loadFailed"), ": ", loadError.code] })), !canWrite && !loading && (_jsx(Banner, { variant: "info", children: t("template-resolver.editor.readOnly") })), _jsx(Field, { id: "text-block-title", label: t("template-resolver.editor.titleLabel"), required: true, children: _jsx(Input, { kind: "text", id: "text-block-title", name: "text-block-title", value: title, onChange: setTitle, disabled: disabled, required: true }) }), _jsx(Field, { id: contentEditorId, label: t("template-resolver.editor.contentLabel"), labelAppendix: _jsx(Button, { type: "button", variant: "secondary", size: "sm", onClick: () => setPreviewing((p) => !p), children: previewing ? t("kumiko.contentEditor.editMode") : t("kumiko.contentEditor.preview") }), children: previewing ? (_jsx(ContentPreview, { content: content, variables: variableExamples, contentFormat: contentFormat })) : (_jsx(DocumentBlocksContext.Provider, { value: documentBlocks, children: _jsx(ContentEditor, { id: contentEditorId, value: content, onChange: setContent, variables: variables, readOnly: disabled }) })) }), saveError !== null && _jsx(Banner, { variant: "error", children: saveError }), savedMsg !== null && _jsx(Banner, { variant: "info", children: savedMsg })] })] }));
274
355
  }
275
356
  // `navId` = the QN of the r.nav({ provider: true }) node the app registers for
276
357
  // the content tree (e.g. "publicstatus:nav:content"). The app owns the node's
277
358
  // label/icon/access, the feature only supplies children plus the editor.
278
359
  // Without navId: resolver only, no sidebar node (server-only consumers such as
279
360
  // money-horse leak nothing).
280
- // `tenantId` (SystemAdmin-only): which tenant the tree and editor serve —
281
- // SYSTEM_TENANT_ID for apps that seed marketing/legal there. Omit for the
282
- // session tenant (default, no cross-tenant access).
361
+ // `tenantId`: which tenant a SystemAdmin's trees and editor serve —
362
+ // SYSTEM_TENANT_ID for apps that seed marketing/legal there. Other users and
363
+ // per-user collections always stay on the session tenant. Omit for the
364
+ // session tenant everywhere.
283
365
  //
284
366
  // Beyond that single tree, this client also serves every content collection
285
367
  // the app declares via r.contentCollection() — one provider per collection,
@@ -299,7 +381,7 @@ export function textBlocksClient(opts) {
299
381
  // that collection's kind. The explicit navId above stays independent of
300
382
  // this — an app can have both a hand-wired content tree and collections.
301
383
  navProvidersFromCollections: (collections) => ({
302
- providers: Object.fromEntries(collections.map((c) => [c.navQn, makeTreeProvider(tenantId, c.id)])),
384
+ providers: Object.fromEntries(collections.map((c) => [c.navQn, makeTreeProvider(tenantId, c)])),
303
385
  entities: Object.fromEntries(collections.map((c) => [c.navQn, ["template-resource"]])),
304
386
  }),
305
387
  resolvers: {
@@ -134,6 +134,6 @@ export const defaultTranslations = {
134
134
  "template-resolver.editor.networkError": "Network error while saving.",
135
135
  "template-resolver.editor.loading": "Loading current version…",
136
136
  "template-resolver.editor.loadFailed": "Could not load block",
137
- "template-resolver.editor.readOnly": "Read-only — TenantAdmin or SystemAdmin role required to make changes.",
137
+ "template-resolver.editor.readOnly": "Read-only. Your role does not allow changes here.",
138
138
  },
139
139
  };
@@ -3,4 +3,4 @@ export declare const addMemberWrite: import("@cosmicdrift/kumiko-types/define-ha
3
3
  userId: z.ZodString;
4
4
  tenantId: z.ZodString;
5
5
  roles: z.ZodArray<z.ZodString>;
6
- }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
6
+ }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -4,4 +4,4 @@ export declare const cancelInvitationWrite: import("@cosmicdrift/kumiko-types/de
4
4
  }, z.core.$strip>, {
5
5
  id: string;
6
6
  alreadyDone: boolean;
7
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
7
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -3,4 +3,4 @@ export declare const createWrite: import("@cosmicdrift/kumiko-types/define-handl
3
3
  id: z.ZodOptional<z.ZodUUID>;
4
4
  key: z.ZodString;
5
5
  name: z.ZodString;
6
- }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
6
+ }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -5,4 +5,4 @@ export declare const removeMemberWrite: import("@cosmicdrift/kumiko-types/define
5
5
  }, z.core.$strip>, {
6
6
  userId: string;
7
7
  tenantId: string;
8
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
8
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -1,7 +1,7 @@
1
1
  import * as z from "zod";
2
2
  export declare const enableWrite: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"disable" | "enable", z.ZodObject<{
3
3
  id: z.ZodUUID;
4
- }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
4
+ }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
5
5
  export declare const disableWrite: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"disable" | "enable", z.ZodObject<{
6
6
  id: z.ZodUUID;
7
- }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
7
+ }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -7,4 +7,4 @@ export declare const updateMemberRolesWrite: import("@cosmicdrift/kumiko-types/d
7
7
  userId: string;
8
8
  roles: readonly string[];
9
9
  tenantId: string;
10
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
10
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -5,4 +5,4 @@ export declare const updateWrite: import("@cosmicdrift/kumiko-types/define-handl
5
5
  changes: z.ZodObject<{
6
6
  name: z.ZodOptional<z.ZodString>;
7
7
  }, z.core.$strip>;
8
- }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
8
+ }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -11,4 +11,4 @@ export declare function createClaimTenantHandoverHandler(opts?: ClaimTenantHando
11
11
  sourceTenantId: string;
12
12
  destinationTenantId: string;
13
13
  movedEntities: Readonly<Record<string, number>>;
14
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
14
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -3,4 +3,4 @@ export declare const cancelDestructionWrite: import("@cosmicdrift/kumiko-types/d
3
3
  tenantId: string;
4
4
  status: "active";
5
5
  gracePeriodEnd: null;
6
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
6
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -3,4 +3,4 @@ export declare const requestDestructionWrite: import("@cosmicdrift/kumiko-types/
3
3
  tenantId: string;
4
4
  status: "destroyRequested";
5
5
  gracePeriodEnd: string;
6
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
6
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -23,4 +23,4 @@ export declare function createSetTenantTierWrite(opts?: SetTenantTierOptions): i
23
23
  tenantId: string;
24
24
  tier: string;
25
25
  isNew: boolean;
26
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
26
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -6,4 +6,4 @@ export declare const createWrite: import("@cosmicdrift/kumiko-types/define-handl
6
6
  locale: z.ZodOptional<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>;
7
7
  timezone: z.ZodOptional<z.ZodString>;
8
8
  roles: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>]>>;
9
- }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
9
+ }, z.core.$strip>, import("@cosmicdrift/kumiko-types/hooks").SaveContext, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -12,4 +12,4 @@ export declare const updateWrite: import("@cosmicdrift/kumiko-types/define-handl
12
12
  emailVerified: z.ZodOptional<z.ZodBoolean>;
13
13
  roles: z.ZodOptional<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>]>>;
14
14
  }, z.core.$strip>;
15
- }, z.core.$strip>, unknown, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
15
+ }, z.core.$strip>, unknown, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -3,4 +3,4 @@ export declare const cancelDeletionWrite: import("@cosmicdrift/kumiko-types/defi
3
3
  userId: string;
4
4
  status: "active";
5
5
  gracePeriodEnd: null;
6
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
6
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -7,4 +7,4 @@ export declare function createConfirmDeletionByTokenHandler(opts?: ConfirmDeleti
7
7
  }, z.core.$strip>, {
8
8
  status: "deletionRequested";
9
9
  gracePeriodEnd: string;
10
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
10
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -4,4 +4,4 @@ export declare const liftRestrictionWrite: import("@cosmicdrift/kumiko-types/def
4
4
  }, z.core.$strip>, {
5
5
  userId: string;
6
6
  status: "active";
7
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
7
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -19,4 +19,4 @@ export declare function createRequestDeletionByEmailHandler(opts?: RequestDeleti
19
19
  email: z.ZodEmail;
20
20
  }, z.core.$strip>, {
21
21
  kind: "requested";
22
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
22
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -19,4 +19,4 @@ export declare function createRequestDeletionHandler(opts?: RequestDeletionOptio
19
19
  userId: string;
20
20
  status: "deletionRequested";
21
21
  gracePeriodEnd: string;
22
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
22
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -3,4 +3,4 @@ export declare const requestExportWrite: import("@cosmicdrift/kumiko-types/defin
3
3
  jobId: string;
4
4
  status: string;
5
5
  isExisting: boolean;
6
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
6
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -4,4 +4,4 @@ export declare const restrictAccountWrite: import("@cosmicdrift/kumiko-types/def
4
4
  }, z.core.$strip>, {
5
5
  userId: string;
6
6
  status: "restricted";
7
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
7
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -10,4 +10,4 @@ export declare function createRunForgetCleanupHandler(opts?: RunForgetCleanupOpt
10
10
  errors: readonly import("../run-forget-cleanup.ts").ForgetCleanupError[];
11
11
  incompleteCount: number;
12
12
  incomplete: readonly import("../run-forget-cleanup.ts").ForgetCleanupIncomplete[];
13
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
13
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -154,7 +154,8 @@ function isPersonalFileRow(registry, row) {
154
154
  if (row["entityId"] === null && resolveActionFormFileField(registry, entityType, fieldName)) {
155
155
  return true;
156
156
  }
157
- const fieldDef = registry.getEntity(entityType)?.fields[fieldName];
157
+ const entity = registry.getEntity(entityType) ?? registry.getReadModelEntity(entityType);
158
+ const fieldDef = entity?.fields[fieldName];
158
159
  return isPersonalPiiField(fieldDef);
159
160
  }
160
161
  // Delete every row's binary (original + any derivatives) via the provider.
@@ -5,4 +5,4 @@ export declare const changeEmailWrite: import("@cosmicdrift/kumiko-types/define-
5
5
  }, z.core.$strip>, {
6
6
  kind: string;
7
7
  email: string;
8
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
8
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -6,7 +6,7 @@ export type WaitlistExportData = {
6
6
  export type WaitlistPurgeData = {
7
7
  readonly purged: number;
8
8
  };
9
- export declare const exportHandler: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"export", z.ZodObject<{}, z.core.$strict>, WaitlistExportData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
9
+ export declare const exportHandler: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"export", z.ZodObject<{}, z.core.$strict>, WaitlistExportData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
10
10
  export declare const purgeHandler: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"purge", z.ZodObject<{
11
11
  confirmCount: z.ZodNumber;
12
- }, z.core.$strict>, WaitlistPurgeData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
12
+ }, z.core.$strict>, WaitlistPurgeData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -6,4 +6,4 @@ export type WaitlistInviteData = {
6
6
  };
7
7
  export declare function createInviteHandler(invite?: WaitlistInviteOptions): import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"invite", import("zod").ZodObject<{
8
8
  id: import("zod").ZodUUID;
9
- }, import("zod/v4/core").$strict>, WaitlistInviteData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
9
+ }, import("zod/v4/core").$strict>, WaitlistInviteData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -4,4 +4,4 @@ export type WaitlistRejectData = {
4
4
  };
5
5
  export declare const rejectHandler: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"reject", import("zod").ZodObject<{
6
6
  id: import("zod").ZodUUID;
7
- }, import("zod/v4/core").$strict>, WaitlistRejectData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
7
+ }, import("zod/v4/core").$strict>, WaitlistRejectData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -10,4 +10,4 @@ export declare function createSubmitHandler(opts: WaitlistOptions): import("@cos
10
10
  message: import("zod").ZodOptional<import("zod").ZodString>;
11
11
  locale: import("zod").ZodPipe<import("zod").ZodString, import("zod").ZodTransform<string, string>>;
12
12
  website: import("zod").ZodOptional<import("zod").ZodString>;
13
- }, import("zod/v4/core").$strict>, WaitlistSubmitData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
13
+ }, import("zod/v4/core").$strict>, WaitlistSubmitData, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cosmicdrift/kumiko-bundled-features",
3
- "version": "0.392.2",
3
+ "version": "0.394.0",
4
4
  "description": "Built-in features — tenant, user, auth, delivery. The stuff you'd rewrite anyway, already typed.",
5
5
  "license": "MIT",
6
6
  "author": "Marc Frost <marc@cosmicdriftgamestudio.com>",
@@ -188,9 +188,9 @@
188
188
  "types": "./dist/subscription-stripe/index.d.ts",
189
189
  "default": "./dist/subscription-stripe/index.js"
190
190
  },
191
- "./subscription-dodo": {
192
- "types": "./dist/subscription-dodo/index.d.ts",
193
- "default": "./dist/subscription-dodo/index.js"
191
+ "./subscription-paddle": {
192
+ "types": "./dist/subscription-paddle/index.d.ts",
193
+ "default": "./dist/subscription-paddle/index.js"
194
194
  },
195
195
  "./subscription-mollie": {
196
196
  "types": "./dist/subscription-mollie/index.d.ts",
@@ -212,6 +212,10 @@
212
212
  "types": "./dist/inbound-mail-foundation/index.d.ts",
213
213
  "default": "./dist/inbound-mail-foundation/index.js"
214
214
  },
215
+ "./inbound-mail-foundation/web": {
216
+ "types": "./dist/inbound-mail-foundation/web/index.d.ts",
217
+ "default": "./dist/inbound-mail-foundation/web/index.js"
218
+ },
215
219
  "./inbound-provider-inmemory": {
216
220
  "types": "./dist/inbound-provider-inmemory/index.d.ts",
217
221
  "default": "./dist/inbound-provider-inmemory/index.js"
@@ -348,6 +352,10 @@
348
352
  "types": "./dist/auth-email-password/web/return-path.d.ts",
349
353
  "default": "./dist/auth-email-password/web/return-path.js"
350
354
  },
355
+ "./auth-email-password/static-login": {
356
+ "types": "./dist/auth-email-password/web/static-login.d.ts",
357
+ "default": "./dist/auth-email-password/web/static-login.js"
358
+ },
351
359
  "./auth-email-password/seeding": {
352
360
  "types": "./dist/auth-email-password/seeding.d.ts",
353
361
  "default": "./dist/auth-email-password/seeding.js"
@@ -558,9 +566,9 @@
558
566
  }
559
567
  },
560
568
  "dependencies": {
561
- "@cosmicdrift/kumiko-framework": "0.392.2",
562
- "@cosmicdrift/kumiko-renderer": "0.392.2",
563
- "@cosmicdrift/kumiko-types": "0.392.2",
569
+ "@cosmicdrift/kumiko-framework": "0.394.0",
570
+ "@cosmicdrift/kumiko-renderer": "0.394.0",
571
+ "@cosmicdrift/kumiko-types": "0.394.0",
564
572
  "@mollie/api-client": "^4.5.0",
565
573
  "@node-rs/argon2": "^2.0.2",
566
574
  "@tiptap/core": "^3.31.3",
@@ -763,9 +771,9 @@
763
771
  "types": "./dist/subscription-stripe/index.d.ts",
764
772
  "default": "./dist/subscription-stripe/index.js"
765
773
  },
766
- "./subscription-dodo": {
767
- "types": "./dist/subscription-dodo/index.d.ts",
768
- "default": "./dist/subscription-dodo/index.js"
774
+ "./subscription-paddle": {
775
+ "types": "./dist/subscription-paddle/index.d.ts",
776
+ "default": "./dist/subscription-paddle/index.js"
769
777
  },
770
778
  "./subscription-mollie": {
771
779
  "types": "./dist/subscription-mollie/index.d.ts",
@@ -787,6 +795,10 @@
787
795
  "types": "./dist/inbound-mail-foundation/index.d.ts",
788
796
  "default": "./dist/inbound-mail-foundation/index.js"
789
797
  },
798
+ "./inbound-mail-foundation/web": {
799
+ "types": "./dist/inbound-mail-foundation/web/index.d.ts",
800
+ "default": "./dist/inbound-mail-foundation/web/index.js"
801
+ },
790
802
  "./inbound-provider-inmemory": {
791
803
  "types": "./dist/inbound-provider-inmemory/index.d.ts",
792
804
  "default": "./dist/inbound-provider-inmemory/index.js"
@@ -923,6 +935,10 @@
923
935
  "types": "./dist/auth-email-password/web/return-path.d.ts",
924
936
  "default": "./dist/auth-email-password/web/return-path.js"
925
937
  },
938
+ "./auth-email-password/static-login": {
939
+ "types": "./dist/auth-email-password/web/static-login.d.ts",
940
+ "default": "./dist/auth-email-password/web/static-login.js"
941
+ },
926
942
  "./auth-email-password/seeding": {
927
943
  "types": "./dist/auth-email-password/seeding.d.ts",
928
944
  "default": "./dist/auth-email-password/seeding.js"
@@ -1142,17 +1158,17 @@
1142
1158
  ],
1143
1159
  "devDependencies": {
1144
1160
  "@testing-library/user-event": "^14.6.1",
1145
- "@cosmicdrift/kumiko-locale-de": "0.392.2",
1146
- "@cosmicdrift/kumiko-locale-es": "0.392.2",
1147
- "@cosmicdrift/kumiko-locale-fr": "0.392.2",
1148
- "@cosmicdrift/kumiko-locale-it": "0.392.2",
1149
- "@cosmicdrift/kumiko-renderer-mail-html": "0.392.2",
1161
+ "@cosmicdrift/kumiko-locale-de": "0.394.0",
1162
+ "@cosmicdrift/kumiko-locale-es": "0.394.0",
1163
+ "@cosmicdrift/kumiko-locale-fr": "0.394.0",
1164
+ "@cosmicdrift/kumiko-locale-it": "0.394.0",
1165
+ "@cosmicdrift/kumiko-renderer-mail-html": "0.394.0",
1150
1166
  "jsqr": "^1.4.0",
1151
1167
  "unpdf": "^1.8.1",
1152
- "@cosmicdrift/kumiko-testing": "0.392.2"
1168
+ "@cosmicdrift/kumiko-testing": "0.394.0"
1153
1169
  },
1154
1170
  "peerDependencies": {
1155
- "@cosmicdrift/kumiko-testing": "0.392.2"
1171
+ "@cosmicdrift/kumiko-testing": "0.394.0"
1156
1172
  },
1157
1173
  "peerDependenciesMeta": {
1158
1174
  "@cosmicdrift/kumiko-testing": {