@openlup/platform 0.15.0 → 0.17.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 (531) hide show
  1. package/CHANGELOG.md +124 -0
  2. package/README.md +633 -6
  3. package/dist/communications/accountingDocumentDelivery.d.ts +35 -0
  4. package/dist/communications/accountingDocumentDelivery.js +33 -0
  5. package/dist/communications/authEmailError.d.ts +5 -0
  6. package/dist/communications/authEmailError.js +8 -0
  7. package/dist/communications/authEmailPorts.d.ts +2 -0
  8. package/dist/communications/authEmailPorts.js +1 -0
  9. package/dist/communications/authSendEmailHook.d.ts +35 -0
  10. package/dist/communications/authSendEmailHook.js +250 -0
  11. package/dist/communications/capturedTransactionalDelivery.d.ts +13 -0
  12. package/dist/communications/capturedTransactionalDelivery.js +14 -0
  13. package/dist/communications/communicationSync.d.ts +11 -0
  14. package/dist/communications/communicationSync.js +79 -0
  15. package/dist/communications/communicationSyncWorker.d.ts +68 -0
  16. package/dist/communications/communicationSyncWorker.js +218 -0
  17. package/dist/communications/consentPolicy.d.ts +19 -0
  18. package/dist/communications/consentPolicy.js +43 -0
  19. package/dist/communications/consentPurposeRegistry.d.ts +4 -0
  20. package/dist/communications/consentPurposeRegistry.js +24 -0
  21. package/dist/communications/contracts/abandonedCart.d.ts +27 -0
  22. package/dist/communications/contracts/abandonedCart.js +25 -0
  23. package/dist/communications/contracts/authEmail.d.ts +62 -0
  24. package/dist/communications/contracts/authEmail.js +1 -0
  25. package/dist/communications/contracts/backInStock.d.ts +28 -0
  26. package/dist/communications/contracts/backInStock.js +28 -0
  27. package/dist/communications/contracts/blocks.d.ts +24 -0
  28. package/dist/communications/contracts/blocks.js +23 -0
  29. package/dist/communications/contracts/checkoutExpired.d.ts +22 -0
  30. package/dist/communications/contracts/checkoutExpired.js +25 -0
  31. package/dist/communications/contracts/checkoutRecovery.d.ts +26 -0
  32. package/dist/communications/contracts/checkoutRecovery.js +37 -0
  33. package/dist/communications/contracts/commerceEmailContent.d.ts +176 -0
  34. package/dist/communications/contracts/commerceEmailContent.js +1 -0
  35. package/dist/communications/contracts/commerceEngagementEmailContent.d.ts +95 -0
  36. package/dist/communications/contracts/commerceEngagementEmailContent.js +1 -0
  37. package/dist/communications/contracts/consent.d.ts +12 -0
  38. package/dist/communications/contracts/consent.js +1 -0
  39. package/dist/communications/contracts/email.d.ts +182 -0
  40. package/dist/communications/contracts/email.js +1 -0
  41. package/dist/communications/contracts/guideCard.d.ts +3 -0
  42. package/dist/communications/contracts/guideCard.js +26 -0
  43. package/dist/communications/contracts/index.d.ts +51 -0
  44. package/dist/communications/contracts/index.js +42 -0
  45. package/dist/communications/contracts/inquiryContent.d.ts +32 -0
  46. package/dist/communications/contracts/inquiryContent.js +33 -0
  47. package/dist/communications/contracts/invoiceDocumentContent.d.ts +26 -0
  48. package/dist/communications/contracts/invoiceDocumentContent.js +36 -0
  49. package/dist/communications/contracts/marketingAutomation.d.ts +52 -0
  50. package/dist/communications/contracts/marketingAutomation.js +1 -0
  51. package/dist/communications/contracts/newsletter.d.ts +63 -0
  52. package/dist/communications/contracts/newsletter.js +1 -0
  53. package/dist/communications/contracts/newsletterWebhook.d.ts +26 -0
  54. package/dist/communications/contracts/newsletterWebhook.js +1 -0
  55. package/dist/communications/contracts/optOutContent.d.ts +11 -0
  56. package/dist/communications/contracts/optOutContent.js +17 -0
  57. package/dist/communications/contracts/orderCanceled.d.ts +25 -0
  58. package/dist/communications/contracts/orderCanceled.js +27 -0
  59. package/dist/communications/contracts/orderDraft.d.ts +46 -0
  60. package/dist/communications/contracts/orderDraft.js +46 -0
  61. package/dist/communications/contracts/orderPaid.d.ts +53 -0
  62. package/dist/communications/contracts/orderPaid.js +71 -0
  63. package/dist/communications/contracts/orderRefunded.d.ts +24 -0
  64. package/dist/communications/contracts/orderRefunded.js +27 -0
  65. package/dist/communications/contracts/paymentFailed.d.ts +24 -0
  66. package/dist/communications/contracts/paymentFailed.js +24 -0
  67. package/dist/communications/contracts/publicIntake.d.ts +49 -0
  68. package/dist/communications/contracts/publicIntake.js +1 -0
  69. package/dist/communications/contracts/render.d.ts +2 -0
  70. package/dist/communications/contracts/render.js +229 -0
  71. package/dist/communications/contracts/reorderReminder.d.ts +24 -0
  72. package/dist/communications/contracts/reorderReminder.js +24 -0
  73. package/dist/communications/contracts/returnEmails.d.ts +25 -0
  74. package/dist/communications/contracts/returnEmails.js +62 -0
  75. package/dist/communications/contracts/reviewEffects.d.ts +26 -0
  76. package/dist/communications/contracts/reviewEffects.js +25 -0
  77. package/dist/communications/contracts/reviewRequest.d.ts +26 -0
  78. package/dist/communications/contracts/reviewRequest.js +24 -0
  79. package/dist/communications/contracts/roleNotificationContent.d.ts +25 -0
  80. package/dist/communications/contracts/roleNotificationContent.js +46 -0
  81. package/dist/communications/contracts/shipmentDelivered.d.ts +23 -0
  82. package/dist/communications/contracts/shipmentDelivered.js +24 -0
  83. package/dist/communications/contracts/shipmentDispatched.d.ts +27 -0
  84. package/dist/communications/contracts/shipmentDispatched.js +35 -0
  85. package/dist/communications/contracts/shipmentException.d.ts +21 -0
  86. package/dist/communications/contracts/shipmentException.js +26 -0
  87. package/dist/communications/contracts/subscriptionActivationActionRequired.d.ts +17 -0
  88. package/dist/communications/contracts/subscriptionActivationActionRequired.js +22 -0
  89. package/dist/communications/contracts/subscriptionAddressChanged.d.ts +19 -0
  90. package/dist/communications/contracts/subscriptionAddressChanged.js +25 -0
  91. package/dist/communications/contracts/subscriptionCancelled.d.ts +19 -0
  92. package/dist/communications/contracts/subscriptionCancelled.js +25 -0
  93. package/dist/communications/contracts/subscriptionCycleSkipped.d.ts +25 -0
  94. package/dist/communications/contracts/subscriptionCycleSkipped.js +40 -0
  95. package/dist/communications/contracts/subscriptionDeliveryRescheduled.d.ts +25 -0
  96. package/dist/communications/contracts/subscriptionDeliveryRescheduled.js +39 -0
  97. package/dist/communications/contracts/subscriptionEmailContent.d.ts +145 -0
  98. package/dist/communications/contracts/subscriptionEmailContent.js +1 -0
  99. package/dist/communications/contracts/subscriptionPackageChanged.d.ts +20 -0
  100. package/dist/communications/contracts/subscriptionPackageChanged.js +26 -0
  101. package/dist/communications/contracts/subscriptionPauseReminder.d.ts +23 -0
  102. package/dist/communications/contracts/subscriptionPauseReminder.js +29 -0
  103. package/dist/communications/contracts/subscriptionPaused.d.ts +21 -0
  104. package/dist/communications/contracts/subscriptionPaused.js +25 -0
  105. package/dist/communications/contracts/subscriptionPaymentExpired.d.ts +34 -0
  106. package/dist/communications/contracts/subscriptionPaymentExpired.js +37 -0
  107. package/dist/communications/contracts/subscriptionPaymentFailed.d.ts +49 -0
  108. package/dist/communications/contracts/subscriptionPaymentFailed.js +56 -0
  109. package/dist/communications/contracts/subscriptionPaymentRecovered.d.ts +19 -0
  110. package/dist/communications/contracts/subscriptionPaymentRecovered.js +22 -0
  111. package/dist/communications/contracts/subscriptionRenewalAtRisk.d.ts +36 -0
  112. package/dist/communications/contracts/subscriptionRenewalAtRisk.js +36 -0
  113. package/dist/communications/contracts/subscriptionRenewalUpcoming.d.ts +49 -0
  114. package/dist/communications/contracts/subscriptionRenewalUpcoming.js +43 -0
  115. package/dist/communications/contracts/subscriptionResumed.d.ts +23 -0
  116. package/dist/communications/contracts/subscriptionResumed.js +25 -0
  117. package/dist/communications/contracts/subscriptionWelcome.d.ts +44 -0
  118. package/dist/communications/contracts/subscriptionWelcome.js +45 -0
  119. package/dist/communications/contracts/subscriptionWinback.d.ts +21 -0
  120. package/dist/communications/contracts/subscriptionWinback.js +28 -0
  121. package/dist/communications/contracts/transactionalDelivery.d.ts +42 -0
  122. package/dist/communications/contracts/transactionalDelivery.js +1 -0
  123. package/dist/communications/contracts/types.d.ts +46 -0
  124. package/dist/communications/contracts/types.js +1 -0
  125. package/dist/communications/contribution.d.ts +10 -0
  126. package/dist/communications/contribution.js +24 -0
  127. package/dist/communications/deliveryReconciliation.d.ts +64 -0
  128. package/dist/communications/deliveryReconciliation.js +60 -0
  129. package/dist/communications/emailEgress.d.ts +38 -0
  130. package/dist/communications/emailEgress.js +100 -0
  131. package/dist/communications/emailHealthAssessment.d.ts +39 -0
  132. package/dist/communications/emailHealthAssessment.js +59 -0
  133. package/dist/communications/emailHealthMetricsPort.d.ts +17 -0
  134. package/dist/communications/emailHealthMetricsPort.js +1 -0
  135. package/dist/communications/emailNotificationControl.d.ts +27 -0
  136. package/dist/communications/emailNotificationControl.js +10 -0
  137. package/dist/communications/emailObservation.d.ts +28 -0
  138. package/dist/communications/emailObservation.js +23 -0
  139. package/dist/communications/emailTransport.d.ts +82 -0
  140. package/dist/communications/emailTransport.js +95 -0
  141. package/dist/communications/errors.d.ts +15 -0
  142. package/dist/communications/errors.js +30 -0
  143. package/dist/communications/index.d.ts +46 -0
  144. package/dist/communications/index.js +38 -0
  145. package/dist/communications/integrationEventSignature.d.ts +15 -0
  146. package/dist/communications/integrationEventSignature.js +37 -0
  147. package/dist/communications/managedTransactionalDeliveryStore.d.ts +12 -0
  148. package/dist/communications/managedTransactionalDeliveryStore.js +49 -0
  149. package/dist/communications/nativeOperations.d.ts +79 -0
  150. package/dist/communications/nativeOperations.js +3 -0
  151. package/dist/communications/newsletterIntegrationContracts.d.ts +130 -0
  152. package/dist/communications/newsletterIntegrationContracts.js +128 -0
  153. package/dist/communications/newsletterWebhookPort.d.ts +11 -0
  154. package/dist/communications/newsletterWebhookPort.js +84 -0
  155. package/dist/communications/newsletterWebhookProcessing.d.ts +17 -0
  156. package/dist/communications/newsletterWebhookProcessing.js +71 -0
  157. package/dist/communications/originPolicy.d.ts +40 -0
  158. package/dist/communications/originPolicy.js +100 -0
  159. package/dist/communications/postgresCommunicationSync.d.ts +79 -0
  160. package/dist/communications/postgresCommunicationSync.js +111 -0
  161. package/dist/communications/postgresConsentEvaluator.d.ts +19 -0
  162. package/dist/communications/postgresConsentEvaluator.js +43 -0
  163. package/dist/communications/postgresDeliveryReconciliation.d.ts +3 -0
  164. package/dist/communications/postgresDeliveryReconciliation.js +113 -0
  165. package/dist/communications/postgresNativeOperations.d.ts +13 -0
  166. package/dist/communications/postgresNativeOperations.js +63 -0
  167. package/dist/communications/postgresNotificationRecipients.d.ts +37 -0
  168. package/dist/communications/postgresNotificationRecipients.js +60 -0
  169. package/dist/communications/postgresTransactionalDeliveryStore.d.ts +7 -0
  170. package/dist/communications/postgresTransactionalDeliveryStore.js +55 -0
  171. package/dist/communications/preferencesToken.d.ts +10 -0
  172. package/dist/communications/preferencesToken.js +40 -0
  173. package/dist/communications/publicPreferenceToken.d.ts +24 -0
  174. package/dist/communications/publicPreferenceToken.js +53 -0
  175. package/dist/communications/shipmentNotifications.d.ts +34 -0
  176. package/dist/communications/shipmentNotifications.js +61 -0
  177. package/dist/communications/sql.d.ts +26 -0
  178. package/dist/communications/sql.js +7 -0
  179. package/dist/communications/standardWebhooks.d.ts +14 -0
  180. package/dist/communications/standardWebhooks.js +73 -0
  181. package/dist/communications/status.d.ts +11 -0
  182. package/dist/communications/status.js +36 -0
  183. package/dist/communications/transactionalDelivery.d.ts +19 -0
  184. package/dist/communications/transactionalDelivery.js +96 -0
  185. package/dist/communications/transactionalDeliveryIdentifier.d.ts +3 -0
  186. package/dist/communications/transactionalDeliveryIdentifier.js +6 -0
  187. package/dist/communications/unsubscribeToken.d.ts +77 -0
  188. package/dist/communications/unsubscribeToken.js +150 -0
  189. package/dist/communications/validation.d.ts +2 -0
  190. package/dist/communications/validation.js +3 -0
  191. package/dist/http/index.d.ts +1 -0
  192. package/dist/http/index.js +1 -0
  193. package/dist/http/webhookSignature.d.ts +42 -0
  194. package/dist/http/webhookSignature.js +86 -0
  195. package/dist/identity/adminAuthBinding.d.ts +28 -0
  196. package/dist/identity/adminAuthBinding.js +66 -0
  197. package/dist/identity/adminAuthorization.d.ts +34 -0
  198. package/dist/identity/adminAuthorization.js +72 -0
  199. package/dist/identity/adminContracts.d.ts +70 -0
  200. package/dist/identity/adminContracts.js +43 -0
  201. package/dist/identity/adminMagicLinkHandler.d.ts +39 -0
  202. package/dist/identity/adminMagicLinkHandler.js +94 -0
  203. package/dist/identity/adminMeHandler.d.ts +15 -0
  204. package/dist/identity/adminMeHandler.js +49 -0
  205. package/dist/identity/adminPreflight.d.ts +16 -0
  206. package/dist/identity/adminPreflight.js +38 -0
  207. package/dist/identity/adminUserActionPorts.d.ts +31 -0
  208. package/dist/identity/adminUserActionPorts.js +51 -0
  209. package/dist/identity/adminUserHandlers.d.ts +38 -0
  210. package/dist/identity/adminUserHandlers.js +140 -0
  211. package/dist/identity/authVerifyUrl.d.ts +6 -0
  212. package/dist/identity/authVerifyUrl.js +54 -0
  213. package/dist/identity/contracts/contracts.d.ts +8 -0
  214. package/dist/identity/contracts/contracts.js +2 -0
  215. package/dist/identity/contracts/emailTrust.d.ts +3 -0
  216. package/dist/identity/contracts/emailTrust.js +4 -0
  217. package/dist/identity/contracts/index.d.ts +8 -0
  218. package/dist/identity/contracts/index.js +8 -0
  219. package/dist/identity/contracts/oidc.d.ts +3 -0
  220. package/dist/identity/contracts/oidc.js +9 -0
  221. package/dist/identity/contracts/operatorAuth.d.ts +35 -0
  222. package/dist/identity/contracts/operatorAuth.js +53 -0
  223. package/dist/identity/contracts/operatorInvitations.d.ts +37 -0
  224. package/dist/identity/contracts/operatorInvitations.js +1 -0
  225. package/dist/identity/contracts/ports.d.ts +22 -0
  226. package/dist/identity/contracts/ports.js +1 -0
  227. package/dist/identity/contracts/privacy.d.ts +62 -0
  228. package/dist/identity/contracts/privacy.js +99 -0
  229. package/dist/identity/contracts/providerList.d.ts +3 -0
  230. package/dist/identity/contracts/providerList.js +11 -0
  231. package/dist/identity/contracts/types.d.ts +16 -0
  232. package/dist/identity/contracts/types.js +4 -0
  233. package/dist/identity/contribution.d.ts +8 -0
  234. package/dist/identity/contribution.js +22 -0
  235. package/dist/identity/customerAuth.d.ts +8 -0
  236. package/dist/identity/customerAuth.js +1 -0
  237. package/dist/identity/customerAuthorization.d.ts +5 -0
  238. package/dist/identity/customerAuthorization.js +22 -0
  239. package/dist/identity/customerContracts.d.ts +42 -0
  240. package/dist/identity/customerContracts.js +43 -0
  241. package/dist/identity/customerIdentityBinding.d.ts +44 -0
  242. package/dist/identity/customerIdentityBinding.js +60 -0
  243. package/dist/identity/customerIdentityVerifier.d.ts +8 -0
  244. package/dist/identity/customerIdentityVerifier.js +101 -0
  245. package/dist/identity/customerMagicLinkHandler.d.ts +38 -0
  246. package/dist/identity/customerMagicLinkHandler.js +115 -0
  247. package/dist/identity/customerMeHandler.d.ts +11 -0
  248. package/dist/identity/customerMeHandler.js +46 -0
  249. package/dist/identity/customerPorts.d.ts +4 -0
  250. package/dist/identity/customerPorts.js +1 -0
  251. package/dist/identity/customerSessionBinding.d.ts +38 -0
  252. package/dist/identity/customerSessionBinding.js +80 -0
  253. package/dist/identity/customerSessionIssuer.d.ts +10 -0
  254. package/dist/identity/customerSessionIssuer.js +57 -0
  255. package/dist/identity/customerVerifyOtpHandler.d.ts +8 -0
  256. package/dist/identity/customerVerifyOtpHandler.js +41 -0
  257. package/dist/identity/directOperatorInvitationStore.d.ts +19 -0
  258. package/dist/identity/directOperatorInvitationStore.js +193 -0
  259. package/dist/identity/emailTrustPolicy.d.ts +14 -0
  260. package/dist/identity/emailTrustPolicy.js +16 -0
  261. package/dist/identity/identityPersonalDataContributor.d.ts +7 -0
  262. package/dist/identity/identityPersonalDataContributor.js +46 -0
  263. package/dist/identity/identityReadiness.d.ts +10 -0
  264. package/dist/identity/identityReadiness.js +25 -0
  265. package/dist/identity/index.d.ts +67 -0
  266. package/dist/identity/index.js +66 -0
  267. package/dist/identity/inviteAdminUserUseCase.d.ts +89 -0
  268. package/dist/identity/inviteAdminUserUseCase.js +75 -0
  269. package/dist/identity/jwtLibrary.d.ts +54 -0
  270. package/dist/identity/jwtLibrary.js +1 -0
  271. package/dist/identity/machineActorWriteFence.d.ts +4 -0
  272. package/dist/identity/machineActorWriteFence.js +13 -0
  273. package/dist/identity/magicLinkPorts.d.ts +28 -0
  274. package/dist/identity/magicLinkPorts.js +1 -0
  275. package/dist/identity/managedAccountLinkStore.d.ts +2 -0
  276. package/dist/identity/managedAccountLinkStore.js +93 -0
  277. package/dist/identity/managedAdminAuthVerifier.d.ts +7 -0
  278. package/dist/identity/managedAdminAuthVerifier.js +27 -0
  279. package/dist/identity/managedAdminUserGateways.d.ts +123 -0
  280. package/dist/identity/managedAdminUserGateways.js +127 -0
  281. package/dist/identity/managedClient.d.ts +90 -0
  282. package/dist/identity/managedClient.js +10 -0
  283. package/dist/identity/managedClientAuthLink.d.ts +3 -0
  284. package/dist/identity/managedClientAuthLink.js +115 -0
  285. package/dist/identity/managedCustomerMe.d.ts +13 -0
  286. package/dist/identity/managedCustomerMe.js +30 -0
  287. package/dist/identity/managedEmailTrustPolicy.d.ts +11 -0
  288. package/dist/identity/managedEmailTrustPolicy.js +105 -0
  289. package/dist/identity/managedIdentityVerifier.d.ts +2 -0
  290. package/dist/identity/managedIdentityVerifier.js +16 -0
  291. package/dist/identity/managedPrivacy.d.ts +4 -0
  292. package/dist/identity/managedPrivacy.js +39 -0
  293. package/dist/identity/messages.d.ts +29 -0
  294. package/dist/identity/messages.js +39 -0
  295. package/dist/identity/oidcIdentityVerifier.d.ts +45 -0
  296. package/dist/identity/oidcIdentityVerifier.js +309 -0
  297. package/dist/identity/oidcPrincipal.d.ts +2 -0
  298. package/dist/identity/oidcPrincipal.js +10 -0
  299. package/dist/identity/operatorAdminAuth.d.ts +6 -0
  300. package/dist/identity/operatorAdminAuth.js +13 -0
  301. package/dist/identity/operatorAuthHandlers.d.ts +18 -0
  302. package/dist/identity/operatorAuthHandlers.js +71 -0
  303. package/dist/identity/operatorIdentityVerifier.d.ts +8 -0
  304. package/dist/identity/operatorIdentityVerifier.js +19 -0
  305. package/dist/identity/operatorInvitationLifecycle.d.ts +7 -0
  306. package/dist/identity/operatorInvitationLifecycle.js +15 -0
  307. package/dist/identity/operatorInvitationPorts.d.ts +31 -0
  308. package/dist/identity/operatorInvitationPorts.js +1 -0
  309. package/dist/identity/operatorPorts.d.ts +37 -0
  310. package/dist/identity/operatorPorts.js +1 -0
  311. package/dist/identity/operatorSession.d.ts +13 -0
  312. package/dist/identity/operatorSession.js +31 -0
  313. package/dist/identity/operatorTokenAdminAuth.d.ts +15 -0
  314. package/dist/identity/operatorTokenAdminAuth.js +50 -0
  315. package/dist/identity/personalDataRegistry.d.ts +4 -0
  316. package/dist/identity/personalDataRegistry.js +11 -0
  317. package/dist/identity/platformAdminAuth.d.ts +15 -0
  318. package/dist/identity/platformAdminAuth.js +1 -0
  319. package/dist/identity/ports.d.ts +127 -0
  320. package/dist/identity/ports.js +38 -0
  321. package/dist/identity/postgresAccountLinkStore.d.ts +7 -0
  322. package/dist/identity/postgresAccountLinkStore.js +52 -0
  323. package/dist/identity/postgresCustomerMe.d.ts +3 -0
  324. package/dist/identity/postgresCustomerMe.js +21 -0
  325. package/dist/identity/postgresCustomerRecovery.d.ts +11 -0
  326. package/dist/identity/postgresCustomerRecovery.js +57 -0
  327. package/dist/identity/postgresOperatorIdentity.d.ts +5 -0
  328. package/dist/identity/postgresOperatorIdentity.js +137 -0
  329. package/dist/identity/postgresPrivacy.d.ts +7 -0
  330. package/dist/identity/postgresPrivacy.js +126 -0
  331. package/dist/identity/privacyHandlers.d.ts +10 -0
  332. package/dist/identity/privacyHandlers.js +35 -0
  333. package/dist/identity/privacyPorts.d.ts +72 -0
  334. package/dist/identity/privacyPorts.js +8 -0
  335. package/dist/identity/privacyUseCases.d.ts +5 -0
  336. package/dist/identity/privacyUseCases.js +55 -0
  337. package/dist/identity/reconcileAccountForPrincipal.d.ts +20 -0
  338. package/dist/identity/reconcileAccountForPrincipal.js +66 -0
  339. package/dist/identity/reconcileAccountHandler.d.ts +11 -0
  340. package/dist/identity/reconcileAccountHandler.js +30 -0
  341. package/dist/identity/removeAdminUserUseCase.d.ts +31 -0
  342. package/dist/identity/removeAdminUserUseCase.js +60 -0
  343. package/dist/identity/response.d.ts +3 -0
  344. package/dist/identity/response.js +2 -0
  345. package/dist/identity/sql.d.ts +44 -0
  346. package/dist/identity/sql.js +10 -0
  347. package/package.json +22 -2
  348. package/release-gates.json +63 -8
  349. package/sql/20260807190000_comms_outbox_rail.sql +329 -0
  350. package/sql/20260810120001_transactional_delivery_receipts.sql +209 -0
  351. package/sql/20260810180001_self_host_actor_auth.sql +40 -0
  352. package/sql/20260810204057_customer_identity_read.sql +31 -0
  353. package/sql/20260813120000_communications_control_plane.sql +568 -0
  354. package/sql/20260814090000_customer_selfservice_recovery.sql +477 -0
  355. package/sql/20260901143000_admin_membership_authority_foundation.sql +234 -0
  356. package/sql/20261018120000_identity_operator_invitations.sql +42 -0
  357. package/sql/20261018180000_identity_operator_challenges.sql +56 -0
  358. package/sql/20261018190000_identity_privacy_erasures.sql +15 -0
  359. package/sql/20261019200000_communications_native_operations.sql +68 -0
  360. package/src/communications/accountingDocumentDelivery.ts +63 -0
  361. package/src/communications/authEmailError.ts +10 -0
  362. package/src/communications/authEmailPorts.ts +2 -0
  363. package/src/communications/authSendEmailHook.ts +310 -0
  364. package/src/communications/capturedTransactionalDelivery.ts +29 -0
  365. package/src/communications/communicationSync.ts +96 -0
  366. package/src/communications/communicationSyncWorker.ts +302 -0
  367. package/src/communications/consentPolicy.ts +82 -0
  368. package/src/communications/consentPurposeRegistry.ts +31 -0
  369. package/src/communications/contracts/abandonedCart.ts +64 -0
  370. package/src/communications/contracts/authEmail.ts +73 -0
  371. package/src/communications/contracts/backInStock.ts +69 -0
  372. package/src/communications/contracts/blocks.ts +47 -0
  373. package/src/communications/contracts/checkoutExpired.ts +62 -0
  374. package/src/communications/contracts/checkoutRecovery.ts +68 -0
  375. package/src/communications/contracts/commerceEmailContent.ts +189 -0
  376. package/src/communications/contracts/commerceEngagementEmailContent.ts +106 -0
  377. package/src/communications/contracts/consent.ts +13 -0
  378. package/src/communications/contracts/email.ts +210 -0
  379. package/src/communications/contracts/guideCard.ts +34 -0
  380. package/src/communications/contracts/index.ts +51 -0
  381. package/src/communications/contracts/inquiryContent.ts +53 -0
  382. package/src/communications/contracts/invoiceDocumentContent.ts +57 -0
  383. package/src/communications/contracts/marketingAutomation.ts +45 -0
  384. package/src/communications/contracts/newsletter.ts +78 -0
  385. package/src/communications/contracts/newsletterWebhook.ts +23 -0
  386. package/src/communications/contracts/optOutContent.ts +23 -0
  387. package/src/communications/contracts/orderCanceled.ts +64 -0
  388. package/src/communications/contracts/orderDraft.ts +112 -0
  389. package/src/communications/contracts/orderPaid.ts +147 -0
  390. package/src/communications/contracts/orderRefunded.ts +63 -0
  391. package/src/communications/contracts/paymentFailed.ts +59 -0
  392. package/src/communications/contracts/publicIntake.ts +53 -0
  393. package/src/communications/contracts/render.ts +271 -0
  394. package/src/communications/contracts/reorderReminder.ts +59 -0
  395. package/src/communications/contracts/returnEmails.ts +113 -0
  396. package/src/communications/contracts/reviewEffects.ts +60 -0
  397. package/src/communications/contracts/reviewRequest.ts +59 -0
  398. package/src/communications/contracts/roleNotificationContent.ts +65 -0
  399. package/src/communications/contracts/shipmentDelivered.ts +59 -0
  400. package/src/communications/contracts/shipmentDispatched.ts +77 -0
  401. package/src/communications/contracts/shipmentException.ts +62 -0
  402. package/src/communications/contracts/subscriptionActivationActionRequired.ts +37 -0
  403. package/src/communications/contracts/subscriptionAddressChanged.ts +56 -0
  404. package/src/communications/contracts/subscriptionCancelled.ts +57 -0
  405. package/src/communications/contracts/subscriptionCycleSkipped.ts +80 -0
  406. package/src/communications/contracts/subscriptionDeliveryRescheduled.ts +79 -0
  407. package/src/communications/contracts/subscriptionEmailContent.ts +163 -0
  408. package/src/communications/contracts/subscriptionPackageChanged.ts +59 -0
  409. package/src/communications/contracts/subscriptionPauseReminder.ts +63 -0
  410. package/src/communications/contracts/subscriptionPaused.ts +58 -0
  411. package/src/communications/contracts/subscriptionPaymentExpired.ts +83 -0
  412. package/src/communications/contracts/subscriptionPaymentFailed.ts +117 -0
  413. package/src/communications/contracts/subscriptionPaymentRecovered.ts +50 -0
  414. package/src/communications/contracts/subscriptionRenewalAtRisk.ts +85 -0
  415. package/src/communications/contracts/subscriptionRenewalUpcoming.ts +103 -0
  416. package/src/communications/contracts/subscriptionResumed.ts +60 -0
  417. package/src/communications/contracts/subscriptionWelcome.ts +102 -0
  418. package/src/communications/contracts/subscriptionWinback.ts +62 -0
  419. package/src/communications/contracts/transactionalDelivery.ts +43 -0
  420. package/src/communications/contracts/types.ts +58 -0
  421. package/src/communications/contribution.ts +33 -0
  422. package/src/communications/deliveryReconciliation.ts +108 -0
  423. package/src/communications/emailEgress.ts +111 -0
  424. package/src/communications/emailHealthAssessment.ts +106 -0
  425. package/src/communications/emailHealthMetricsPort.ts +17 -0
  426. package/src/communications/emailNotificationControl.ts +28 -0
  427. package/src/communications/emailObservation.ts +43 -0
  428. package/src/communications/emailTransport.ts +167 -0
  429. package/src/communications/errors.ts +34 -0
  430. package/src/communications/index.ts +46 -0
  431. package/src/communications/integrationEventSignature.ts +49 -0
  432. package/src/communications/managedTransactionalDeliveryStore.ts +59 -0
  433. package/src/communications/nativeOperations.ts +40 -0
  434. package/src/communications/newsletterIntegrationContracts.ts +154 -0
  435. package/src/communications/newsletterWebhookPort.ts +104 -0
  436. package/src/communications/newsletterWebhookProcessing.ts +102 -0
  437. package/src/communications/originPolicy.ts +151 -0
  438. package/src/communications/postgresCommunicationSync.ts +127 -0
  439. package/src/communications/postgresConsentEvaluator.ts +49 -0
  440. package/src/communications/postgresDeliveryReconciliation.ts +101 -0
  441. package/src/communications/postgresNativeOperations.ts +55 -0
  442. package/src/communications/postgresNotificationRecipients.ts +57 -0
  443. package/src/communications/postgresTransactionalDeliveryStore.ts +79 -0
  444. package/src/communications/preferencesToken.ts +62 -0
  445. package/src/communications/publicPreferenceToken.ts +68 -0
  446. package/src/communications/shipmentNotifications.ts +78 -0
  447. package/src/communications/sql.ts +7 -0
  448. package/src/communications/standardWebhooks.ts +84 -0
  449. package/src/communications/status.ts +51 -0
  450. package/src/communications/transactionalDelivery.ts +114 -0
  451. package/src/communications/transactionalDeliveryIdentifier.ts +9 -0
  452. package/src/communications/unsubscribeToken.ts +186 -0
  453. package/src/communications/validation.ts +3 -0
  454. package/src/http/index.ts +1 -0
  455. package/src/http/webhookSignature.ts +96 -0
  456. package/src/identity/adminAuthBinding.ts +76 -0
  457. package/src/identity/adminAuthorization.ts +106 -0
  458. package/src/identity/adminContracts.ts +52 -0
  459. package/src/identity/adminMagicLinkHandler.ts +132 -0
  460. package/src/identity/adminMeHandler.ts +64 -0
  461. package/src/identity/adminPreflight.ts +46 -0
  462. package/src/identity/adminUserActionPorts.ts +78 -0
  463. package/src/identity/adminUserHandlers.ts +174 -0
  464. package/src/identity/authVerifyUrl.ts +56 -0
  465. package/src/identity/contracts/contracts.ts +15 -0
  466. package/src/identity/contracts/emailTrust.ts +5 -0
  467. package/src/identity/contracts/index.ts +8 -0
  468. package/src/identity/contracts/oidc.ts +10 -0
  469. package/src/identity/contracts/operatorAuth.ts +61 -0
  470. package/src/identity/contracts/operatorInvitations.ts +32 -0
  471. package/src/identity/contracts/ports.ts +25 -0
  472. package/src/identity/contracts/privacy.ts +86 -0
  473. package/src/identity/contracts/providerList.ts +13 -0
  474. package/src/identity/contracts/types.ts +25 -0
  475. package/src/identity/contribution.ts +29 -0
  476. package/src/identity/customerAuth.ts +3 -0
  477. package/src/identity/customerAuthorization.ts +38 -0
  478. package/src/identity/customerContracts.ts +52 -0
  479. package/src/identity/customerIdentityBinding.ts +125 -0
  480. package/src/identity/customerIdentityVerifier.ts +141 -0
  481. package/src/identity/customerMagicLinkHandler.ts +171 -0
  482. package/src/identity/customerMeHandler.ts +64 -0
  483. package/src/identity/customerPorts.ts +2 -0
  484. package/src/identity/customerSessionBinding.ts +114 -0
  485. package/src/identity/customerSessionIssuer.ts +71 -0
  486. package/src/identity/customerVerifyOtpHandler.ts +44 -0
  487. package/src/identity/directOperatorInvitationStore.ts +178 -0
  488. package/src/identity/emailTrustPolicy.ts +16 -0
  489. package/src/identity/identityPersonalDataContributor.ts +48 -0
  490. package/src/identity/identityReadiness.ts +26 -0
  491. package/src/identity/index.ts +69 -0
  492. package/src/identity/inviteAdminUserUseCase.ts +134 -0
  493. package/src/identity/jwtLibrary.ts +24 -0
  494. package/src/identity/machineActorWriteFence.ts +19 -0
  495. package/src/identity/magicLinkPorts.ts +7 -0
  496. package/src/identity/managedAccountLinkStore.ts +105 -0
  497. package/src/identity/managedAdminAuthVerifier.ts +40 -0
  498. package/src/identity/managedAdminUserGateways.ts +164 -0
  499. package/src/identity/managedClient.ts +58 -0
  500. package/src/identity/managedClientAuthLink.ts +120 -0
  501. package/src/identity/managedCustomerMe.ts +52 -0
  502. package/src/identity/managedEmailTrustPolicy.ts +90 -0
  503. package/src/identity/managedIdentityVerifier.ts +20 -0
  504. package/src/identity/managedPrivacy.ts +37 -0
  505. package/src/identity/messages.ts +41 -0
  506. package/src/identity/oidcIdentityVerifier.ts +229 -0
  507. package/src/identity/oidcPrincipal.ts +10 -0
  508. package/src/identity/operatorAdminAuth.ts +14 -0
  509. package/src/identity/operatorAuthHandlers.ts +52 -0
  510. package/src/identity/operatorIdentityVerifier.ts +19 -0
  511. package/src/identity/operatorInvitationLifecycle.ts +14 -0
  512. package/src/identity/operatorInvitationPorts.ts +11 -0
  513. package/src/identity/operatorPorts.ts +11 -0
  514. package/src/identity/operatorSession.ts +30 -0
  515. package/src/identity/operatorTokenAdminAuth.ts +79 -0
  516. package/src/identity/personalDataRegistry.ts +8 -0
  517. package/src/identity/platformAdminAuth.ts +7 -0
  518. package/src/identity/ports.ts +158 -0
  519. package/src/identity/postgresAccountLinkStore.ts +49 -0
  520. package/src/identity/postgresCustomerMe.ts +33 -0
  521. package/src/identity/postgresCustomerRecovery.ts +72 -0
  522. package/src/identity/postgresOperatorIdentity.ts +123 -0
  523. package/src/identity/postgresPrivacy.ts +117 -0
  524. package/src/identity/privacyHandlers.ts +33 -0
  525. package/src/identity/privacyPorts.ts +52 -0
  526. package/src/identity/privacyUseCases.ts +48 -0
  527. package/src/identity/reconcileAccountForPrincipal.ts +99 -0
  528. package/src/identity/reconcileAccountHandler.ts +36 -0
  529. package/src/identity/removeAdminUserUseCase.ts +85 -0
  530. package/src/identity/response.ts +3 -0
  531. package/src/identity/sql.ts +10 -0
@@ -0,0 +1,31 @@
1
+ import type { IdentityAdminActionsPort } from "./adminUserHandlers.js";
2
+ import type { runInviteAdminUserUseCase } from "./inviteAdminUserUseCase.js";
3
+ import type { runRemoveAdminUserUseCase } from "./removeAdminUserUseCase.js";
4
+ export interface AdminUserInviteErrorDetails {
5
+ identityCode?: string;
6
+ invitationId?: string;
7
+ principalId?: string;
8
+ membershipState?: "active";
9
+ role?: "admin" | "distributor";
10
+ }
11
+ type AdminUserActionRuntimeEnv = Record<string, string | undefined>;
12
+ type AdminUserInviteRunner = (request: {
13
+ accessToken: string | null;
14
+ email: string;
15
+ role: "admin" | "distributor";
16
+ }, env?: AdminUserActionRuntimeEnv) => ReturnType<typeof runInviteAdminUserUseCase>;
17
+ type AdminUserRemoveRunner = (request: {
18
+ accessToken: string | null;
19
+ userId: string;
20
+ }, env?: AdminUserActionRuntimeEnv) => ReturnType<typeof runRemoveAdminUserUseCase>;
21
+ export declare function createAdminUserInvitePort(options: {
22
+ accessToken: string | null;
23
+ env?: AdminUserActionRuntimeEnv;
24
+ runInviteAdminUser: AdminUserInviteRunner;
25
+ }): Pick<IdentityAdminActionsPort, "inviteAdminUser">;
26
+ export declare function createAdminUserRemovePort(options: {
27
+ accessToken: string | null;
28
+ env?: AdminUserActionRuntimeEnv;
29
+ runRemoveAdminUser: AdminUserRemoveRunner;
30
+ }): Pick<IdentityAdminActionsPort, "removeAdminUser">;
31
+ export {};
@@ -0,0 +1,51 @@
1
+ import { adminUserInviteResponseSchema } from "./adminContracts.js";
2
+ export function createAdminUserInvitePort(options) {
3
+ const runInviteAdminUser = options.runInviteAdminUser;
4
+ return {
5
+ async inviteAdminUser(request) {
6
+ const result = await runInviteAdminUser({
7
+ accessToken: options.accessToken,
8
+ email: request.email,
9
+ role: request.role,
10
+ }, options.env);
11
+ if (result.status < 200 || result.status >= 300) {
12
+ const details = {
13
+ identityCode: result.body.code,
14
+ ...(typeof result.body.invitationId === "string" ? { invitationId: result.body.invitationId } : {}),
15
+ ...(result.body.membershipState === "active" && typeof result.body.principalId === "string"
16
+ && (result.body.role === "admin" || result.body.role === "distributor")
17
+ ? { principalId: result.body.principalId, membershipState: "active", role: result.body.role } : {}),
18
+ };
19
+ throw Object.assign(new Error(String(result.body.error ?? `invite_admin_user_http_${result.status}`)), { bffCode: { 400: "BAD_REQUEST", 401: "UNAUTHORIZED", 403: "FORBIDDEN", 409: "CONFLICT" }[result.status] ?? "UPSTREAM_UNAVAILABLE", inviteDetails: details });
20
+ }
21
+ if (result.body.error)
22
+ throw new Error(result.body.error);
23
+ return adminUserInviteResponseSchema.parse(result.body);
24
+ },
25
+ };
26
+ }
27
+ export function createAdminUserRemovePort(options) {
28
+ const runRemoveAdminUser = options.runRemoveAdminUser;
29
+ return {
30
+ async removeAdminUser(request) {
31
+ const result = await runRemoveAdminUser({
32
+ accessToken: options.accessToken,
33
+ userId: request.userId,
34
+ }, options.env);
35
+ if (result.status < 200 || result.status >= 300) {
36
+ throw removePortError(result.status, String(result.body.error ?? `remove_admin_user_http_${result.status}`));
37
+ }
38
+ if (result.body.error)
39
+ throw new Error(result.body.error);
40
+ if (result.body.revoked !== true) {
41
+ throw new Error("admin_revoke_admin_user returned an invalid response");
42
+ }
43
+ return { revoked: true };
44
+ },
45
+ };
46
+ }
47
+ function removePortError(status, message) {
48
+ const bffCode = { 400: "BAD_REQUEST", 403: "FORBIDDEN", 409: "CONFLICT" }[status]
49
+ ?? "UPSTREAM_UNAVAILABLE";
50
+ return Object.assign(new Error(message), { bffCode });
51
+ }
@@ -0,0 +1,38 @@
1
+ import { type IdentityResponseOptions } from "./response.js";
2
+ import type { HttpRequest, HttpResponse } from "../http/index.js";
3
+ import type { PlatformAdminAuthorizationResult } from "./platformAdminAuth.js";
4
+ import type { OperatorInviteResult } from "./contracts/operatorInvitations.js";
5
+ export interface IdentityAdminActionsPort {
6
+ inviteAdminUser(request: {
7
+ email: string;
8
+ role: "admin" | "distributor";
9
+ }): Promise<OperatorInviteResult>;
10
+ removeAdminUser(request: {
11
+ userId: string;
12
+ }): Promise<{
13
+ revoked: true;
14
+ }>;
15
+ updateAdminUserRole(request: {
16
+ userId: string;
17
+ role: "admin" | "distributor";
18
+ }): Promise<{
19
+ userId: string;
20
+ role: "admin" | "distributor";
21
+ saved: true;
22
+ }>;
23
+ }
24
+ export interface AdminUserRoleUpdateDeps extends IdentityResponseOptions {
25
+ settingsPort: Pick<IdentityAdminActionsPort, "updateAdminUserRole">;
26
+ authorizeAdmin: (req: HttpRequest) => Promise<PlatformAdminAuthorizationResult>;
27
+ }
28
+ export interface AdminUserInviteDeps extends IdentityResponseOptions {
29
+ settingsPort: Pick<IdentityAdminActionsPort, "inviteAdminUser">;
30
+ authorizeAdmin: (req: HttpRequest) => Promise<PlatformAdminAuthorizationResult>;
31
+ }
32
+ export interface AdminUserRemoveDeps extends IdentityResponseOptions {
33
+ settingsPort: Pick<IdentityAdminActionsPort, "removeAdminUser">;
34
+ authorizeAdmin: (req: HttpRequest) => Promise<PlatformAdminAuthorizationResult>;
35
+ }
36
+ export declare function createAdminUserRoleUpdateHandler({ settingsPort, authorizeAdmin, responseRequestId, }: AdminUserRoleUpdateDeps): (req: HttpRequest, res: HttpResponse) => Promise<void>;
37
+ export declare function createAdminUserInviteHandler({ settingsPort, authorizeAdmin, responseRequestId, }: AdminUserInviteDeps): (req: HttpRequest, res: HttpResponse) => Promise<void>;
38
+ export declare function createAdminUserRemoveHandler({ settingsPort, authorizeAdmin, responseRequestId, }: AdminUserRemoveDeps): (req: HttpRequest, res: HttpResponse) => Promise<void>;
@@ -0,0 +1,140 @@
1
+ import { createIdentityResponder } from "./response.js";
2
+ import { adminUserRoleUpdateRequestSchema, adminUserRoleUpdateResponseSchema, adminUserInviteRequestSchema, adminUserInviteResponseSchema, adminUserRemoveRequestSchema, adminUserRemoveResponseSchema } from "./adminContracts.js";
3
+ export function createAdminUserRoleUpdateHandler({ settingsPort, authorizeAdmin, responseRequestId, }) {
4
+ const { sendBffError, sendBffSuccess, sendMethodNotAllowed } = createIdentityResponder({ responseRequestId });
5
+ return async function handler(req, res) {
6
+ if (req.method !== "POST") {
7
+ sendMethodNotAllowed(res, ["POST"]);
8
+ return;
9
+ }
10
+ let authorization;
11
+ try {
12
+ authorization = await authorizeAdmin(req);
13
+ }
14
+ catch {
15
+ sendBffError(res, "UPSTREAM_UNAVAILABLE", "Admin authorization failed");
16
+ return;
17
+ }
18
+ if (authorization.ok === false) {
19
+ sendBffError(res, authorization.code, authorization.message);
20
+ return;
21
+ }
22
+ const request = adminUserRoleUpdateRequestSchema.safeParse(req.body);
23
+ if (!request.success) {
24
+ sendBffError(res, "BAD_REQUEST", "Invalid admin user role update request", {
25
+ details: request.error.flatten(),
26
+ });
27
+ return;
28
+ }
29
+ try {
30
+ const result = await settingsPort.updateAdminUserRole(request.data);
31
+ const response = adminUserRoleUpdateResponseSchema.safeParse(result);
32
+ if (!response.success) {
33
+ sendBffError(res, "INVALID_RESPONSE", "Admin user role update returned invalid response");
34
+ return;
35
+ }
36
+ sendBffSuccess(res, response.data);
37
+ }
38
+ catch (error) {
39
+ const bffCode = error?.bffCode;
40
+ if (bffCode) {
41
+ sendBffError(res, bffCode, error.message);
42
+ return;
43
+ }
44
+ sendBffError(res, "UPSTREAM_UNAVAILABLE", "Admin user role update failed");
45
+ }
46
+ };
47
+ }
48
+ export function createAdminUserInviteHandler({ settingsPort, authorizeAdmin, responseRequestId, }) {
49
+ const { sendBffError, sendBffSuccess, sendMethodNotAllowed } = createIdentityResponder({ responseRequestId });
50
+ return async function handler(req, res) {
51
+ if (req.method !== "POST") {
52
+ sendMethodNotAllowed(res, ["POST"]);
53
+ return;
54
+ }
55
+ let authorization;
56
+ try {
57
+ authorization = await authorizeAdmin(req);
58
+ }
59
+ catch {
60
+ sendBffError(res, "UPSTREAM_UNAVAILABLE", "Admin authorization failed");
61
+ return;
62
+ }
63
+ if (authorization.ok === false) {
64
+ sendBffError(res, authorization.code, authorization.message);
65
+ return;
66
+ }
67
+ const request = adminUserInviteRequestSchema.safeParse(req.body);
68
+ if (!request.success) {
69
+ sendBffError(res, "BAD_REQUEST", "Invalid admin user invite request", {
70
+ details: request.error.flatten(),
71
+ });
72
+ return;
73
+ }
74
+ try {
75
+ const result = await settingsPort.inviteAdminUser(request.data);
76
+ const response = adminUserInviteResponseSchema.safeParse(result);
77
+ if (!response.success) {
78
+ sendBffError(res, "INVALID_RESPONSE", "Admin user invite returned invalid response");
79
+ return;
80
+ }
81
+ sendBffSuccess(res, response.data);
82
+ }
83
+ catch (error) {
84
+ const failure = error;
85
+ sendBffError(res, (failure.bffCode ?? "UPSTREAM_UNAVAILABLE"), errorMessage(error, "Admin user invite failed"), failure.inviteDetails ? { details: failure.inviteDetails } : {});
86
+ }
87
+ };
88
+ }
89
+ export function createAdminUserRemoveHandler({ settingsPort, authorizeAdmin, responseRequestId, }) {
90
+ const { sendBffError, sendBffSuccess, sendMethodNotAllowed } = createIdentityResponder({ responseRequestId });
91
+ return async function handler(req, res) {
92
+ if (req.method !== "POST") {
93
+ sendMethodNotAllowed(res, ["POST"]);
94
+ return;
95
+ }
96
+ let authorization;
97
+ try {
98
+ authorization = await authorizeAdmin(req);
99
+ }
100
+ catch {
101
+ sendBffError(res, "UPSTREAM_UNAVAILABLE", "Admin authorization failed");
102
+ return;
103
+ }
104
+ if (authorization.ok === false) {
105
+ sendBffError(res, authorization.code, authorization.message);
106
+ return;
107
+ }
108
+ const request = adminUserRemoveRequestSchema.safeParse(req.body);
109
+ if (!request.success) {
110
+ sendBffError(res, "BAD_REQUEST", "Invalid admin user remove request", {
111
+ details: request.error.flatten(),
112
+ });
113
+ return;
114
+ }
115
+ try {
116
+ const result = await settingsPort.removeAdminUser(request.data);
117
+ const response = adminUserRemoveResponseSchema.safeParse(result);
118
+ if (!response.success) {
119
+ sendBffError(res, "INVALID_RESPONSE", "Admin user remove returned invalid response");
120
+ return;
121
+ }
122
+ sendBffSuccess(res, response.data);
123
+ }
124
+ catch (error) {
125
+ sendMutationError(res, error, "Admin user revoke failed", responseRequestId);
126
+ }
127
+ };
128
+ }
129
+ function errorMessage(error, fallback) {
130
+ return error instanceof Error && error.message ? error.message : fallback;
131
+ }
132
+ function sendMutationError(res, error, fallback, responseRequestId) {
133
+ const { sendBffError } = createIdentityResponder({ responseRequestId });
134
+ const bffCode = error?.bffCode;
135
+ if (bffCode) {
136
+ sendBffError(res, bffCode, errorMessage(error, fallback));
137
+ return;
138
+ }
139
+ sendBffError(res, "UPSTREAM_UNAVAILABLE", errorMessage(error, fallback));
140
+ }
@@ -0,0 +1,6 @@
1
+ import type { HttpRequest } from "../http/index.js";
2
+ export declare function buildAuthVerifyUrl(authServiceUrl: string, actionType: string, tokenHash: string, redirectTo: string): string;
3
+ /** Only configured HTTP(S) origins authorize the default magic-link destination. */
4
+ export declare function createMagicLinkOriginResolver(configuredOrigins: readonly string[]): (req: HttpRequest) => string | null;
5
+ /** Invalid return targets use the callback's default landing page. */
6
+ export declare function normalizeMagicLinkReturnPath(value: string | undefined, origin: string): string | undefined;
@@ -0,0 +1,54 @@
1
+ function authVerifyType(actionType) {
2
+ return actionType === "email_change_current" || actionType === "email_change_new"
3
+ ? "email_change"
4
+ : actionType;
5
+ }
6
+ function qpSafeTokenValue(token) {
7
+ if (token.length === 0)
8
+ return token;
9
+ return `%${token.charCodeAt(0).toString(16).toUpperCase().padStart(2, "0")}${encodeURIComponent(token.slice(1))}`;
10
+ }
11
+ export function buildAuthVerifyUrl(authServiceUrl, actionType, tokenHash, redirectTo) {
12
+ const params = new URLSearchParams({ type: authVerifyType(actionType), redirect_to: redirectTo });
13
+ return `${authServiceUrl.replace(/\/+$/, "")}/auth/v1/verify?token=${qpSafeTokenValue(tokenHash)}&${params.toString()}`;
14
+ }
15
+ /** Only configured HTTP(S) origins authorize the default magic-link destination. */
16
+ export function createMagicLinkOriginResolver(configuredOrigins) {
17
+ const origins = configuredOrigins.map(normalizeOrigin);
18
+ const origin = origins.length > 0 && origins.every((value) => value !== null)
19
+ ? (origins[0] ?? null)
20
+ : null;
21
+ return () => origin;
22
+ }
23
+ function normalizeOrigin(value) {
24
+ const candidate = value.trim();
25
+ // URL parsing alone accepts paths, credentials and repaired backslashes.
26
+ if (!/^https?:\/\/[^/?#\\\s]+\/?$/i.test(candidate))
27
+ return null;
28
+ try {
29
+ const url = new URL(candidate);
30
+ if (url.username || url.password || url.pathname !== "/" || url.search || url.hash)
31
+ return null;
32
+ return url.origin;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ /** Invalid return targets use the callback's default landing page. */
39
+ export function normalizeMagicLinkReturnPath(value, origin) {
40
+ if (!value || !value.startsWith("/") || value.startsWith("//"))
41
+ return undefined;
42
+ // Reject encoded separators, controls and nested escapes before any later decoding.
43
+ if (value.includes("\\") || Array.from(value).some((character) => character.charCodeAt(0) <= 0x20 || character.charCodeAt(0) === 0x7f) || /%(?:2f|5c|0[0-9a-f]|1[0-9a-f]|7f|25)/i.test(value))
44
+ return undefined;
45
+ try {
46
+ const url = new URL(value, origin);
47
+ if (url.origin !== new URL(origin).origin || url.pathname.startsWith("//"))
48
+ return undefined;
49
+ return `${url.pathname}${url.search}${url.hash}`;
50
+ }
51
+ catch {
52
+ return undefined;
53
+ }
54
+ }
@@ -0,0 +1,8 @@
1
+ import type { EmailTrustFailureCode } from "./emailTrust.js";
2
+ export declare const AUTH_RECONCILE_CONTRACT_VERSION: "auth.reconcile.v1";
3
+ export interface AuthReconcileResponse {
4
+ accountId: string;
5
+ created: boolean;
6
+ linked: boolean;
7
+ }
8
+ export type AuthReconcileErrorCode = EmailTrustFailureCode | "NO_VERIFIED_EMAIL" | "RESERVED_PRINCIPAL_REFUSED" | "ACCOUNT_LINK_CONFLICT" | "EMAIL_OWNED_BY_OTHER_PRINCIPAL" | "PRINCIPAL_EMAIL_MISMATCH";
@@ -0,0 +1,2 @@
1
+ export const AUTH_RECONCILE_CONTRACT_VERSION = "auth.reconcile.v1";
2
+ // Runtime schemas remain in reference composition until the validator boundary is resolved.
@@ -0,0 +1,3 @@
1
+ /** Browser-safe email-association refusal codes. */
2
+ export declare const EMAIL_TRUST_FAILURE_CODES: readonly ["EMAIL_TRUST_ENVELOPE_REFUSED", "EMAIL_TRUST_SETTINGS_UNAVAILABLE"];
3
+ export type EmailTrustFailureCode = typeof EMAIL_TRUST_FAILURE_CODES[number];
@@ -0,0 +1,4 @@
1
+ /** Browser-safe email-association refusal codes. */
2
+ export const EMAIL_TRUST_FAILURE_CODES = [
3
+ "EMAIL_TRUST_ENVELOPE_REFUSED", "EMAIL_TRUST_SETTINGS_UNAVAILABLE",
4
+ ];
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./ports.js";
3
+ export * from "./providerList.js";
4
+ export * from "./contracts.js";
5
+ export * from "./emailTrust.js";
6
+ export * from "./operatorInvitations.js";
7
+ export * from "./operatorAuth.js";
8
+ export * from "./privacy.js";
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./ports.js";
3
+ export * from "./providerList.js";
4
+ export * from "./contracts.js";
5
+ export * from "./emailTrust.js";
6
+ export * from "./operatorInvitations.js";
7
+ export * from "./operatorAuth.js";
8
+ export * from "./privacy.js";
@@ -0,0 +1,3 @@
1
+ /** Credential and dependency refusals; no token or transport details are exposed. */
2
+ export declare const OIDC_FAILURE_CODES: readonly ["OIDC_CONFIGURATION_INVALID", "OIDC_DISCOVERY_UNAVAILABLE", "OIDC_DISCOVERY_INVALID", "OIDC_JWKS_UNAVAILABLE", "OIDC_JWKS_INVALID", "OIDC_JWKS_REFRESH_RATE_LIMITED", "OIDC_JWT_LIBRARY_UNAVAILABLE", "OIDC_TOKEN_INVALID", "OIDC_KID_UNKNOWN", "OIDC_ISSUER_MISMATCH", "OIDC_AUDIENCE_MISMATCH", "OIDC_TOKEN_EXPIRED", "OIDC_TOKEN_NOT_ACTIVE", "OIDC_TOKEN_LIFETIME_INVALID", "OIDC_SUBJECT_INVALID", "OIDC_EMAIL_INVALID", "OIDC_EMAIL_UNVERIFIED", "OIDC_NATIVE_SESSION_REQUIRED"];
3
+ export type OidcFailureCode = typeof OIDC_FAILURE_CODES[number];
@@ -0,0 +1,9 @@
1
+ /** Credential and dependency refusals; no token or transport details are exposed. */
2
+ export const OIDC_FAILURE_CODES = [
3
+ "OIDC_CONFIGURATION_INVALID", "OIDC_DISCOVERY_UNAVAILABLE", "OIDC_DISCOVERY_INVALID",
4
+ "OIDC_JWKS_UNAVAILABLE", "OIDC_JWKS_INVALID", "OIDC_JWKS_REFRESH_RATE_LIMITED",
5
+ "OIDC_JWT_LIBRARY_UNAVAILABLE", "OIDC_TOKEN_INVALID", "OIDC_KID_UNKNOWN",
6
+ "OIDC_ISSUER_MISMATCH", "OIDC_AUDIENCE_MISMATCH", "OIDC_TOKEN_EXPIRED",
7
+ "OIDC_TOKEN_NOT_ACTIVE", "OIDC_TOKEN_LIFETIME_INVALID", "OIDC_SUBJECT_INVALID",
8
+ "OIDC_EMAIL_INVALID", "OIDC_EMAIL_UNVERIFIED", "OIDC_NATIVE_SESSION_REQUIRED",
9
+ ];
@@ -0,0 +1,35 @@
1
+ export interface OperatorSession {
2
+ accessToken: string;
3
+ expiresAt: string;
4
+ user: {
5
+ id: string;
6
+ email: string;
7
+ };
8
+ }
9
+ export interface OperatorChallengeRequest {
10
+ email: string;
11
+ }
12
+ export interface OperatorChallengeVerification {
13
+ token: string;
14
+ }
15
+ export interface OperatorBrowserAuthPort {
16
+ getSession(): Promise<OperatorSession | null>;
17
+ requestChallenge(email: string): Promise<void>;
18
+ verifyChallenge(token: string): Promise<OperatorSession>;
19
+ signOut(): Promise<void>;
20
+ onAuthStateChange(listener: (session: OperatorSession | null) => void): () => void;
21
+ }
22
+ /** Strict parsers keep the contracts entry independent of the server validator. */
23
+ export interface OperatorSchema<T> {
24
+ parse(value: unknown): T;
25
+ safeParse(value: unknown): {
26
+ success: true;
27
+ data: T;
28
+ } | {
29
+ success: false;
30
+ error: Error;
31
+ };
32
+ }
33
+ export declare const operatorChallengeRequestSchema: OperatorSchema<OperatorChallengeRequest>;
34
+ export declare const operatorChallengeVerificationSchema: OperatorSchema<OperatorChallengeVerification>;
35
+ export declare const operatorSessionSchema: OperatorSchema<OperatorSession>;
@@ -0,0 +1,53 @@
1
+ function schema(parse) {
2
+ return { parse, safeParse(value) {
3
+ try {
4
+ return { success: true, data: parse(value) };
5
+ }
6
+ catch {
7
+ return { success: false, error: new Error("operator_contract_invalid") };
8
+ }
9
+ } };
10
+ }
11
+ function fields(value, keys) {
12
+ if (!value || typeof value !== "object" || Array.isArray(value)
13
+ || Object.keys(value).length !== keys.length || !keys.every(key => Object.hasOwn(value, key)))
14
+ throw new Error("operator_contract_invalid");
15
+ return value;
16
+ }
17
+ function email(value) {
18
+ if (typeof value !== "string" || value.length > 320 || !/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)+$/i.test(value))
19
+ throw new Error("operator_email_invalid");
20
+ return value;
21
+ }
22
+ export const operatorChallengeRequestSchema = schema(value => {
23
+ const row = fields(value, ["email"]);
24
+ if (typeof row.email !== "string")
25
+ throw new Error("operator_email_invalid");
26
+ return { email: email(row.email.trim().toLowerCase()) };
27
+ });
28
+ export const operatorChallengeVerificationSchema = schema(value => {
29
+ const row = fields(value, ["token"]);
30
+ if (typeof row.token !== "string" || !/^[A-Za-z0-9_-]{43}$/.test(row.token))
31
+ throw new Error("operator_token_invalid");
32
+ return { token: row.token };
33
+ });
34
+ function timestamp(value) {
35
+ if (typeof value !== "string")
36
+ return false;
37
+ const parts = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(?:\.\d+)?(?:Z|[+-]\d\d:\d\d)$/.exec(value);
38
+ if (!parts || !Number.isFinite(Date.parse(value)))
39
+ return false;
40
+ const [, year, month, day, hour, minute, second] = parts.map(Number);
41
+ return year >= 1970 && month >= 1 && month <= 12 && day >= 1
42
+ && day <= new Date(Date.UTC(year, month, 0)).getUTCDate()
43
+ && hour <= 23 && minute <= 59 && second <= 59;
44
+ }
45
+ export const operatorSessionSchema = schema(value => {
46
+ const row = fields(value, ["accessToken", "expiresAt", "user"]);
47
+ const user = fields(row.user, ["id", "email"]);
48
+ if (typeof row.accessToken !== "string" || !row.accessToken || row.accessToken.length > 8192
49
+ || !timestamp(row.expiresAt)
50
+ || typeof user.id !== "string" || !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(user.id))
51
+ throw new Error("operator_session_invalid");
52
+ return { accessToken: row.accessToken, expiresAt: row.expiresAt, user: { id: user.id, email: email(user.email) } };
53
+ });
@@ -0,0 +1,37 @@
1
+ /** Pending invitations confer no authority; only accepted native memberships do. */
2
+ export type OperatorRole = "admin" | "distributor";
3
+ export type OperatorMembershipState = "invited" | "active" | "expired" | "revoked";
4
+ export type OperatorInvitationOutcome = "INVITATION_CREATED" | "ALREADY_INVITED" | "INVITATION_REISSUED";
5
+ export type OperatorInvitationConflict = "MEMBERSHIP_ALREADY_ACTIVE" | "INVITATION_ROLE_CONFLICT" | "IDENTITY_CONFLICT" | "MANAGED_REINVITE_UNSUPPORTED";
6
+ export interface OperatorInvitation {
7
+ principalId: string;
8
+ invitationId: string;
9
+ membershipState: "invited";
10
+ role: OperatorRole;
11
+ invitedAt: string;
12
+ expiresAt: string;
13
+ }
14
+ export interface OperatorInvitationResult extends OperatorInvitation {
15
+ code: OperatorInvitationOutcome;
16
+ message?: string;
17
+ }
18
+ export interface OperatorMembershipSnapshot {
19
+ principalId: string;
20
+ membershipState: OperatorMembershipState;
21
+ role: OperatorRole;
22
+ }
23
+ export type OperatorInvitationAcceptance = {
24
+ code: "ACTIVATED" | "ALREADY_ACTIVE";
25
+ role: OperatorRole;
26
+ } | {
27
+ code: "INVITATION_EXPIRED" | "INVITATION_REVOKED" | "NO_INVITATION";
28
+ };
29
+ /** Managed invitations activate membership immediately; no pending attempt is stored. */
30
+ export interface ManagedOperatorMembershipResult {
31
+ principalId: string;
32
+ membershipState: "active";
33
+ role: OperatorRole;
34
+ code: "MEMBERSHIP_CREATED" | "ALREADY_ACTIVE";
35
+ message?: string;
36
+ }
37
+ export type OperatorInviteResult = OperatorInvitationResult | ManagedOperatorMembershipResult;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { AuthActionResult, AuthSession, AuthStateListener, OAuthProviderKind, Unsubscribe } from "./types.js";
2
+ export interface CustomerAuthPort {
3
+ getSession(): Promise<AuthSession | null>;
4
+ onAuthStateChange(listener: AuthStateListener): Unsubscribe;
5
+ signInWithOtp(input: {
6
+ email: string;
7
+ locale: string;
8
+ }): Promise<AuthActionResult>;
9
+ verifyOtpCode(input: {
10
+ email: string;
11
+ token: string;
12
+ }): Promise<AuthActionResult>;
13
+ signInWithOAuth(input: {
14
+ provider: OAuthProviderKind;
15
+ redirectTo: string;
16
+ }): Promise<AuthActionResult>;
17
+ linkIdentity(input: {
18
+ provider: OAuthProviderKind;
19
+ redirectTo: string;
20
+ }): Promise<AuthActionResult>;
21
+ signOut(): Promise<void>;
22
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,62 @@
1
+ import type { OperatorSchema } from "./operatorAuth.js";
2
+ export type PrivacySubjectRef = {
3
+ kind: "contact";
4
+ contactId: string;
5
+ } | {
6
+ kind: "principal";
7
+ principalId: string;
8
+ };
9
+ export type PrivacyJson = null | boolean | number | string | PrivacyJson[] | {
10
+ [key: string]: PrivacyJson;
11
+ };
12
+ export interface PersonalDataObligation {
13
+ owner: string;
14
+ resource: string;
15
+ disposition: "erase" | "retain" | "unresolved";
16
+ reasonCode: string;
17
+ remote: boolean;
18
+ }
19
+ export interface PersonalDataDocument {
20
+ contributorId: string;
21
+ version: string;
22
+ data: PrivacyJson;
23
+ coverage: {
24
+ complete: boolean;
25
+ included: string[];
26
+ unavailable: string[];
27
+ };
28
+ obligations: PersonalDataObligation[];
29
+ }
30
+ export interface ErasureReceipt {
31
+ version: "identity.erasure.v1";
32
+ erasureId: string;
33
+ completedAt: string;
34
+ outcome: "ERASED" | "ALREADY_ERASED";
35
+ obligations: PersonalDataObligation[];
36
+ }
37
+ export interface PrivacyEraseRequest {
38
+ subject: PrivacySubjectRef;
39
+ idempotencyKey: string;
40
+ }
41
+ export interface PrivacyExport {
42
+ format: "personal-data.v1";
43
+ generatedAt: string;
44
+ subject: PrivacySubjectRef;
45
+ documents: PersonalDataDocument[];
46
+ missingContributors: string[];
47
+ erasure: ErasureReceipt | null;
48
+ }
49
+ export declare const privacySubjectSchema: OperatorSchema<PrivacySubjectRef>;
50
+ export declare const personalDataObligationSchema: OperatorSchema<PersonalDataObligation>;
51
+ export declare const personalDataDocumentSchema: OperatorSchema<PersonalDataDocument>;
52
+ export declare const erasureReceiptSchema: OperatorSchema<ErasureReceipt>;
53
+ export declare const privacyExportRequestSchema: OperatorSchema<{
54
+ subject: PrivacySubjectRef;
55
+ }>;
56
+ export declare const privacyEraseRequestSchema: OperatorSchema<PrivacyEraseRequest>;
57
+ export declare const privacyExportResponseSchema: OperatorSchema<PrivacyExport>;
58
+ export declare const privacyEraseResponseSchema: OperatorSchema<ErasureReceipt>;
59
+ declare const refusalCodes: readonly ["PRIVACY_SUBJECT_NOT_FOUND", "PRIVACY_CONTRIBUTOR_DUPLICATE", "PRIVACY_CONTRIBUTOR_MISSING", "PRIVACY_ASSESSMENT_UNAVAILABLE", "PRIVACY_OWNERSHIP_UNDECLARED", "PRIVACY_ACTIVE_SUBSCRIPTION", "PRIVACY_RESUMABLE_SUBSCRIPTION", "PRIVACY_PROTECTED_OPERATOR", "PRIVACY_IDEMPOTENCY_CONFLICT", "PRIVACY_SUBJECT_ERASED", "PRIVACY_STORE_PRIVILEGES_UNSAFE", "MANAGED_PRIVACY_ERASURE_UNAVAILABLE"];
60
+ export type PrivacyRefusalCode = typeof refusalCodes[number];
61
+ export declare const privacyRefusalCodeSchema: OperatorSchema<PrivacyRefusalCode>;
62
+ export {};