@stytch/react 20.0.0-next.4 → 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 (316) hide show
  1. package/CHANGELOG.md +12 -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 +11 -8
  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 +11 -8
  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/components/OAuthB2BButton.mjs +1 -1
  125. package/dist/esm/packages/web/src/ui/b2b/components/OAuthB2BButton.mjs.map +1 -1
  126. package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEnrollScreen.mjs.map +1 -1
  127. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
  128. package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  129. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs +3 -1
  130. package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  131. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
  132. package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  133. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
  134. package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  135. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +4 -2
  136. package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs.map +1 -1
  137. package/dist/esm/packages/web/src/ui/b2c/screens/Main/index.mjs +2 -1
  138. package/dist/esm/packages/web/src/ui/b2c/screens/Main/index.mjs.map +1 -1
  139. package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs +2 -1
  140. package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  141. package/dist/esm/packages/web/src/ui/components/mixins/Root.module.css.mjs +1 -1
  142. package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +1 -1
  143. package/dist/esm/packages/web/src/ui/hooks/usePromptPasskey.mjs +3 -3
  144. package/dist/esm/packages/web/src/ui/hooks/usePromptPasskey.mjs.map +1 -1
  145. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs +2 -2
  146. package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  147. package/dist/esm/packages/web/src/ui/react/bindings/createB2CComponent.mjs +2 -2
  148. package/dist/esm/packages/web/src/ui/react/bindings/createB2CComponent.mjs.map +1 -1
  149. package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
  150. package/dist/esm-dev/_virtual/index.mjs +3 -5
  151. package/dist/esm-dev/_virtual/index.mjs.map +1 -1
  152. package/dist/esm-dev/_virtual/index2.mjs +5 -3
  153. package/dist/esm-dev/_virtual/index2.mjs.map +1 -1
  154. package/dist/esm-dev/_virtual/index3.mjs +5 -3
  155. package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
  156. package/dist/esm-dev/_virtual/index4.mjs +3 -5
  157. package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
  158. package/dist/esm-dev/node_modules/@lingui/react/dist/index.mjs +14 -13
  159. package/dist/esm-dev/node_modules/@lingui/react/dist/index.mjs.map +1 -1
  160. package/dist/esm-dev/node_modules/@lingui/react/dist/shared/{react.31c3b5fa.mjs → react.8970326b.mjs} +32 -23
  161. package/dist/esm-dev/node_modules/@lingui/react/dist/shared/react.8970326b.mjs.map +1 -0
  162. package/dist/esm-dev/node_modules/swr/core/dist/index.mjs +1 -1
  163. package/dist/esm-dev/node_modules/swr/infinite/dist/index.mjs +1 -1
  164. package/dist/esm-dev/packages/core/src/DFPProtectedAuthProvider.mjs +39 -43
  165. package/dist/esm-dev/packages/core/src/DFPProtectedAuthProvider.mjs.map +1 -1
  166. package/dist/esm-dev/packages/core/src/EventLogger.mjs.map +1 -1
  167. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessCryptoWalletClient.mjs.map +1 -1
  168. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs +15 -18
  169. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs.map +1 -1
  170. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessImpersonationClient.mjs.map +1 -1
  171. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessMagicLinkClient.mjs.map +1 -1
  172. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs +58 -77
  173. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs.map +1 -1
  174. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs +100 -103
  175. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs.map +1 -1
  176. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessPasswordClient.mjs.map +1 -1
  177. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs +6 -8
  178. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs.map +1 -1
  179. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs +77 -82
  180. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs.map +1 -1
  181. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessTOTPClient.mjs.map +1 -1
  182. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessUserClient.mjs +114 -128
  183. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessUserClient.mjs.map +1 -1
  184. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs +10 -11
  185. package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs.map +1 -1
  186. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BDiscoveryClient.mjs.map +1 -1
  187. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs +16 -19
  188. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs.map +1 -1
  189. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BImpersonationClient.mjs.map +1 -1
  190. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BMagicLinkClient.mjs.map +1 -1
  191. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
  192. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOTPsClient.mjs.map +1 -1
  193. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs +144 -155
  194. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs.map +1 -1
  195. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BPasswordsClient.mjs.map +1 -1
  196. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs +7 -9
  197. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs.map +1 -1
  198. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRecoveryCodesClient.mjs.map +1 -1
  199. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSCIMClient.mjs.map +1 -1
  200. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs +67 -70
  201. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs.map +1 -1
  202. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs +88 -100
  203. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs.map +1 -1
  204. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs +70 -76
  205. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs.map +1 -1
  206. package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BTOTPsClient.mjs.map +1 -1
  207. package/dist/esm-dev/packages/core/src/NetworkClient.mjs.map +1 -1
  208. package/dist/esm-dev/packages/core/src/SearchManager.mjs.map +1 -1
  209. package/dist/esm-dev/packages/core/src/SessionManager.mjs +28 -31
  210. package/dist/esm-dev/packages/core/src/SessionManager.mjs.map +1 -1
  211. package/dist/esm-dev/packages/core/src/StateChangeClient.mjs +5 -6
  212. package/dist/esm-dev/packages/core/src/StateChangeClient.mjs.map +1 -1
  213. package/dist/esm-dev/packages/core/src/public/SDKErrors.mjs.map +1 -1
  214. package/dist/esm-dev/packages/core/src/rbac.mjs.map +1 -1
  215. package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
  216. package/dist/esm-dev/packages/web/src/BootstrapDataManager.mjs.map +1 -1
  217. package/dist/esm-dev/packages/web/src/CaptchaProvider.mjs +10 -11
  218. package/dist/esm-dev/packages/web/src/CaptchaProvider.mjs.map +1 -1
  219. package/dist/esm-dev/packages/web/src/ClientsideServicesProvider.mjs +4 -8
  220. package/dist/esm-dev/packages/web/src/ClientsideServicesProvider.mjs.map +1 -1
  221. package/dist/esm-dev/packages/web/src/HeadlessOAuthClient.mjs +24 -24
  222. package/dist/esm-dev/packages/web/src/HeadlessOAuthClient.mjs.map +1 -1
  223. package/dist/esm-dev/packages/web/src/NetworkClient.mjs +4 -5
  224. package/dist/esm-dev/packages/web/src/NetworkClient.mjs.map +1 -1
  225. package/dist/esm-dev/packages/web/src/PKCEManager.mjs.map +1 -1
  226. package/dist/esm-dev/packages/web/src/StytchClient.mjs.map +1 -1
  227. package/dist/esm-dev/packages/web/src/SubscriptionService.mjs +8 -10
  228. package/dist/esm-dev/packages/web/src/SubscriptionService.mjs.map +1 -1
  229. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AuthManagementSection.mjs +1 -1
  230. package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/useMemberActivation.mjs +1 -1
  231. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionDangerZoneSection.mjs +1 -1
  232. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionTokenRotationSection.mjs +1 -1
  233. package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMNewConnectionScreen.mjs +1 -1
  234. package/dist/esm-dev/packages/web/src/adminPortal/sso/SSONewConnectionScreen.mjs +1 -1
  235. package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
  236. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateMember.mjs +1 -1
  237. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateOrganization.mjs +1 -1
  238. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateScimConnection.mjs +1 -1
  239. package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateSsoConnection.mjs +1 -1
  240. package/dist/esm-dev/packages/web/src/adminPortal/utils/useRevalidateConnectionList.mjs +1 -1
  241. package/dist/esm-dev/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs +48 -48
  242. package/dist/esm-dev/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
  243. package/dist/esm-dev/packages/web/src/b2b/StytchB2BClient.mjs.map +1 -1
  244. package/dist/esm-dev/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs +27 -30
  245. package/dist/esm-dev/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs.map +1 -1
  246. package/dist/esm-dev/packages/web/src/oneTap/GoogleOneTapClient.mjs.map +1 -1
  247. package/dist/esm-dev/packages/web/src/oneTap/OneTapProvider.mjs +12 -14
  248. package/dist/esm-dev/packages/web/src/oneTap/OneTapProvider.mjs.map +1 -1
  249. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs +3 -1
  250. package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs.map +1 -1
  251. package/dist/esm-dev/packages/web/src/ui/b2b/Container.mjs +1 -1
  252. package/dist/esm-dev/packages/web/src/ui/b2b/InternalAppContainer.mjs +1 -1
  253. package/dist/esm-dev/packages/web/src/ui/b2b/InternalAppContainer.mjs.map +1 -1
  254. package/dist/esm-dev/packages/web/src/ui/b2b/components/OAuthB2BButton.mjs +1 -1
  255. package/dist/esm-dev/packages/web/src/ui/b2b/components/OAuthB2BButton.mjs.map +1 -1
  256. package/dist/esm-dev/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
  257. package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEnrollScreen.mjs.map +1 -1
  258. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
  259. package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
  260. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs +3 -1
  261. package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
  262. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
  263. package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
  264. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
  265. package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
  266. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +5 -3
  267. package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs.map +1 -1
  268. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
  269. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/index.mjs +2 -1
  270. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/index.mjs.map +1 -1
  271. package/dist/esm-dev/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
  272. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs +2 -1
  273. package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
  274. package/dist/esm-dev/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
  275. package/dist/esm-dev/packages/web/src/ui/components/atoms/Button.mjs +1 -1
  276. package/dist/esm-dev/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
  277. package/dist/esm-dev/packages/web/src/ui/components/atoms/Column.mjs +1 -1
  278. package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
  279. package/dist/esm-dev/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
  280. package/dist/esm-dev/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
  281. package/dist/esm-dev/packages/web/src/ui/components/mixins/Root.module.css.mjs +1 -1
  282. package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
  283. package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +1 -1
  284. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +1 -1
  285. package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +1 -1
  286. package/dist/esm-dev/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
  287. package/dist/esm-dev/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
  288. package/dist/esm-dev/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
  289. package/dist/esm-dev/packages/web/src/ui/components/organisms/OneTapError.mjs +2 -2
  290. package/dist/esm-dev/packages/web/src/ui/components/organisms/OneTapError.mjs.map +1 -1
  291. package/dist/esm-dev/packages/web/src/ui/hooks/usePromptPasskey.mjs +3 -3
  292. package/dist/esm-dev/packages/web/src/ui/hooks/usePromptPasskey.mjs.map +1 -1
  293. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs +2 -2
  294. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
  295. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2CComponent.mjs +2 -2
  296. package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2CComponent.mjs.map +1 -1
  297. package/dist/esm-dev/packages/web/src/utils/crypto.mjs +1 -1
  298. package/dist/types/{PresentationConfig-B2jX85oV.d.ts → PresentationConfig-CdAymT0c.d.ts} +5 -0
  299. package/dist/types/{StytchB2BClient-D16e_lp1.d.ts → StytchB2BClient-DYF9xGAB.d.ts} +1 -1
  300. package/dist/types/{StytchClient-BwQdJzdj.d.ts → StytchClient-IyY7-cpI.d.ts} +1 -1
  301. package/dist/types/adminPortal/index.d.ts +3 -3
  302. package/dist/types/b2b/index.d.ts +7 -7
  303. package/dist/types/b2b/index.headless.d.ts +2 -2
  304. package/dist/types/compat.d.ts +1 -1
  305. package/dist/types/{createAuthUrlHandler-R1kNNQD_.d.ts → createAuthUrlHandler-CFZ0DGWC.d.ts} +6 -2
  306. package/dist/types/index.d.ts +7 -7
  307. package/dist/types/index.headless.d.ts +2 -2
  308. package/dist/types/{shadcn-CGdmyIUF.d.ts → shadcn-USiNERNw.d.ts} +4 -4
  309. package/messages/en.po +3 -3
  310. package/package.json +1 -1
  311. package/dist/cjs/passwordManagerDisableAutofillProps-DV31RTL_.js.map +0 -1
  312. package/dist/cjs/shadcn-aVU6Lm9q.js.map +0 -1
  313. package/dist/cjs-dev/passwordManagerDisableAutofillProps-CgiK2M_U.js.map +0 -1
  314. package/dist/cjs-dev/shadcn-DMk6ZSoD.js.map +0 -1
  315. package/dist/esm/node_modules/@lingui/react/dist/shared/react.31c3b5fa.mjs.map +0 -1
  316. package/dist/esm-dev/node_modules/@lingui/react/dist/shared/react.31c3b5fa.mjs.map +0 -1
@@ -1,8 +1,6 @@
1
- import { getDefaultExportFromCjs } from './_commonjsHelpers.mjs';
2
- import { __require as requireLodash_merge } from '../node_modules/lodash.merge/index.mjs';
1
+ import { __require as requireBs58 } from '../node_modules/bs58/index.mjs';
3
2
 
4
- var lodash_mergeExports = requireLodash_merge();
5
- var merge = /*@__PURE__*/getDefaultExportFromCjs(lodash_mergeExports);
3
+ var bs58Exports = requireBs58();
6
4
 
7
- export { merge as default };
5
+ export { bs58Exports as b };
8
6
  //# sourceMappingURL=index3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index3.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index3.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1,6 +1,8 @@
1
- import { __require as requireBs58 } from '../node_modules/bs58/index.mjs';
1
+ import { getDefaultExportFromCjs } from './_commonjsHelpers.mjs';
2
+ import { __require as requireLodash_merge } from '../node_modules/lodash.merge/index.mjs';
2
3
 
3
- var bs58Exports = requireBs58();
4
+ var lodash_mergeExports = requireLodash_merge();
5
+ var merge = /*@__PURE__*/getDefaultExportFromCjs(lodash_mergeExports);
4
6
 
5
- export { bs58Exports as b };
7
+ export { merge as default };
6
8
  //# sourceMappingURL=index4.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index4.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
1
+ {"version":3,"file":"index4.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -1,21 +1,22 @@
1
- import React__default from 'react';
2
- import { T as TransNoContext } from './shared/react.31c3b5fa.mjs';
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { useContext, createContext, useRef, useCallback, useState, useEffect } from 'react';
3
+ import { T as TransNoContext } from './shared/react.8970326b.mjs';
3
4
 
4
- const LinguiContext = React__default.createContext(null);
5
+ const LinguiContext = createContext(null);
5
6
  const useLinguiInternal = (devErrorMessage) => {
6
- const context = React__default.useContext(LinguiContext);
7
+ const context = useContext(LinguiContext);
7
8
  return context;
8
9
  };
9
10
  function useLingui() {
10
11
  return useLinguiInternal();
11
12
  }
12
- function I18nProvider({
13
+ const I18nProvider = ({
13
14
  i18n,
14
15
  defaultComponent,
15
16
  children
16
- }) {
17
- const latestKnownLocale = React__default.useRef(i18n.locale);
18
- const makeContext = React__default.useCallback(
17
+ }) => {
18
+ const latestKnownLocale = useRef(i18n.locale);
19
+ const makeContext = useCallback(
19
20
  () => ({
20
21
  i18n,
21
22
  defaultComponent,
@@ -23,8 +24,8 @@ function I18nProvider({
23
24
  }),
24
25
  [i18n, defaultComponent]
25
26
  );
26
- const [context, setContext] = React__default.useState(makeContext());
27
- React__default.useEffect(() => {
27
+ const [context, setContext] = useState(makeContext());
28
+ useEffect(() => {
28
29
  const updateContext = () => {
29
30
  latestKnownLocale.current = i18n.locale;
30
31
  setContext(makeContext());
@@ -38,12 +39,12 @@ function I18nProvider({
38
39
  if (!latestKnownLocale.current) {
39
40
  return null;
40
41
  }
41
- return /* @__PURE__ */ React__default.createElement(LinguiContext.Provider, { value: context }, children);
42
- }
42
+ return /* @__PURE__ */ jsx(LinguiContext.Provider, { value: context, children });
43
+ };
43
44
 
44
45
  function Trans(props) {
45
46
  const lingui = useLinguiInternal();
46
- return React__default.createElement(TransNoContext, { ...props, lingui });
47
+ return /* @__PURE__ */ jsx(TransNoContext, { ...props, lingui });
47
48
  }
48
49
 
49
50
  export { I18nProvider, LinguiContext, Trans, useLingui };
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../../../../../../node_modules/@lingui/react/dist/index.mjs"],"sourcesContent":["'use client';\nimport React from 'react';\nimport { T as TransNoContext } from './shared/react.31c3b5fa.mjs';\n\nconst LinguiContext = React.createContext(null);\nconst useLinguiInternal = (devErrorMessage) => {\n const context = React.useContext(LinguiContext);\n if (process.env.NODE_ENV !== \"production\") {\n if (context == null) {\n throw new Error(\n devErrorMessage ?? \"useLingui hook was used without I18nProvider.\"\n );\n }\n }\n return context;\n};\nfunction useLingui() {\n return useLinguiInternal();\n}\nfunction I18nProvider({\n i18n,\n defaultComponent,\n children\n}) {\n const latestKnownLocale = React.useRef(i18n.locale);\n const makeContext = React.useCallback(\n () => ({\n i18n,\n defaultComponent,\n _: i18n.t.bind(i18n)\n }),\n [i18n, defaultComponent]\n );\n const [context, setContext] = React.useState(makeContext());\n React.useEffect(() => {\n const updateContext = () => {\n latestKnownLocale.current = i18n.locale;\n setContext(makeContext());\n };\n const unsubscribe = i18n.on(\"change\", updateContext);\n if (latestKnownLocale.current !== i18n.locale) {\n updateContext();\n }\n return unsubscribe;\n }, [i18n, makeContext]);\n if (!latestKnownLocale.current) {\n process.env.NODE_ENV === \"development\" && console.log(\n \"I18nProvider rendered `null`. A call to `i18n.activate` needs to happen in order for translations to be activated and for the I18nProvider to render.This is not an error but an informational message logged only in development.\"\n );\n return null;\n }\n return /* @__PURE__ */ React.createElement(LinguiContext.Provider, { value: context }, children);\n}\n\nfunction Trans(props) {\n let errMessage = void 0;\n if (process.env.NODE_ENV !== \"production\") {\n errMessage = `Trans component was rendered without I18nProvider.\nAttempted to render message: ${props.message} id: ${props.id}. Make sure this component is rendered inside a I18nProvider.`;\n }\n const lingui = useLinguiInternal(errMessage);\n return React.createElement(TransNoContext, { ...props, lingui });\n}\n\nexport { I18nProvider, LinguiContext, Trans, useLingui };\n"],"names":["React"],"mappings":";;;AAIK,MAAC,aAAa,GAAGA,cAAK,CAAC,aAAa,CAAC,IAAI;AAC9C,MAAM,iBAAiB,GAAG,CAAC,eAAe,KAAK;AAC/C,EAAE,MAAM,OAAO,GAAGA,cAAK,CAAC,UAAU,CAAC,aAAa,CAAC;AAQjD,EAAE,OAAO,OAAO;AAChB,CAAC;AACD,SAAS,SAAS,GAAG;AACrB,EAAE,OAAO,iBAAiB,EAAE;AAC5B;AACA,SAAS,YAAY,CAAC;AACtB,EAAE,IAAI;AACN,EAAE,gBAAgB;AAClB,EAAE;AACF,CAAC,EAAE;AACH,EAAE,MAAM,iBAAiB,GAAGA,cAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACrD,EAAE,MAAM,WAAW,GAAGA,cAAK,CAAC,WAAW;AACvC,IAAI,OAAO;AACX,MAAM,IAAI;AACV,MAAM,gBAAgB;AACtB,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AACzB,KAAK,CAAC;AACN,IAAI,CAAC,IAAI,EAAE,gBAAgB;AAC3B,GAAG;AACH,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC7D,EAAEA,cAAK,CAAC,SAAS,CAAC,MAAM;AACxB,IAAI,MAAM,aAAa,GAAG,MAAM;AAChC,MAAM,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;AAC7C,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;AAC/B,IAAI,CAAC;AACL,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;AACxD,IAAI,IAAI,iBAAiB,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE;AACnD,MAAM,aAAa,EAAE;AACrB,IAAI;AACJ,IAAI,OAAO,WAAW;AACtB,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzB,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;AAIlC,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,uBAAuBA,cAAK,CAAC,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC;AAClG;;AAEA,SAAS,KAAK,CAAC,KAAK,EAAE;AAMtB,EAAE,MAAM,MAAM,GAAG,iBAAiB,CAAW,CAAC;AAC9C,EAAE,OAAOA,cAAK,CAAC,aAAa,CAAC,cAAc,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;AAClE;;;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.mjs","sources":["../../../../../../../../node_modules/@lingui/react/dist/index.mjs"],"sourcesContent":["'use client';\nimport { jsx } from 'react/jsx-runtime';\nimport { createContext, useRef, useCallback, useState, useEffect, useContext } from 'react';\nimport { T as TransNoContext } from './shared/react.8970326b.mjs';\n\nconst LinguiContext = createContext(null);\nconst useLinguiInternal = (devErrorMessage) => {\n const context = useContext(LinguiContext);\n if (process.env.NODE_ENV !== \"production\") {\n if (context == null) {\n throw new Error(\n devErrorMessage ?? \"useLingui hook was used without I18nProvider.\"\n );\n }\n }\n return context;\n};\nfunction useLingui() {\n return useLinguiInternal();\n}\nconst I18nProvider = ({\n i18n,\n defaultComponent,\n children\n}) => {\n const latestKnownLocale = useRef(i18n.locale);\n const makeContext = useCallback(\n () => ({\n i18n,\n defaultComponent,\n _: i18n.t.bind(i18n)\n }),\n [i18n, defaultComponent]\n );\n const [context, setContext] = useState(makeContext());\n useEffect(() => {\n const updateContext = () => {\n latestKnownLocale.current = i18n.locale;\n setContext(makeContext());\n };\n const unsubscribe = i18n.on(\"change\", updateContext);\n if (latestKnownLocale.current !== i18n.locale) {\n updateContext();\n }\n return unsubscribe;\n }, [i18n, makeContext]);\n if (!latestKnownLocale.current) {\n process.env.NODE_ENV === \"development\" && console.log(\n \"I18nProvider rendered `null`. A call to `i18n.activate` needs to happen in order for translations to be activated and for the I18nProvider to render.This is not an error but an informational message logged only in development.\"\n );\n return null;\n }\n return /* @__PURE__ */ jsx(LinguiContext.Provider, { value: context, children });\n};\n\nfunction Trans(props) {\n let errMessage = void 0;\n if (process.env.NODE_ENV !== \"production\") {\n errMessage = `Trans component was rendered without I18nProvider.\nAttempted to render message: ${props.message} id: ${props.id}. Make sure this component is rendered inside a I18nProvider.`;\n }\n const lingui = useLinguiInternal(errMessage);\n return /* @__PURE__ */ jsx(TransNoContext, { ...props, lingui });\n}\n\nexport { I18nProvider, LinguiContext, Trans, useLingui };\n"],"names":[],"mappings":";;;;AAKK,MAAC,aAAa,GAAG,aAAa,CAAC,IAAI;AACxC,MAAM,iBAAiB,GAAG,CAAC,eAAe,KAAK;AAC/C,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC;AAQ3C,EAAE,OAAO,OAAO;AAChB,CAAC;AACD,SAAS,SAAS,GAAG;AACrB,EAAE,OAAO,iBAAiB,EAAE;AAC5B;AACK,MAAC,YAAY,GAAG,CAAC;AACtB,EAAE,IAAI;AACN,EAAE,gBAAgB;AAClB,EAAE;AACF,CAAC,KAAK;AACN,EAAE,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/C,EAAE,MAAM,WAAW,GAAG,WAAW;AACjC,IAAI,OAAO;AACX,MAAM,IAAI;AACV,MAAM,gBAAgB;AACtB,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;AACzB,KAAK,CAAC;AACN,IAAI,CAAC,IAAI,EAAE,gBAAgB;AAC3B,GAAG;AACH,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AACvD,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,MAAM,aAAa,GAAG,MAAM;AAChC,MAAM,iBAAiB,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM;AAC7C,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC;AAC/B,IAAI,CAAC;AACL,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC;AACxD,IAAI,IAAI,iBAAiB,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,EAAE;AACnD,MAAM,aAAa,EAAE;AACrB,IAAI;AACJ,IAAI,OAAO,WAAW;AACtB,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AACzB,EAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE;AAIlC,IAAI,OAAO,IAAI;AACf,EAAE;AACF,EAAE,uBAAuB,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAClF;;AAEA,SAAS,KAAK,CAAC,KAAK,EAAE;AAMtB,EAAE,MAAM,MAAM,GAAG,iBAAiB,CAAW,CAAC;AAC9C,EAAE,uBAAuB,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC;AAClE;;;;","x_google_ignoreList":[0]}
@@ -1,4 +1,5 @@
1
- import React__default from 'react';
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
+ import { cloneElement } from 'react';
2
3
 
3
4
  const tagRe = /<([a-zA-Z0-9]+)>([\s\S]*?)<\/\1>|<([a-zA-Z0-9]+)\/>/;
4
5
  const voidElementTags = {
@@ -20,10 +21,10 @@ const voidElementTags = {
20
21
  menuitem: true
21
22
  };
22
23
  function formatElements(value, elements = {}) {
23
- const uniqueId = makeCounter(0, "$lingui$");
24
24
  const parts = value.split(tagRe);
25
25
  if (parts.length === 1)
26
26
  return value;
27
+ const uniqueId = makeCounter(0, "$lingui$");
27
28
  const tree = [];
28
29
  const before = parts.shift();
29
30
  if (before)
@@ -40,13 +41,13 @@ function formatElements(value, elements = {}) {
40
41
  `${element.type} is a void element tag therefore it must have no children`
41
42
  );
42
43
  }
43
- element = React__default.createElement(React__default.Fragment);
44
+ element = /* @__PURE__ */ jsx(Fragment, {});
44
45
  }
45
46
  if (Array.isArray(element)) {
46
- element = React__default.createElement(React__default.Fragment, {}, element);
47
+ element = /* @__PURE__ */ jsx(Fragment, { children: element });
47
48
  }
48
49
  tree.push(
49
- React__default.cloneElement(
50
+ cloneElement(
50
51
  element,
51
52
  { key: uniqueId() },
52
53
  // format children for pair tags
@@ -77,24 +78,13 @@ function TransNoContext(props) {
77
78
  formats,
78
79
  lingui: { i18n, defaultComponent }
79
80
  } = props;
80
- const values = { ...props.values };
81
- const components = { ...props.components };
82
- if (values) {
83
- Object.keys(values).forEach((key) => {
84
- const index = Object.keys(components).length;
85
- if (typeof values[key] === "string" || typeof values[key] === "number") {
86
- return;
87
- }
88
- components[index] = /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, values[key]);
89
- values[key] = `<${index}/>`;
90
- });
91
- }
81
+ const { values, components } = getInterpolationValuesAndComponents(props);
92
82
  const _translation = i18n && typeof i18n._ === "function" ? i18n._(id, values, { message, formats }) : id;
93
83
  const translation = _translation ? formatElements(_translation, components) : null;
94
84
  if (render === null || component === null) {
95
85
  return translation;
96
86
  }
97
- const FallbackComponent = defaultComponent || RenderFragment;
87
+ const FallbackComponent = defaultComponent || RenderChildren;
98
88
  const i18nProps = {
99
89
  id,
100
90
  message,
@@ -114,17 +104,36 @@ function TransNoContext(props) {
114
104
  console.error(
115
105
  `Invalid value supplied to prop \`component\`. It must be a React component, provided ${component}`
116
106
  );
117
- return React__default.createElement(FallbackComponent, i18nProps, translation);
107
+ return /* @__PURE__ */ jsx(FallbackComponent, { ...i18nProps, children: translation });
118
108
  }
119
109
  if (typeof render === "function") {
120
110
  return render(i18nProps);
121
111
  }
122
112
  const Component = component || FallbackComponent;
123
- return React__default.createElement(Component, i18nProps, translation);
113
+ return /* @__PURE__ */ jsx(Component, { ...i18nProps, children: translation });
124
114
  }
125
- const RenderFragment = ({ children }) => {
126
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, children);
115
+ const RenderChildren = ({ children }) => {
116
+ return children;
117
+ };
118
+ const getInterpolationValuesAndComponents = (props) => {
119
+ if (!props.values) {
120
+ return {
121
+ values: void 0,
122
+ components: props.components
123
+ };
124
+ }
125
+ const values = { ...props.values };
126
+ const components = { ...props.components };
127
+ Object.entries(props.values).forEach(([key, valueForKey]) => {
128
+ if (typeof valueForKey === "string" || typeof valueForKey === "number") {
129
+ return;
130
+ }
131
+ const index = Object.keys(components).length;
132
+ components[index] = /* @__PURE__ */ jsx(Fragment, { children: valueForKey });
133
+ values[key] = `<${index}/>`;
134
+ });
135
+ return { values, components };
127
136
  };
128
137
 
129
138
  export { TransNoContext as T };
130
- //# sourceMappingURL=react.31c3b5fa.mjs.map
139
+ //# sourceMappingURL=react.8970326b.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.8970326b.mjs","sources":["../../../../../../../../../node_modules/@lingui/react/dist/shared/react.8970326b.mjs"],"sourcesContent":["import { jsx, Fragment } from 'react/jsx-runtime';\nimport { cloneElement } from 'react';\n\nconst tagRe = /<([a-zA-Z0-9]+)>([\\s\\S]*?)<\\/\\1>|<([a-zA-Z0-9]+)\\/>/;\nconst voidElementTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true,\n menuitem: true\n};\nfunction formatElements(value, elements = {}) {\n const parts = value.split(tagRe);\n if (parts.length === 1)\n return value;\n const uniqueId = makeCounter(0, \"$lingui$\");\n const tree = [];\n const before = parts.shift();\n if (before)\n tree.push(before);\n for (const [index, children, after] of getElements(parts)) {\n let element = typeof index !== \"undefined\" ? elements[index] : void 0;\n if (!element || voidElementTags[element.type] && children) {\n if (!element) {\n console.error(\n `Can't use element at index '${index}' as it is not declared in the original translation`\n );\n } else {\n console.error(\n `${element.type} is a void element tag therefore it must have no children`\n );\n }\n element = /* @__PURE__ */ jsx(Fragment, {});\n }\n if (Array.isArray(element)) {\n element = /* @__PURE__ */ jsx(Fragment, { children: element });\n }\n tree.push(\n cloneElement(\n element,\n { key: uniqueId() },\n // format children for pair tags\n // unpaired tags might have children if it's a component passed as a variable\n children ? formatElements(children, elements) : element.props.children\n )\n );\n if (after)\n tree.push(after);\n }\n return tree.length === 1 ? tree[0] : tree;\n}\nfunction getElements(parts) {\n if (!parts.length)\n return [];\n const [paired, children, unpaired, after] = parts.slice(0, 4);\n const triple = [paired || unpaired, children || \"\", after];\n return [triple].concat(getElements(parts.slice(4, parts.length)));\n}\nconst makeCounter = (count = 0, prefix = \"\") => () => `${prefix}_${count++}`;\n\nfunction TransNoContext(props) {\n const {\n render,\n component,\n id,\n message,\n formats,\n lingui: { i18n, defaultComponent }\n } = props;\n const { values, components } = getInterpolationValuesAndComponents(props);\n const _translation = i18n && typeof i18n._ === \"function\" ? i18n._(id, values, { message, formats }) : id;\n const translation = _translation ? formatElements(_translation, components) : null;\n if (render === null || component === null) {\n return translation;\n }\n const FallbackComponent = defaultComponent || RenderChildren;\n const i18nProps = {\n id,\n message,\n translation,\n children: translation\n // for type-compatibility with `component` prop\n };\n if (render && component) {\n console.error(\n \"You can't use both `component` and `render` prop at the same time. `component` is ignored.\"\n );\n } else if (render && typeof render !== \"function\") {\n console.error(\n `Invalid value supplied to prop \\`render\\`. It must be a function, provided ${render}`\n );\n } else if (component && typeof component !== \"function\") {\n console.error(\n `Invalid value supplied to prop \\`component\\`. It must be a React component, provided ${component}`\n );\n return /* @__PURE__ */ jsx(FallbackComponent, { ...i18nProps, children: translation });\n }\n if (typeof render === \"function\") {\n return render(i18nProps);\n }\n const Component = component || FallbackComponent;\n return /* @__PURE__ */ jsx(Component, { ...i18nProps, children: translation });\n}\nconst RenderChildren = ({ children }) => {\n return children;\n};\nconst getInterpolationValuesAndComponents = (props) => {\n if (!props.values) {\n return {\n values: void 0,\n components: props.components\n };\n }\n const values = { ...props.values };\n const components = { ...props.components };\n Object.entries(props.values).forEach(([key, valueForKey]) => {\n if (typeof valueForKey === \"string\" || typeof valueForKey === \"number\") {\n return;\n }\n const index = Object.keys(components).length;\n components[index] = /* @__PURE__ */ jsx(Fragment, { children: valueForKey });\n values[key] = `<${index}/>`;\n });\n return { values, components };\n};\n\nexport { TransNoContext as T };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -7,45 +7,6 @@ class DFPProtectedAuthProvider {
7
7
  state;
8
8
  constructor(publicToken, dfpBackendURL, dfpCdnDomain, bootstrapPromise, executeRecaptcha = ()=>Promise.resolve(undefined)){
9
9
  this.bootstrapPromise = bootstrapPromise;
10
- this.isEnabled = async ()=>{
11
- return this.state.then((state)=>state.enabled);
12
- };
13
- this.getTelemetryID = async ()=>{
14
- const { publicToken, enabled, dfpBackendURL } = await this.state;
15
- if (!enabled) {
16
- return undefined;
17
- }
18
- return await window.GetTelemetryID(publicToken, `${dfpBackendURL}/submit`);
19
- };
20
- this.getDFPTelemetryIDAndCaptcha = async ()=>{
21
- const { enabled, executeRecaptcha, mode } = await this.state;
22
- let dfp_telemetry_id = undefined;
23
- let captcha_token = undefined;
24
- if (!enabled) {
25
- captcha_token = await executeRecaptcha();
26
- }
27
- if (mode === 'DECISIONING') {
28
- dfp_telemetry_id = await this.getTelemetryID();
29
- } else if (mode === 'OBSERVATION') {
30
- dfp_telemetry_id = await this.getTelemetryID();
31
- captcha_token = await executeRecaptcha();
32
- }
33
- return {
34
- dfp_telemetry_id,
35
- captcha_token
36
- };
37
- };
38
- this.retryWithCaptchaAndDFP = async (e, req)=>{
39
- const { enabled, executeRecaptcha } = await this.state;
40
- if (e.type === RetriableErrorType.RequiredCaptcha && enabled) {
41
- if (req.body) {
42
- req.body.dfp_telemetry_id = await this.getTelemetryID();
43
- req.body.captcha_token = await executeRecaptcha();
44
- }
45
- return req;
46
- }
47
- throw new Error('Unable to query captcha and/or dfp telemetry ID');
48
- };
49
10
  this.state = bootstrapPromise.then(async (bootstrapData)=>{
50
11
  if (!bootstrapData.runDFPProtectedAuth) {
51
12
  return {
@@ -67,10 +28,45 @@ class DFPProtectedAuthProvider {
67
28
  };
68
29
  });
69
30
  }
70
- isEnabled;
71
- getTelemetryID;
72
- getDFPTelemetryIDAndCaptcha;
73
- retryWithCaptchaAndDFP;
31
+ isEnabled = async ()=>{
32
+ return this.state.then((state)=>state.enabled);
33
+ };
34
+ getTelemetryID = async ()=>{
35
+ const { publicToken, enabled, dfpBackendURL } = await this.state;
36
+ if (!enabled) {
37
+ return undefined;
38
+ }
39
+ return await window.GetTelemetryID(publicToken, `${dfpBackendURL}/submit`);
40
+ };
41
+ getDFPTelemetryIDAndCaptcha = async ()=>{
42
+ const { enabled, executeRecaptcha, mode } = await this.state;
43
+ let dfp_telemetry_id = undefined;
44
+ let captcha_token = undefined;
45
+ if (!enabled) {
46
+ captcha_token = await executeRecaptcha();
47
+ }
48
+ if (mode === 'DECISIONING') {
49
+ dfp_telemetry_id = await this.getTelemetryID();
50
+ } else if (mode === 'OBSERVATION') {
51
+ dfp_telemetry_id = await this.getTelemetryID();
52
+ captcha_token = await executeRecaptcha();
53
+ }
54
+ return {
55
+ dfp_telemetry_id,
56
+ captcha_token
57
+ };
58
+ };
59
+ retryWithCaptchaAndDFP = async (e, req)=>{
60
+ const { enabled, executeRecaptcha } = await this.state;
61
+ if (e.type === RetriableErrorType.RequiredCaptcha && enabled) {
62
+ if (req.body) {
63
+ req.body.dfp_telemetry_id = await this.getTelemetryID();
64
+ req.body.captcha_token = await executeRecaptcha();
65
+ }
66
+ return req;
67
+ }
68
+ throw new Error('Unable to query captcha and/or dfp telemetry ID');
69
+ };
74
70
  }
75
71
  const DisabledDFPProtectedAuthProvider = ()=>({
76
72
  isEnabled: async ()=>false,
@@ -1 +1 @@
1
- {"version":3,"file":"DFPProtectedAuthProvider.mjs","sources":["../../../../../../core/src/DFPProtectedAuthProvider.ts"],"sourcesContent":["import { RetriableError, RetriableErrorType, SDKBaseRequestInfo } from './NetworkClient';\nimport { BootstrapData } from './types';\nimport { loadESModule } from './utils';\n\ndeclare global {\n // The telemetry.js script will set a global function called GetTelemetryID on the window\n // object. This interface is allows us to call that function while pleasing the TypeScript\n // compiler.\n interface Window {\n GetTelemetryID: (publicToken: string, submitURL: string) => Promise<string>;\n }\n}\n\nconst loadTelemetryJS = (domain: string) => loadESModule(`${domain}/telemetry.js`, () => window.GetTelemetryID);\n\nexport type DFPProtectedAuthMode = 'OBSERVATION' | 'DECISIONING';\n\nexport type DFPProtectedAuthState = {\n publicToken: string;\n dfpBackendURL: string;\n mode?: DFPProtectedAuthMode;\n enabled: boolean;\n loaded: boolean;\n executeRecaptcha: () => Promise<string | undefined>;\n};\n\nexport class DFPProtectedAuthProvider {\n private state: Promise<DFPProtectedAuthState>;\n constructor(\n publicToken: string,\n dfpBackendURL: string,\n dfpCdnDomain: string,\n private bootstrapPromise: Promise<BootstrapData>,\n executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n ) {\n this.state = bootstrapPromise.then(async (bootstrapData) => {\n if (!bootstrapData.runDFPProtectedAuth) {\n return { publicToken, dfpBackendURL, enabled: false, loaded: false, executeRecaptcha };\n }\n await loadTelemetryJS(dfpCdnDomain);\n return {\n publicToken,\n dfpBackendURL,\n enabled: true,\n mode: bootstrapData.dfpProtectedAuthMode || 'OBSERVATION',\n loaded: true,\n executeRecaptcha,\n };\n });\n }\n\n isEnabled = async (): Promise<boolean> => {\n return this.state.then((state) => state.enabled);\n };\n\n getTelemetryID = async (): Promise<string | undefined> => {\n const { publicToken, enabled, dfpBackendURL } = await this.state;\n if (!enabled) {\n return undefined;\n }\n return await window.GetTelemetryID(publicToken, `${dfpBackendURL}/submit`);\n };\n\n getDFPTelemetryIDAndCaptcha = async (): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }> => {\n const { enabled, executeRecaptcha, mode } = await this.state;\n\n let dfp_telemetry_id: string | undefined = undefined;\n let captcha_token: string | undefined = undefined;\n if (!enabled) {\n captcha_token = await executeRecaptcha();\n }\n if (mode === 'DECISIONING') {\n dfp_telemetry_id = await this.getTelemetryID();\n } else if (mode === 'OBSERVATION') {\n dfp_telemetry_id = await this.getTelemetryID();\n captcha_token = await executeRecaptcha();\n }\n return { dfp_telemetry_id, captcha_token };\n };\n\n retryWithCaptchaAndDFP = async (e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo> => {\n const { enabled, executeRecaptcha } = await this.state;\n if (e.type === RetriableErrorType.RequiredCaptcha && enabled) {\n if (req.body) {\n req.body.dfp_telemetry_id = await this.getTelemetryID();\n req.body.captcha_token = await executeRecaptcha();\n }\n return req;\n }\n throw new Error('Unable to query captcha and/or dfp telemetry ID');\n };\n}\n\nexport const DisabledDFPProtectedAuthProvider = () => ({\n isEnabled: async () => false,\n getTelemetryID: async () => undefined,\n getDFPTelemetryIDAndCaptcha: async () => ({\n dfp_telemetry_id: undefined,\n captcha_token: undefined,\n }),\n retryWithCaptchaAndDFP: async () => {\n throw new Error('DFP protected auth is disabled');\n },\n});\n\nexport interface IDFPProtectedAuthProvider {\n isEnabled(): Promise<boolean>;\n getTelemetryID(): Promise<string | undefined>;\n retryWithCaptchaAndDFP(e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo>;\n getDFPTelemetryIDAndCaptcha(): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }>;\n}\n"],"names":["loadTelemetryJS","domain","loadESModule","window","GetTelemetryID","DFPProtectedAuthProvider","state","constructor","publicToken","dfpBackendURL","dfpCdnDomain","bootstrapPromise","executeRecaptcha","Promise","resolve","undefined","isEnabled","then","enabled","getTelemetryID","getDFPTelemetryIDAndCaptcha","mode","dfp_telemetry_id","captcha_token","retryWithCaptchaAndDFP","e","req","type","RetriableErrorType","RequiredCaptcha","body","Error","bootstrapData","runDFPProtectedAuth","loaded","dfpProtectedAuthMode","DisabledDFPProtectedAuthProvider"],"mappings":"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"}
1
+ {"version":3,"file":"DFPProtectedAuthProvider.mjs","sources":["../../../../../../core/src/DFPProtectedAuthProvider.ts"],"sourcesContent":["import { RetriableError, RetriableErrorType, SDKBaseRequestInfo } from './NetworkClient';\nimport { BootstrapData } from './types';\nimport { loadESModule } from './utils';\n\ndeclare global {\n // The telemetry.js script will set a global function called GetTelemetryID on the window\n // object. This interface is allows us to call that function while pleasing the TypeScript\n // compiler.\n interface Window {\n GetTelemetryID: (publicToken: string, submitURL: string) => Promise<string>;\n }\n}\n\nconst loadTelemetryJS = (domain: string) => loadESModule(`${domain}/telemetry.js`, () => window.GetTelemetryID);\n\nexport type DFPProtectedAuthMode = 'OBSERVATION' | 'DECISIONING';\n\nexport type DFPProtectedAuthState = {\n publicToken: string;\n dfpBackendURL: string;\n mode?: DFPProtectedAuthMode;\n enabled: boolean;\n loaded: boolean;\n executeRecaptcha: () => Promise<string | undefined>;\n};\n\nexport class DFPProtectedAuthProvider {\n private state: Promise<DFPProtectedAuthState>;\n constructor(\n publicToken: string,\n dfpBackendURL: string,\n dfpCdnDomain: string,\n private bootstrapPromise: Promise<BootstrapData>,\n executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n ) {\n this.state = bootstrapPromise.then(async (bootstrapData) => {\n if (!bootstrapData.runDFPProtectedAuth) {\n return { publicToken, dfpBackendURL, enabled: false, loaded: false, executeRecaptcha };\n }\n await loadTelemetryJS(dfpCdnDomain);\n return {\n publicToken,\n dfpBackendURL,\n enabled: true,\n mode: bootstrapData.dfpProtectedAuthMode || 'OBSERVATION',\n loaded: true,\n executeRecaptcha,\n };\n });\n }\n\n isEnabled = async (): Promise<boolean> => {\n return this.state.then((state) => state.enabled);\n };\n\n getTelemetryID = async (): Promise<string | undefined> => {\n const { publicToken, enabled, dfpBackendURL } = await this.state;\n if (!enabled) {\n return undefined;\n }\n return await window.GetTelemetryID(publicToken, `${dfpBackendURL}/submit`);\n };\n\n getDFPTelemetryIDAndCaptcha = async (): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }> => {\n const { enabled, executeRecaptcha, mode } = await this.state;\n\n let dfp_telemetry_id: string | undefined = undefined;\n let captcha_token: string | undefined = undefined;\n if (!enabled) {\n captcha_token = await executeRecaptcha();\n }\n if (mode === 'DECISIONING') {\n dfp_telemetry_id = await this.getTelemetryID();\n } else if (mode === 'OBSERVATION') {\n dfp_telemetry_id = await this.getTelemetryID();\n captcha_token = await executeRecaptcha();\n }\n return { dfp_telemetry_id, captcha_token };\n };\n\n retryWithCaptchaAndDFP = async (e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo> => {\n const { enabled, executeRecaptcha } = await this.state;\n if (e.type === RetriableErrorType.RequiredCaptcha && enabled) {\n if (req.body) {\n req.body.dfp_telemetry_id = await this.getTelemetryID();\n req.body.captcha_token = await executeRecaptcha();\n }\n return req;\n }\n throw new Error('Unable to query captcha and/or dfp telemetry ID');\n };\n}\n\nexport const DisabledDFPProtectedAuthProvider = () => ({\n isEnabled: async () => false,\n getTelemetryID: async () => undefined,\n getDFPTelemetryIDAndCaptcha: async () => ({\n dfp_telemetry_id: undefined,\n captcha_token: undefined,\n }),\n retryWithCaptchaAndDFP: async () => {\n throw new Error('DFP protected auth is disabled');\n },\n});\n\nexport interface IDFPProtectedAuthProvider {\n isEnabled(): Promise<boolean>;\n getTelemetryID(): Promise<string | undefined>;\n retryWithCaptchaAndDFP(e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo>;\n getDFPTelemetryIDAndCaptcha(): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }>;\n}\n"],"names":["loadTelemetryJS","domain","loadESModule","window","GetTelemetryID","DFPProtectedAuthProvider","state","publicToken","dfpBackendURL","dfpCdnDomain","bootstrapPromise","executeRecaptcha","Promise","resolve","undefined","then","bootstrapData","runDFPProtectedAuth","enabled","loaded","mode","dfpProtectedAuthMode","isEnabled","getTelemetryID","getDFPTelemetryIDAndCaptcha","dfp_telemetry_id","captcha_token","retryWithCaptchaAndDFP","e","req","type","RetriableErrorType","RequiredCaptcha","body","Error","DisabledDFPProtectedAuthProvider"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventLogger.mjs","sources":["../../../../../../core/src/EventLogger.ts"],"sourcesContent":["import { SDKTelemetry } from './NetworkClient';\n\nexport const DEFAULT_MAX_BATCH_SIZE = 15;\nexport const DEFAULT_INTERVAL_DURATION_MS = 800;\n\ntype EventLoggerArgs = {\n maxBatchSize: number;\n intervalDurationMs: number;\n logEventURL: string;\n};\n\nexport class EventLogger {\n private maxBatchSize: number;\n private logEventURL: string;\n private batch: Record<string, unknown>[];\n\n constructor(args: EventLoggerArgs) {\n this.maxBatchSize = args.maxBatchSize;\n this.logEventURL = args.logEventURL;\n // TODO: If we create more than one of these, we'll want a mechanism to clean up the intervals\n setInterval(this.flush.bind(this), args.intervalDurationMs);\n this.batch = [];\n }\n\n logEvent(telemetry: SDKTelemetry, event: Record<string, unknown>) {\n this.batch.push({ telemetry, event });\n if (this.batch.length >= this.maxBatchSize) {\n this.flush();\n }\n }\n\n async flush() {\n if (!this.batch.length) {\n return;\n }\n const batchToSubmit = this.batch;\n this.batch = [];\n try {\n await fetch(this.logEventURL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(batchToSubmit),\n });\n } catch {\n // Silently ignore fetch errors\n }\n }\n}\n"],"names":["DEFAULT_MAX_BATCH_SIZE","DEFAULT_INTERVAL_DURATION_MS","EventLogger","maxBatchSize","logEventURL","batch","constructor","args","setInterval","flush","bind","intervalDurationMs","logEvent","telemetry","event","push","length","batchToSubmit","fetch","method","headers","body","JSON","stringify"],"mappings":"AAEO,MAAMA,yBAAyB;AAC/B,MAAMC,+BAA+B;AAQrC,MAAMC,WAAAA,CAAAA;IACHC,YAAAA;IACAC,WAAAA;IACAC,KAAAA;AAERC,IAAAA,WAAAA,CAAYC,IAAqB,CAAE;AACjC,QAAA,IAAI,CAACJ,YAAY,GAAGI,IAAAA,CAAKJ,YAAY;AACrC,QAAA,IAAI,CAACC,WAAW,GAAGG,IAAAA,CAAKH,WAAW;;QAEnCI,WAAAA,CAAY,IAAI,CAACC,KAAK,CAACC,IAAI,CAAC,IAAI,CAAA,EAAGH,IAAAA,CAAKI,kBAAkB,CAAA;QAC1D,IAAI,CAACN,KAAK,GAAG,EAAE;AACjB,IAAA;IAEAO,QAAAA,CAASC,SAAuB,EAAEC,KAA8B,EAAE;AAChE,QAAA,IAAI,CAACT,KAAK,CAACU,IAAI,CAAC;AAAEF,YAAAA,SAAAA;AAAWC,YAAAA;AAAM,SAAA,CAAA;QACnC,IAAI,IAAI,CAACT,KAAK,CAACW,MAAM,IAAI,IAAI,CAACb,YAAY,EAAE;AAC1C,YAAA,IAAI,CAACM,KAAK,EAAA;AACZ,QAAA;AACF,IAAA;AAEA,IAAA,MAAMA,KAAAA,GAAQ;AACZ,QAAA,IAAI,CAAC,IAAI,CAACJ,KAAK,CAACW,MAAM,EAAE;AACtB,YAAA;AACF,QAAA;QACA,MAAMC,aAAAA,GAAgB,IAAI,CAACZ,KAAK;QAChC,IAAI,CAACA,KAAK,GAAG,EAAE;QACf,IAAI;AACF,YAAA,MAAMa,KAAAA,CAAM,IAAI,CAACd,WAAW,EAAE;gBAC5Be,MAAAA,EAAQ,MAAA;gBACRC,OAAAA,EAAS;oBACP,cAAA,EAAgB;AAClB,iBAAA;gBACAC,IAAAA,EAAMC,IAAAA,CAAKC,SAAS,CAACN,aAAAA;AACvB,aAAA,CAAA;AACF,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AACF,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"EventLogger.mjs","sources":["../../../../../../core/src/EventLogger.ts"],"sourcesContent":["import { SDKTelemetry } from './NetworkClient';\n\nexport const DEFAULT_MAX_BATCH_SIZE = 15;\nexport const DEFAULT_INTERVAL_DURATION_MS = 800;\n\ntype EventLoggerArgs = {\n maxBatchSize: number;\n intervalDurationMs: number;\n logEventURL: string;\n};\n\nexport class EventLogger {\n private maxBatchSize: number;\n private logEventURL: string;\n private batch: Record<string, unknown>[];\n\n constructor(args: EventLoggerArgs) {\n this.maxBatchSize = args.maxBatchSize;\n this.logEventURL = args.logEventURL;\n // TODO: If we create more than one of these, we'll want a mechanism to clean up the intervals\n setInterval(this.flush.bind(this), args.intervalDurationMs);\n this.batch = [];\n }\n\n logEvent(telemetry: SDKTelemetry, event: Record<string, unknown>) {\n this.batch.push({ telemetry, event });\n if (this.batch.length >= this.maxBatchSize) {\n this.flush();\n }\n }\n\n async flush() {\n if (!this.batch.length) {\n return;\n }\n const batchToSubmit = this.batch;\n this.batch = [];\n try {\n await fetch(this.logEventURL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(batchToSubmit),\n });\n } catch {\n // Silently ignore fetch errors\n }\n }\n}\n"],"names":["DEFAULT_MAX_BATCH_SIZE","DEFAULT_INTERVAL_DURATION_MS","EventLogger","maxBatchSize","logEventURL","batch","args","setInterval","flush","bind","intervalDurationMs","logEvent","telemetry","event","push","length","batchToSubmit","fetch","method","headers","body","JSON","stringify"],"mappings":"AAEO,MAAMA,yBAAyB;AAC/B,MAAMC,+BAA+B;AAQrC,MAAMC,WAAAA,CAAAA;IACHC,YAAAA;IACAC,WAAAA;IACAC,KAAAA;AAER,IAAA,WAAA,CAAYC,IAAqB,CAAE;AACjC,QAAA,IAAI,CAACH,YAAY,GAAGG,IAAAA,CAAKH,YAAY;AACrC,QAAA,IAAI,CAACC,WAAW,GAAGE,IAAAA,CAAKF,WAAW;;QAEnCG,WAAAA,CAAY,IAAI,CAACC,KAAK,CAACC,IAAI,CAAC,IAAI,CAAA,EAAGH,IAAAA,CAAKI,kBAAkB,CAAA;QAC1D,IAAI,CAACL,KAAK,GAAG,EAAE;AACjB,IAAA;IAEAM,QAAAA,CAASC,SAAuB,EAAEC,KAA8B,EAAE;AAChE,QAAA,IAAI,CAACR,KAAK,CAACS,IAAI,CAAC;AAAEF,YAAAA,SAAAA;AAAWC,YAAAA;AAAM,SAAA,CAAA;QACnC,IAAI,IAAI,CAACR,KAAK,CAACU,MAAM,IAAI,IAAI,CAACZ,YAAY,EAAE;AAC1C,YAAA,IAAI,CAACK,KAAK,EAAA;AACZ,QAAA;AACF,IAAA;AAEA,IAAA,MAAMA,KAAAA,GAAQ;AACZ,QAAA,IAAI,CAAC,IAAI,CAACH,KAAK,CAACU,MAAM,EAAE;AACtB,YAAA;AACF,QAAA;QACA,MAAMC,aAAAA,GAAgB,IAAI,CAACX,KAAK;QAChC,IAAI,CAACA,KAAK,GAAG,EAAE;QACf,IAAI;AACF,YAAA,MAAMY,KAAAA,CAAM,IAAI,CAACb,WAAW,EAAE;gBAC5Bc,MAAAA,EAAQ,MAAA;gBACRC,OAAAA,EAAS;oBACP,cAAA,EAAgB;AAClB,iBAAA;gBACAC,IAAAA,EAAMC,IAAAA,CAAKC,SAAS,CAACN,aAAAA;AACvB,aAAA,CAAA;AACF,QAAA,CAAA,CAAE,OAAM;;AAER,QAAA;AACF,IAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessCryptoWalletClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessCryptoWalletClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n CryptoWalletAuthenticateOptions,\n CryptoWalletAuthenticateResponse,\n CryptoWalletAuthenticateStartOptions,\n CryptoWalletAuthenticateStartResponse,\n IHeadlessCryptoWalletClient,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n siweRequiredForCryptoWallets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n siweRequiredForCryptoWallets: false,\n});\n\nexport class HeadlessCryptoWalletClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessCryptoWalletClient<TProjectConfiguration>\n{\n authenticate: (\n options: CryptoWalletAuthenticateOptions,\n ) => Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _apiNetworkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n private _config: DynamicConfig = DefaultDynamicConfig,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (\n options: CryptoWalletAuthenticateOptions,\n ): Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.cryptoWallets.authenticate', options, {\n signature: 'string',\n crypto_wallet_address: 'string',\n crypto_wallet_type: '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._apiNetworkClient.retriableFetchSDK<\n WithUser<CryptoWalletAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/crypto_wallets/authenticate',\n method: 'POST',\n body: {\n session_duration_minutes: options.session_duration_minutes,\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n signature: options.signature,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n async authenticateStart(\n options: CryptoWalletAuthenticateStartOptions,\n ): Promise<CryptoWalletAuthenticateStartResponse> {\n validateInDev('stytch.cryptoWallets.authenticateStart', options, {\n crypto_wallet_address: 'string',\n crypto_wallet_type: 'string',\n });\n if (options.siwe_params) {\n validateInDev('stytch.cryptoWallets.authenticateStart', options.siwe_params, {\n uri: 'optionalString',\n chain_id: 'optionalString',\n issued_at: 'optionalString',\n statement: 'optionalString',\n not_before: 'optionalString',\n message_request_id: 'optionalString',\n resources: 'optionalStringArray',\n });\n }\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n const captcha_token = await this.executeRecaptcha();\n const { siweRequiredForCryptoWallets } = await this._config;\n\n const body: CryptoWalletAuthenticateStartOptions = {\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n };\n if (siweRequiredForCryptoWallets && options.crypto_wallet_type == 'ethereum') {\n body.siwe_params = { ...options.siwe_params, uri: options.siwe_params?.uri || window.location.origin };\n }\n\n const endpoint = isLoggedIn\n ? '/crypto_wallets/authenticate/start/secondary'\n : '/crypto_wallets/authenticate/start/primary';\n\n const requestBody = {\n ...body,\n captcha_token,\n };\n return this._apiNetworkClient.fetchSDK<CryptoWalletAuthenticateStartResponse>({\n url: endpoint,\n method: 'POST',\n body: requestBody,\n });\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","siweRequiredForCryptoWallets","HeadlessCryptoWalletClient","authenticate","constructor","_networkClient","_apiNetworkClient","_subscriptionService","executeRecaptcha","undefined","dfpProtectedAuth","_config","withUpdateSession","options","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","session_duration_minutes","crypto_wallet_address","crypto_wallet_type","signature","retryCallback","retryWithCaptchaAndDFP","omitUser","authenticateStart","siwe_params","isLoggedIn","getSession","uri","window","location","origin","endpoint","requestBody","fetchSDK"],"mappings":";;AAgBA,MAAMA,oBAAAA,GAAuBC,OAAAA,CAAQC,OAAO,CAAC;IAC3CC,4BAAAA,EAA8B;AAChC,CAAA,CAAA;AAEO,MAAMC,0BAAAA,CAAAA;;;;;;;IAGXC,YAAAA;IAIAC,WAAAA,CACUC,cAA8B,EAC9BC,iBAAiC,EACjCC,oBAAyE,EACjF,gBAAQC,GAAsD,IAAMT,OAAAA,CAAQC,OAAO,CAACS,SAAAA,CAAU,EACtFC,gBAA2C,EAC3CC,OAAAA,GAAyBb,oBAAoB,CACrD;aANQO,cAAAA,GAAAA,cAAAA;aACAC,iBAAAA,GAAAA,iBAAAA;aACAC,oBAAAA,GAAAA,oBAAAA;aACAC,gBAAAA,GAAAA,gBAAAA;aACAE,gBAAAA,GAAAA,gBAAAA;aACAC,OAAAA,GAAAA,OAAAA;QAER,IAAI,CAACR,YAAY,GAAG,IAAI,CAACI,oBAAoB,CAACK,iBAAiB,CAC7D,OACEC,OAAAA,GAAAA;YASA,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACL,gBAAgB,CAACM,2BAA2B,EAAA;AAEnG,YAAA,MAAMC,OAAO,MAAM,IAAI,CAACX,iBAAiB,CAACY,iBAAiB,CAEzD;gBACAC,GAAAA,EAAK,8BAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJC,oBAAAA,wBAAAA,EAA0BT,QAAQS,wBAAwB;AAC1DC,oBAAAA,qBAAAA,EAAuBV,QAAQU,qBAAqB;AACpDC,oBAAAA,kBAAAA,EAAoBX,QAAQW,kBAAkB;AAC9CC,oBAAAA,SAAAA,EAAWZ,QAAQY,SAAS;AAC5BV,oBAAAA,aAAAA;AACAD,oBAAAA;AACF,iBAAA;AACAY,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;AAEA,YAAA,OAAOC,QAAAA,CAASX,IAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;AAEJ,IAAA;IAEA,MAAMY,iBAAAA,CACJhB,OAA6C,EACG;QAKhD,IAAIA,OAAAA,CAAQiB,WAAW,EAAE;AAYzB,QAAA,MAAMC,aAAa,CAAC,CAAC,IAAI,CAACxB,oBAAoB,CAACyB,UAAU,EAAA;AACzD,QAAA,MAAMjB,aAAAA,GAAgB,MAAM,IAAI,CAACP,gBAAgB,EAAA;AACjD,QAAA,MAAM,EAAEP,4BAA4B,EAAE,GAAG,MAAM,IAAI,CAACU,OAAO;AAE3D,QAAA,MAAMU,IAAAA,GAA6C;AACjDE,YAAAA,qBAAAA,EAAuBV,QAAQU,qBAAqB;AACpDC,YAAAA,kBAAAA,EAAoBX,QAAQW;AAC9B,SAAA;AACA,QAAA,IAAIvB,4BAAAA,IAAgCY,OAAAA,CAAQW,kBAAkB,IAAI,UAAA,EAAY;AAC5EH,YAAAA,IAAAA,CAAKS,WAAW,GAAG;AAAE,gBAAA,GAAGjB,QAAQiB,WAAW;AAAEG,gBAAAA,GAAAA,EAAKpB,QAAQiB,WAAW,EAAEG,OAAOC,MAAAA,CAAOC,QAAQ,CAACC;AAAO,aAAA;AACvG,QAAA;QAEA,MAAMC,QAAAA,GAAWN,aACb,8CAAA,GACA,4CAAA;AAEJ,QAAA,MAAMO,WAAAA,GAAc;AAClB,YAAA,GAAGjB,IAAI;AACPN,YAAAA;AACF,SAAA;AACA,QAAA,OAAO,IAAI,CAACT,iBAAiB,CAACiC,QAAQ,CAAwC;YAC5EpB,GAAAA,EAAKkB,QAAAA;YACLjB,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAMiB;AACR,SAAA,CAAA;AACF,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"HeadlessCryptoWalletClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessCryptoWalletClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n CryptoWalletAuthenticateOptions,\n CryptoWalletAuthenticateResponse,\n CryptoWalletAuthenticateStartOptions,\n CryptoWalletAuthenticateStartResponse,\n IHeadlessCryptoWalletClient,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n siweRequiredForCryptoWallets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n siweRequiredForCryptoWallets: false,\n});\n\nexport class HeadlessCryptoWalletClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessCryptoWalletClient<TProjectConfiguration>\n{\n authenticate: (\n options: CryptoWalletAuthenticateOptions,\n ) => Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _apiNetworkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n private _config: DynamicConfig = DefaultDynamicConfig,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (\n options: CryptoWalletAuthenticateOptions,\n ): Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.cryptoWallets.authenticate', options, {\n signature: 'string',\n crypto_wallet_address: 'string',\n crypto_wallet_type: '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._apiNetworkClient.retriableFetchSDK<\n WithUser<CryptoWalletAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/crypto_wallets/authenticate',\n method: 'POST',\n body: {\n session_duration_minutes: options.session_duration_minutes,\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n signature: options.signature,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n async authenticateStart(\n options: CryptoWalletAuthenticateStartOptions,\n ): Promise<CryptoWalletAuthenticateStartResponse> {\n validateInDev('stytch.cryptoWallets.authenticateStart', options, {\n crypto_wallet_address: 'string',\n crypto_wallet_type: 'string',\n });\n if (options.siwe_params) {\n validateInDev('stytch.cryptoWallets.authenticateStart', options.siwe_params, {\n uri: 'optionalString',\n chain_id: 'optionalString',\n issued_at: 'optionalString',\n statement: 'optionalString',\n not_before: 'optionalString',\n message_request_id: 'optionalString',\n resources: 'optionalStringArray',\n });\n }\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n const captcha_token = await this.executeRecaptcha();\n const { siweRequiredForCryptoWallets } = await this._config;\n\n const body: CryptoWalletAuthenticateStartOptions = {\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n };\n if (siweRequiredForCryptoWallets && options.crypto_wallet_type == 'ethereum') {\n body.siwe_params = { ...options.siwe_params, uri: options.siwe_params?.uri || window.location.origin };\n }\n\n const endpoint = isLoggedIn\n ? '/crypto_wallets/authenticate/start/secondary'\n : '/crypto_wallets/authenticate/start/primary';\n\n const requestBody = {\n ...body,\n captcha_token,\n };\n return this._apiNetworkClient.fetchSDK<CryptoWalletAuthenticateStartResponse>({\n url: endpoint,\n method: 'POST',\n body: requestBody,\n });\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","siweRequiredForCryptoWallets","HeadlessCryptoWalletClient","authenticate","_networkClient","_apiNetworkClient","_subscriptionService","executeRecaptcha","undefined","dfpProtectedAuth","_config","withUpdateSession","options","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","session_duration_minutes","crypto_wallet_address","crypto_wallet_type","signature","retryCallback","retryWithCaptchaAndDFP","omitUser","authenticateStart","siwe_params","isLoggedIn","getSession","uri","window","location","origin","endpoint","requestBody","fetchSDK"],"mappings":";;AAgBA,MAAMA,oBAAAA,GAAuBC,OAAAA,CAAQC,OAAO,CAAC;IAC3CC,4BAAAA,EAA8B;AAChC,CAAA,CAAA;AAEO,MAAMC,0BAAAA,CAAAA;;;;;;;IAGXC,YAAAA;IAIA,WAAA,CACUC,cAA8B,EAC9BC,iBAAiC,EACjCC,oBAAyE,EACjF,gBAAQC,GAAsD,IAAMR,OAAAA,CAAQC,OAAO,CAACQ,SAAAA,CAAU,EACtFC,gBAA2C,EAC3CC,OAAAA,GAAyBZ,oBAAoB,CACrD;aANQM,cAAAA,GAAAA,cAAAA;aACAC,iBAAAA,GAAAA,iBAAAA;aACAC,oBAAAA,GAAAA,oBAAAA;aACAC,gBAAAA,GAAAA,gBAAAA;aACAE,gBAAAA,GAAAA,gBAAAA;aACAC,OAAAA,GAAAA,OAAAA;QAER,IAAI,CAACP,YAAY,GAAG,IAAI,CAACG,oBAAoB,CAACK,iBAAiB,CAC7D,OACEC,OAAAA,GAAAA;YASA,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACL,gBAAgB,CAACM,2BAA2B,EAAA;AAEnG,YAAA,MAAMC,OAAO,MAAM,IAAI,CAACX,iBAAiB,CAACY,iBAAiB,CAEzD;gBACAC,GAAAA,EAAK,8BAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAM;AACJC,oBAAAA,wBAAAA,EAA0BT,QAAQS,wBAAwB;AAC1DC,oBAAAA,qBAAAA,EAAuBV,QAAQU,qBAAqB;AACpDC,oBAAAA,kBAAAA,EAAoBX,QAAQW,kBAAkB;AAC9CC,oBAAAA,SAAAA,EAAWZ,QAAQY,SAAS;AAC5BV,oBAAAA,aAAAA;AACAD,oBAAAA;AACF,iBAAA;AACAY,gBAAAA,aAAAA,EAAe,IAAI,CAAChB,gBAAgB,CAACiB;AACvC,aAAA,CAAA;AAEA,YAAA,OAAOC,QAAAA,CAASX,IAAAA,CAAAA;AAClB,QAAA,CAAA,CAAA;AAEJ,IAAA;IAEA,MAAMY,iBAAAA,CACJhB,OAA6C,EACG;QAKhD,IAAIA,OAAAA,CAAQiB,WAAW,EAAE;AAYzB,QAAA,MAAMC,aAAa,CAAC,CAAC,IAAI,CAACxB,oBAAoB,CAACyB,UAAU,EAAA;AACzD,QAAA,MAAMjB,aAAAA,GAAgB,MAAM,IAAI,CAACP,gBAAgB,EAAA;AACjD,QAAA,MAAM,EAAEN,4BAA4B,EAAE,GAAG,MAAM,IAAI,CAACS,OAAO;AAE3D,QAAA,MAAMU,IAAAA,GAA6C;AACjDE,YAAAA,qBAAAA,EAAuBV,QAAQU,qBAAqB;AACpDC,YAAAA,kBAAAA,EAAoBX,QAAQW;AAC9B,SAAA;AACA,QAAA,IAAItB,4BAAAA,IAAgCW,OAAAA,CAAQW,kBAAkB,IAAI,UAAA,EAAY;AAC5EH,YAAAA,IAAAA,CAAKS,WAAW,GAAG;AAAE,gBAAA,GAAGjB,QAAQiB,WAAW;AAAEG,gBAAAA,GAAAA,EAAKpB,QAAQiB,WAAW,EAAEG,OAAOC,MAAAA,CAAOC,QAAQ,CAACC;AAAO,aAAA;AACvG,QAAA;QAEA,MAAMC,QAAAA,GAAWN,aACb,8CAAA,GACA,4CAAA;AAEJ,QAAA,MAAMO,WAAAA,GAAc;AAClB,YAAA,GAAGjB,IAAI;AACPN,YAAAA;AACF,SAAA;AACA,QAAA,OAAO,IAAI,CAACT,iBAAiB,CAACiC,QAAQ,CAAwC;YAC5EpB,GAAAA,EAAKkB,QAAAA;YACLjB,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAMiB;AACR,SAAA,CAAA;AACF,IAAA;AACF;;;;"}
@@ -2,25 +2,22 @@ class HeadlessIDPClient {
2
2
  _networkClient;
3
3
  constructor(_networkClient){
4
4
  this._networkClient = _networkClient;
5
- this.oauthAuthorizeStart = async (data)=>this._networkClient.fetchSDK({
6
- url: '/idp/oauth/authorize/start',
7
- method: 'POST',
8
- body: data
9
- });
10
- this.oauthAuthorizeSubmit = async (data)=>this._networkClient.fetchSDK({
11
- url: '/idp/oauth/authorize/submit',
12
- method: 'POST',
13
- body: data
14
- });
15
- this.oauthLogoutStart = async (data)=>this._networkClient.fetchSDK({
16
- url: `/oauth/logout/start`,
17
- method: 'POST',
18
- body: data
19
- });
20
5
  }
21
- oauthAuthorizeStart;
22
- oauthAuthorizeSubmit;
23
- oauthLogoutStart;
6
+ oauthAuthorizeStart = async (data)=>this._networkClient.fetchSDK({
7
+ url: '/idp/oauth/authorize/start',
8
+ method: 'POST',
9
+ body: data
10
+ });
11
+ oauthAuthorizeSubmit = async (data)=>this._networkClient.fetchSDK({
12
+ url: '/idp/oauth/authorize/submit',
13
+ method: 'POST',
14
+ body: data
15
+ });
16
+ oauthLogoutStart = async (data)=>this._networkClient.fetchSDK({
17
+ url: `/oauth/logout/start`,
18
+ method: 'POST',
19
+ body: data
20
+ });
24
21
  }
25
22
 
26
23
  export { HeadlessIDPClient };
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessIDPClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessIDPClient.ts"],"sourcesContent":["import { INetworkClient } from '../NetworkClient';\nimport {\n IHeadlessIDPClient,\n OAuthAuthorizeStartOptions,\n OAuthAuthorizeStartResponse,\n OAuthAuthorizeSubmitOptions,\n OAuthAuthorizeSubmitResponse,\n OAuthLogoutStartOptions,\n OAuthLogoutStartResponse,\n} from '../public/idp';\n\nexport class HeadlessIDPClient implements IHeadlessIDPClient {\n constructor(private _networkClient: INetworkClient) {}\n\n oauthAuthorizeStart = async (data: OAuthAuthorizeStartOptions): Promise<OAuthAuthorizeStartResponse> =>\n this._networkClient.fetchSDK<OAuthAuthorizeStartResponse>({\n url: '/idp/oauth/authorize/start',\n method: 'POST',\n body: data,\n });\n\n oauthAuthorizeSubmit = async (data: OAuthAuthorizeSubmitOptions): Promise<OAuthAuthorizeSubmitResponse> =>\n this._networkClient.fetchSDK<OAuthAuthorizeSubmitResponse>({\n url: '/idp/oauth/authorize/submit',\n method: 'POST',\n body: data,\n });\n\n oauthLogoutStart = async (data: OAuthLogoutStartOptions): Promise<OAuthLogoutStartResponse> =>\n this._networkClient.fetchSDK<OAuthLogoutStartResponse>({\n url: `/oauth/logout/start`,\n method: 'POST',\n body: data,\n });\n}\n"],"names":["HeadlessIDPClient","constructor","_networkClient","oauthAuthorizeStart","data","fetchSDK","url","method","body","oauthAuthorizeSubmit","oauthLogoutStart"],"mappings":"AAWO,MAAMA,iBAAAA,CAAAA;;IACXC,WAAAA,CAAoBC,cAA8B,CAAE;aAAhCA,cAAAA,GAAAA,cAAAA;AAEpBC,QAAAA,IAAAA,CAAAA,mBAAAA,GAAsB,OAAOC,IAAAA,GAC3B,IAAI,CAACF,cAAc,CAACG,QAAQ,CAA8B;gBACxDC,GAAAA,EAAK,4BAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAMJ;AACR,aAAA,CAAA;AAEFK,QAAAA,IAAAA,CAAAA,oBAAAA,GAAuB,OAAOL,IAAAA,GAC5B,IAAI,CAACF,cAAc,CAACG,QAAQ,CAA+B;gBACzDC,GAAAA,EAAK,6BAAA;gBACLC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAMJ;AACR,aAAA,CAAA;AAEFM,QAAAA,IAAAA,CAAAA,gBAAAA,GAAmB,OAAON,IAAAA,GACxB,IAAI,CAACF,cAAc,CAACG,QAAQ,CAA2B;gBACrDC,GAAAA,EAAK,CAAC,mBAAmB,CAAC;gBAC1BC,MAAAA,EAAQ,MAAA;gBACRC,IAAAA,EAAMJ;AACR,aAAA,CAAA;AArBmD,IAAA;IAErDD,mBAAAA;IAOAM,oBAAAA;IAOAC,gBAAAA;AAMF;;;;"}
1
+ {"version":3,"file":"HeadlessIDPClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessIDPClient.ts"],"sourcesContent":["import { INetworkClient } from '../NetworkClient';\nimport {\n IHeadlessIDPClient,\n OAuthAuthorizeStartOptions,\n OAuthAuthorizeStartResponse,\n OAuthAuthorizeSubmitOptions,\n OAuthAuthorizeSubmitResponse,\n OAuthLogoutStartOptions,\n OAuthLogoutStartResponse,\n} from '../public/idp';\n\nexport class HeadlessIDPClient implements IHeadlessIDPClient {\n constructor(private _networkClient: INetworkClient) {}\n\n oauthAuthorizeStart = async (data: OAuthAuthorizeStartOptions): Promise<OAuthAuthorizeStartResponse> =>\n this._networkClient.fetchSDK<OAuthAuthorizeStartResponse>({\n url: '/idp/oauth/authorize/start',\n method: 'POST',\n body: data,\n });\n\n oauthAuthorizeSubmit = async (data: OAuthAuthorizeSubmitOptions): Promise<OAuthAuthorizeSubmitResponse> =>\n this._networkClient.fetchSDK<OAuthAuthorizeSubmitResponse>({\n url: '/idp/oauth/authorize/submit',\n method: 'POST',\n body: data,\n });\n\n oauthLogoutStart = async (data: OAuthLogoutStartOptions): Promise<OAuthLogoutStartResponse> =>\n this._networkClient.fetchSDK<OAuthLogoutStartResponse>({\n url: `/oauth/logout/start`,\n method: 'POST',\n body: data,\n });\n}\n"],"names":["HeadlessIDPClient","_networkClient","oauthAuthorizeStart","data","fetchSDK","url","method","body","oauthAuthorizeSubmit","oauthLogoutStart"],"mappings":"AAWO,MAAMA,iBAAAA,CAAAA;;IACX,WAAA,CAAoBC,cAA8B,CAAE;aAAhCA,cAAAA,GAAAA,cAAAA;AAAiC,IAAA;AAErDC,IAAAA,mBAAAA,GAAsB,OAAOC,IAAAA,GAC3B,IAAI,CAACF,cAAc,CAACG,QAAQ,CAA8B;YACxDC,GAAAA,EAAK,4BAAA;YACLC,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAMJ;SACR,CAAA;AAEFK,IAAAA,oBAAAA,GAAuB,OAAOL,IAAAA,GAC5B,IAAI,CAACF,cAAc,CAACG,QAAQ,CAA+B;YACzDC,GAAAA,EAAK,6BAAA;YACLC,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAMJ;SACR,CAAA;AAEFM,IAAAA,gBAAAA,GAAmB,OAAON,IAAAA,GACxB,IAAI,CAACF,cAAc,CAACG,QAAQ,CAA2B;YACrDC,GAAAA,EAAK,CAAC,mBAAmB,CAAC;YAC1BC,MAAAA,EAAQ,MAAA;YACRC,IAAAA,EAAMJ;SACR,CAAA;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessImpersonationClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessImpersonationClient.ts"],"sourcesContent":["import { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport {\n ImpersonationAuthenticateOptions,\n ImpersonationAuthenticateResponse,\n IHeadlessImpersonationClient,\n} from '../public/impersonation';\nimport { StytchProjectConfigurationInput } from '../public/typeConfig';\nimport { IConsumerSubscriptionService } from '../SubscriptionService';\nimport { validateInDev } from '../utils/dev';\n\nexport class HeadlessImpersonationClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessImpersonationClient<TProjectConfiguration>\n{\n authenticate: (\n data: ImpersonationAuthenticateOptions,\n ) => Promise<ImpersonationAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(async (data: ImpersonationAuthenticateOptions) => {\n validateInDev('stytch.impersonation.authenticate', data, {\n impersonation_token: 'string',\n });\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n return this._networkClient.retriableFetchSDK<ImpersonationAuthenticateResponse<TProjectConfiguration>>({\n url: '/impersonation/authenticate',\n body: {\n ...data,\n dfp_telemetry_id,\n captcha_token,\n },\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n });\n }\n}\n"],"names":["HeadlessImpersonationClient","authenticate","constructor","_networkClient","_subscriptionService","dfpProtectedAuth","withUpdateSession","data","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP"],"mappings":"AAWO,MAAMA,2BAAAA,CAAAA;;;;IAGXC,YAAAA;IAIAC,WAAAA,CACUC,cAA8B,EAC9BC,oBAAyE,EACzEC,gBAA2C,CACnD;aAHQF,cAAAA,GAAAA,cAAAA;aACAC,oBAAAA,GAAAA,oBAAAA;aACAC,gBAAAA,GAAAA,gBAAAA;QAER,IAAI,CAACJ,YAAY,GAAG,IAAI,CAACG,oBAAoB,CAACE,iBAAiB,CAAC,OAAOC,IAAAA,GAAAA;YAIrE,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACJ,gBAAgB,CAACK,2BAA2B,EAAA;AACnG,YAAA,OAAO,IAAI,CAACP,cAAc,CAACQ,iBAAiB,CAA2D;gBACrGC,GAAAA,EAAK,6BAAA;gBACLC,IAAAA,EAAM;AACJ,oBAAA,GAAGN,IAAI;AACPC,oBAAAA,gBAAAA;AACAC,oBAAAA;AACF,iBAAA;gBACAK,MAAAA,EAAQ,MAAA;AACRC,gBAAAA,aAAAA,EAAe,IAAI,CAACV,gBAAgB,CAACW;AACvC,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AACF;;;;"}
1
+ {"version":3,"file":"HeadlessImpersonationClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessImpersonationClient.ts"],"sourcesContent":["import { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport {\n ImpersonationAuthenticateOptions,\n ImpersonationAuthenticateResponse,\n IHeadlessImpersonationClient,\n} from '../public/impersonation';\nimport { StytchProjectConfigurationInput } from '../public/typeConfig';\nimport { IConsumerSubscriptionService } from '../SubscriptionService';\nimport { validateInDev } from '../utils/dev';\n\nexport class HeadlessImpersonationClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessImpersonationClient<TProjectConfiguration>\n{\n authenticate: (\n data: ImpersonationAuthenticateOptions,\n ) => Promise<ImpersonationAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(async (data: ImpersonationAuthenticateOptions) => {\n validateInDev('stytch.impersonation.authenticate', data, {\n impersonation_token: 'string',\n });\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n return this._networkClient.retriableFetchSDK<ImpersonationAuthenticateResponse<TProjectConfiguration>>({\n url: '/impersonation/authenticate',\n body: {\n ...data,\n dfp_telemetry_id,\n captcha_token,\n },\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n });\n }\n}\n"],"names":["HeadlessImpersonationClient","authenticate","_networkClient","_subscriptionService","dfpProtectedAuth","withUpdateSession","data","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP"],"mappings":"AAWO,MAAMA,2BAAAA,CAAAA;;;;IAGXC,YAAAA;IAIA,WAAA,CACUC,cAA8B,EAC9BC,oBAAyE,EACzEC,gBAA2C,CACnD;aAHQF,cAAAA,GAAAA,cAAAA;aACAC,oBAAAA,GAAAA,oBAAAA;aACAC,gBAAAA,GAAAA,gBAAAA;QAER,IAAI,CAACH,YAAY,GAAG,IAAI,CAACE,oBAAoB,CAACE,iBAAiB,CAAC,OAAOC,IAAAA,GAAAA;YAIrE,MAAM,EAAEC,gBAAgB,EAAEC,aAAa,EAAE,GAAG,MAAM,IAAI,CAACJ,gBAAgB,CAACK,2BAA2B,EAAA;AACnG,YAAA,OAAO,IAAI,CAACP,cAAc,CAACQ,iBAAiB,CAA2D;gBACrGC,GAAAA,EAAK,6BAAA;gBACLC,IAAAA,EAAM;AACJ,oBAAA,GAAGN,IAAI;AACPC,oBAAAA,gBAAAA;AACAC,oBAAAA;AACF,iBAAA;gBACAK,MAAAA,EAAQ,MAAA;AACRC,gBAAAA,aAAAA,EAAe,IAAI,CAACV,gBAAgB,CAACW;AACvC,aAAA,CAAA;AACF,QAAA,CAAA,CAAA;AACF,IAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadlessMagicLinkClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessMagicLinkClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessMagicLinksClient,\n MagicLinksAuthenticateOptions,\n MagicLinksAuthenticateResponse,\n MagicLinksLoginOrCreateOptions,\n MagicLinksLoginOrCreateResponse,\n MagicLinksSendOptions,\n MagicLinksSendResponse,\n ResponseCommon,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForEmailMagicLinks: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForEmailMagicLinks: false,\n});\n\nexport class HeadlessMagicLinksClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessMagicLinksClient<TProjectConfiguration>\n{\n email: {\n loginOrCreate: (email: string, options?: MagicLinksLoginOrCreateOptions) => Promise<ResponseCommon>;\n send: (email: string, options?: MagicLinksSendOptions) => Promise<ResponseCommon>;\n };\n\n authenticate: (\n token: string,\n options: MagicLinksAuthenticateOptions,\n ) => Promise<MagicLinksAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _passwordResetPKCEManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.email = {\n loginOrCreate: async (email: string, options: MagicLinksLoginOrCreateOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n return this._networkClient.retriableFetchSDK<MagicLinksLoginOrCreateResponse>({\n url: '/magic_links/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n\n send: async (email: string, options: MagicLinksSendOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/magic_links/email/send/secondary' : '/magic_links/email/send/primary';\n\n return this._networkClient.retriableFetchSDK<MagicLinksSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: MagicLinksAuthenticateOptions) => {\n validateInDev(\n 'stytch.magicLinks.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n // When a user resets their password with PKCE turned on, they create a pkPair in the 'passwords' namespace.\n // However, when the user gets the reset password email, they have the option to log in without a password.\n // This redirects them to the magic link authenticate flow, which automatically looks for the pkce code_verifier\n // in the 'magic_links' namespace, breaking the flow. Unfortunately we won't know for sure in the eml authenticate call\n // whether or not the user is coming from a password reset flow. To handle this, we have to try to authenticate with\n // both the 'passwords' and 'magic_links' code_verifiers.\n const passwordResetPKPair = await this._passwordResetPKCEManager.getPKPair();\n\n let resp: WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>> | null = null;\n\n if (passwordResetPKPair?.code_verifier) {\n try {\n resp = await this.handlePKCEForAuthenticate(this._passwordResetPKCEManager, { token, ...options });\n } catch (e) {\n if ((e as Error).message.includes('pkce')) {\n // If pkce-related error, fall back to magic links code_verifier\n // eslint-disable-next-line no-console\n console.log(\n 'Authenticate with passwords pkce namespace failed. Falling back to authenticate with magic_links namespace.',\n );\n } else {\n throw e;\n }\n }\n }\n\n if (!resp) {\n resp = await this.handlePKCEForAuthenticate(this._pkceManager, { token, ...options });\n }\n\n return omitUser(resp);\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string> {\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 private async handlePKCEForAuthenticate(\n pkceManager: IPKCEManager,\n data: MagicLinksAuthenticateOptions & { token: string },\n ): Promise<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>> {\n const pkPair = await pkceManager.getPKPair();\n\n const requestBody = {\n code_verifier: pkPair?.code_verifier,\n ...data,\n };\n\n const resp = await this._networkClient.fetchSDK<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>>({\n url: '/magic_links/authenticate',\n body: requestBody,\n method: 'POST',\n });\n\n pkceManager.clearPKPair();\n\n return resp;\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","pkceRequiredForEmailMagicLinks","HeadlessMagicLinksClient","email","authenticate","constructor","_config","dfpProtectedAuth","_networkClient","_subscriptionService","_pkceManager","_passwordResetPKCEManager","loginOrCreate","options","code_challenge","undefined","getCodeChallenge","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","requestBody","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP","send","isLoggedIn","getSession","endpoint","withUpdateSession","token","passwordResetPKPair","getPKPair","resp","code_verifier","handlePKCEForAuthenticate","e","message","includes","console","log","omitUser","keyPair","startPKCETransaction","pkceManager","data","pkPair","fetchSDK","clearPKPair"],"mappings":"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"}
1
+ {"version":3,"file":"HeadlessMagicLinkClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessMagicLinkClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessMagicLinksClient,\n MagicLinksAuthenticateOptions,\n MagicLinksAuthenticateResponse,\n MagicLinksLoginOrCreateOptions,\n MagicLinksLoginOrCreateResponse,\n MagicLinksSendOptions,\n MagicLinksSendResponse,\n ResponseCommon,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForEmailMagicLinks: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForEmailMagicLinks: false,\n});\n\nexport class HeadlessMagicLinksClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessMagicLinksClient<TProjectConfiguration>\n{\n email: {\n loginOrCreate: (email: string, options?: MagicLinksLoginOrCreateOptions) => Promise<ResponseCommon>;\n send: (email: string, options?: MagicLinksSendOptions) => Promise<ResponseCommon>;\n };\n\n authenticate: (\n token: string,\n options: MagicLinksAuthenticateOptions,\n ) => Promise<MagicLinksAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _passwordResetPKCEManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.email = {\n loginOrCreate: async (email: string, options: MagicLinksLoginOrCreateOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n return this._networkClient.retriableFetchSDK<MagicLinksLoginOrCreateResponse>({\n url: '/magic_links/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n\n send: async (email: string, options: MagicLinksSendOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/magic_links/email/send/secondary' : '/magic_links/email/send/primary';\n\n return this._networkClient.retriableFetchSDK<MagicLinksSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: MagicLinksAuthenticateOptions) => {\n validateInDev(\n 'stytch.magicLinks.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n // When a user resets their password with PKCE turned on, they create a pkPair in the 'passwords' namespace.\n // However, when the user gets the reset password email, they have the option to log in without a password.\n // This redirects them to the magic link authenticate flow, which automatically looks for the pkce code_verifier\n // in the 'magic_links' namespace, breaking the flow. Unfortunately we won't know for sure in the eml authenticate call\n // whether or not the user is coming from a password reset flow. To handle this, we have to try to authenticate with\n // both the 'passwords' and 'magic_links' code_verifiers.\n const passwordResetPKPair = await this._passwordResetPKCEManager.getPKPair();\n\n let resp: WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>> | null = null;\n\n if (passwordResetPKPair?.code_verifier) {\n try {\n resp = await this.handlePKCEForAuthenticate(this._passwordResetPKCEManager, { token, ...options });\n } catch (e) {\n if ((e as Error).message.includes('pkce')) {\n // If pkce-related error, fall back to magic links code_verifier\n // eslint-disable-next-line no-console\n console.log(\n 'Authenticate with passwords pkce namespace failed. Falling back to authenticate with magic_links namespace.',\n );\n } else {\n throw e;\n }\n }\n }\n\n if (!resp) {\n resp = await this.handlePKCEForAuthenticate(this._pkceManager, { token, ...options });\n }\n\n return omitUser(resp);\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string> {\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 private async handlePKCEForAuthenticate(\n pkceManager: IPKCEManager,\n data: MagicLinksAuthenticateOptions & { token: string },\n ): Promise<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>> {\n const pkPair = await pkceManager.getPKPair();\n\n const requestBody = {\n code_verifier: pkPair?.code_verifier,\n ...data,\n };\n\n const resp = await this._networkClient.fetchSDK<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>>({\n url: '/magic_links/authenticate',\n body: requestBody,\n method: 'POST',\n });\n\n pkceManager.clearPKPair();\n\n return resp;\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","pkceRequiredForEmailMagicLinks","HeadlessMagicLinksClient","email","authenticate","_config","dfpProtectedAuth","_networkClient","_subscriptionService","_pkceManager","_passwordResetPKCEManager","loginOrCreate","options","code_challenge","undefined","getCodeChallenge","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","requestBody","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP","send","isLoggedIn","getSession","endpoint","withUpdateSession","token","passwordResetPKPair","getPKPair","resp","code_verifier","handlePKCEForAuthenticate","e","message","includes","console","log","omitUser","keyPair","startPKCETransaction","pkceManager","data","pkPair","fetchSDK","clearPKPair"],"mappings":"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"}