@stytch/react 20.0.0-next.5 → 20.0.0-next.6

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 (312) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -1
  3. package/dist/cjs/adminPortal/index.cjs +2 -2
  4. package/dist/cjs/b2b/index.cjs +10 -7
  5. package/dist/cjs/b2b/index.cjs.map +1 -1
  6. package/dist/cjs/b2b/index.headless.cjs +456 -496
  7. package/dist/cjs/b2b/index.headless.cjs.map +1 -1
  8. package/dist/cjs/{idpHelpers-Bj_7pbfW.js → idpHelpers-UZaYQqT8.js} +111 -129
  9. package/dist/cjs/{idpHelpers-Bj_7pbfW.js.map → idpHelpers-UZaYQqT8.js.map} +1 -1
  10. package/dist/cjs/{index-BIjXBvf_.js → index-MDH3lelI.js} +2 -2
  11. package/dist/cjs/{index-BIjXBvf_.js.map → index-MDH3lelI.js.map} +1 -1
  12. package/dist/cjs/index.cjs +18 -14
  13. package/dist/cjs/index.cjs.map +1 -1
  14. package/dist/cjs/index.headless.cjs +401 -448
  15. package/dist/cjs/index.headless.cjs.map +1 -1
  16. package/dist/cjs/{passwordManagerDisableAutofillProps-DV31RTL_.js → passwordManagerDisableAutofillProps-BzR1GTDj.js} +42 -33
  17. package/dist/cjs/passwordManagerDisableAutofillProps-BzR1GTDj.js.map +1 -0
  18. package/dist/cjs/{shadcn-aVU6Lm9q.js → shadcn-BNtf3uZr.js} +7 -6
  19. package/dist/cjs/shadcn-BNtf3uZr.js.map +1 -0
  20. package/dist/cjs-dev/adminPortal/index.cjs +2 -2
  21. package/dist/cjs-dev/b2b/index.cjs +10 -7
  22. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  23. package/dist/cjs-dev/b2b/index.headless.cjs +468 -508
  24. package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
  25. package/dist/cjs-dev/dev-DaCGDI6V.js.map +1 -1
  26. package/dist/cjs-dev/{idpHelpers-DOYYSxsX.js → idpHelpers-CVk39K69.js} +111 -129
  27. package/dist/cjs-dev/{idpHelpers-DOYYSxsX.js.map → idpHelpers-CVk39K69.js.map} +1 -1
  28. package/dist/cjs-dev/{index-rquGmIlv.js → index-BDTK8QN0.js} +2 -2
  29. package/dist/cjs-dev/{index-rquGmIlv.js.map → index-BDTK8QN0.js.map} +1 -1
  30. package/dist/cjs-dev/index.cjs +18 -14
  31. package/dist/cjs-dev/index.cjs.map +1 -1
  32. package/dist/cjs-dev/index.headless.cjs +405 -452
  33. package/dist/cjs-dev/index.headless.cjs.map +1 -1
  34. package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CgiK2M_U.js → passwordManagerDisableAutofillProps--FLcEDiY.js} +42 -33
  35. package/dist/cjs-dev/passwordManagerDisableAutofillProps--FLcEDiY.js.map +1 -0
  36. package/dist/cjs-dev/{shadcn-DMk6ZSoD.js → shadcn-CvmoCuzj.js} +9 -8
  37. package/dist/cjs-dev/shadcn-CvmoCuzj.js.map +1 -0
  38. package/dist/esm/_virtual/index3.mjs +3 -5
  39. package/dist/esm/_virtual/index3.mjs.map +1 -1
  40. package/dist/esm/_virtual/index4.mjs +5 -3
  41. package/dist/esm/_virtual/index4.mjs.map +1 -1
  42. package/dist/esm/node_modules/@lingui/react/dist/index.mjs +14 -13
  43. package/dist/esm/node_modules/@lingui/react/dist/index.mjs.map +1 -1
  44. package/dist/esm/node_modules/@lingui/react/dist/shared/{react.31c3b5fa.mjs → react.8970326b.mjs} +32 -23
  45. package/dist/esm/node_modules/@lingui/react/dist/shared/react.8970326b.mjs.map +1 -0
  46. package/dist/esm/packages/core/src/DFPProtectedAuthProvider.mjs +39 -43
  47. package/dist/esm/packages/core/src/DFPProtectedAuthProvider.mjs.map +1 -1
  48. package/dist/esm/packages/core/src/EventLogger.mjs.map +1 -1
  49. package/dist/esm/packages/core/src/HeadlessClients/HeadlessCryptoWalletClient.mjs.map +1 -1
  50. package/dist/esm/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs +15 -18
  51. package/dist/esm/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs.map +1 -1
  52. package/dist/esm/packages/core/src/HeadlessClients/HeadlessImpersonationClient.mjs.map +1 -1
  53. package/dist/esm/packages/core/src/HeadlessClients/HeadlessMagicLinkClient.mjs.map +1 -1
  54. package/dist/esm/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs +58 -77
  55. package/dist/esm/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs.map +1 -1
  56. package/dist/esm/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs +100 -103
  57. package/dist/esm/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs.map +1 -1
  58. package/dist/esm/packages/core/src/HeadlessClients/HeadlessPasswordClient.mjs.map +1 -1
  59. package/dist/esm/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs +6 -8
  60. package/dist/esm/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs.map +1 -1
  61. package/dist/esm/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs +77 -82
  62. package/dist/esm/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs.map +1 -1
  63. package/dist/esm/packages/core/src/HeadlessClients/HeadlessTOTPClient.mjs.map +1 -1
  64. package/dist/esm/packages/core/src/HeadlessClients/HeadlessUserClient.mjs +111 -125
  65. package/dist/esm/packages/core/src/HeadlessClients/HeadlessUserClient.mjs.map +1 -1
  66. package/dist/esm/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs +10 -11
  67. package/dist/esm/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs.map +1 -1
  68. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BDiscoveryClient.mjs.map +1 -1
  69. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs +16 -19
  70. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs.map +1 -1
  71. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BImpersonationClient.mjs.map +1 -1
  72. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BMagicLinkClient.mjs.map +1 -1
  73. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
  74. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOTPsClient.mjs.map +1 -1
  75. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs +142 -153
  76. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs.map +1 -1
  77. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BPasswordsClient.mjs.map +1 -1
  78. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs +7 -9
  79. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs.map +1 -1
  80. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BRecoveryCodesClient.mjs.map +1 -1
  81. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSCIMClient.mjs.map +1 -1
  82. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs +67 -70
  83. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs.map +1 -1
  84. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs +81 -93
  85. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs.map +1 -1
  86. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs +67 -73
  87. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs.map +1 -1
  88. package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BTOTPsClient.mjs.map +1 -1
  89. package/dist/esm/packages/core/src/NetworkClient.mjs.map +1 -1
  90. package/dist/esm/packages/core/src/SearchManager.mjs.map +1 -1
  91. package/dist/esm/packages/core/src/SessionManager.mjs +28 -31
  92. package/dist/esm/packages/core/src/SessionManager.mjs.map +1 -1
  93. package/dist/esm/packages/core/src/StateChangeClient.mjs +5 -6
  94. package/dist/esm/packages/core/src/StateChangeClient.mjs.map +1 -1
  95. package/dist/esm/packages/core/src/public/SDKErrors.mjs.map +1 -1
  96. package/dist/esm/packages/core/src/rbac.mjs.map +1 -1
  97. package/dist/esm/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  98. package/dist/esm/packages/web/src/BootstrapDataManager.mjs.map +1 -1
  99. package/dist/esm/packages/web/src/CaptchaProvider.mjs +10 -11
  100. package/dist/esm/packages/web/src/CaptchaProvider.mjs.map +1 -1
  101. package/dist/esm/packages/web/src/ClientsideServicesProvider.mjs +4 -8
  102. package/dist/esm/packages/web/src/ClientsideServicesProvider.mjs.map +1 -1
  103. package/dist/esm/packages/web/src/HeadlessOAuthClient.mjs +24 -24
  104. package/dist/esm/packages/web/src/HeadlessOAuthClient.mjs.map +1 -1
  105. package/dist/esm/packages/web/src/NetworkClient.mjs +4 -5
  106. package/dist/esm/packages/web/src/NetworkClient.mjs.map +1 -1
  107. package/dist/esm/packages/web/src/PKCEManager.mjs.map +1 -1
  108. package/dist/esm/packages/web/src/StytchClient.mjs.map +1 -1
  109. package/dist/esm/packages/web/src/SubscriptionService.mjs +8 -10
  110. package/dist/esm/packages/web/src/SubscriptionService.mjs.map +1 -1
  111. package/dist/esm/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  112. package/dist/esm/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs +48 -48
  113. package/dist/esm/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
  114. package/dist/esm/packages/web/src/b2b/StytchB2BClient.mjs.map +1 -1
  115. package/dist/esm/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs +27 -30
  116. package/dist/esm/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs.map +1 -1
  117. package/dist/esm/packages/web/src/oneTap/GoogleOneTapClient.mjs.map +1 -1
  118. package/dist/esm/packages/web/src/oneTap/OneTapProvider.mjs +12 -14
  119. package/dist/esm/packages/web/src/oneTap/OneTapProvider.mjs.map +1 -1
  120. package/dist/esm/packages/web/src/ui/b2b/App.mjs +3 -1
  121. package/dist/esm/packages/web/src/ui/b2b/App.mjs.map +1 -1
  122. package/dist/esm/packages/web/src/ui/b2b/InternalAppContainer.mjs +1 -1
  123. package/dist/esm/packages/web/src/ui/b2b/InternalAppContainer.mjs.map +1 -1
  124. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEnrollScreen.mjs.map +1 -1
  125. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
  126. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  127. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs +3 -1
  128. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  129. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
  130. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  131. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
  132. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  133. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +4 -2
  134. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs.map +1 -1
  135. package/dist/esm/packages/web/src/ui/b2c/screens/Main/index.mjs +2 -1
  136. package/dist/esm/packages/web/src/ui/b2c/screens/Main/index.mjs.map +1 -1
  137. package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs +2 -1
  138. package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  139. package/dist/esm/packages/web/src/ui/components/mixins/Root.module.css.mjs +1 -1
  140. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +1 -1
  141. package/dist/esm/packages/web/src/ui/hooks/usePromptPasskey.mjs +3 -3
  142. package/dist/esm/packages/web/src/ui/hooks/usePromptPasskey.mjs.map +1 -1
  143. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs +2 -2
  144. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  145. package/dist/esm/packages/web/src/ui/react/bindings/createB2CComponent.mjs +2 -2
  146. package/dist/esm/packages/web/src/ui/react/bindings/createB2CComponent.mjs.map +1 -1
  147. package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
  148. package/dist/esm-dev/_virtual/index.mjs +3 -5
  149. package/dist/esm-dev/_virtual/index.mjs.map +1 -1
  150. package/dist/esm-dev/_virtual/index2.mjs +5 -3
  151. package/dist/esm-dev/_virtual/index2.mjs.map +1 -1
  152. package/dist/esm-dev/_virtual/index3.mjs +5 -3
  153. package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
  154. package/dist/esm-dev/_virtual/index4.mjs +3 -5
  155. package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
  156. package/dist/esm-dev/node_modules/@lingui/react/dist/index.mjs +14 -13
  157. package/dist/esm-dev/node_modules/@lingui/react/dist/index.mjs.map +1 -1
  158. package/dist/esm-dev/node_modules/@lingui/react/dist/shared/{react.31c3b5fa.mjs → react.8970326b.mjs} +32 -23
  159. package/dist/esm-dev/node_modules/@lingui/react/dist/shared/react.8970326b.mjs.map +1 -0
  160. package/dist/esm-dev/node_modules/swr/core/dist/index.mjs +1 -1
  161. package/dist/esm-dev/node_modules/swr/infinite/dist/index.mjs +1 -1
  162. package/dist/esm-dev/packages/core/src/DFPProtectedAuthProvider.mjs +39 -43
  163. package/dist/esm-dev/packages/core/src/DFPProtectedAuthProvider.mjs.map +1 -1
  164. package/dist/esm-dev/packages/core/src/EventLogger.mjs.map +1 -1
  165. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessCryptoWalletClient.mjs.map +1 -1
  166. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs +15 -18
  167. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs.map +1 -1
  168. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessImpersonationClient.mjs.map +1 -1
  169. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessMagicLinkClient.mjs.map +1 -1
  170. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs +58 -77
  171. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs.map +1 -1
  172. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs +100 -103
  173. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs.map +1 -1
  174. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessPasswordClient.mjs.map +1 -1
  175. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs +6 -8
  176. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs.map +1 -1
  177. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs +77 -82
  178. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs.map +1 -1
  179. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessTOTPClient.mjs.map +1 -1
  180. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessUserClient.mjs +114 -128
  181. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessUserClient.mjs.map +1 -1
  182. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs +10 -11
  183. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs.map +1 -1
  184. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BDiscoveryClient.mjs.map +1 -1
  185. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs +16 -19
  186. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs.map +1 -1
  187. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BImpersonationClient.mjs.map +1 -1
  188. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BMagicLinkClient.mjs.map +1 -1
  189. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
  190. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOTPsClient.mjs.map +1 -1
  191. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs +144 -155
  192. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs.map +1 -1
  193. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BPasswordsClient.mjs.map +1 -1
  194. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs +7 -9
  195. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs.map +1 -1
  196. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRecoveryCodesClient.mjs.map +1 -1
  197. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSCIMClient.mjs.map +1 -1
  198. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs +67 -70
  199. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs.map +1 -1
  200. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs +88 -100
  201. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs.map +1 -1
  202. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs +70 -76
  203. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs.map +1 -1
  204. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BTOTPsClient.mjs.map +1 -1
  205. package/dist/esm-dev/packages/core/src/NetworkClient.mjs.map +1 -1
  206. package/dist/esm-dev/packages/core/src/SearchManager.mjs.map +1 -1
  207. package/dist/esm-dev/packages/core/src/SessionManager.mjs +28 -31
  208. package/dist/esm-dev/packages/core/src/SessionManager.mjs.map +1 -1
  209. package/dist/esm-dev/packages/core/src/StateChangeClient.mjs +5 -6
  210. package/dist/esm-dev/packages/core/src/StateChangeClient.mjs.map +1 -1
  211. package/dist/esm-dev/packages/core/src/public/SDKErrors.mjs.map +1 -1
  212. package/dist/esm-dev/packages/core/src/rbac.mjs.map +1 -1
  213. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  214. package/dist/esm-dev/packages/web/src/BootstrapDataManager.mjs.map +1 -1
  215. package/dist/esm-dev/packages/web/src/CaptchaProvider.mjs +10 -11
  216. package/dist/esm-dev/packages/web/src/CaptchaProvider.mjs.map +1 -1
  217. package/dist/esm-dev/packages/web/src/ClientsideServicesProvider.mjs +4 -8
  218. package/dist/esm-dev/packages/web/src/ClientsideServicesProvider.mjs.map +1 -1
  219. package/dist/esm-dev/packages/web/src/HeadlessOAuthClient.mjs +24 -24
  220. package/dist/esm-dev/packages/web/src/HeadlessOAuthClient.mjs.map +1 -1
  221. package/dist/esm-dev/packages/web/src/NetworkClient.mjs +4 -5
  222. package/dist/esm-dev/packages/web/src/NetworkClient.mjs.map +1 -1
  223. package/dist/esm-dev/packages/web/src/PKCEManager.mjs.map +1 -1
  224. package/dist/esm-dev/packages/web/src/StytchClient.mjs.map +1 -1
  225. package/dist/esm-dev/packages/web/src/SubscriptionService.mjs +8 -10
  226. package/dist/esm-dev/packages/web/src/SubscriptionService.mjs.map +1 -1
  227. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AuthManagementSection.mjs +1 -1
  228. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/useMemberActivation.mjs +1 -1
  229. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionDangerZoneSection.mjs +1 -1
  230. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionTokenRotationSection.mjs +1 -1
  231. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMNewConnectionScreen.mjs +1 -1
  232. package/dist/esm-dev/packages/web/src/adminPortal/sso/SSONewConnectionScreen.mjs +1 -1
  233. package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  234. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateMember.mjs +1 -1
  235. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateOrganization.mjs +1 -1
  236. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateScimConnection.mjs +1 -1
  237. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateSsoConnection.mjs +1 -1
  238. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRevalidateConnectionList.mjs +1 -1
  239. package/dist/esm-dev/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs +48 -48
  240. package/dist/esm-dev/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
  241. package/dist/esm-dev/packages/web/src/b2b/StytchB2BClient.mjs.map +1 -1
  242. package/dist/esm-dev/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs +27 -30
  243. package/dist/esm-dev/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs.map +1 -1
  244. package/dist/esm-dev/packages/web/src/oneTap/GoogleOneTapClient.mjs.map +1 -1
  245. package/dist/esm-dev/packages/web/src/oneTap/OneTapProvider.mjs +12 -14
  246. package/dist/esm-dev/packages/web/src/oneTap/OneTapProvider.mjs.map +1 -1
  247. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs +3 -1
  248. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs.map +1 -1
  249. package/dist/esm-dev/packages/web/src/ui/b2b/Container.mjs +1 -1
  250. package/dist/esm-dev/packages/web/src/ui/b2b/InternalAppContainer.mjs +1 -1
  251. package/dist/esm-dev/packages/web/src/ui/b2b/InternalAppContainer.mjs.map +1 -1
  252. package/dist/esm-dev/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  253. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEnrollScreen.mjs.map +1 -1
  254. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
  255. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  256. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs +3 -1
  257. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  258. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
  259. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  260. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
  261. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  262. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +5 -3
  263. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs.map +1 -1
  264. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  265. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/index.mjs +2 -1
  266. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/index.mjs.map +1 -1
  267. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  268. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs +2 -1
  269. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  270. package/dist/esm-dev/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  271. package/dist/esm-dev/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  272. package/dist/esm-dev/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  273. package/dist/esm-dev/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  274. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  275. package/dist/esm-dev/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  276. package/dist/esm-dev/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  277. package/dist/esm-dev/packages/web/src/ui/components/mixins/Root.module.css.mjs +1 -1
  278. package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  279. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +1 -1
  280. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +1 -1
  281. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +1 -1
  282. package/dist/esm-dev/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  283. package/dist/esm-dev/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  284. package/dist/esm-dev/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  285. package/dist/esm-dev/packages/web/src/ui/components/organisms/OneTapError.mjs +2 -2
  286. package/dist/esm-dev/packages/web/src/ui/components/organisms/OneTapError.mjs.map +1 -1
  287. package/dist/esm-dev/packages/web/src/ui/hooks/usePromptPasskey.mjs +3 -3
  288. package/dist/esm-dev/packages/web/src/ui/hooks/usePromptPasskey.mjs.map +1 -1
  289. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs +2 -2
  290. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  291. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2CComponent.mjs +2 -2
  292. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2CComponent.mjs.map +1 -1
  293. package/dist/esm-dev/packages/web/src/utils/crypto.mjs +1 -1
  294. package/dist/types/{PresentationConfig-B2jX85oV.d.ts → PresentationConfig-CdAymT0c.d.ts} +5 -0
  295. package/dist/types/{StytchB2BClient-D16e_lp1.d.ts → StytchB2BClient-DYF9xGAB.d.ts} +1 -1
  296. package/dist/types/{StytchClient-BwQdJzdj.d.ts → StytchClient-IyY7-cpI.d.ts} +1 -1
  297. package/dist/types/adminPortal/index.d.ts +3 -3
  298. package/dist/types/b2b/index.d.ts +7 -7
  299. package/dist/types/b2b/index.headless.d.ts +2 -2
  300. package/dist/types/compat.d.ts +1 -1
  301. package/dist/types/{createAuthUrlHandler-R1kNNQD_.d.ts → createAuthUrlHandler-CFZ0DGWC.d.ts} +6 -2
  302. package/dist/types/index.d.ts +7 -7
  303. package/dist/types/index.headless.d.ts +2 -2
  304. package/dist/types/{shadcn-CGdmyIUF.d.ts → shadcn-USiNERNw.d.ts} +4 -4
  305. package/messages/en.po +3 -3
  306. package/package.json +1 -1
  307. package/dist/cjs/passwordManagerDisableAutofillProps-DV31RTL_.js.map +0 -1
  308. package/dist/cjs/shadcn-aVU6Lm9q.js.map +0 -1
  309. package/dist/cjs-dev/passwordManagerDisableAutofillProps-CgiK2M_U.js.map +0 -1
  310. package/dist/cjs-dev/shadcn-DMk6ZSoD.js.map +0 -1
  311. package/dist/esm/node_modules/@lingui/react/dist/shared/react.31c3b5fa.mjs.map +0 -1
  312. package/dist/esm-dev/node_modules/@lingui/react/dist/shared/react.31c3b5fa.mjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { omitUser, isTestPublicToken } from '../utils/index.mjs';
2
2
  import { validateInDev } from '../utils/dev.mjs';
3
- import { OAuthProviders } from '../public/ui.mjs';
4
3
  import { logger } from '../utils/logger.mjs';
4
+ import { OAuthProviders } from '../public/ui.mjs';
5
5
 
6
6
  let HeadlessOAuthClient$1 = class HeadlessOAuthClient {
7
7
  _networkClient;
@@ -16,63 +16,6 @@ let HeadlessOAuthClient$1 = class HeadlessOAuthClient {
16
16
  this._pkceManager = _pkceManager;
17
17
  this._dynamicConfig = _dynamicConfig;
18
18
  this._config = _config;
19
- this.google = {
20
- start: this.startOAuthFlow(OAuthProviders.Google)
21
- };
22
- this.apple = {
23
- start: this.startOAuthFlow(OAuthProviders.Apple)
24
- };
25
- this.microsoft = {
26
- start: this.startOAuthFlow(OAuthProviders.Microsoft)
27
- };
28
- this.github = {
29
- start: this.startOAuthFlow(OAuthProviders.Github)
30
- };
31
- this.gitlab = {
32
- start: this.startOAuthFlow(OAuthProviders.GitLab)
33
- };
34
- this.facebook = {
35
- start: this.startOAuthFlow(OAuthProviders.Facebook)
36
- };
37
- this.discord = {
38
- start: this.startOAuthFlow(OAuthProviders.Discord)
39
- };
40
- this.salesforce = {
41
- start: this.startOAuthFlow(OAuthProviders.Salesforce)
42
- };
43
- this.slack = {
44
- start: this.startOAuthFlow(OAuthProviders.Slack)
45
- };
46
- this.amazon = {
47
- start: this.startOAuthFlow(OAuthProviders.Amazon)
48
- };
49
- this.bitbucket = {
50
- start: this.startOAuthFlow(OAuthProviders.Bitbucket)
51
- };
52
- this.linkedin = {
53
- start: this.startOAuthFlow(OAuthProviders.LinkedIn)
54
- };
55
- this.coinbase = {
56
- start: this.startOAuthFlow(OAuthProviders.Coinbase)
57
- };
58
- this.twitch = {
59
- start: this.startOAuthFlow(OAuthProviders.Twitch)
60
- };
61
- this.twitter = {
62
- start: this.startOAuthFlow(OAuthProviders.Twitter)
63
- };
64
- this.tiktok = {
65
- start: this.startOAuthFlow(OAuthProviders.TikTok)
66
- };
67
- this.snapchat = {
68
- start: this.startOAuthFlow(OAuthProviders.Snapchat)
69
- };
70
- this.figma = {
71
- start: this.startOAuthFlow(OAuthProviders.Figma)
72
- };
73
- this.yahoo = {
74
- start: this.startOAuthFlow(OAuthProviders.Yahoo)
75
- };
76
19
  this.authenticate = this._subscriptionService.withUpdateSession(async (token, options)=>{
77
20
  validateInDev('stytch.oauth.authenticate', {
78
21
  token,
@@ -98,25 +41,63 @@ let HeadlessOAuthClient$1 = class HeadlessOAuthClient {
98
41
  return omitUser(resp);
99
42
  });
100
43
  }
101
- google;
102
- apple;
103
- microsoft;
104
- github;
105
- gitlab;
106
- facebook;
107
- discord;
108
- salesforce;
109
- slack;
110
- amazon;
111
- bitbucket;
112
- linkedin;
113
- coinbase;
114
- twitch;
115
- twitter;
116
- tiktok;
117
- snapchat;
118
- figma;
119
- yahoo;
44
+ google = {
45
+ start: this.startOAuthFlow(OAuthProviders.Google)
46
+ };
47
+ apple = {
48
+ start: this.startOAuthFlow(OAuthProviders.Apple)
49
+ };
50
+ microsoft = {
51
+ start: this.startOAuthFlow(OAuthProviders.Microsoft)
52
+ };
53
+ github = {
54
+ start: this.startOAuthFlow(OAuthProviders.Github)
55
+ };
56
+ gitlab = {
57
+ start: this.startOAuthFlow(OAuthProviders.GitLab)
58
+ };
59
+ facebook = {
60
+ start: this.startOAuthFlow(OAuthProviders.Facebook)
61
+ };
62
+ discord = {
63
+ start: this.startOAuthFlow(OAuthProviders.Discord)
64
+ };
65
+ salesforce = {
66
+ start: this.startOAuthFlow(OAuthProviders.Salesforce)
67
+ };
68
+ slack = {
69
+ start: this.startOAuthFlow(OAuthProviders.Slack)
70
+ };
71
+ amazon = {
72
+ start: this.startOAuthFlow(OAuthProviders.Amazon)
73
+ };
74
+ bitbucket = {
75
+ start: this.startOAuthFlow(OAuthProviders.Bitbucket)
76
+ };
77
+ linkedin = {
78
+ start: this.startOAuthFlow(OAuthProviders.LinkedIn)
79
+ };
80
+ coinbase = {
81
+ start: this.startOAuthFlow(OAuthProviders.Coinbase)
82
+ };
83
+ twitch = {
84
+ start: this.startOAuthFlow(OAuthProviders.Twitch)
85
+ };
86
+ twitter = {
87
+ start: this.startOAuthFlow(OAuthProviders.Twitter)
88
+ };
89
+ tiktok = {
90
+ start: this.startOAuthFlow(OAuthProviders.TikTok)
91
+ };
92
+ snapchat = {
93
+ start: this.startOAuthFlow(OAuthProviders.Snapchat)
94
+ };
95
+ figma = {
96
+ start: this.startOAuthFlow(OAuthProviders.Figma)
97
+ };
98
+ yahoo = {
99
+ start: this.startOAuthFlow(OAuthProviders.Yahoo)
100
+ };
120
101
  async attach(provider) {
121
102
  validateInDev('stytch.oauth.attach', {
122
103
  provider
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessOAuthClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOAuthClient.ts"],"sourcesContent":["import {\n IHeadlessOAuthClient,\n OAuthAttachResponse,\n OAuthAuthenticateOptions,\n OAuthAuthenticateResponse,\n OAuthGetURLOptions,\n OAuthProviders,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { INetworkClient, IPKCEManager, IConsumerSubscriptionService } from '..';\nimport { WithUser, omitUser, logger, isTestPublicToken } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n cnameDomain: null | string;\n pkceRequiredForOAuth: boolean;\n}>;\ntype Config = {\n publicToken: string;\n testAPIURL: string;\n liveAPIURL: string;\n};\n\nexport class HeadlessOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOAuthClient<TProjectConfiguration>\n{\n authenticate: (\n token: string,\n options: OAuthAuthenticateOptions,\n ) => Promise<OAuthAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _dynamicConfig: DynamicConfig,\n private _config: Config,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: OAuthAuthenticateOptions) => {\n validateInDev(\n 'stytch.oauth.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n const keyPair = await this._pkceManager.getPKPair();\n\n if (!keyPair) {\n logger.warn(\n 'No code verifier found in local storage for OAuth flow.\\n' +\n 'Consider using stytch.oauth.$provider.start() to add PKCE to your OAuth flows for added security.\\n' +\n 'See https://stytch.com/docs/oauth#guides_pkce for more information.',\n );\n }\n\n const resp = await this._networkClient.fetchSDK<WithUser<OAuthAuthenticateResponse<TProjectConfiguration>>>({\n url: '/oauth/authenticate',\n method: 'POST',\n body: {\n token,\n code_verifier: keyPair?.code_verifier,\n ...options,\n },\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n }\n\n google = {\n start: this.startOAuthFlow(OAuthProviders.Google),\n };\n\n apple = {\n start: this.startOAuthFlow(OAuthProviders.Apple),\n };\n\n microsoft = {\n start: this.startOAuthFlow(OAuthProviders.Microsoft),\n };\n\n github = {\n start: this.startOAuthFlow(OAuthProviders.Github),\n };\n\n gitlab = {\n start: this.startOAuthFlow(OAuthProviders.GitLab),\n };\n\n facebook = {\n start: this.startOAuthFlow(OAuthProviders.Facebook),\n };\n\n discord = {\n start: this.startOAuthFlow(OAuthProviders.Discord),\n };\n\n salesforce = {\n start: this.startOAuthFlow(OAuthProviders.Salesforce),\n };\n\n slack = {\n start: this.startOAuthFlow(OAuthProviders.Slack),\n };\n\n amazon = {\n start: this.startOAuthFlow(OAuthProviders.Amazon),\n };\n\n bitbucket = {\n start: this.startOAuthFlow(OAuthProviders.Bitbucket),\n };\n\n linkedin = {\n start: this.startOAuthFlow(OAuthProviders.LinkedIn),\n };\n\n coinbase = {\n start: this.startOAuthFlow(OAuthProviders.Coinbase),\n };\n\n twitch = {\n start: this.startOAuthFlow(OAuthProviders.Twitch),\n };\n\n twitter = {\n start: this.startOAuthFlow(OAuthProviders.Twitter),\n };\n\n tiktok = {\n start: this.startOAuthFlow(OAuthProviders.TikTok),\n };\n\n snapchat = {\n start: this.startOAuthFlow(OAuthProviders.Snapchat),\n };\n\n figma = {\n start: this.startOAuthFlow(OAuthProviders.Figma),\n };\n\n yahoo = {\n start: this.startOAuthFlow(OAuthProviders.Yahoo),\n };\n\n async attach(provider: string): Promise<OAuthAttachResponse> {\n validateInDev('stytch.oauth.attach', { provider }, { provider: 'string' });\n return await this._networkClient.fetchSDK<OAuthAttachResponse>({\n url: '/oauth/attach',\n method: 'POST',\n body: { provider },\n });\n }\n\n private async getBaseApiUrl() {\n const { cnameDomain } = await this._dynamicConfig;\n if (cnameDomain) {\n // The API returns cname domains without a protocol - assume HTTPS\n return `https://${cnameDomain}`;\n }\n // Our TestAPIURL and LiveAPIURL should have the HTTPS protocol already attached\n // Don't add it twice!\n if (isTestPublicToken(this._config.publicToken)) {\n return this._config.testAPIURL;\n }\n return this._config.liveAPIURL;\n }\n\n private startOAuthFlow(providerType: OAuthProviders) {\n return async ({\n login_redirect_url,\n signup_redirect_url,\n custom_scopes,\n provider_params,\n oauth_attach_token,\n }: OAuthGetURLOptions = {}): Promise<void> => {\n const { cnameDomain, pkceRequiredForOAuth } = await this._dynamicConfig;\n const baseURL = await this.getBaseApiUrl();\n\n this._networkClient.logEvent({\n name: 'start_oauth_flow',\n details: {\n provider_type: providerType,\n custom_scopes,\n cname_domain: cnameDomain,\n pkce: pkceRequiredForOAuth,\n provider_params,\n },\n });\n\n const oauthUrl = new URL(`${baseURL}/v1/public/oauth/${providerType}/start`);\n oauthUrl.searchParams.set('public_token', this._config.publicToken);\n\n if (pkceRequiredForOAuth) {\n const keyPair = await this._pkceManager.startPKCETransaction();\n oauthUrl.searchParams.set('code_challenge', keyPair.code_challenge);\n } else {\n this._pkceManager.clearPKPair();\n }\n\n if (custom_scopes) {\n validateInDev(\n 'startOAuthFlow',\n { custom_scopes },\n {\n custom_scopes: 'stringArray',\n },\n );\n oauthUrl.searchParams.set('custom_scopes', custom_scopes.join(' '));\n }\n if (provider_params) {\n validateInDev(\n 'startOAuthFlow',\n { provider_params },\n {\n provider_params: 'optionalObject',\n },\n );\n for (const key in provider_params) {\n oauthUrl.searchParams.set('provider_' + key, provider_params[key]);\n }\n }\n if (login_redirect_url) oauthUrl.searchParams.set('login_redirect_url', login_redirect_url);\n if (signup_redirect_url) oauthUrl.searchParams.set('signup_redirect_url', signup_redirect_url);\n if (oauth_attach_token) oauthUrl.searchParams.set('oauth_attach_token', oauth_attach_token);\n\n this.navigate(oauthUrl);\n };\n }\n\n // Public so it can be mocked in tests\n navigate(url: URL) {\n window.location.href = url.toString();\n }\n}\n"],"names":["HeadlessOAuthClient","authenticate","constructor","_subscriptionService","_pkceManager","_config","_networkClient","_dynamicConfig","google","start","startOAuthFlow","OAuthProviders","Google","apple","Apple","microsoft","Microsoft","github","Github","gitlab","GitLab","facebook","Facebook","discord","Discord","salesforce","Salesforce","slack","Slack","amazon","Amazon","bitbucket","Bitbucket","linkedin","LinkedIn","coinbase","Coinbase","twitch","Twitch","twitter","Twitter","tiktok","TikTok","snapchat","Snapchat","figma","Figma","yahoo","Yahoo","withUpdateSession","token","options","validateInDev","session_duration_minutes","keyPair","getPKPair","logger","warn","resp","fetchSDK","url","method","body","code_verifier","clearPKPair","omitUser","attach","provider","getBaseApiUrl","cnameDomain","isTestPublicToken","publicToken","testAPIURL","liveAPIURL","providerType","login_redirect_url","signup_redirect_url","custom_scopes","provider_params","oauth_attach_token","pkceRequiredForOAuth","baseURL","logEvent","name","details","provider_type","cname_domain","pkce","oauthUrl","URL","searchParams","set","startPKCETransaction","code_challenge","join","key","navigate","window","location","href","toString"],"mappings":"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"}
1
+ {"version":3,"file":"HeadlessOAuthClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOAuthClient.ts"],"sourcesContent":["import {\n IHeadlessOAuthClient,\n OAuthAttachResponse,\n OAuthAuthenticateOptions,\n OAuthAuthenticateResponse,\n OAuthGetURLOptions,\n OAuthProviders,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { INetworkClient, IPKCEManager, IConsumerSubscriptionService } from '..';\nimport { WithUser, omitUser, logger, isTestPublicToken } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n cnameDomain: null | string;\n pkceRequiredForOAuth: boolean;\n}>;\ntype Config = {\n publicToken: string;\n testAPIURL: string;\n liveAPIURL: string;\n};\n\nexport class HeadlessOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOAuthClient<TProjectConfiguration>\n{\n authenticate: (\n token: string,\n options: OAuthAuthenticateOptions,\n ) => Promise<OAuthAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _dynamicConfig: DynamicConfig,\n private _config: Config,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: OAuthAuthenticateOptions) => {\n validateInDev(\n 'stytch.oauth.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n const keyPair = await this._pkceManager.getPKPair();\n\n if (!keyPair) {\n logger.warn(\n 'No code verifier found in local storage for OAuth flow.\\n' +\n 'Consider using stytch.oauth.$provider.start() to add PKCE to your OAuth flows for added security.\\n' +\n 'See https://stytch.com/docs/oauth#guides_pkce for more information.',\n );\n }\n\n const resp = await this._networkClient.fetchSDK<WithUser<OAuthAuthenticateResponse<TProjectConfiguration>>>({\n url: '/oauth/authenticate',\n method: 'POST',\n body: {\n token,\n code_verifier: keyPair?.code_verifier,\n ...options,\n },\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n }\n\n google = {\n start: this.startOAuthFlow(OAuthProviders.Google),\n };\n\n apple = {\n start: this.startOAuthFlow(OAuthProviders.Apple),\n };\n\n microsoft = {\n start: this.startOAuthFlow(OAuthProviders.Microsoft),\n };\n\n github = {\n start: this.startOAuthFlow(OAuthProviders.Github),\n };\n\n gitlab = {\n start: this.startOAuthFlow(OAuthProviders.GitLab),\n };\n\n facebook = {\n start: this.startOAuthFlow(OAuthProviders.Facebook),\n };\n\n discord = {\n start: this.startOAuthFlow(OAuthProviders.Discord),\n };\n\n salesforce = {\n start: this.startOAuthFlow(OAuthProviders.Salesforce),\n };\n\n slack = {\n start: this.startOAuthFlow(OAuthProviders.Slack),\n };\n\n amazon = {\n start: this.startOAuthFlow(OAuthProviders.Amazon),\n };\n\n bitbucket = {\n start: this.startOAuthFlow(OAuthProviders.Bitbucket),\n };\n\n linkedin = {\n start: this.startOAuthFlow(OAuthProviders.LinkedIn),\n };\n\n coinbase = {\n start: this.startOAuthFlow(OAuthProviders.Coinbase),\n };\n\n twitch = {\n start: this.startOAuthFlow(OAuthProviders.Twitch),\n };\n\n twitter = {\n start: this.startOAuthFlow(OAuthProviders.Twitter),\n };\n\n tiktok = {\n start: this.startOAuthFlow(OAuthProviders.TikTok),\n };\n\n snapchat = {\n start: this.startOAuthFlow(OAuthProviders.Snapchat),\n };\n\n figma = {\n start: this.startOAuthFlow(OAuthProviders.Figma),\n };\n\n yahoo = {\n start: this.startOAuthFlow(OAuthProviders.Yahoo),\n };\n\n async attach(provider: string): Promise<OAuthAttachResponse> {\n validateInDev('stytch.oauth.attach', { provider }, { provider: 'string' });\n return await this._networkClient.fetchSDK<OAuthAttachResponse>({\n url: '/oauth/attach',\n method: 'POST',\n body: { provider },\n });\n }\n\n private async getBaseApiUrl() {\n const { cnameDomain } = await this._dynamicConfig;\n if (cnameDomain) {\n // The API returns cname domains without a protocol - assume HTTPS\n return `https://${cnameDomain}`;\n }\n // Our TestAPIURL and LiveAPIURL should have the HTTPS protocol already attached\n // Don't add it twice!\n if (isTestPublicToken(this._config.publicToken)) {\n return this._config.testAPIURL;\n }\n return this._config.liveAPIURL;\n }\n\n private startOAuthFlow(providerType: OAuthProviders) {\n return async ({\n login_redirect_url,\n signup_redirect_url,\n custom_scopes,\n provider_params,\n oauth_attach_token,\n }: OAuthGetURLOptions = {}): Promise<void> => {\n const { cnameDomain, pkceRequiredForOAuth } = await this._dynamicConfig;\n const baseURL = await this.getBaseApiUrl();\n\n this._networkClient.logEvent({\n name: 'start_oauth_flow',\n details: {\n provider_type: providerType,\n custom_scopes,\n cname_domain: cnameDomain,\n pkce: pkceRequiredForOAuth,\n provider_params,\n },\n });\n\n const oauthUrl = new URL(`${baseURL}/v1/public/oauth/${providerType}/start`);\n oauthUrl.searchParams.set('public_token', this._config.publicToken);\n\n if (pkceRequiredForOAuth) {\n const keyPair = await this._pkceManager.startPKCETransaction();\n oauthUrl.searchParams.set('code_challenge', keyPair.code_challenge);\n } else {\n this._pkceManager.clearPKPair();\n }\n\n if (custom_scopes) {\n validateInDev(\n 'startOAuthFlow',\n { custom_scopes },\n {\n custom_scopes: 'stringArray',\n },\n );\n oauthUrl.searchParams.set('custom_scopes', custom_scopes.join(' '));\n }\n if (provider_params) {\n validateInDev(\n 'startOAuthFlow',\n { provider_params },\n {\n provider_params: 'optionalObject',\n },\n );\n for (const key in provider_params) {\n oauthUrl.searchParams.set('provider_' + key, provider_params[key]);\n }\n }\n if (login_redirect_url) oauthUrl.searchParams.set('login_redirect_url', login_redirect_url);\n if (signup_redirect_url) oauthUrl.searchParams.set('signup_redirect_url', signup_redirect_url);\n if (oauth_attach_token) oauthUrl.searchParams.set('oauth_attach_token', oauth_attach_token);\n\n this.navigate(oauthUrl);\n };\n }\n\n // Public so it can be mocked in tests\n navigate(url: URL) {\n window.location.href = url.toString();\n }\n}\n"],"names":["HeadlessOAuthClient","authenticate","_subscriptionService","_pkceManager","_config","_networkClient","_dynamicConfig","withUpdateSession","token","options","validateInDev","session_duration_minutes","keyPair","getPKPair","logger","warn","resp","fetchSDK","url","method","body","code_verifier","clearPKPair","omitUser","google","start","startOAuthFlow","OAuthProviders","Google","apple","Apple","microsoft","Microsoft","github","Github","gitlab","GitLab","facebook","Facebook","discord","Discord","salesforce","Salesforce","slack","Slack","amazon","Amazon","bitbucket","Bitbucket","linkedin","LinkedIn","coinbase","Coinbase","twitch","Twitch","twitter","Twitter","tiktok","TikTok","snapchat","Snapchat","figma","Figma","yahoo","Yahoo","attach","provider","getBaseApiUrl","cnameDomain","isTestPublicToken","publicToken","testAPIURL","liveAPIURL","providerType","login_redirect_url","signup_redirect_url","custom_scopes","provider_params","oauth_attach_token","pkceRequiredForOAuth","baseURL","logEvent","name","details","provider_type","cname_domain","pkce","oauthUrl","URL","searchParams","set","startPKCETransaction","code_challenge","join","key","navigate","window","location","href","toString"],"mappings":"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"}
@@ -12,106 +12,6 @@ class HeadlessOTPClient {
12
12
  this._subscriptionService = _subscriptionService;
13
13
  this.executeRecaptcha = executeRecaptcha;
14
14
  this.dfpProtectedAuth = dfpProtectedAuth;
15
- this.sms = {
16
- loginOrCreate: async (phone_number, options)=>{
17
- const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
18
- const requestBody = {
19
- ...options,
20
- phone_number,
21
- captcha_token,
22
- dfp_telemetry_id
23
- };
24
- return this._networkClient.retriableFetchSDK({
25
- url: '/otps/sms/login_or_create',
26
- body: requestBody,
27
- method: 'POST',
28
- retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
29
- });
30
- },
31
- send: async (phone_number, options)=>{
32
- const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
33
- const requestBody = {
34
- ...options,
35
- phone_number,
36
- captcha_token,
37
- dfp_telemetry_id
38
- };
39
- const isLoggedIn = !!this._subscriptionService.getSession();
40
- const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';
41
- return this._networkClient.retriableFetchSDK({
42
- url: endpoint,
43
- body: requestBody,
44
- method: 'POST',
45
- retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
46
- });
47
- }
48
- };
49
- this.whatsapp = {
50
- loginOrCreate: async (phone_number, options)=>{
51
- const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
52
- const requestBody = {
53
- ...options,
54
- phone_number,
55
- dfp_telemetry_id,
56
- captcha_token
57
- };
58
- return this._networkClient.retriableFetchSDK({
59
- url: '/otps/whatsapp/login_or_create',
60
- body: requestBody,
61
- method: 'POST',
62
- retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
63
- });
64
- },
65
- send: async (phone_number, options)=>{
66
- const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
67
- const requestBody = {
68
- ...options,
69
- phone_number,
70
- captcha_token,
71
- dfp_telemetry_id
72
- };
73
- const isLoggedIn = !!this._subscriptionService.getSession();
74
- const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';
75
- return this._networkClient.retriableFetchSDK({
76
- url: endpoint,
77
- body: requestBody,
78
- method: 'POST',
79
- retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
80
- });
81
- }
82
- };
83
- this.email = {
84
- loginOrCreate: async (email, options)=>{
85
- const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
86
- const requestBody = {
87
- ...options,
88
- email,
89
- captcha_token,
90
- dfp_telemetry_id
91
- };
92
- return this._networkClient.retriableFetchSDK({
93
- url: '/otps/email/login_or_create',
94
- body: requestBody,
95
- method: 'POST',
96
- retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
97
- });
98
- },
99
- send: async (email, options)=>{
100
- const captcha_token = await this.executeRecaptcha();
101
- const requestBody = {
102
- ...options,
103
- email,
104
- captcha_token
105
- };
106
- const isLoggedIn = !!this._subscriptionService.getSession();
107
- const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';
108
- return this._networkClient.fetchSDK({
109
- url: endpoint,
110
- body: requestBody,
111
- method: 'POST'
112
- });
113
- }
114
- };
115
15
  this.authenticate = this._subscriptionService.withUpdateSession(async (code, method_id, options)=>{
116
16
  validateInDev('stytch.otps.authenticate', {
117
17
  code,
@@ -137,9 +37,106 @@ class HeadlessOTPClient {
137
37
  return omitUser(resp);
138
38
  });
139
39
  }
140
- sms;
141
- whatsapp;
142
- email;
40
+ sms = {
41
+ loginOrCreate: async (phone_number, options)=>{
42
+ const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
43
+ const requestBody = {
44
+ ...options,
45
+ phone_number,
46
+ captcha_token,
47
+ dfp_telemetry_id
48
+ };
49
+ return this._networkClient.retriableFetchSDK({
50
+ url: '/otps/sms/login_or_create',
51
+ body: requestBody,
52
+ method: 'POST',
53
+ retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
54
+ });
55
+ },
56
+ send: async (phone_number, options)=>{
57
+ const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
58
+ const requestBody = {
59
+ ...options,
60
+ phone_number,
61
+ captcha_token,
62
+ dfp_telemetry_id
63
+ };
64
+ const isLoggedIn = !!this._subscriptionService.getSession();
65
+ const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';
66
+ return this._networkClient.retriableFetchSDK({
67
+ url: endpoint,
68
+ body: requestBody,
69
+ method: 'POST',
70
+ retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
71
+ });
72
+ }
73
+ };
74
+ whatsapp = {
75
+ loginOrCreate: async (phone_number, options)=>{
76
+ const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
77
+ const requestBody = {
78
+ ...options,
79
+ phone_number,
80
+ dfp_telemetry_id,
81
+ captcha_token
82
+ };
83
+ return this._networkClient.retriableFetchSDK({
84
+ url: '/otps/whatsapp/login_or_create',
85
+ body: requestBody,
86
+ method: 'POST',
87
+ retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
88
+ });
89
+ },
90
+ send: async (phone_number, options)=>{
91
+ const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
92
+ const requestBody = {
93
+ ...options,
94
+ phone_number,
95
+ captcha_token,
96
+ dfp_telemetry_id
97
+ };
98
+ const isLoggedIn = !!this._subscriptionService.getSession();
99
+ const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';
100
+ return this._networkClient.retriableFetchSDK({
101
+ url: endpoint,
102
+ body: requestBody,
103
+ method: 'POST',
104
+ retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
105
+ });
106
+ }
107
+ };
108
+ email = {
109
+ loginOrCreate: async (email, options)=>{
110
+ const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
111
+ const requestBody = {
112
+ ...options,
113
+ email,
114
+ captcha_token,
115
+ dfp_telemetry_id
116
+ };
117
+ return this._networkClient.retriableFetchSDK({
118
+ url: '/otps/email/login_or_create',
119
+ body: requestBody,
120
+ method: 'POST',
121
+ retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
122
+ });
123
+ },
124
+ send: async (email, options)=>{
125
+ const captcha_token = await this.executeRecaptcha();
126
+ const requestBody = {
127
+ ...options,
128
+ email,
129
+ captcha_token
130
+ };
131
+ const isLoggedIn = !!this._subscriptionService.getSession();
132
+ const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';
133
+ return this._networkClient.fetchSDK({
134
+ url: endpoint,
135
+ body: requestBody,
136
+ method: 'POST'
137
+ });
138
+ }
139
+ };
143
140
  }
144
141
 
145
142
  export { HeadlessOTPClient };
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessOTPClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOTPClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n IHeadlessOTPsClient,\n OTPAuthenticateOptions,\n OTPCodeEmailOptions,\n OTPCodeOptions,\n OTPCodeSMSOptions,\n OTPsAuthenticateResponse,\n OTPsLoginOrCreateResponse,\n OTPsSendResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { WithUser, omitUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\nexport class HeadlessOTPClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOTPsClient<TProjectConfiguration>\n{\n authenticate: (\n code: string,\n method_id: string,\n options: OTPAuthenticateOptions,\n ) => Promise<OTPsAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (code: string, method_id: string, options: OTPAuthenticateOptions) => {\n validateInDev(\n 'stytch.otps.authenticate',\n { code, ...options },\n {\n code: 'string',\n session_duration_minutes: 'number',\n },\n );\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n token: code,\n method_id,\n dfp_telemetry_id,\n captcha_token,\n ...options,\n };\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<OTPsAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/otps/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n sms = {\n loginOrCreate: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/sms/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n whatsapp = {\n loginOrCreate: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, dfp_telemetry_id, captcha_token };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/whatsapp/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n email = {\n loginOrCreate: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, email, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsSendResponse> => {\n const captcha_token = await this.executeRecaptcha();\n const requestBody = { ...options, email, captcha_token };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';\n\n return this._networkClient.fetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n });\n },\n };\n}\n"],"names":["HeadlessOTPClient","authenticate","constructor","executeRecaptcha","Promise","resolve","undefined","dfpProtectedAuth","_networkClient","_subscriptionService","sms","loginOrCreate","phone_number","options","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","requestBody","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP","send","isLoggedIn","getSession","endpoint","whatsapp","email","fetchSDK","withUpdateSession","code","method_id","validateInDev","session_duration_minutes","token","resp","omitUser"],"mappings":"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"}
1
+ {"version":3,"file":"HeadlessOTPClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOTPClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n IHeadlessOTPsClient,\n OTPAuthenticateOptions,\n OTPCodeEmailOptions,\n OTPCodeOptions,\n OTPCodeSMSOptions,\n OTPsAuthenticateResponse,\n OTPsLoginOrCreateResponse,\n OTPsSendResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { WithUser, omitUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\nexport class HeadlessOTPClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOTPsClient<TProjectConfiguration>\n{\n authenticate: (\n code: string,\n method_id: string,\n options: OTPAuthenticateOptions,\n ) => Promise<OTPsAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (code: string, method_id: string, options: OTPAuthenticateOptions) => {\n validateInDev(\n 'stytch.otps.authenticate',\n { code, ...options },\n {\n code: 'string',\n session_duration_minutes: 'number',\n },\n );\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n token: code,\n method_id,\n dfp_telemetry_id,\n captcha_token,\n ...options,\n };\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<OTPsAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/otps/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n sms = {\n loginOrCreate: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/sms/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n whatsapp = {\n loginOrCreate: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, dfp_telemetry_id, captcha_token };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/whatsapp/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n email = {\n loginOrCreate: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, email, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsSendResponse> => {\n const captcha_token = await this.executeRecaptcha();\n const requestBody = { ...options, email, captcha_token };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';\n\n return this._networkClient.fetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n });\n },\n };\n}\n"],"names":["HeadlessOTPClient","authenticate","executeRecaptcha","Promise","resolve","undefined","dfpProtectedAuth","_networkClient","_subscriptionService","withUpdateSession","code","method_id","options","validateInDev","session_duration_minutes","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","requestBody","token","resp","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP","omitUser","sms","loginOrCreate","phone_number","send","isLoggedIn","getSession","endpoint","whatsapp","email","fetchSDK"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessPasswordClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessPasswordClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessPasswordClient,\n PasswordAuthenticateOptions,\n PasswordAuthenticateResponse,\n PasswordCreateOptions,\n PasswordCreateResponse,\n PasswordResetByEmailOptions,\n PasswordResetByEmailResponse,\n PasswordResetByEmailStartOptions,\n PasswordResetByEmailStartResponse,\n PasswordResetByExistingPasswordOptions,\n PasswordResetByExistingPasswordResponse,\n PasswordResetBySessionOptions,\n PasswordResetBySessionResponse,\n PasswordStrengthCheckOptions,\n PasswordStrengthCheckResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessPasswordClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessPasswordClient<TProjectConfiguration>\n{\n create: (options: PasswordCreateOptions) => Promise<PasswordCreateResponse<TProjectConfiguration>>;\n\n authenticate: (options: PasswordAuthenticateOptions) => Promise<PasswordAuthenticateResponse<TProjectConfiguration>>;\n\n resetByEmail: (options: PasswordResetByEmailOptions) => Promise<PasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: PasswordResetByExistingPasswordOptions,\n ) => Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: PasswordResetBySessionOptions,\n ) => Promise<PasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.create = this._subscriptionService.withUpdateSession(\n async (options: PasswordCreateOptions): Promise<PasswordCreateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.create', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordCreateResponse<TProjectConfiguration>>\n >({\n url: '/passwords',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (options: PasswordAuthenticateOptions): Promise<PasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/passwords/authenticate',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (options: PasswordResetByEmailOptions): Promise<PasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByEmailResponse<TProjectConfiguration>>\n >({\n url: '/passwords/email/reset',\n method: 'POST',\n body: {\n token: options.token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n code_verifier,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetByExistingPasswordOptions,\n ): Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email: 'string',\n existing_password: 'string',\n new_password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>\n >({\n url: '/passwords/existing_password/reset',\n method: 'POST',\n body: {\n email: options.email,\n existing_password: options.existing_password,\n new_password: options.new_password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetBySessionOptions,\n ): Promise<PasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: PasswordResetByEmailStartOptions): Promise<PasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetByEmailStartResponse>({\n url: '/passwords/email/reset/start',\n method: 'POST',\n body: {\n email: options.email,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: PasswordStrengthCheckOptions): Promise<PasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<PasswordStrengthCheckResponse>({\n url: '/passwords/strength_check',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n },\n });\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","pkceRequiredForPasswordResets","HeadlessPasswordClient","create","authenticate","resetByEmail","resetByExistingPassword","resetBySession","constructor","_subscriptionService","_pkceManager","_config","dfpProtectedAuth","_networkClient","withUpdateSession","options","validateInDev","password","email","session_duration_minutes","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","retryCallback","retryWithCaptchaAndDFP","omitUser","token","pkPair","getPKPair","code_verifier","clearPKPair","existing_password","new_password","getCodeChallenge","undefined","keyPair","code_challenge","startPKCETransaction","resetByEmailStart","login_redirect_url","reset_password_redirect_url","reset_password_template_id","reset_password_expiration_minutes","locale","strengthCheck","fetchSDK"],"mappings":"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"}
1
+ {"version":3,"file":"HeadlessPasswordClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessPasswordClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessPasswordClient,\n PasswordAuthenticateOptions,\n PasswordAuthenticateResponse,\n PasswordCreateOptions,\n PasswordCreateResponse,\n PasswordResetByEmailOptions,\n PasswordResetByEmailResponse,\n PasswordResetByEmailStartOptions,\n PasswordResetByEmailStartResponse,\n PasswordResetByExistingPasswordOptions,\n PasswordResetByExistingPasswordResponse,\n PasswordResetBySessionOptions,\n PasswordResetBySessionResponse,\n PasswordStrengthCheckOptions,\n PasswordStrengthCheckResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessPasswordClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessPasswordClient<TProjectConfiguration>\n{\n create: (options: PasswordCreateOptions) => Promise<PasswordCreateResponse<TProjectConfiguration>>;\n\n authenticate: (options: PasswordAuthenticateOptions) => Promise<PasswordAuthenticateResponse<TProjectConfiguration>>;\n\n resetByEmail: (options: PasswordResetByEmailOptions) => Promise<PasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: PasswordResetByExistingPasswordOptions,\n ) => Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: PasswordResetBySessionOptions,\n ) => Promise<PasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.create = this._subscriptionService.withUpdateSession(\n async (options: PasswordCreateOptions): Promise<PasswordCreateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.create', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordCreateResponse<TProjectConfiguration>>\n >({\n url: '/passwords',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (options: PasswordAuthenticateOptions): Promise<PasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/passwords/authenticate',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (options: PasswordResetByEmailOptions): Promise<PasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByEmailResponse<TProjectConfiguration>>\n >({\n url: '/passwords/email/reset',\n method: 'POST',\n body: {\n token: options.token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n code_verifier,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetByExistingPasswordOptions,\n ): Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email: 'string',\n existing_password: 'string',\n new_password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>\n >({\n url: '/passwords/existing_password/reset',\n method: 'POST',\n body: {\n email: options.email,\n existing_password: options.existing_password,\n new_password: options.new_password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetBySessionOptions,\n ): Promise<PasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: PasswordResetByEmailStartOptions): Promise<PasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetByEmailStartResponse>({\n url: '/passwords/email/reset/start',\n method: 'POST',\n body: {\n email: options.email,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: PasswordStrengthCheckOptions): Promise<PasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<PasswordStrengthCheckResponse>({\n url: '/passwords/strength_check',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n },\n });\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","pkceRequiredForPasswordResets","HeadlessPasswordClient","create","authenticate","resetByEmail","resetByExistingPassword","resetBySession","_subscriptionService","_pkceManager","_config","dfpProtectedAuth","_networkClient","withUpdateSession","options","validateInDev","password","email","session_duration_minutes","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","retryCallback","retryWithCaptchaAndDFP","omitUser","token","pkPair","getPKPair","code_verifier","clearPKPair","existing_password","new_password","getCodeChallenge","undefined","keyPair","code_challenge","startPKCETransaction","resetByEmailStart","login_redirect_url","reset_password_redirect_url","reset_password_template_id","reset_password_expiration_minutes","locale","strengthCheck","fetchSDK"],"mappings":";;;AA6BA,MAAMA,oBAAAA,GAAuBC,OAAAA,CAAQC,OAAO,CAAC;IAC3CC,6BAAAA,EAA+B;AACjC,CAAA,CAAA;AAEO,MAAMC,sBAAAA,CAAAA;;;;;;IAGXC,MAAAA;IAEAC,YAAAA;IAEAC,YAAAA;IAEAC,uBAAAA;IAIAC,cAAAA;AAIA,IAAA,WAAA,CACE,cAAsC,EAC9BC,oBAAyE,EACzEC,YAA0B,EAClC,OAAQC,GAAyBZ,oBAAoB,EAC7Ca,gBAA2C,CACnD;aALQC,cAAAA,GAAAA,cAAAA;aACAJ,oBAAAA,GAAAA,oBAAAA;aACAC,YAAAA,GAAAA,YAAAA;aACAC,OAAAA,GAAAA,OAAAA;aACAC,gBAAAA,GAAAA,gBAAAA;QAER,IAAI,CAACR,MAAM,GAAG,IAAI,CAACK,oBAAoB,CAACK,iBAAiB,CACvD,OAAOC,OAAAA,GAAAA;AACLC,YAAAA,aAAAA,CAAc,2BAA2BD,OAAAA,EAAS;gBAChDE,QAAAA,EAAU,QAAA;gBACVC,KAAAA,EAAO,QAAA;gBACPC,wBAAAA,EAA0B;AAC5B,aAAA,CAAA;YAEA,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACU,2BAA2B,EAAA;AAEnG,YAAA,MAAMC,OAAO,MAAM,IAAI,CAACV,cAAc,CAACW,iBAAiB,CAEtD;gBACAC,GAAAA,EAAK,YAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJT,oBAAAA,KAAAA,EAAOH,QAAQG,KAAK;AACpBD,oBAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAC1BE,oBAAAA,wBAAAA,EAA0BJ,QAAQI,wBAAwB;AAC1DE,oBAAAA,aAAAA;AACAD,oBAAAA;AACF,iBAAA;AACAQ,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;AAEA,YAAA,OAAOC,QAAAA,CAASP,IAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;QAGF,IAAI,CAAClB,YAAY,GAAG,IAAI,CAACI,oBAAoB,CAACK,iBAAiB,CAC7D,OAAOC,OAAAA,GAAAA;AACLC,YAAAA,aAAAA,CAAc,iCAAiCD,OAAAA,EAAS;gBACtDE,QAAAA,EAAU,QAAA;gBACVC,KAAAA,EAAO,QAAA;gBACPC,wBAAAA,EAA0B;AAC5B,aAAA,CAAA;YAEA,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACU,2BAA2B,EAAA;AAEnG,YAAA,MAAMC,OAAO,MAAM,IAAI,CAACV,cAAc,CAACW,iBAAiB,CAEtD;gBACAC,GAAAA,EAAK,yBAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJT,oBAAAA,KAAAA,EAAOH,QAAQG,KAAK;AACpBD,oBAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAC1BE,oBAAAA,wBAAAA,EAA0BJ,QAAQI,wBAAwB;AAC1DE,oBAAAA,aAAAA;AACAD,oBAAAA;AACF,iBAAA;AACAQ,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;AAEA,YAAA,OAAOC,QAAAA,CAASP,IAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;QAGF,IAAI,CAACjB,YAAY,GAAG,IAAI,CAACG,oBAAoB,CAACK,iBAAiB,CAC7D,OAAOC,OAAAA,GAAAA;AACLC,YAAAA,aAAAA,CAAc,iCAAiCD,OAAAA,EAAS;gBACtDgB,KAAAA,EAAO,QAAA;gBACPd,QAAAA,EAAU,QAAA;gBACVE,wBAAAA,EAA0B;AAC5B,aAAA,CAAA;YAEA,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACU,2BAA2B,EAAA;AACnG,YAAA,MAAMU,SAAS,MAAM,IAAI,CAACtB,YAAY,CAACuB,SAAS,EAAA;AAChD,YAAA,MAAMC,gBAAgBF,MAAAA,EAAQE,aAAAA;AAE9B,YAAA,MAAMX,OAAO,MAAM,IAAI,CAACV,cAAc,CAACW,iBAAiB,CAEtD;gBACAC,GAAAA,EAAK,wBAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJI,oBAAAA,KAAAA,EAAOhB,QAAQgB,KAAK;AACpBd,oBAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAC1BE,oBAAAA,wBAAAA,EAA0BJ,QAAQI,wBAAwB;AAC1DE,oBAAAA,aAAAA;AACAa,oBAAAA,aAAAA;AACAd,oBAAAA;AACF,iBAAA;AACAQ,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;YAEA,IAAI,CAACnB,YAAY,CAACyB,WAAW,EAAA;AAE7B,YAAA,OAAOL,QAAAA,CAASP,IAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;QAGF,IAAI,CAAChB,uBAAuB,GAAG,IAAI,CAACE,oBAAoB,CAACK,iBAAiB,CACxE,OACEC,OAAAA,GAAAA;AAEAC,YAAAA,aAAAA,CAAc,4CAA4CD,OAAAA,EAAS;gBACjEG,KAAAA,EAAO,QAAA;gBACPkB,iBAAAA,EAAmB,QAAA;gBACnBC,YAAAA,EAAc,QAAA;gBACdlB,wBAAAA,EAA0B;AAC5B,aAAA,CAAA;YAEA,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACU,2BAA2B,EAAA;AAEnG,YAAA,MAAMC,OAAO,MAAM,IAAI,CAACV,cAAc,CAACW,iBAAiB,CAEtD;gBACAC,GAAAA,EAAK,oCAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJT,oBAAAA,KAAAA,EAAOH,QAAQG,KAAK;AACpBkB,oBAAAA,iBAAAA,EAAmBrB,QAAQqB,iBAAiB;AAC5CC,oBAAAA,YAAAA,EAActB,QAAQsB,YAAY;AAClClB,oBAAAA,wBAAAA,EAA0BJ,QAAQI,wBAAwB;AAC1DC,oBAAAA,gBAAAA;AACAC,oBAAAA;AACF,iBAAA;AACAO,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;AAEA,YAAA,OAAOC,QAAAA,CAASP,IAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;QAGF,IAAI,CAACf,cAAc,GAAG,IAAI,CAACC,oBAAoB,CAACK,iBAAiB,CAC/D,OACEC,OAAAA,GAAAA;AAEAC,YAAAA,aAAAA,CAAc,mCAAmCD,OAAAA,EAAS;gBACxDE,QAAAA,EAAU;AACZ,aAAA,CAAA;YAEA,MAAM,EAAEG,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACU,2BAA2B,EAAA;AAEnG,YAAA,OAAO,IAAI,CAACT,cAAc,CAACW,iBAAiB,CAAwD;gBAClGC,GAAAA,EAAK,0BAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJV,oBAAAA,QAAAA,EAAUF,QAAQE,QAAQ;AAC1BE,oBAAAA,wBAAAA,EAA0BJ,QAAQI,wBAAwB;AAC1DC,oBAAAA,gBAAAA;AACAC,oBAAAA;AACF,iBAAA;AACAO,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AAEJ,IAAA;AAEA,IAAA,MAAcS,gBAAAA,GAAgD;AAC5D,QAAA,MAAM,EAAEpC,6BAA6B,EAAE,GAAG,MAAM,IAAI,CAACS,OAAO;AAC5D,QAAA,IAAI,CAACT,6BAAAA,EAA+B;YAClC,OAAOqC,SAAAA;AACT,QAAA;AACA,QAAA,IAAIC,UAAU,MAAM,IAAI,CAAC9B,YAAY,CAACuB,SAAS,EAAA;AAC/C,QAAA,IAAIO,OAAAA,EAAS;AACX,YAAA,OAAOA,QAAQC,cAAc;AAC/B,QAAA;AACAD,QAAAA,OAAAA,GAAU,MAAM,IAAI,CAAC9B,YAAY,CAACgC,oBAAoB,EAAA;AACtD,QAAA,OAAOF,QAAQC,cAAc;AAC/B,IAAA;IAEA,MAAME,iBAAAA,CAAkB5B,OAAyC,EAA8C;AAC7GC,QAAAA,aAAAA,CAAc,sCAAsCD,OAAAA,EAAS;YAC3DG,KAAAA,EAAO,QAAA;YACP0B,kBAAAA,EAAoB,gBAAA;YACpBC,2BAAAA,EAA6B,gBAAA;YAC7BC,0BAAAA,EAA4B,gBAAA;YAC5BC,iCAAAA,EAAmC,gBAAA;YACnCC,MAAAA,EAAQ;AACV,SAAA,CAAA;AAEA,QAAA,MAAMP,cAAAA,GAAiB,MAAM,IAAI,CAACH,gBAAgB,EAAA;QAClD,MAAM,EAAElB,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACU,2BAA2B,EAAA;AAEnG,QAAA,OAAO,IAAI,CAACT,cAAc,CAACW,iBAAiB,CAAoC;YAC9EC,GAAAA,EAAK,8BAAA;YACLC,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAM;AACJT,gBAAAA,KAAAA,EAAOH,QAAQG,KAAK;AACpB0B,gBAAAA,kBAAAA,EAAoB7B,QAAQ6B,kBAAkB;AAC9CC,gBAAAA,2BAAAA,EAA6B9B,QAAQ8B,2BAA2B;AAChEE,gBAAAA,iCAAAA,EAAmChC,QAAQgC,iCAAiC;AAC5ED,gBAAAA,0BAAAA,EAA4B/B,QAAQ+B,0BAA0B;AAC9DE,gBAAAA,MAAAA,EAAQjC,QAAQiC,MAAM;AACtBP,gBAAAA,cAAAA;AACApB,gBAAAA,aAAAA;AACAD,gBAAAA;AACF,aAAA;AACAQ,YAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,SAAA,CAAA;AACF,IAAA;IAEA,MAAMoB,aAAAA,CAAclC,OAAqC,EAA0C;AACjGC,QAAAA,aAAAA,CAAc,kCAAkCD,OAAAA,EAAS;YACvDG,KAAAA,EAAO,gBAAA;YACPD,QAAAA,EAAU;AACZ,SAAA,CAAA;AAEA,QAAA,OAAO,IAAI,CAACJ,cAAc,CAACqC,QAAQ,CAAgC;YACjEzB,GAAAA,EAAK,2BAAA;YACLC,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAM;AACJT,gBAAAA,KAAAA,EAAOH,QAAQG,KAAK;AACpBD,gBAAAA,QAAAA,EAAUF,QAAQE;AACpB;AACF,SAAA,CAAA;AACF,IAAA;AACF;;;;"}
@@ -7,12 +7,6 @@ class HeadlessRBACClient {
7
7
  policyPromise;
8
8
  constructor(cachedConfig, dynamicConfig, _subscriptionService){
9
9
  this._subscriptionService = _subscriptionService;
10
- this.isAuthorizedSync = (resourceId, action)=>{
11
- return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId, action);
12
- };
13
- this.isAuthorized = (resourceId, action)=>{
14
- return this.policyPromise.then((policy)=>policy.callerIsAuthorized(this.roleIds(), resourceId, action));
15
- };
16
10
  this.cachedPolicy = cachedConfig.rbacPolicy ? RBACPolicy.fromJSON(cachedConfig.rbacPolicy) : null;
17
11
  this.policyPromise = dynamicConfig.then((data)=>{
18
12
  if (!data.rbacPolicy) {
@@ -27,8 +21,12 @@ class HeadlessRBACClient {
27
21
  allPermissions() {
28
22
  return this.policyPromise.then((policy)=>policy.allPermissionsForCaller(this.roleIds()));
29
23
  }
30
- isAuthorizedSync;
31
- isAuthorized;
24
+ isAuthorizedSync = (resourceId, action)=>{
25
+ return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId, action);
26
+ };
27
+ isAuthorized = (resourceId, action)=>{
28
+ return this.policyPromise.then((policy)=>policy.callerIsAuthorized(this.roleIds(), resourceId, action));
29
+ };
32
30
  roleIds() {
33
31
  const user = this._subscriptionService.getUser();
34
32
  if (!user) {
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessRBACClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessRBACClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '../SubscriptionService';\nimport { logger } from '../utils';\nimport { RBACPolicy, RBACPolicyRaw } from '../rbac';\nimport { IHeadlessRBACClient, ConsumerPermissionsMap } from '../public/rbac';\nimport { StytchProjectConfigurationInput } from '../public/typeConfig';\n\ntype CachedConfig = {\n rbacPolicy: RBACPolicyRaw | null;\n};\n\ntype DynamicConfig = Promise<CachedConfig>;\n\nexport class HeadlessRBACClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessRBACClient\n{\n private cachedPolicy: RBACPolicy | null;\n private policyPromise: Promise<RBACPolicy>;\n constructor(\n cachedConfig: CachedConfig,\n dynamicConfig: DynamicConfig,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n ) {\n this.cachedPolicy = cachedConfig.rbacPolicy ? RBACPolicy.fromJSON(cachedConfig.rbacPolicy) : null;\n this.policyPromise = dynamicConfig.then((data) => {\n if (!data.rbacPolicy) {\n logger.error('Unable to retrieve RBAC policy from servers. Assuming caller has no permissions.');\n return new RBACPolicy([], []);\n }\n // Update the existing policy too, so isAuthorizedSync will be up-to-date\n this.cachedPolicy = RBACPolicy.fromJSON(data.rbacPolicy);\n return this.cachedPolicy;\n });\n }\n\n allPermissions<Permissions extends Record<string, string>>() {\n return this.policyPromise.then(\n (policy) => policy.allPermissionsForCaller(this.roleIds()) as ConsumerPermissionsMap<Permissions>,\n );\n }\n\n isAuthorizedSync: IHeadlessRBACClient['isAuthorizedSync'] = (resourceId, action) => {\n return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string);\n };\n\n isAuthorized: IHeadlessRBACClient['isAuthorized'] = (resourceId, action) => {\n return this.policyPromise.then((policy) =>\n policy.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string),\n );\n };\n\n private roleIds() {\n const user = this._subscriptionService.getUser();\n\n if (!user) {\n return [];\n }\n\n // Although user.roles is guaranteed to exist for fresh data, there is a chance\n // that the user stored in localstorage clientside comes from before roles were added to\n // the API response - in which case user.roles will be undefined and this will crash\n // TODO: [AUTH-2294] We can safely remove this ~3mos after RBAC is released\n return user.roles ?? [];\n }\n}\n"],"names":["HeadlessRBACClient","cachedPolicy","policyPromise","constructor","cachedConfig","dynamicConfig","_subscriptionService","isAuthorizedSync","resourceId","action","callerIsAuthorized","roleIds","isAuthorized","then","policy","rbacPolicy","RBACPolicy","fromJSON","data","logger","error","allPermissions","allPermissionsForCaller","user","getUser","roles"],"mappings":";;;AAYO,MAAMA,kBAAAA,CAAAA;;IAGHC,YAAAA;IACAC,aAAAA;AACRC,IAAAA,WAAAA,CACEC,YAA0B,EAC1BC,aAA4B,EACpBC,oBAAyE,CACjF;aADQA,oBAAAA,GAAAA,oBAAAA;AAoBVC,QAAAA,IAAAA,CAAAA,gBAAAA,GAA4D,CAACC,UAAAA,EAAYC,MAAAA,GAAAA;YACvE,OAAO,CAAC,CAAC,IAAI,CAACR,YAAY,EAAES,kBAAAA,CAAmB,IAAI,CAACC,OAAO,EAAA,EAAIH,UAAAA,EAAsBC,MAAAA,CAAAA;AACvF,QAAA,CAAA;AAEAG,QAAAA,IAAAA,CAAAA,YAAAA,GAAoD,CAACJ,UAAAA,EAAYC,MAAAA,GAAAA;AAC/D,YAAA,OAAO,IAAI,CAACP,aAAa,CAACW,IAAI,CAAC,CAACC,MAAAA,GAC9BA,MAAAA,CAAOJ,kBAAkB,CAAC,IAAI,CAACC,OAAO,IAAIH,UAAAA,EAAsBC,MAAAA,CAAAA,CAAAA;AAEpE,QAAA,CAAA;QA1BE,IAAI,CAACR,YAAY,GAAGG,YAAAA,CAAaW,UAAU,GAAGC,UAAAA,CAAWC,QAAQ,CAACb,YAAAA,CAAaW,UAAU,CAAA,GAAI,IAAA;AAC7F,QAAA,IAAI,CAACb,aAAa,GAAGG,aAAAA,CAAcQ,IAAI,CAAC,CAACK,IAAAA,GAAAA;YACvC,IAAI,CAACA,IAAAA,CAAKH,UAAU,EAAE;AACpBI,gBAAAA,MAAAA,CAAOC,KAAK,CAAC,kFAAA,CAAA;AACb,gBAAA,OAAO,IAAIJ,UAAAA,CAAW,EAAE,EAAE,EAAE,CAAA;AAC9B,YAAA;;AAEA,YAAA,IAAI,CAACf,YAAY,GAAGe,WAAWC,QAAQ,CAACC,KAAKH,UAAU,CAAA;YACvD,OAAO,IAAI,CAACd,YAAY;AAC1B,QAAA,CAAA,CAAA;AACF,IAAA;IAEAoB,cAAAA,GAA6D;AAC3D,QAAA,OAAO,IAAI,CAACnB,aAAa,CAACW,IAAI,CAC5B,CAACC,MAAAA,GAAWA,MAAAA,CAAOQ,uBAAuB,CAAC,IAAI,CAACX,OAAO,EAAA,CAAA,CAAA;AAE3D,IAAA;IAEAJ,gBAAAA;IAIAK,YAAAA;IAMQD,OAAAA,GAAU;AAChB,QAAA,MAAMY,IAAAA,GAAO,IAAI,CAACjB,oBAAoB,CAACkB,OAAO,EAAA;AAE9C,QAAA,IAAI,CAACD,IAAAA,EAAM;AACT,YAAA,OAAO,EAAE;AACX,QAAA;;;;;QAMA,OAAOA,IAAAA,CAAKE,KAAK,IAAI,EAAE;AACzB,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"HeadlessRBACClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessRBACClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '../SubscriptionService';\nimport { logger } from '../utils';\nimport { RBACPolicy, RBACPolicyRaw } from '../rbac';\nimport { IHeadlessRBACClient, ConsumerPermissionsMap } from '../public/rbac';\nimport { StytchProjectConfigurationInput } from '../public/typeConfig';\n\ntype CachedConfig = {\n rbacPolicy: RBACPolicyRaw | null;\n};\n\ntype DynamicConfig = Promise<CachedConfig>;\n\nexport class HeadlessRBACClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessRBACClient\n{\n private cachedPolicy: RBACPolicy | null;\n private policyPromise: Promise<RBACPolicy>;\n constructor(\n cachedConfig: CachedConfig,\n dynamicConfig: DynamicConfig,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n ) {\n this.cachedPolicy = cachedConfig.rbacPolicy ? RBACPolicy.fromJSON(cachedConfig.rbacPolicy) : null;\n this.policyPromise = dynamicConfig.then((data) => {\n if (!data.rbacPolicy) {\n logger.error('Unable to retrieve RBAC policy from servers. Assuming caller has no permissions.');\n return new RBACPolicy([], []);\n }\n // Update the existing policy too, so isAuthorizedSync will be up-to-date\n this.cachedPolicy = RBACPolicy.fromJSON(data.rbacPolicy);\n return this.cachedPolicy;\n });\n }\n\n allPermissions<Permissions extends Record<string, string>>() {\n return this.policyPromise.then(\n (policy) => policy.allPermissionsForCaller(this.roleIds()) as ConsumerPermissionsMap<Permissions>,\n );\n }\n\n isAuthorizedSync: IHeadlessRBACClient['isAuthorizedSync'] = (resourceId, action) => {\n return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string);\n };\n\n isAuthorized: IHeadlessRBACClient['isAuthorized'] = (resourceId, action) => {\n return this.policyPromise.then((policy) =>\n policy.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string),\n );\n };\n\n private roleIds() {\n const user = this._subscriptionService.getUser();\n\n if (!user) {\n return [];\n }\n\n // Although user.roles is guaranteed to exist for fresh data, there is a chance\n // that the user stored in localstorage clientside comes from before roles were added to\n // the API response - in which case user.roles will be undefined and this will crash\n // TODO: [AUTH-2294] We can safely remove this ~3mos after RBAC is released\n return user.roles ?? [];\n }\n}\n"],"names":["HeadlessRBACClient","cachedPolicy","policyPromise","cachedConfig","dynamicConfig","_subscriptionService","rbacPolicy","RBACPolicy","fromJSON","then","data","logger","error","allPermissions","policy","allPermissionsForCaller","roleIds","isAuthorizedSync","resourceId","action","callerIsAuthorized","isAuthorized","user","getUser","roles"],"mappings":";;;AAYO,MAAMA,kBAAAA,CAAAA;;IAGHC,YAAAA;IACAC,aAAAA;AACR,IAAA,WAAA,CACEC,YAA0B,EAC1BC,aAA4B,EACpBC,oBAAyE,CACjF;aADQA,oBAAAA,GAAAA,oBAAAA;QAER,IAAI,CAACJ,YAAY,GAAGE,YAAAA,CAAaG,UAAU,GAAGC,UAAAA,CAAWC,QAAQ,CAACL,YAAAA,CAAaG,UAAU,CAAA,GAAI,IAAA;AAC7F,QAAA,IAAI,CAACJ,aAAa,GAAGE,aAAAA,CAAcK,IAAI,CAAC,CAACC,IAAAA,GAAAA;YACvC,IAAI,CAACA,IAAAA,CAAKJ,UAAU,EAAE;AACpBK,gBAAAA,MAAAA,CAAOC,KAAK,CAAC,kFAAA,CAAA;AACb,gBAAA,OAAO,IAAIL,UAAAA,CAAW,EAAE,EAAE,EAAE,CAAA;AAC9B,YAAA;;AAEA,YAAA,IAAI,CAACN,YAAY,GAAGM,WAAWC,QAAQ,CAACE,KAAKJ,UAAU,CAAA;YACvD,OAAO,IAAI,CAACL,YAAY;AAC1B,QAAA,CAAA,CAAA;AACF,IAAA;IAEAY,cAAAA,GAA6D;AAC3D,QAAA,OAAO,IAAI,CAACX,aAAa,CAACO,IAAI,CAC5B,CAACK,MAAAA,GAAWA,MAAAA,CAAOC,uBAAuB,CAAC,IAAI,CAACC,OAAO,EAAA,CAAA,CAAA;AAE3D,IAAA;AAEAC,IAAAA,gBAAAA,GAA4D,CAACC,UAAAA,EAAYC,MAAAA,GAAAA;QACvE,OAAO,CAAC,CAAC,IAAI,CAAClB,YAAY,EAAEmB,kBAAAA,CAAmB,IAAI,CAACJ,OAAO,EAAA,EAAIE,UAAAA,EAAsBC,MAAAA,CAAAA;IACvF,CAAA;AAEAE,IAAAA,YAAAA,GAAoD,CAACH,UAAAA,EAAYC,MAAAA,GAAAA;AAC/D,QAAA,OAAO,IAAI,CAACjB,aAAa,CAACO,IAAI,CAAC,CAACK,MAAAA,GAC9BA,MAAAA,CAAOM,kBAAkB,CAAC,IAAI,CAACJ,OAAO,IAAIE,UAAAA,EAAsBC,MAAAA,CAAAA,CAAAA;IAEpE,CAAA;IAEQH,OAAAA,GAAU;AAChB,QAAA,MAAMM,IAAAA,GAAO,IAAI,CAACjB,oBAAoB,CAACkB,OAAO,EAAA;AAE9C,QAAA,IAAI,CAACD,IAAAA,EAAM;AACT,YAAA,OAAO,EAAE;AACX,QAAA;;;;;QAMA,OAAOA,IAAAA,CAAKE,KAAK,IAAI,EAAE;AACzB,IAAA;AACF;;;;"}