@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,2 +1,7 @@
1
+ import { type InboundMailRoles } from "@cosmicdrift/kumiko-bundled-features/inbound-mail-foundation";
1
2
  import type { ActionFormScreenDefinition } from "@cosmicdrift/kumiko-framework/ui-types";
2
- export declare const imapConnectScreen: ActionFormScreenDefinition;
3
+ export declare const createImapConnectScreen: ({ adminRoles, }: InboundMailRoles) => ActionFormScreenDefinition;
4
+ export declare const createMyImapConnectScreen: ({ memberRoles, }: InboundMailRoles) => ActionFormScreenDefinition;
5
+ export declare const createImapReconnectScreen: ({ adminRoles, }: InboundMailRoles) => ActionFormScreenDefinition;
6
+ export declare const createMyImapReconnectScreen: ({ memberRoles, }: InboundMailRoles) => ActionFormScreenDefinition;
7
+ export declare const createImapScreens: (roles: InboundMailRoles) => ActionFormScreenDefinition[];
@@ -1,47 +1,180 @@
1
- import { IMAP_CONNECT_SCREEN_ID, MAIL_ACCOUNT_LIST_SCREEN_QN, } from "@cosmicdrift/kumiko-bundled-features/inbound-mail-foundation";
1
+ import { IMAP_CONNECT_SCREEN_ID, IMAP_RECONNECT_SCREEN_ID, MAIL_ACCOUNT_LIST_SCREEN_QN, MY_IMAP_CONNECT_SCREEN_ID, MY_IMAP_RECONNECT_SCREEN_ID, MY_MAIL_ACCOUNT_LIST_SCREEN_QN, } from "@cosmicdrift/kumiko-bundled-features/inbound-mail-foundation";
2
2
  import { i18nKey } from "@cosmicdrift/kumiko-framework/engine";
3
- import { ImapHandlers, SMTP_SUBMISSION_PORT } from "./constants.js";
3
+ import { ImapHandlers, ImapQueries, SMTP_SUBMISSION_PORT } from "./constants.js";
4
+ // The admin form connects a shared mailbox, the member form a personal one. The member form carries
5
+ // no sender-check field because that policy is tenant-wide and only admins set it.
6
+ function createConnectScreen(variant) {
7
+ return {
8
+ id: variant.id,
9
+ type: "actionForm",
10
+ agent: { expose: false },
11
+ handler: variant.handler,
12
+ fields: {
13
+ displayName: { type: "text", required: true, maxLength: 200 },
14
+ address: { type: "text", required: true, maxLength: 320, format: "email" },
15
+ host: { type: "text", required: true, maxLength: 255 },
16
+ port: {
17
+ type: "number",
18
+ integer: true,
19
+ grouping: false,
20
+ required: true,
21
+ min: 1,
22
+ max: 65535,
23
+ default: 993,
24
+ },
25
+ user: { type: "text", required: true, maxLength: 320 },
26
+ password: { type: "text", required: true, format: "password", sensitive: true },
27
+ smtpHost: { type: "text", maxLength: 255 },
28
+ smtpPort: {
29
+ type: "number",
30
+ integer: true,
31
+ grouping: false,
32
+ required: true,
33
+ min: 1,
34
+ max: 65535,
35
+ default: SMTP_SUBMISSION_PORT,
36
+ },
37
+ ...(variant.withSenderCheck && { trustedAuthservId: { type: "text", maxLength: 255 } }),
38
+ },
39
+ layout: {
40
+ sections: [
41
+ // The name-based icon guess reads "address" as a postal address.
42
+ { fields: ["displayName", { field: "address", icon: "mail" }] },
43
+ {
44
+ title: i18nKey("inboundMail.imap.connect.server"),
45
+ fields: ["host", "port", "user", "password"],
46
+ },
47
+ {
48
+ title: i18nKey("inboundMail.imap.connect.outgoing"),
49
+ description: i18nKey("inboundMail.imap.connect.outgoingHint"),
50
+ fields: ["smtpHost", "smtpPort"],
51
+ },
52
+ ...(variant.withSenderCheck
53
+ ? [
54
+ {
55
+ title: i18nKey("inboundMail.imap.connect.senderCheck"),
56
+ description: i18nKey("inboundMail.imap.connect.senderCheckHint"),
57
+ fields: ["trustedAuthservId"],
58
+ },
59
+ ]
60
+ : []),
61
+ ],
62
+ },
63
+ submitLabel: i18nKey("inboundMail.imap.connect.submit"),
64
+ redirect: variant.returnTarget,
65
+ cancelTarget: variant.returnTarget,
66
+ access: { roles: [...variant.roles] },
67
+ dormant: true,
68
+ };
69
+ }
4
70
  // Reached from the toolbar of the foundation's mail account list, never from the nav.
5
- export const imapConnectScreen = {
71
+ export const createImapConnectScreen = ({ adminRoles, }) => createConnectScreen({
6
72
  id: IMAP_CONNECT_SCREEN_ID,
7
- type: "actionForm",
8
- agent: { expose: false },
9
73
  handler: ImapHandlers.connectMailbox,
10
- fields: {
11
- displayName: { type: "text", required: true, maxLength: 200 },
12
- address: { type: "text", required: true, maxLength: 320, format: "email" },
13
- host: { type: "text", required: true, maxLength: 255 },
14
- port: { type: "number", integer: true, required: true, min: 1, max: 65535, default: 993 },
15
- user: { type: "text", required: true, maxLength: 320 },
16
- password: { type: "text", required: true, format: "password", sensitive: true },
17
- smtpHost: { type: "text", maxLength: 255 },
18
- smtpPort: {
19
- type: "number",
20
- integer: true,
21
- required: true,
22
- min: 1,
23
- max: 65535,
24
- default: SMTP_SUBMISSION_PORT,
25
- },
26
- },
27
- layout: {
28
- sections: [
29
- // The name-based icon guess reads "address" as a postal address.
30
- { fields: ["displayName", { field: "address", icon: "mail" }] },
31
- {
32
- title: i18nKey("inboundMail.imap.connect.server"),
33
- fields: ["host", "port", "user", "password"],
74
+ roles: adminRoles,
75
+ returnTarget: MAIL_ACCOUNT_LIST_SCREEN_QN,
76
+ withSenderCheck: true,
77
+ });
78
+ // Reached from the toolbar of "My mail accounts".
79
+ export const createMyImapConnectScreen = ({ memberRoles, }) => createConnectScreen({
80
+ id: MY_IMAP_CONNECT_SCREEN_ID,
81
+ handler: ImapHandlers.connectMyMailbox,
82
+ roles: memberRoles,
83
+ returnTarget: MY_MAIL_ACCOUNT_LIST_SCREEN_QN,
84
+ withSenderCheck: false,
85
+ });
86
+ // Reached from the "Reconnect" row action of an account with a sign-in error. The record id comes
87
+ // from the path; the load query returns the stored server settings, never the password.
88
+ // The admin and the owner variant share this form; the owner's carries no sender-check field
89
+ // because that policy is tenant-wide and only admins set it.
90
+ function createReconnectScreen(variant) {
91
+ return {
92
+ id: variant.id,
93
+ type: "actionForm",
94
+ agent: { expose: false },
95
+ handler: ImapHandlers.reconnectMailbox,
96
+ load: { query: ImapQueries.reconnectPrefill, idParam: "accountId" },
97
+ fields: {
98
+ accountId: { type: "text", required: true },
99
+ displayName: { type: "text", maxLength: 200 },
100
+ host: { type: "text", required: true, maxLength: 255 },
101
+ port: {
102
+ type: "number",
103
+ integer: true,
104
+ grouping: false,
105
+ required: true,
106
+ min: 1,
107
+ max: 65535,
108
+ default: 993,
34
109
  },
35
- {
36
- title: i18nKey("inboundMail.imap.connect.outgoing"),
37
- description: i18nKey("inboundMail.imap.connect.outgoingHint"),
38
- fields: ["smtpHost", "smtpPort"],
110
+ user: { type: "text", required: true, maxLength: 320 },
111
+ password: { type: "text", required: true, format: "password", sensitive: true },
112
+ smtpHost: { type: "text", maxLength: 255 },
113
+ smtpPort: {
114
+ type: "number",
115
+ integer: true,
116
+ grouping: false,
117
+ required: true,
118
+ min: 1,
119
+ max: 65535,
120
+ default: SMTP_SUBMISSION_PORT,
39
121
  },
40
- ],
41
- },
42
- submitLabel: i18nKey("inboundMail.imap.connect.submit"),
43
- redirect: MAIL_ACCOUNT_LIST_SCREEN_QN,
44
- cancelTarget: MAIL_ACCOUNT_LIST_SCREEN_QN,
45
- access: { roles: ["SystemAdmin", "TenantAdmin"] },
46
- dormant: true,
47
- };
122
+ ...(variant.withSenderCheck && { trustedAuthservId: { type: "text", maxLength: 255 } }),
123
+ },
124
+ layout: {
125
+ sections: [
126
+ {
127
+ title: i18nKey("inboundMail.imap.connect.server"),
128
+ description: i18nKey("inboundMail.imap.reconnect.hint"),
129
+ // The id only travels in the payload; the user recognises the mailbox by its name.
130
+ fields: [
131
+ { field: "accountId", visible: false },
132
+ { field: "displayName", readOnly: true, submit: false },
133
+ "host",
134
+ "port",
135
+ "user",
136
+ "password",
137
+ ],
138
+ },
139
+ {
140
+ title: i18nKey("inboundMail.imap.connect.outgoing"),
141
+ description: i18nKey("inboundMail.imap.connect.outgoingHint"),
142
+ fields: ["smtpHost", "smtpPort"],
143
+ },
144
+ ...(variant.withSenderCheck
145
+ ? [
146
+ {
147
+ title: i18nKey("inboundMail.imap.connect.senderCheck"),
148
+ description: i18nKey("inboundMail.imap.connect.senderCheckHint"),
149
+ fields: ["trustedAuthservId"],
150
+ },
151
+ ]
152
+ : []),
153
+ ],
154
+ },
155
+ submitLabel: i18nKey("inboundMail.imap.reconnect.submit"),
156
+ redirect: variant.returnTarget,
157
+ cancelTarget: variant.returnTarget,
158
+ access: { roles: [...variant.roles] },
159
+ dormant: true,
160
+ };
161
+ }
162
+ export const createImapReconnectScreen = ({ adminRoles, }) => createReconnectScreen({
163
+ id: IMAP_RECONNECT_SCREEN_ID,
164
+ roles: adminRoles,
165
+ returnTarget: MAIL_ACCOUNT_LIST_SCREEN_QN,
166
+ withSenderCheck: true,
167
+ });
168
+ // Reached from the "Reactivate" row action of "My mail accounts".
169
+ export const createMyImapReconnectScreen = ({ memberRoles, }) => createReconnectScreen({
170
+ id: MY_IMAP_RECONNECT_SCREEN_ID,
171
+ roles: memberRoles,
172
+ returnTarget: MY_MAIL_ACCOUNT_LIST_SCREEN_QN,
173
+ withSenderCheck: false,
174
+ });
175
+ export const createImapScreens = (roles) => [
176
+ createImapConnectScreen(roles),
177
+ createImapReconnectScreen(roles),
178
+ createMyImapConnectScreen(roles),
179
+ createMyImapReconnectScreen(roles),
180
+ ];
@@ -1,2 +1,2 @@
1
- import { type InboundMailContext, type MailAccountRecord, type OutboundMailMessage, type OutboundMailSent } from "@cosmicdrift/kumiko-bundled-features/inbound-mail-foundation";
2
- export declare function sendFromImapAccount(ctx: InboundMailContext, account: MailAccountRecord, message: OutboundMailMessage): Promise<OutboundMailSent>;
1
+ import { type InboundMailContext, type MailAccountRecord, type OutboundAttachment, type OutboundMailMessage, type ProviderSentMail } from "@cosmicdrift/kumiko-bundled-features/inbound-mail-foundation";
2
+ export declare function sendFromImapAccount(ctx: InboundMailContext, account: MailAccountRecord, message: OutboundMailMessage, attachments: readonly OutboundAttachment[]): Promise<ProviderSentMail>;
@@ -20,7 +20,7 @@ function toFoundationSendError(err) {
20
20
  function stripAngles(id) {
21
21
  return id.replace(/^<|>$/g, "");
22
22
  }
23
- export async function sendFromImapAccount(ctx, account, message) {
23
+ export async function sendFromImapAccount(ctx, account, message, attachments) {
24
24
  const doc = await readCredentialDocument(ctx, account);
25
25
  if (!doc.smtpHost || !doc.password) {
26
26
  throw new MailSendNotConfiguredError(`${FEATURE_NAME}: account ${account.id} has no outgoing server stored`);
@@ -35,6 +35,13 @@ export async function sendFromImapAccount(ctx, account, message) {
35
35
  ...(message.html !== undefined && { html: message.html }),
36
36
  ...(message.inReplyTo && { inReplyTo: message.inReplyTo }),
37
37
  ...(message.references && { references: [...message.references] }),
38
+ ...(attachments.length > 0 && {
39
+ attachments: attachments.map((attachment) => ({
40
+ filename: attachment.fileName,
41
+ contentType: attachment.mimeType,
42
+ content: Buffer.from(attachment.data),
43
+ })),
44
+ }),
38
45
  }).compile();
39
46
  const raw = await mime.build();
40
47
  try {
@@ -0,0 +1,3 @@
1
+ import { type SenderAuthentication } from "@cosmicdrift/kumiko-bundled-features/inbound-mail-foundation";
2
+ import type { ParsedMail } from "mailparser";
3
+ export declare function senderAuthenticationOf(parsed: ParsedMail, trustedAuthservId: string | null): SenderAuthentication | null;
@@ -0,0 +1,18 @@
1
+ import { fromDomainOf, parseSenderAuthentication, } from "@cosmicdrift/kumiko-bundled-features/inbound-mail-foundation";
2
+ const HEADER_NAME = "authentication-results";
3
+ // headerLines keeps every occurrence in file order, topmost first. Unlike `headers`, which merges
4
+ // repeated headers, the order is what the trust rule depends on.
5
+ function authenticationResultValues(parsed) {
6
+ return parsed.headerLines
7
+ .filter((header) => header.key === HEADER_NAME)
8
+ .map((header) => header.line.slice(header.line.indexOf(":") + 1));
9
+ }
10
+ // A From header with addresses of several domains cannot be bound to one DMARC verdict.
11
+ function singleFromDomain(parsed) {
12
+ const domains = new Set((parsed.from?.value ?? []).map((address) => fromDomainOf(address.address ?? "")));
13
+ const [only] = domains;
14
+ return domains.size === 1 && only ? only : null;
15
+ }
16
+ export function senderAuthenticationOf(parsed, trustedAuthservId) {
17
+ return parseSenderAuthentication(authenticationResultValues(parsed), trustedAuthservId, singleFromDomain(parsed));
18
+ }
@@ -4,11 +4,24 @@ export declare const INMEMORY_PROVIDER_KEY = "inmemory";
4
4
  * pushed immediately (IDLE simulation); the next fetch also returns it by
5
5
  * cursor — the foundation's deduplication makes this idempotent. */
6
6
  export declare function seedInboundMessage(accountId: string, msg: RawInboundMessage): Promise<void>;
7
+ /** Test helper: a mail the provider cannot parse; fetch reports it as rejected and moves on. */
8
+ export declare function seedRejectedInboundMessage(accountId: string, providerMessageId: string): void;
9
+ /** Test helper: the full version of a message that fetchContent serves later. */
10
+ export declare function setInboundFullContent(accountId: string, msg: RawInboundMessage): void;
11
+ /** Test helper: the provider message ids of every fetchContent call so far. */
12
+ export declare function contentFetchesOf(accountId: string): readonly (readonly string[])[];
7
13
  /** Test helper: injects a one-shot error into the next fetch (e.g.
8
14
  * InboundAuthError or InboundCursorInvalidError). */
9
15
  export declare function failNextFetchWith(accountId: string, err: unknown): void;
10
16
  /** Test helper: injects a one-shot error into the next verify. */
11
17
  export declare function failNextVerifyWith(accountId: string, err: unknown): void;
18
+ /** Test helper: fetches of the account do not return until `release()`, whatever the abort signal
19
+ * says, like a provider that ignores cancellation on a dead connection. */
20
+ export declare function hangFetchesOf(accountId: string): {
21
+ readonly release: () => void;
22
+ };
23
+ /** Test helper: the abort signal the last fetch of the account received. */
24
+ export declare function lastFetchSignalOf(accountId: string): AbortSignal | undefined;
12
25
  /** Test helper: every fetch reads this tenant secret first, like a real
13
26
  * provider reads its stored credentials; a missing secret is an auth error. */
14
27
  export declare function requireCredentialSecretOnFetch(accountId: string, key: string): void;
@@ -17,6 +30,8 @@ export declare function requireCredentialSecretOnFetch(accountId: string, key: s
17
30
  export declare function emitWatchError(accountId: string, err: unknown): void;
18
31
  /** Test helper: reports whether an account currently has an active watch. */
19
32
  export declare function isWatching(accountId: string): boolean;
33
+ /** Test helper: the trustedAuthservId of the account the last watch was started with. */
34
+ export declare function watchedTrustedAuthservIdOf(accountId: string): string | null | undefined;
20
35
  /** Test-Helper: kompletter State-Reset (Test-Isolation — Mock-States
21
36
  * nie zwischen Tests teilen). */
22
37
  export declare function resetInboundInMemory(): void;
@@ -21,9 +21,14 @@ function stateFor(accountId) {
21
21
  if (!state) {
22
22
  state = {
23
23
  log: [],
24
+ fullContent: new Map(),
25
+ contentFetches: [],
24
26
  watch: null,
27
+ watchedTrustedAuthservId: undefined,
25
28
  nextFetchError: null,
26
29
  nextVerifyError: null,
30
+ hangingFetch: null,
31
+ lastFetchSignal: undefined,
27
32
  credentialSecretKey: null,
28
33
  };
29
34
  accounts.set(accountId, state);
@@ -35,10 +40,22 @@ function stateFor(accountId) {
35
40
  * cursor — the foundation's deduplication makes this idempotent. */
36
41
  export async function seedInboundMessage(accountId, msg) {
37
42
  const state = stateFor(accountId);
38
- state.log.push(msg);
43
+ state.log.push({ message: msg });
39
44
  if (state.watch)
40
45
  await state.watch.onMessages([msg]);
41
46
  }
47
+ /** Test helper: a mail the provider cannot parse; fetch reports it as rejected and moves on. */
48
+ export function seedRejectedInboundMessage(accountId, providerMessageId) {
49
+ stateFor(accountId).log.push({ rejected: { providerMessageId, reason: "unparseable" } });
50
+ }
51
+ /** Test helper: the full version of a message that fetchContent serves later. */
52
+ export function setInboundFullContent(accountId, msg) {
53
+ stateFor(accountId).fullContent.set(msg.providerMessageId, msg);
54
+ }
55
+ /** Test helper: the provider message ids of every fetchContent call so far. */
56
+ export function contentFetchesOf(accountId) {
57
+ return stateFor(accountId).contentFetches;
58
+ }
42
59
  /** Test helper: injects a one-shot error into the next fetch (e.g.
43
60
  * InboundAuthError or InboundCursorInvalidError). */
44
61
  export function failNextFetchWith(accountId, err) {
@@ -48,6 +65,23 @@ export function failNextFetchWith(accountId, err) {
48
65
  export function failNextVerifyWith(accountId, err) {
49
66
  stateFor(accountId).nextVerifyError = err;
50
67
  }
68
+ /** Test helper: fetches of the account do not return until `release()`, whatever the abort signal
69
+ * says, like a provider that ignores cancellation on a dead connection. */
70
+ export function hangFetchesOf(accountId) {
71
+ const state = stateFor(accountId);
72
+ const { promise, resolve } = Promise.withResolvers();
73
+ state.hangingFetch = promise;
74
+ return {
75
+ release: () => {
76
+ state.hangingFetch = null;
77
+ resolve();
78
+ },
79
+ };
80
+ }
81
+ /** Test helper: the abort signal the last fetch of the account received. */
82
+ export function lastFetchSignalOf(accountId) {
83
+ return stateFor(accountId).lastFetchSignal;
84
+ }
51
85
  /** Test helper: every fetch reads this tenant secret first, like a real
52
86
  * provider reads its stored credentials; a missing secret is an auth error. */
53
87
  export function requireCredentialSecretOnFetch(accountId, key) {
@@ -73,6 +107,10 @@ export function emitWatchError(accountId, err) {
73
107
  export function isWatching(accountId) {
74
108
  return accounts.get(accountId)?.watch != null;
75
109
  }
110
+ /** Test helper: the trustedAuthservId of the account the last watch was started with. */
111
+ export function watchedTrustedAuthservIdOf(accountId) {
112
+ return accounts.get(accountId)?.watchedTrustedAuthservId;
113
+ }
76
114
  /** Test-Helper: kompletter State-Reset (Test-Isolation — Mock-States
77
115
  * nie zwischen Tests teilen). */
78
116
  export function resetInboundInMemory() {
@@ -96,6 +134,9 @@ export const inMemoryInboundMailPlugin = {
96
134
  },
97
135
  fetch: async (ctx, account, cursor, opts) => {
98
136
  const state = stateFor(account.id);
137
+ state.lastFetchSignal = opts.signal;
138
+ if (state.hangingFetch)
139
+ await state.hangingFetch;
99
140
  if (state.nextFetchError) {
100
141
  const err = state.nextFetchError;
101
142
  state.nextFetchError = null;
@@ -107,15 +148,29 @@ export const inMemoryInboundMailPlugin = {
107
148
  const offset = offsetOf(cursor);
108
149
  const slice = state.log.slice(offset, offset + opts.maxMessages);
109
150
  const nextOffset = offset + slice.length;
151
+ const rejected = slice.flatMap((entry) => ("rejected" in entry ? [entry.rejected] : []));
110
152
  return {
111
- messages: slice,
153
+ messages: slice.flatMap((entry) => ("message" in entry ? [entry.message] : [])),
154
+ ...(rejected.length > 0 && { rejected }),
112
155
  nextCursor: { offset: nextOffset },
113
156
  hasMore: nextOffset < state.log.length,
114
157
  };
115
158
  },
159
+ fetchContent: async (_ctx, account, providerMessageIds) => {
160
+ const state = stateFor(account.id);
161
+ state.contentFetches.push([...providerMessageIds]);
162
+ const messages = providerMessageIds.flatMap((id) => state.fullContent.get(id) ?? []);
163
+ const found = new Set(messages.map((m) => m.providerMessageId));
164
+ return {
165
+ messages,
166
+ missing: providerMessageIds.filter((id) => !found.has(id)),
167
+ rejected: [],
168
+ };
169
+ },
116
170
  watch: async (_ctx, account, handlers) => {
117
171
  const state = stateFor(account.id);
118
172
  state.watch = handlers;
173
+ state.watchedTrustedAuthservId = account.trustedAuthservId ?? null;
119
174
  return async () => {
120
175
  if (state.watch === handlers)
121
176
  state.watch = null;
@@ -1 +1 @@
1
- export { createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, INMEMORY_PROVIDER_KEY, isWatching, requireCredentialSecretOnFetch, resetInboundInMemory, seedInboundMessage, } from "./feature.ts";
1
+ export { contentFetchesOf, createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, hangFetchesOf, INMEMORY_PROVIDER_KEY, isWatching, lastFetchSignalOf, requireCredentialSecretOnFetch, resetInboundInMemory, seedInboundMessage, seedRejectedInboundMessage, setInboundFullContent, watchedTrustedAuthservIdOf, } from "./feature.ts";
@@ -1,2 +1,2 @@
1
1
  // Public API of the inbound-provider-inmemory bundled-feature.
2
- export { createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, INMEMORY_PROVIDER_KEY, isWatching, requireCredentialSecretOnFetch, resetInboundInMemory, seedInboundMessage, } from "./feature.js";
2
+ export { contentFetchesOf, createInboundProviderInMemoryFeature, emitWatchError, failNextFetchWith, failNextVerifyWith, hangFetchesOf, INMEMORY_PROVIDER_KEY, isWatching, lastFetchSignalOf, requireCredentialSecretOnFetch, resetInboundInMemory, seedInboundMessage, seedRejectedInboundMessage, setInboundFullContent, watchedTrustedAuthservIdOf, } from "./feature.js";
@@ -7,7 +7,7 @@ export declare const consumerRestartWrite: import("@cosmicdrift/kumiko-types/def
7
7
  instanceId: string;
8
8
  status: string;
9
9
  skippedEventId: string | null;
10
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
10
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
11
11
  export declare const consumerSkipWrite: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<string, z.ZodObject<{
12
12
  name: z.ZodString;
13
13
  instanceId: z.ZodString;
@@ -16,7 +16,7 @@ export declare const consumerSkipWrite: import("@cosmicdrift/kumiko-types/define
16
16
  instanceId: string;
17
17
  status: string;
18
18
  skippedEventId: string | null;
19
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
19
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
20
20
  export declare const consumerDisableWrite: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<string, z.ZodObject<{
21
21
  name: z.ZodString;
22
22
  instanceId: z.ZodString;
@@ -25,7 +25,7 @@ export declare const consumerDisableWrite: import("@cosmicdrift/kumiko-types/def
25
25
  instanceId: string;
26
26
  status: string;
27
27
  skippedEventId: string | null;
28
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
28
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
29
29
  export declare const consumerEnableWrite: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<string, z.ZodObject<{
30
30
  name: z.ZodString;
31
31
  instanceId: z.ZodString;
@@ -34,4 +34,4 @@ export declare const consumerEnableWrite: import("@cosmicdrift/kumiko-types/defi
34
34
  instanceId: string;
35
35
  status: string;
36
36
  skippedEventId: string | null;
37
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
37
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -5,4 +5,4 @@ export declare const retryWrite: import("@cosmicdrift/kumiko-types/define-handle
5
5
  jobName: string;
6
6
  bullJobId: string;
7
7
  retriedFromRunId: string;
8
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
8
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -5,4 +5,4 @@ export declare const triggerWrite: import("@cosmicdrift/kumiko-types/define-hand
5
5
  }, z.core.$strip>, {
6
6
  jobName: string;
7
7
  bullJobId: string;
8
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
8
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -12,4 +12,4 @@ export declare const setWrite: import("@cosmicdrift/kumiko-types/define-handler"
12
12
  slug: string;
13
13
  lang: string;
14
14
  isNew: boolean;
15
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
15
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -13,6 +13,7 @@ export const MANAGED_PAGES_I18N = {
13
13
  // Screen titles (global/unprefixed, screenTitleKey = screen:<id>.title)
14
14
  "screen:page-list.title": { en: "Pages" },
15
15
  "screen:page-edit.title": { en: "Edit page" },
16
+ "screen:page-edit.createTitle": { en: "New page" },
16
17
  "screen:branding-settings.title": { en: "Branding" },
17
18
  // Page-Entity Feld-Labels (managed-pages:entity:page:field:*)
18
19
  "managed-pages:entity:page:field:slug": { en: "Slug" },
@@ -17,4 +17,4 @@ export declare function createPatCreateHandler(opts?: CreatePatOptions): import(
17
17
  id: string;
18
18
  token: string;
19
19
  prefix: string;
20
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
20
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -3,4 +3,4 @@ export declare const revokePatWrite: import("@cosmicdrift/kumiko-types/define-ha
3
3
  id: z.ZodUUID;
4
4
  }, z.core.$strip>, {
5
5
  id: string;
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 runProbesWrite: import("@cosmicdrift/kumiko-types/define-ha
4
4
  }, z.core.$strip>, {
5
5
  runId: string;
6
6
  isExisting: boolean;
7
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
7
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -4,4 +4,4 @@ export declare function createDeleteHandler(access?: AccessRule): import("@cosmi
4
4
  key: z.ZodString;
5
5
  }, z.core.$strip>, {
6
6
  key: string;
7
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
7
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -8,4 +8,4 @@ export declare function createSetHandler(access?: AccessRule): import("@cosmicdr
8
8
  }, z.core.$strip>, {
9
9
  key: string;
10
10
  redactedPreview: string;
11
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
11
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -6,4 +6,4 @@ export declare const revokeAllForUserWrite: import("@cosmicdrift/kumiko-types/de
6
6
  }, z.core.$strip>, {
7
7
  count: number;
8
8
  userId: string;
9
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
9
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -1,4 +1,4 @@
1
1
  import * as z from "zod";
2
2
  export declare const revokeAllOthersWrite: import("@cosmicdrift/kumiko-types/define-handler").WriteHandlerDefinition<"user-session:revoke-all-others", z.ZodObject<{}, z.core.$strip>, {
3
3
  count: number;
4
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
4
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -3,4 +3,4 @@ export declare const revokeWrite: import("@cosmicdrift/kumiko-types/define-handl
3
3
  id: z.ZodUUID;
4
4
  }, z.core.$strip>, {
5
5
  id: string;
6
- }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined>;
6
+ }, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap, undefined, undefined>;
@@ -0,0 +1,3 @@
1
+ import * as z from "zod";
2
+ import type { PaddleRuntimes } from "./runtime.ts";
3
+ export declare function makeCheckoutConfigQuery(readCheckoutConfig: PaddleRuntimes["readCheckoutConfig"]): import("@cosmicdrift/kumiko-types/define-handler").QueryHandlerDefinition<"checkout-config", z.ZodObject<{}, z.core.$strip>, import("./runtime.ts").PaddleCheckoutConfig, import("@cosmicdrift/kumiko-types/event-type-map").KumikoEventTypeMap>;
@@ -0,0 +1,14 @@
1
+ import { defineQueryHandler } from "@cosmicdrift/kumiko-framework/engine";
2
+ import * as z from "zod";
3
+ // Anonymous on purpose: the checkout page is public. The answer is the public
4
+ // Paddle.js client token and the environment, nothing else.
5
+ export function makeCheckoutConfigQuery(readCheckoutConfig) {
6
+ return defineQueryHandler({
7
+ name: "checkout-config",
8
+ schema: z.object({}),
9
+ access: { roles: ["anonymous", "User", "TenantAdmin", "SystemAdmin"] },
10
+ rateLimit: { per: "ip+handler", limit: 60, windowSeconds: 60 },
11
+ description: "Answers the public Paddle.js client token and the Paddle environment for the checkout page; the client token is public by design and no other config leaves this handler.",
12
+ handler: async (_query, ctx) => readCheckoutConfig(ctx),
13
+ });
14
+ }
@@ -0,0 +1,6 @@
1
+ import type { PaddleCtxRuntime, PaddlePluginMethod } from "./runtime.ts";
2
+ export declare function paddleSubscriptionPath(providerSubscriptionId: string): string;
3
+ export declare function createPaddleCheckoutSession(runtime: PaddleCtxRuntime): PaddlePluginMethod<"createCheckoutSession">;
4
+ export declare function createPaddlePortalSession(runtime: PaddleCtxRuntime): PaddlePluginMethod<"createPortalSession">;
5
+ export declare function createPaddleCancelSubscription(runtime: PaddleCtxRuntime): PaddlePluginMethod<"cancelSubscription">;
6
+ export declare function createPaddleResumeSubscription(runtime: PaddleCtxRuntime): PaddlePluginMethod<"resumeSubscription">;