@stytch/react 20.0.0-next.5 → 20.0.0-next.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -1
- package/dist/cjs/adminPortal/index.cjs +2 -2
- package/dist/cjs/b2b/index.cjs +10 -7
- package/dist/cjs/b2b/index.cjs.map +1 -1
- package/dist/cjs/b2b/index.headless.cjs +456 -496
- package/dist/cjs/b2b/index.headless.cjs.map +1 -1
- package/dist/cjs/{idpHelpers-Bj_7pbfW.js → idpHelpers-UZaYQqT8.js} +111 -129
- package/dist/cjs/{idpHelpers-Bj_7pbfW.js.map → idpHelpers-UZaYQqT8.js.map} +1 -1
- package/dist/cjs/{index-BIjXBvf_.js → index-MDH3lelI.js} +2 -2
- package/dist/cjs/{index-BIjXBvf_.js.map → index-MDH3lelI.js.map} +1 -1
- package/dist/cjs/index.cjs +18 -14
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.headless.cjs +401 -448
- package/dist/cjs/index.headless.cjs.map +1 -1
- package/dist/cjs/{passwordManagerDisableAutofillProps-DV31RTL_.js → passwordManagerDisableAutofillProps-BzR1GTDj.js} +42 -33
- package/dist/cjs/passwordManagerDisableAutofillProps-BzR1GTDj.js.map +1 -0
- package/dist/cjs/{shadcn-aVU6Lm9q.js → shadcn-BNtf3uZr.js} +7 -6
- package/dist/cjs/shadcn-BNtf3uZr.js.map +1 -0
- package/dist/cjs-dev/adminPortal/index.cjs +2 -2
- package/dist/cjs-dev/b2b/index.cjs +10 -7
- package/dist/cjs-dev/b2b/index.cjs.map +1 -1
- package/dist/cjs-dev/b2b/index.headless.cjs +468 -508
- package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
- package/dist/cjs-dev/dev-DaCGDI6V.js.map +1 -1
- package/dist/cjs-dev/{idpHelpers-DOYYSxsX.js → idpHelpers-CVk39K69.js} +111 -129
- package/dist/cjs-dev/{idpHelpers-DOYYSxsX.js.map → idpHelpers-CVk39K69.js.map} +1 -1
- package/dist/cjs-dev/{index-rquGmIlv.js → index-BDTK8QN0.js} +2 -2
- package/dist/cjs-dev/{index-rquGmIlv.js.map → index-BDTK8QN0.js.map} +1 -1
- package/dist/cjs-dev/index.cjs +18 -14
- package/dist/cjs-dev/index.cjs.map +1 -1
- package/dist/cjs-dev/index.headless.cjs +405 -452
- package/dist/cjs-dev/index.headless.cjs.map +1 -1
- package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CgiK2M_U.js → passwordManagerDisableAutofillProps--FLcEDiY.js} +42 -33
- package/dist/cjs-dev/passwordManagerDisableAutofillProps--FLcEDiY.js.map +1 -0
- package/dist/cjs-dev/{shadcn-DMk6ZSoD.js → shadcn-CvmoCuzj.js} +9 -8
- package/dist/cjs-dev/shadcn-CvmoCuzj.js.map +1 -0
- package/dist/esm/_virtual/index3.mjs +3 -5
- package/dist/esm/_virtual/index3.mjs.map +1 -1
- package/dist/esm/_virtual/index4.mjs +5 -3
- package/dist/esm/_virtual/index4.mjs.map +1 -1
- package/dist/esm/node_modules/@lingui/react/dist/index.mjs +14 -13
- package/dist/esm/node_modules/@lingui/react/dist/index.mjs.map +1 -1
- package/dist/esm/node_modules/@lingui/react/dist/shared/{react.31c3b5fa.mjs → react.8970326b.mjs} +32 -23
- package/dist/esm/node_modules/@lingui/react/dist/shared/react.8970326b.mjs.map +1 -0
- package/dist/esm/packages/core/src/DFPProtectedAuthProvider.mjs +39 -43
- package/dist/esm/packages/core/src/DFPProtectedAuthProvider.mjs.map +1 -1
- package/dist/esm/packages/core/src/EventLogger.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessCryptoWalletClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs +15 -18
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessImpersonationClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessMagicLinkClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs +58 -77
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs +100 -103
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessPasswordClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs +6 -8
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs +77 -82
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessTOTPClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessUserClient.mjs +111 -125
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessUserClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs +10 -11
- package/dist/esm/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BDiscoveryClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs +16 -19
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BImpersonationClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BMagicLinkClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOTPsClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs +142 -153
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BPasswordsClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs +7 -9
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BRecoveryCodesClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSCIMClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs +67 -70
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs +81 -93
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs +67 -73
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/HeadlessClients/b2b/HeadlessB2BTOTPsClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/NetworkClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/SearchManager.mjs.map +1 -1
- package/dist/esm/packages/core/src/SessionManager.mjs +28 -31
- package/dist/esm/packages/core/src/SessionManager.mjs.map +1 -1
- package/dist/esm/packages/core/src/StateChangeClient.mjs +5 -6
- package/dist/esm/packages/core/src/StateChangeClient.mjs.map +1 -1
- package/dist/esm/packages/core/src/public/SDKErrors.mjs.map +1 -1
- package/dist/esm/packages/core/src/rbac.mjs.map +1 -1
- package/dist/esm/packages/core/src/rpc/FrameClient.mjs.map +1 -1
- package/dist/esm/packages/web/src/BootstrapDataManager.mjs.map +1 -1
- package/dist/esm/packages/web/src/CaptchaProvider.mjs +10 -11
- package/dist/esm/packages/web/src/CaptchaProvider.mjs.map +1 -1
- package/dist/esm/packages/web/src/ClientsideServicesProvider.mjs +4 -8
- package/dist/esm/packages/web/src/ClientsideServicesProvider.mjs.map +1 -1
- package/dist/esm/packages/web/src/HeadlessOAuthClient.mjs +24 -24
- package/dist/esm/packages/web/src/HeadlessOAuthClient.mjs.map +1 -1
- package/dist/esm/packages/web/src/NetworkClient.mjs +4 -5
- package/dist/esm/packages/web/src/NetworkClient.mjs.map +1 -1
- package/dist/esm/packages/web/src/PKCEManager.mjs.map +1 -1
- package/dist/esm/packages/web/src/StytchClient.mjs.map +1 -1
- package/dist/esm/packages/web/src/SubscriptionService.mjs +8 -10
- package/dist/esm/packages/web/src/SubscriptionService.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/utils/theme.mjs +1 -1
- package/dist/esm/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs +48 -48
- package/dist/esm/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
- package/dist/esm/packages/web/src/b2b/StytchB2BClient.mjs.map +1 -1
- package/dist/esm/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs +27 -30
- package/dist/esm/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs.map +1 -1
- package/dist/esm/packages/web/src/oneTap/GoogleOneTapClient.mjs.map +1 -1
- package/dist/esm/packages/web/src/oneTap/OneTapProvider.mjs +12 -14
- package/dist/esm/packages/web/src/oneTap/OneTapProvider.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/App.mjs +3 -1
- package/dist/esm/packages/web/src/ui/b2b/App.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/InternalAppContainer.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2b/InternalAppContainer.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEnrollScreen.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs +3 -1
- package/dist/esm/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +4 -2
- package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Main/index.mjs +2 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Main/index.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs +2 -1
- package/dist/esm/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/mixins/Root.module.css.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +1 -1
- package/dist/esm/packages/web/src/ui/hooks/usePromptPasskey.mjs +3 -3
- package/dist/esm/packages/web/src/ui/hooks/usePromptPasskey.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs +2 -2
- package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/bindings/createB2CComponent.mjs +2 -2
- package/dist/esm/packages/web/src/ui/react/bindings/createB2CComponent.mjs.map +1 -1
- package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
- package/dist/esm-dev/_virtual/index.mjs +3 -5
- package/dist/esm-dev/_virtual/index.mjs.map +1 -1
- package/dist/esm-dev/_virtual/index2.mjs +5 -3
- package/dist/esm-dev/_virtual/index2.mjs.map +1 -1
- package/dist/esm-dev/_virtual/index3.mjs +5 -3
- package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
- package/dist/esm-dev/_virtual/index4.mjs +3 -5
- package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
- package/dist/esm-dev/node_modules/@lingui/react/dist/index.mjs +14 -13
- package/dist/esm-dev/node_modules/@lingui/react/dist/index.mjs.map +1 -1
- package/dist/esm-dev/node_modules/@lingui/react/dist/shared/{react.31c3b5fa.mjs → react.8970326b.mjs} +32 -23
- package/dist/esm-dev/node_modules/@lingui/react/dist/shared/react.8970326b.mjs.map +1 -0
- package/dist/esm-dev/node_modules/swr/core/dist/index.mjs +1 -1
- package/dist/esm-dev/node_modules/swr/infinite/dist/index.mjs +1 -1
- package/dist/esm-dev/packages/core/src/DFPProtectedAuthProvider.mjs +39 -43
- package/dist/esm-dev/packages/core/src/DFPProtectedAuthProvider.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/EventLogger.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessCryptoWalletClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs +15 -18
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessIDPClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessImpersonationClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessMagicLinkClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs +58 -77
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOAuthClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs +100 -103
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessOTPClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessPasswordClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs +6 -8
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessRBACClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs +77 -82
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessSessionClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessTOTPClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessUserClient.mjs +114 -128
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessUserClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs +10 -11
- package/dist/esm-dev/packages/core/src/HeadlessClients/HeadlessWebAuthnClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BDiscoveryClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs +16 -19
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BIDPClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BImpersonationClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BMagicLinkClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOTPsClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs +144 -155
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BOrganizationClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BPasswordsClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs +7 -9
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRBACClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BRecoveryCodesClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSCIMClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs +67 -70
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSSOClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs +88 -100
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSelfClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs +70 -76
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BSessionClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/HeadlessClients/b2b/HeadlessB2BTOTPsClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/NetworkClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/SearchManager.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/SessionManager.mjs +28 -31
- package/dist/esm-dev/packages/core/src/SessionManager.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/StateChangeClient.mjs +5 -6
- package/dist/esm-dev/packages/core/src/StateChangeClient.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/public/SDKErrors.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/rbac.mjs.map +1 -1
- package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/BootstrapDataManager.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/CaptchaProvider.mjs +10 -11
- package/dist/esm-dev/packages/web/src/CaptchaProvider.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ClientsideServicesProvider.mjs +4 -8
- package/dist/esm-dev/packages/web/src/ClientsideServicesProvider.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/HeadlessOAuthClient.mjs +24 -24
- package/dist/esm-dev/packages/web/src/HeadlessOAuthClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/NetworkClient.mjs +4 -5
- package/dist/esm-dev/packages/web/src/NetworkClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/PKCEManager.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/StytchClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/SubscriptionService.mjs +8 -10
- package/dist/esm-dev/packages/web/src/SubscriptionService.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AuthManagementSection.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/useMemberActivation.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionDangerZoneSection.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionTokenRotationSection.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMNewConnectionScreen.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/sso/SSONewConnectionScreen.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateMember.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateOrganization.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateScimConnection.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useMutateSsoConnection.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRevalidateConnectionList.mjs +1 -1
- package/dist/esm-dev/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs +48 -48
- package/dist/esm-dev/packages/web/src/b2b/HeadlessB2BOAuthClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/b2b/StytchB2BClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs +27 -30
- package/dist/esm-dev/packages/web/src/b2b/oneTap/B2BOneTapProvider.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/oneTap/GoogleOneTapClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/oneTap/OneTapProvider.mjs +12 -14
- package/dist/esm-dev/packages/web/src/oneTap/OneTapProvider.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs +3 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/App.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/Container.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/InternalAppContainer.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/InternalAppContainer.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEnrollScreen.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/AppContainer.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs +3 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/IDPContainer.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/PasskeyRegistrationContainer.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/ResetPasswordContainer.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +5 -3
- package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/index.mjs +2 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Main/index.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs +2 -1
- package/dist/esm-dev/packages/web/src/ui/components/PresentationConfig.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/Button.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/Column.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/mixins/Root.module.css.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/organisms/OneTapError.mjs +2 -2
- package/dist/esm-dev/packages/web/src/ui/components/organisms/OneTapError.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/hooks/usePromptPasskey.mjs +3 -3
- package/dist/esm-dev/packages/web/src/ui/hooks/usePromptPasskey.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs +2 -2
- package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2CComponent.mjs +2 -2
- package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2CComponent.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/utils/crypto.mjs +1 -1
- package/dist/types/{PresentationConfig-B2jX85oV.d.ts → PresentationConfig-CdAymT0c.d.ts} +5 -0
- package/dist/types/{StytchB2BClient-D16e_lp1.d.ts → StytchB2BClient-DYF9xGAB.d.ts} +1 -1
- package/dist/types/{StytchClient-BwQdJzdj.d.ts → StytchClient-IyY7-cpI.d.ts} +1 -1
- package/dist/types/adminPortal/index.d.ts +3 -3
- package/dist/types/b2b/index.d.ts +7 -7
- package/dist/types/b2b/index.headless.d.ts +2 -2
- package/dist/types/compat.d.ts +1 -1
- package/dist/types/{createAuthUrlHandler-R1kNNQD_.d.ts → createAuthUrlHandler-CFZ0DGWC.d.ts} +6 -2
- package/dist/types/index.d.ts +7 -7
- package/dist/types/index.headless.d.ts +2 -2
- package/dist/types/{shadcn-CGdmyIUF.d.ts → shadcn-USiNERNw.d.ts} +4 -4
- package/messages/en.po +3 -3
- package/package.json +1 -1
- package/dist/cjs/passwordManagerDisableAutofillProps-DV31RTL_.js.map +0 -1
- package/dist/cjs/shadcn-aVU6Lm9q.js.map +0 -1
- package/dist/cjs-dev/passwordManagerDisableAutofillProps-CgiK2M_U.js.map +0 -1
- package/dist/cjs-dev/shadcn-DMk6ZSoD.js.map +0 -1
- package/dist/esm/node_modules/@lingui/react/dist/shared/react.31c3b5fa.mjs.map +0 -1
- package/dist/esm-dev/node_modules/@lingui/react/dist/shared/react.31c3b5fa.mjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { omitUser, isTestPublicToken } from '../utils/index.mjs';
|
|
2
2
|
import { validateInDev } from '../utils/dev.mjs';
|
|
3
|
-
import { OAuthProviders } from '../public/ui.mjs';
|
|
4
3
|
import { logger } from '../utils/logger.mjs';
|
|
4
|
+
import { OAuthProviders } from '../public/ui.mjs';
|
|
5
5
|
|
|
6
6
|
let HeadlessOAuthClient$1 = class HeadlessOAuthClient {
|
|
7
7
|
_networkClient;
|
|
@@ -16,63 +16,6 @@ let HeadlessOAuthClient$1 = class HeadlessOAuthClient {
|
|
|
16
16
|
this._pkceManager = _pkceManager;
|
|
17
17
|
this._dynamicConfig = _dynamicConfig;
|
|
18
18
|
this._config = _config;
|
|
19
|
-
this.google = {
|
|
20
|
-
start: this.startOAuthFlow(OAuthProviders.Google)
|
|
21
|
-
};
|
|
22
|
-
this.apple = {
|
|
23
|
-
start: this.startOAuthFlow(OAuthProviders.Apple)
|
|
24
|
-
};
|
|
25
|
-
this.microsoft = {
|
|
26
|
-
start: this.startOAuthFlow(OAuthProviders.Microsoft)
|
|
27
|
-
};
|
|
28
|
-
this.github = {
|
|
29
|
-
start: this.startOAuthFlow(OAuthProviders.Github)
|
|
30
|
-
};
|
|
31
|
-
this.gitlab = {
|
|
32
|
-
start: this.startOAuthFlow(OAuthProviders.GitLab)
|
|
33
|
-
};
|
|
34
|
-
this.facebook = {
|
|
35
|
-
start: this.startOAuthFlow(OAuthProviders.Facebook)
|
|
36
|
-
};
|
|
37
|
-
this.discord = {
|
|
38
|
-
start: this.startOAuthFlow(OAuthProviders.Discord)
|
|
39
|
-
};
|
|
40
|
-
this.salesforce = {
|
|
41
|
-
start: this.startOAuthFlow(OAuthProviders.Salesforce)
|
|
42
|
-
};
|
|
43
|
-
this.slack = {
|
|
44
|
-
start: this.startOAuthFlow(OAuthProviders.Slack)
|
|
45
|
-
};
|
|
46
|
-
this.amazon = {
|
|
47
|
-
start: this.startOAuthFlow(OAuthProviders.Amazon)
|
|
48
|
-
};
|
|
49
|
-
this.bitbucket = {
|
|
50
|
-
start: this.startOAuthFlow(OAuthProviders.Bitbucket)
|
|
51
|
-
};
|
|
52
|
-
this.linkedin = {
|
|
53
|
-
start: this.startOAuthFlow(OAuthProviders.LinkedIn)
|
|
54
|
-
};
|
|
55
|
-
this.coinbase = {
|
|
56
|
-
start: this.startOAuthFlow(OAuthProviders.Coinbase)
|
|
57
|
-
};
|
|
58
|
-
this.twitch = {
|
|
59
|
-
start: this.startOAuthFlow(OAuthProviders.Twitch)
|
|
60
|
-
};
|
|
61
|
-
this.twitter = {
|
|
62
|
-
start: this.startOAuthFlow(OAuthProviders.Twitter)
|
|
63
|
-
};
|
|
64
|
-
this.tiktok = {
|
|
65
|
-
start: this.startOAuthFlow(OAuthProviders.TikTok)
|
|
66
|
-
};
|
|
67
|
-
this.snapchat = {
|
|
68
|
-
start: this.startOAuthFlow(OAuthProviders.Snapchat)
|
|
69
|
-
};
|
|
70
|
-
this.figma = {
|
|
71
|
-
start: this.startOAuthFlow(OAuthProviders.Figma)
|
|
72
|
-
};
|
|
73
|
-
this.yahoo = {
|
|
74
|
-
start: this.startOAuthFlow(OAuthProviders.Yahoo)
|
|
75
|
-
};
|
|
76
19
|
this.authenticate = this._subscriptionService.withUpdateSession(async (token, options)=>{
|
|
77
20
|
validateInDev('stytch.oauth.authenticate', {
|
|
78
21
|
token,
|
|
@@ -98,25 +41,63 @@ let HeadlessOAuthClient$1 = class HeadlessOAuthClient {
|
|
|
98
41
|
return omitUser(resp);
|
|
99
42
|
});
|
|
100
43
|
}
|
|
101
|
-
google
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
44
|
+
google = {
|
|
45
|
+
start: this.startOAuthFlow(OAuthProviders.Google)
|
|
46
|
+
};
|
|
47
|
+
apple = {
|
|
48
|
+
start: this.startOAuthFlow(OAuthProviders.Apple)
|
|
49
|
+
};
|
|
50
|
+
microsoft = {
|
|
51
|
+
start: this.startOAuthFlow(OAuthProviders.Microsoft)
|
|
52
|
+
};
|
|
53
|
+
github = {
|
|
54
|
+
start: this.startOAuthFlow(OAuthProviders.Github)
|
|
55
|
+
};
|
|
56
|
+
gitlab = {
|
|
57
|
+
start: this.startOAuthFlow(OAuthProviders.GitLab)
|
|
58
|
+
};
|
|
59
|
+
facebook = {
|
|
60
|
+
start: this.startOAuthFlow(OAuthProviders.Facebook)
|
|
61
|
+
};
|
|
62
|
+
discord = {
|
|
63
|
+
start: this.startOAuthFlow(OAuthProviders.Discord)
|
|
64
|
+
};
|
|
65
|
+
salesforce = {
|
|
66
|
+
start: this.startOAuthFlow(OAuthProviders.Salesforce)
|
|
67
|
+
};
|
|
68
|
+
slack = {
|
|
69
|
+
start: this.startOAuthFlow(OAuthProviders.Slack)
|
|
70
|
+
};
|
|
71
|
+
amazon = {
|
|
72
|
+
start: this.startOAuthFlow(OAuthProviders.Amazon)
|
|
73
|
+
};
|
|
74
|
+
bitbucket = {
|
|
75
|
+
start: this.startOAuthFlow(OAuthProviders.Bitbucket)
|
|
76
|
+
};
|
|
77
|
+
linkedin = {
|
|
78
|
+
start: this.startOAuthFlow(OAuthProviders.LinkedIn)
|
|
79
|
+
};
|
|
80
|
+
coinbase = {
|
|
81
|
+
start: this.startOAuthFlow(OAuthProviders.Coinbase)
|
|
82
|
+
};
|
|
83
|
+
twitch = {
|
|
84
|
+
start: this.startOAuthFlow(OAuthProviders.Twitch)
|
|
85
|
+
};
|
|
86
|
+
twitter = {
|
|
87
|
+
start: this.startOAuthFlow(OAuthProviders.Twitter)
|
|
88
|
+
};
|
|
89
|
+
tiktok = {
|
|
90
|
+
start: this.startOAuthFlow(OAuthProviders.TikTok)
|
|
91
|
+
};
|
|
92
|
+
snapchat = {
|
|
93
|
+
start: this.startOAuthFlow(OAuthProviders.Snapchat)
|
|
94
|
+
};
|
|
95
|
+
figma = {
|
|
96
|
+
start: this.startOAuthFlow(OAuthProviders.Figma)
|
|
97
|
+
};
|
|
98
|
+
yahoo = {
|
|
99
|
+
start: this.startOAuthFlow(OAuthProviders.Yahoo)
|
|
100
|
+
};
|
|
120
101
|
async attach(provider) {
|
|
121
102
|
validateInDev('stytch.oauth.attach', {
|
|
122
103
|
provider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadlessOAuthClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOAuthClient.ts"],"sourcesContent":["import {\n IHeadlessOAuthClient,\n OAuthAttachResponse,\n OAuthAuthenticateOptions,\n OAuthAuthenticateResponse,\n OAuthGetURLOptions,\n OAuthProviders,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { INetworkClient, IPKCEManager, IConsumerSubscriptionService } from '..';\nimport { WithUser, omitUser, logger, isTestPublicToken } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n cnameDomain: null | string;\n pkceRequiredForOAuth: boolean;\n}>;\ntype Config = {\n publicToken: string;\n testAPIURL: string;\n liveAPIURL: string;\n};\n\nexport class HeadlessOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOAuthClient<TProjectConfiguration>\n{\n authenticate: (\n token: string,\n options: OAuthAuthenticateOptions,\n ) => Promise<OAuthAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _dynamicConfig: DynamicConfig,\n private _config: Config,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: OAuthAuthenticateOptions) => {\n validateInDev(\n 'stytch.oauth.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n const keyPair = await this._pkceManager.getPKPair();\n\n if (!keyPair) {\n logger.warn(\n 'No code verifier found in local storage for OAuth flow.\\n' +\n 'Consider using stytch.oauth.$provider.start() to add PKCE to your OAuth flows for added security.\\n' +\n 'See https://stytch.com/docs/oauth#guides_pkce for more information.',\n );\n }\n\n const resp = await this._networkClient.fetchSDK<WithUser<OAuthAuthenticateResponse<TProjectConfiguration>>>({\n url: '/oauth/authenticate',\n method: 'POST',\n body: {\n token,\n code_verifier: keyPair?.code_verifier,\n ...options,\n },\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n }\n\n google = {\n start: this.startOAuthFlow(OAuthProviders.Google),\n };\n\n apple = {\n start: this.startOAuthFlow(OAuthProviders.Apple),\n };\n\n microsoft = {\n start: this.startOAuthFlow(OAuthProviders.Microsoft),\n };\n\n github = {\n start: this.startOAuthFlow(OAuthProviders.Github),\n };\n\n gitlab = {\n start: this.startOAuthFlow(OAuthProviders.GitLab),\n };\n\n facebook = {\n start: this.startOAuthFlow(OAuthProviders.Facebook),\n };\n\n discord = {\n start: this.startOAuthFlow(OAuthProviders.Discord),\n };\n\n salesforce = {\n start: this.startOAuthFlow(OAuthProviders.Salesforce),\n };\n\n slack = {\n start: this.startOAuthFlow(OAuthProviders.Slack),\n };\n\n amazon = {\n start: this.startOAuthFlow(OAuthProviders.Amazon),\n };\n\n bitbucket = {\n start: this.startOAuthFlow(OAuthProviders.Bitbucket),\n };\n\n linkedin = {\n start: this.startOAuthFlow(OAuthProviders.LinkedIn),\n };\n\n coinbase = {\n start: this.startOAuthFlow(OAuthProviders.Coinbase),\n };\n\n twitch = {\n start: this.startOAuthFlow(OAuthProviders.Twitch),\n };\n\n twitter = {\n start: this.startOAuthFlow(OAuthProviders.Twitter),\n };\n\n tiktok = {\n start: this.startOAuthFlow(OAuthProviders.TikTok),\n };\n\n snapchat = {\n start: this.startOAuthFlow(OAuthProviders.Snapchat),\n };\n\n figma = {\n start: this.startOAuthFlow(OAuthProviders.Figma),\n };\n\n yahoo = {\n start: this.startOAuthFlow(OAuthProviders.Yahoo),\n };\n\n async attach(provider: string): Promise<OAuthAttachResponse> {\n validateInDev('stytch.oauth.attach', { provider }, { provider: 'string' });\n return await this._networkClient.fetchSDK<OAuthAttachResponse>({\n url: '/oauth/attach',\n method: 'POST',\n body: { provider },\n });\n }\n\n private async getBaseApiUrl() {\n const { cnameDomain } = await this._dynamicConfig;\n if (cnameDomain) {\n // The API returns cname domains without a protocol - assume HTTPS\n return `https://${cnameDomain}`;\n }\n // Our TestAPIURL and LiveAPIURL should have the HTTPS protocol already attached\n // Don't add it twice!\n if (isTestPublicToken(this._config.publicToken)) {\n return this._config.testAPIURL;\n }\n return this._config.liveAPIURL;\n }\n\n private startOAuthFlow(providerType: OAuthProviders) {\n return async ({\n login_redirect_url,\n signup_redirect_url,\n custom_scopes,\n provider_params,\n oauth_attach_token,\n }: OAuthGetURLOptions = {}): Promise<void> => {\n const { cnameDomain, pkceRequiredForOAuth } = await this._dynamicConfig;\n const baseURL = await this.getBaseApiUrl();\n\n this._networkClient.logEvent({\n name: 'start_oauth_flow',\n details: {\n provider_type: providerType,\n custom_scopes,\n cname_domain: cnameDomain,\n pkce: pkceRequiredForOAuth,\n provider_params,\n },\n });\n\n const oauthUrl = new URL(`${baseURL}/v1/public/oauth/${providerType}/start`);\n oauthUrl.searchParams.set('public_token', this._config.publicToken);\n\n if (pkceRequiredForOAuth) {\n const keyPair = await this._pkceManager.startPKCETransaction();\n oauthUrl.searchParams.set('code_challenge', keyPair.code_challenge);\n } else {\n this._pkceManager.clearPKPair();\n }\n\n if (custom_scopes) {\n validateInDev(\n 'startOAuthFlow',\n { custom_scopes },\n {\n custom_scopes: 'stringArray',\n },\n );\n oauthUrl.searchParams.set('custom_scopes', custom_scopes.join(' '));\n }\n if (provider_params) {\n validateInDev(\n 'startOAuthFlow',\n { provider_params },\n {\n provider_params: 'optionalObject',\n },\n );\n for (const key in provider_params) {\n oauthUrl.searchParams.set('provider_' + key, provider_params[key]);\n }\n }\n if (login_redirect_url) oauthUrl.searchParams.set('login_redirect_url', login_redirect_url);\n if (signup_redirect_url) oauthUrl.searchParams.set('signup_redirect_url', signup_redirect_url);\n if (oauth_attach_token) oauthUrl.searchParams.set('oauth_attach_token', oauth_attach_token);\n\n this.navigate(oauthUrl);\n };\n }\n\n // Public so it can be mocked in tests\n navigate(url: URL) {\n window.location.href = url.toString();\n }\n}\n"],"names":["HeadlessOAuthClient","authenticate","constructor","_subscriptionService","_pkceManager","_config","_networkClient","_dynamicConfig","google","start","startOAuthFlow","OAuthProviders","Google","apple","Apple","microsoft","Microsoft","github","Github","gitlab","GitLab","facebook","Facebook","discord","Discord","salesforce","Salesforce","slack","Slack","amazon","Amazon","bitbucket","Bitbucket","linkedin","LinkedIn","coinbase","Coinbase","twitch","Twitch","twitter","Twitter","tiktok","TikTok","snapchat","Snapchat","figma","Figma","yahoo","Yahoo","withUpdateSession","token","options","validateInDev","session_duration_minutes","keyPair","getPKPair","logger","warn","resp","fetchSDK","url","method","body","code_verifier","clearPKPair","omitUser","attach","provider","getBaseApiUrl","cnameDomain","isTestPublicToken","publicToken","testAPIURL","liveAPIURL","providerType","login_redirect_url","signup_redirect_url","custom_scopes","provider_params","oauth_attach_token","pkceRequiredForOAuth","baseURL","logEvent","name","details","provider_type","cname_domain","pkce","oauthUrl","URL","searchParams","set","startPKCETransaction","code_challenge","join","key","navigate","window","location","href","toString"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeadlessOAuthClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOAuthClient.ts"],"sourcesContent":["import {\n IHeadlessOAuthClient,\n OAuthAttachResponse,\n OAuthAuthenticateOptions,\n OAuthAuthenticateResponse,\n OAuthGetURLOptions,\n OAuthProviders,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { INetworkClient, IPKCEManager, IConsumerSubscriptionService } from '..';\nimport { WithUser, omitUser, logger, isTestPublicToken } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n cnameDomain: null | string;\n pkceRequiredForOAuth: boolean;\n}>;\ntype Config = {\n publicToken: string;\n testAPIURL: string;\n liveAPIURL: string;\n};\n\nexport class HeadlessOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOAuthClient<TProjectConfiguration>\n{\n authenticate: (\n token: string,\n options: OAuthAuthenticateOptions,\n ) => Promise<OAuthAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _dynamicConfig: DynamicConfig,\n private _config: Config,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: OAuthAuthenticateOptions) => {\n validateInDev(\n 'stytch.oauth.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n const keyPair = await this._pkceManager.getPKPair();\n\n if (!keyPair) {\n logger.warn(\n 'No code verifier found in local storage for OAuth flow.\\n' +\n 'Consider using stytch.oauth.$provider.start() to add PKCE to your OAuth flows for added security.\\n' +\n 'See https://stytch.com/docs/oauth#guides_pkce for more information.',\n );\n }\n\n const resp = await this._networkClient.fetchSDK<WithUser<OAuthAuthenticateResponse<TProjectConfiguration>>>({\n url: '/oauth/authenticate',\n method: 'POST',\n body: {\n token,\n code_verifier: keyPair?.code_verifier,\n ...options,\n },\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n }\n\n google = {\n start: this.startOAuthFlow(OAuthProviders.Google),\n };\n\n apple = {\n start: this.startOAuthFlow(OAuthProviders.Apple),\n };\n\n microsoft = {\n start: this.startOAuthFlow(OAuthProviders.Microsoft),\n };\n\n github = {\n start: this.startOAuthFlow(OAuthProviders.Github),\n };\n\n gitlab = {\n start: this.startOAuthFlow(OAuthProviders.GitLab),\n };\n\n facebook = {\n start: this.startOAuthFlow(OAuthProviders.Facebook),\n };\n\n discord = {\n start: this.startOAuthFlow(OAuthProviders.Discord),\n };\n\n salesforce = {\n start: this.startOAuthFlow(OAuthProviders.Salesforce),\n };\n\n slack = {\n start: this.startOAuthFlow(OAuthProviders.Slack),\n };\n\n amazon = {\n start: this.startOAuthFlow(OAuthProviders.Amazon),\n };\n\n bitbucket = {\n start: this.startOAuthFlow(OAuthProviders.Bitbucket),\n };\n\n linkedin = {\n start: this.startOAuthFlow(OAuthProviders.LinkedIn),\n };\n\n coinbase = {\n start: this.startOAuthFlow(OAuthProviders.Coinbase),\n };\n\n twitch = {\n start: this.startOAuthFlow(OAuthProviders.Twitch),\n };\n\n twitter = {\n start: this.startOAuthFlow(OAuthProviders.Twitter),\n };\n\n tiktok = {\n start: this.startOAuthFlow(OAuthProviders.TikTok),\n };\n\n snapchat = {\n start: this.startOAuthFlow(OAuthProviders.Snapchat),\n };\n\n figma = {\n start: this.startOAuthFlow(OAuthProviders.Figma),\n };\n\n yahoo = {\n start: this.startOAuthFlow(OAuthProviders.Yahoo),\n };\n\n async attach(provider: string): Promise<OAuthAttachResponse> {\n validateInDev('stytch.oauth.attach', { provider }, { provider: 'string' });\n return await this._networkClient.fetchSDK<OAuthAttachResponse>({\n url: '/oauth/attach',\n method: 'POST',\n body: { provider },\n });\n }\n\n private async getBaseApiUrl() {\n const { cnameDomain } = await this._dynamicConfig;\n if (cnameDomain) {\n // The API returns cname domains without a protocol - assume HTTPS\n return `https://${cnameDomain}`;\n }\n // Our TestAPIURL and LiveAPIURL should have the HTTPS protocol already attached\n // Don't add it twice!\n if (isTestPublicToken(this._config.publicToken)) {\n return this._config.testAPIURL;\n }\n return this._config.liveAPIURL;\n }\n\n private startOAuthFlow(providerType: OAuthProviders) {\n return async ({\n login_redirect_url,\n signup_redirect_url,\n custom_scopes,\n provider_params,\n oauth_attach_token,\n }: OAuthGetURLOptions = {}): Promise<void> => {\n const { cnameDomain, pkceRequiredForOAuth } = await this._dynamicConfig;\n const baseURL = await this.getBaseApiUrl();\n\n this._networkClient.logEvent({\n name: 'start_oauth_flow',\n details: {\n provider_type: providerType,\n custom_scopes,\n cname_domain: cnameDomain,\n pkce: pkceRequiredForOAuth,\n provider_params,\n },\n });\n\n const oauthUrl = new URL(`${baseURL}/v1/public/oauth/${providerType}/start`);\n oauthUrl.searchParams.set('public_token', this._config.publicToken);\n\n if (pkceRequiredForOAuth) {\n const keyPair = await this._pkceManager.startPKCETransaction();\n oauthUrl.searchParams.set('code_challenge', keyPair.code_challenge);\n } else {\n this._pkceManager.clearPKPair();\n }\n\n if (custom_scopes) {\n validateInDev(\n 'startOAuthFlow',\n { custom_scopes },\n {\n custom_scopes: 'stringArray',\n },\n );\n oauthUrl.searchParams.set('custom_scopes', custom_scopes.join(' '));\n }\n if (provider_params) {\n validateInDev(\n 'startOAuthFlow',\n { provider_params },\n {\n provider_params: 'optionalObject',\n },\n );\n for (const key in provider_params) {\n oauthUrl.searchParams.set('provider_' + key, provider_params[key]);\n }\n }\n if (login_redirect_url) oauthUrl.searchParams.set('login_redirect_url', login_redirect_url);\n if (signup_redirect_url) oauthUrl.searchParams.set('signup_redirect_url', signup_redirect_url);\n if (oauth_attach_token) oauthUrl.searchParams.set('oauth_attach_token', oauth_attach_token);\n\n this.navigate(oauthUrl);\n };\n }\n\n // Public so it can be mocked in tests\n navigate(url: URL) {\n window.location.href = url.toString();\n }\n}\n"],"names":["HeadlessOAuthClient","authenticate","_subscriptionService","_pkceManager","_config","_networkClient","_dynamicConfig","withUpdateSession","token","options","validateInDev","session_duration_minutes","keyPair","getPKPair","logger","warn","resp","fetchSDK","url","method","body","code_verifier","clearPKPair","omitUser","google","start","startOAuthFlow","OAuthProviders","Google","apple","Apple","microsoft","Microsoft","github","Github","gitlab","GitLab","facebook","Facebook","discord","Discord","salesforce","Salesforce","slack","Slack","amazon","Amazon","bitbucket","Bitbucket","linkedin","LinkedIn","coinbase","Coinbase","twitch","Twitch","twitter","Twitter","tiktok","TikTok","snapchat","Snapchat","figma","Figma","yahoo","Yahoo","attach","provider","getBaseApiUrl","cnameDomain","isTestPublicToken","publicToken","testAPIURL","liveAPIURL","providerType","login_redirect_url","signup_redirect_url","custom_scopes","provider_params","oauth_attach_token","pkceRequiredForOAuth","baseURL","logEvent","name","details","provider_type","cname_domain","pkce","oauthUrl","URL","searchParams","set","startPKCETransaction","code_challenge","join","key","navigate","window","location","href","toString"],"mappings":"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"}
|
|
@@ -12,106 +12,6 @@ class HeadlessOTPClient {
|
|
|
12
12
|
this._subscriptionService = _subscriptionService;
|
|
13
13
|
this.executeRecaptcha = executeRecaptcha;
|
|
14
14
|
this.dfpProtectedAuth = dfpProtectedAuth;
|
|
15
|
-
this.sms = {
|
|
16
|
-
loginOrCreate: async (phone_number, options)=>{
|
|
17
|
-
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
18
|
-
const requestBody = {
|
|
19
|
-
...options,
|
|
20
|
-
phone_number,
|
|
21
|
-
captcha_token,
|
|
22
|
-
dfp_telemetry_id
|
|
23
|
-
};
|
|
24
|
-
return this._networkClient.retriableFetchSDK({
|
|
25
|
-
url: '/otps/sms/login_or_create',
|
|
26
|
-
body: requestBody,
|
|
27
|
-
method: 'POST',
|
|
28
|
-
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
send: async (phone_number, options)=>{
|
|
32
|
-
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
33
|
-
const requestBody = {
|
|
34
|
-
...options,
|
|
35
|
-
phone_number,
|
|
36
|
-
captcha_token,
|
|
37
|
-
dfp_telemetry_id
|
|
38
|
-
};
|
|
39
|
-
const isLoggedIn = !!this._subscriptionService.getSession();
|
|
40
|
-
const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';
|
|
41
|
-
return this._networkClient.retriableFetchSDK({
|
|
42
|
-
url: endpoint,
|
|
43
|
-
body: requestBody,
|
|
44
|
-
method: 'POST',
|
|
45
|
-
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
this.whatsapp = {
|
|
50
|
-
loginOrCreate: async (phone_number, options)=>{
|
|
51
|
-
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
52
|
-
const requestBody = {
|
|
53
|
-
...options,
|
|
54
|
-
phone_number,
|
|
55
|
-
dfp_telemetry_id,
|
|
56
|
-
captcha_token
|
|
57
|
-
};
|
|
58
|
-
return this._networkClient.retriableFetchSDK({
|
|
59
|
-
url: '/otps/whatsapp/login_or_create',
|
|
60
|
-
body: requestBody,
|
|
61
|
-
method: 'POST',
|
|
62
|
-
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
63
|
-
});
|
|
64
|
-
},
|
|
65
|
-
send: async (phone_number, options)=>{
|
|
66
|
-
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
67
|
-
const requestBody = {
|
|
68
|
-
...options,
|
|
69
|
-
phone_number,
|
|
70
|
-
captcha_token,
|
|
71
|
-
dfp_telemetry_id
|
|
72
|
-
};
|
|
73
|
-
const isLoggedIn = !!this._subscriptionService.getSession();
|
|
74
|
-
const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';
|
|
75
|
-
return this._networkClient.retriableFetchSDK({
|
|
76
|
-
url: endpoint,
|
|
77
|
-
body: requestBody,
|
|
78
|
-
method: 'POST',
|
|
79
|
-
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
this.email = {
|
|
84
|
-
loginOrCreate: async (email, options)=>{
|
|
85
|
-
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
86
|
-
const requestBody = {
|
|
87
|
-
...options,
|
|
88
|
-
email,
|
|
89
|
-
captcha_token,
|
|
90
|
-
dfp_telemetry_id
|
|
91
|
-
};
|
|
92
|
-
return this._networkClient.retriableFetchSDK({
|
|
93
|
-
url: '/otps/email/login_or_create',
|
|
94
|
-
body: requestBody,
|
|
95
|
-
method: 'POST',
|
|
96
|
-
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
97
|
-
});
|
|
98
|
-
},
|
|
99
|
-
send: async (email, options)=>{
|
|
100
|
-
const captcha_token = await this.executeRecaptcha();
|
|
101
|
-
const requestBody = {
|
|
102
|
-
...options,
|
|
103
|
-
email,
|
|
104
|
-
captcha_token
|
|
105
|
-
};
|
|
106
|
-
const isLoggedIn = !!this._subscriptionService.getSession();
|
|
107
|
-
const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';
|
|
108
|
-
return this._networkClient.fetchSDK({
|
|
109
|
-
url: endpoint,
|
|
110
|
-
body: requestBody,
|
|
111
|
-
method: 'POST'
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
15
|
this.authenticate = this._subscriptionService.withUpdateSession(async (code, method_id, options)=>{
|
|
116
16
|
validateInDev('stytch.otps.authenticate', {
|
|
117
17
|
code,
|
|
@@ -137,9 +37,106 @@ class HeadlessOTPClient {
|
|
|
137
37
|
return omitUser(resp);
|
|
138
38
|
});
|
|
139
39
|
}
|
|
140
|
-
sms
|
|
141
|
-
|
|
142
|
-
|
|
40
|
+
sms = {
|
|
41
|
+
loginOrCreate: async (phone_number, options)=>{
|
|
42
|
+
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
43
|
+
const requestBody = {
|
|
44
|
+
...options,
|
|
45
|
+
phone_number,
|
|
46
|
+
captcha_token,
|
|
47
|
+
dfp_telemetry_id
|
|
48
|
+
};
|
|
49
|
+
return this._networkClient.retriableFetchSDK({
|
|
50
|
+
url: '/otps/sms/login_or_create',
|
|
51
|
+
body: requestBody,
|
|
52
|
+
method: 'POST',
|
|
53
|
+
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
send: async (phone_number, options)=>{
|
|
57
|
+
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
58
|
+
const requestBody = {
|
|
59
|
+
...options,
|
|
60
|
+
phone_number,
|
|
61
|
+
captcha_token,
|
|
62
|
+
dfp_telemetry_id
|
|
63
|
+
};
|
|
64
|
+
const isLoggedIn = !!this._subscriptionService.getSession();
|
|
65
|
+
const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';
|
|
66
|
+
return this._networkClient.retriableFetchSDK({
|
|
67
|
+
url: endpoint,
|
|
68
|
+
body: requestBody,
|
|
69
|
+
method: 'POST',
|
|
70
|
+
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
whatsapp = {
|
|
75
|
+
loginOrCreate: async (phone_number, options)=>{
|
|
76
|
+
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
77
|
+
const requestBody = {
|
|
78
|
+
...options,
|
|
79
|
+
phone_number,
|
|
80
|
+
dfp_telemetry_id,
|
|
81
|
+
captcha_token
|
|
82
|
+
};
|
|
83
|
+
return this._networkClient.retriableFetchSDK({
|
|
84
|
+
url: '/otps/whatsapp/login_or_create',
|
|
85
|
+
body: requestBody,
|
|
86
|
+
method: 'POST',
|
|
87
|
+
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
send: async (phone_number, options)=>{
|
|
91
|
+
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
92
|
+
const requestBody = {
|
|
93
|
+
...options,
|
|
94
|
+
phone_number,
|
|
95
|
+
captcha_token,
|
|
96
|
+
dfp_telemetry_id
|
|
97
|
+
};
|
|
98
|
+
const isLoggedIn = !!this._subscriptionService.getSession();
|
|
99
|
+
const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';
|
|
100
|
+
return this._networkClient.retriableFetchSDK({
|
|
101
|
+
url: endpoint,
|
|
102
|
+
body: requestBody,
|
|
103
|
+
method: 'POST',
|
|
104
|
+
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
email = {
|
|
109
|
+
loginOrCreate: async (email, options)=>{
|
|
110
|
+
const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();
|
|
111
|
+
const requestBody = {
|
|
112
|
+
...options,
|
|
113
|
+
email,
|
|
114
|
+
captcha_token,
|
|
115
|
+
dfp_telemetry_id
|
|
116
|
+
};
|
|
117
|
+
return this._networkClient.retriableFetchSDK({
|
|
118
|
+
url: '/otps/email/login_or_create',
|
|
119
|
+
body: requestBody,
|
|
120
|
+
method: 'POST',
|
|
121
|
+
retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP
|
|
122
|
+
});
|
|
123
|
+
},
|
|
124
|
+
send: async (email, options)=>{
|
|
125
|
+
const captcha_token = await this.executeRecaptcha();
|
|
126
|
+
const requestBody = {
|
|
127
|
+
...options,
|
|
128
|
+
email,
|
|
129
|
+
captcha_token
|
|
130
|
+
};
|
|
131
|
+
const isLoggedIn = !!this._subscriptionService.getSession();
|
|
132
|
+
const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';
|
|
133
|
+
return this._networkClient.fetchSDK({
|
|
134
|
+
url: endpoint,
|
|
135
|
+
body: requestBody,
|
|
136
|
+
method: 'POST'
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
};
|
|
143
140
|
}
|
|
144
141
|
|
|
145
142
|
export { HeadlessOTPClient };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadlessOTPClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOTPClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n IHeadlessOTPsClient,\n OTPAuthenticateOptions,\n OTPCodeEmailOptions,\n OTPCodeOptions,\n OTPCodeSMSOptions,\n OTPsAuthenticateResponse,\n OTPsLoginOrCreateResponse,\n OTPsSendResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { WithUser, omitUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\nexport class HeadlessOTPClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOTPsClient<TProjectConfiguration>\n{\n authenticate: (\n code: string,\n method_id: string,\n options: OTPAuthenticateOptions,\n ) => Promise<OTPsAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (code: string, method_id: string, options: OTPAuthenticateOptions) => {\n validateInDev(\n 'stytch.otps.authenticate',\n { code, ...options },\n {\n code: 'string',\n session_duration_minutes: 'number',\n },\n );\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n token: code,\n method_id,\n dfp_telemetry_id,\n captcha_token,\n ...options,\n };\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<OTPsAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/otps/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n sms = {\n loginOrCreate: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/sms/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n whatsapp = {\n loginOrCreate: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, dfp_telemetry_id, captcha_token };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/whatsapp/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n email = {\n loginOrCreate: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, email, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsSendResponse> => {\n const captcha_token = await this.executeRecaptcha();\n const requestBody = { ...options, email, captcha_token };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';\n\n return this._networkClient.fetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n });\n },\n };\n}\n"],"names":["HeadlessOTPClient","authenticate","constructor","executeRecaptcha","Promise","resolve","undefined","dfpProtectedAuth","_networkClient","_subscriptionService","sms","loginOrCreate","phone_number","options","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","requestBody","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP","send","isLoggedIn","getSession","endpoint","whatsapp","email","fetchSDK","withUpdateSession","code","method_id","validateInDev","session_duration_minutes","token","resp","omitUser"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeadlessOTPClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessOTPClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n IHeadlessOTPsClient,\n OTPAuthenticateOptions,\n OTPCodeEmailOptions,\n OTPCodeOptions,\n OTPCodeSMSOptions,\n OTPsAuthenticateResponse,\n OTPsLoginOrCreateResponse,\n OTPsSendResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { WithUser, omitUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\nexport class HeadlessOTPClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessOTPsClient<TProjectConfiguration>\n{\n authenticate: (\n code: string,\n method_id: string,\n options: OTPAuthenticateOptions,\n ) => Promise<OTPsAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (code: string, method_id: string, options: OTPAuthenticateOptions) => {\n validateInDev(\n 'stytch.otps.authenticate',\n { code, ...options },\n {\n code: 'string',\n session_duration_minutes: 'number',\n },\n );\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n token: code,\n method_id,\n dfp_telemetry_id,\n captcha_token,\n ...options,\n };\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<OTPsAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/otps/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n sms = {\n loginOrCreate: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/sms/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeSMSOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/sms/send/secondary' : '/otps/sms/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n whatsapp = {\n loginOrCreate: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, dfp_telemetry_id, captcha_token };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/whatsapp/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (phone_number: string, options: OTPCodeOptions): Promise<OTPsSendResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, phone_number, captcha_token, dfp_telemetry_id };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/whatsapp/send/secondary' : '/otps/whatsapp/send/primary';\n\n return this._networkClient.retriableFetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n email = {\n loginOrCreate: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsLoginOrCreateResponse> => {\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = { ...options, email, captcha_token, dfp_telemetry_id };\n return this._networkClient.retriableFetchSDK<OTPsLoginOrCreateResponse>({\n url: '/otps/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n send: async (email: string, options: OTPCodeEmailOptions): Promise<OTPsSendResponse> => {\n const captcha_token = await this.executeRecaptcha();\n const requestBody = { ...options, email, captcha_token };\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/otps/email/send/secondary' : '/otps/email/send/primary';\n\n return this._networkClient.fetchSDK<OTPsSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n });\n },\n };\n}\n"],"names":["HeadlessOTPClient","authenticate","executeRecaptcha","Promise","resolve","undefined","dfpProtectedAuth","_networkClient","_subscriptionService","withUpdateSession","code","method_id","options","validateInDev","session_duration_minutes","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","requestBody","token","resp","retriableFetchSDK","url","body","method","retryCallback","retryWithCaptchaAndDFP","omitUser","sms","loginOrCreate","phone_number","send","isLoggedIn","getSession","endpoint","whatsapp","email","fetchSDK"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadlessPasswordClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessPasswordClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessPasswordClient,\n PasswordAuthenticateOptions,\n PasswordAuthenticateResponse,\n PasswordCreateOptions,\n PasswordCreateResponse,\n PasswordResetByEmailOptions,\n PasswordResetByEmailResponse,\n PasswordResetByEmailStartOptions,\n PasswordResetByEmailStartResponse,\n PasswordResetByExistingPasswordOptions,\n PasswordResetByExistingPasswordResponse,\n PasswordResetBySessionOptions,\n PasswordResetBySessionResponse,\n PasswordStrengthCheckOptions,\n PasswordStrengthCheckResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessPasswordClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessPasswordClient<TProjectConfiguration>\n{\n create: (options: PasswordCreateOptions) => Promise<PasswordCreateResponse<TProjectConfiguration>>;\n\n authenticate: (options: PasswordAuthenticateOptions) => Promise<PasswordAuthenticateResponse<TProjectConfiguration>>;\n\n resetByEmail: (options: PasswordResetByEmailOptions) => Promise<PasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: PasswordResetByExistingPasswordOptions,\n ) => Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: PasswordResetBySessionOptions,\n ) => Promise<PasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.create = this._subscriptionService.withUpdateSession(\n async (options: PasswordCreateOptions): Promise<PasswordCreateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.create', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordCreateResponse<TProjectConfiguration>>\n >({\n url: '/passwords',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (options: PasswordAuthenticateOptions): Promise<PasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/passwords/authenticate',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (options: PasswordResetByEmailOptions): Promise<PasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByEmailResponse<TProjectConfiguration>>\n >({\n url: '/passwords/email/reset',\n method: 'POST',\n body: {\n token: options.token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n code_verifier,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetByExistingPasswordOptions,\n ): Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email: 'string',\n existing_password: 'string',\n new_password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>\n >({\n url: '/passwords/existing_password/reset',\n method: 'POST',\n body: {\n email: options.email,\n existing_password: options.existing_password,\n new_password: options.new_password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetBySessionOptions,\n ): Promise<PasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: PasswordResetByEmailStartOptions): Promise<PasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetByEmailStartResponse>({\n url: '/passwords/email/reset/start',\n method: 'POST',\n body: {\n email: options.email,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: PasswordStrengthCheckOptions): Promise<PasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<PasswordStrengthCheckResponse>({\n url: '/passwords/strength_check',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n },\n });\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","pkceRequiredForPasswordResets","HeadlessPasswordClient","create","authenticate","resetByEmail","resetByExistingPassword","resetBySession","constructor","_subscriptionService","_pkceManager","_config","dfpProtectedAuth","_networkClient","withUpdateSession","options","validateInDev","password","email","session_duration_minutes","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","retryCallback","retryWithCaptchaAndDFP","omitUser","token","pkPair","getPKPair","code_verifier","clearPKPair","existing_password","new_password","getCodeChallenge","undefined","keyPair","code_challenge","startPKCETransaction","resetByEmailStart","login_redirect_url","reset_password_redirect_url","reset_password_template_id","reset_password_expiration_minutes","locale","strengthCheck","fetchSDK"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HeadlessPasswordClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessPasswordClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessPasswordClient,\n PasswordAuthenticateOptions,\n PasswordAuthenticateResponse,\n PasswordCreateOptions,\n PasswordCreateResponse,\n PasswordResetByEmailOptions,\n PasswordResetByEmailResponse,\n PasswordResetByEmailStartOptions,\n PasswordResetByEmailStartResponse,\n PasswordResetByExistingPasswordOptions,\n PasswordResetByExistingPasswordResponse,\n PasswordResetBySessionOptions,\n PasswordResetBySessionResponse,\n PasswordStrengthCheckOptions,\n PasswordStrengthCheckResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessPasswordClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessPasswordClient<TProjectConfiguration>\n{\n create: (options: PasswordCreateOptions) => Promise<PasswordCreateResponse<TProjectConfiguration>>;\n\n authenticate: (options: PasswordAuthenticateOptions) => Promise<PasswordAuthenticateResponse<TProjectConfiguration>>;\n\n resetByEmail: (options: PasswordResetByEmailOptions) => Promise<PasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: PasswordResetByExistingPasswordOptions,\n ) => Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: PasswordResetBySessionOptions,\n ) => Promise<PasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.create = this._subscriptionService.withUpdateSession(\n async (options: PasswordCreateOptions): Promise<PasswordCreateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.create', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordCreateResponse<TProjectConfiguration>>\n >({\n url: '/passwords',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (options: PasswordAuthenticateOptions): Promise<PasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/passwords/authenticate',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (options: PasswordResetByEmailOptions): Promise<PasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByEmailResponse<TProjectConfiguration>>\n >({\n url: '/passwords/email/reset',\n method: 'POST',\n body: {\n token: options.token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n code_verifier,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetByExistingPasswordOptions,\n ): Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email: 'string',\n existing_password: 'string',\n new_password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>\n >({\n url: '/passwords/existing_password/reset',\n method: 'POST',\n body: {\n email: options.email,\n existing_password: options.existing_password,\n new_password: options.new_password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetBySessionOptions,\n ): Promise<PasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: PasswordResetByEmailStartOptions): Promise<PasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetByEmailStartResponse>({\n url: '/passwords/email/reset/start',\n method: 'POST',\n body: {\n email: options.email,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: PasswordStrengthCheckOptions): Promise<PasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<PasswordStrengthCheckResponse>({\n url: '/passwords/strength_check',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n },\n });\n }\n}\n"],"names":["DefaultDynamicConfig","Promise","resolve","pkceRequiredForPasswordResets","HeadlessPasswordClient","create","authenticate","resetByEmail","resetByExistingPassword","resetBySession","_subscriptionService","_pkceManager","_config","dfpProtectedAuth","_networkClient","withUpdateSession","options","validateInDev","password","email","session_duration_minutes","dfp_telemetry_id","captcha_token","getDFPTelemetryIDAndCaptcha","resp","retriableFetchSDK","url","method","body","retryCallback","retryWithCaptchaAndDFP","omitUser","token","pkPair","getPKPair","code_verifier","clearPKPair","existing_password","new_password","getCodeChallenge","undefined","keyPair","code_challenge","startPKCETransaction","resetByEmailStart","login_redirect_url","reset_password_redirect_url","reset_password_template_id","reset_password_expiration_minutes","locale","strengthCheck","fetchSDK"],"mappings":"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"}
|
|
@@ -7,12 +7,6 @@ class HeadlessRBACClient {
|
|
|
7
7
|
policyPromise;
|
|
8
8
|
constructor(cachedConfig, dynamicConfig, _subscriptionService){
|
|
9
9
|
this._subscriptionService = _subscriptionService;
|
|
10
|
-
this.isAuthorizedSync = (resourceId, action)=>{
|
|
11
|
-
return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId, action);
|
|
12
|
-
};
|
|
13
|
-
this.isAuthorized = (resourceId, action)=>{
|
|
14
|
-
return this.policyPromise.then((policy)=>policy.callerIsAuthorized(this.roleIds(), resourceId, action));
|
|
15
|
-
};
|
|
16
10
|
this.cachedPolicy = cachedConfig.rbacPolicy ? RBACPolicy.fromJSON(cachedConfig.rbacPolicy) : null;
|
|
17
11
|
this.policyPromise = dynamicConfig.then((data)=>{
|
|
18
12
|
if (!data.rbacPolicy) {
|
|
@@ -27,8 +21,12 @@ class HeadlessRBACClient {
|
|
|
27
21
|
allPermissions() {
|
|
28
22
|
return this.policyPromise.then((policy)=>policy.allPermissionsForCaller(this.roleIds()));
|
|
29
23
|
}
|
|
30
|
-
isAuthorizedSync
|
|
31
|
-
|
|
24
|
+
isAuthorizedSync = (resourceId, action)=>{
|
|
25
|
+
return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId, action);
|
|
26
|
+
};
|
|
27
|
+
isAuthorized = (resourceId, action)=>{
|
|
28
|
+
return this.policyPromise.then((policy)=>policy.callerIsAuthorized(this.roleIds(), resourceId, action));
|
|
29
|
+
};
|
|
32
30
|
roleIds() {
|
|
33
31
|
const user = this._subscriptionService.getUser();
|
|
34
32
|
if (!user) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadlessRBACClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessRBACClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '../SubscriptionService';\nimport { logger } from '../utils';\nimport { RBACPolicy, RBACPolicyRaw } from '../rbac';\nimport { IHeadlessRBACClient, ConsumerPermissionsMap } from '../public/rbac';\nimport { StytchProjectConfigurationInput } from '../public/typeConfig';\n\ntype CachedConfig = {\n rbacPolicy: RBACPolicyRaw | null;\n};\n\ntype DynamicConfig = Promise<CachedConfig>;\n\nexport class HeadlessRBACClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessRBACClient\n{\n private cachedPolicy: RBACPolicy | null;\n private policyPromise: Promise<RBACPolicy>;\n constructor(\n cachedConfig: CachedConfig,\n dynamicConfig: DynamicConfig,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n ) {\n this.cachedPolicy = cachedConfig.rbacPolicy ? RBACPolicy.fromJSON(cachedConfig.rbacPolicy) : null;\n this.policyPromise = dynamicConfig.then((data) => {\n if (!data.rbacPolicy) {\n logger.error('Unable to retrieve RBAC policy from servers. Assuming caller has no permissions.');\n return new RBACPolicy([], []);\n }\n // Update the existing policy too, so isAuthorizedSync will be up-to-date\n this.cachedPolicy = RBACPolicy.fromJSON(data.rbacPolicy);\n return this.cachedPolicy;\n });\n }\n\n allPermissions<Permissions extends Record<string, string>>() {\n return this.policyPromise.then(\n (policy) => policy.allPermissionsForCaller(this.roleIds()) as ConsumerPermissionsMap<Permissions>,\n );\n }\n\n isAuthorizedSync: IHeadlessRBACClient['isAuthorizedSync'] = (resourceId, action) => {\n return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string);\n };\n\n isAuthorized: IHeadlessRBACClient['isAuthorized'] = (resourceId, action) => {\n return this.policyPromise.then((policy) =>\n policy.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string),\n );\n };\n\n private roleIds() {\n const user = this._subscriptionService.getUser();\n\n if (!user) {\n return [];\n }\n\n // Although user.roles is guaranteed to exist for fresh data, there is a chance\n // that the user stored in localstorage clientside comes from before roles were added to\n // the API response - in which case user.roles will be undefined and this will crash\n // TODO: [AUTH-2294] We can safely remove this ~3mos after RBAC is released\n return user.roles ?? [];\n }\n}\n"],"names":["HeadlessRBACClient","cachedPolicy","policyPromise","
|
|
1
|
+
{"version":3,"file":"HeadlessRBACClient.mjs","sources":["../../../../../../../core/src/HeadlessClients/HeadlessRBACClient.ts"],"sourcesContent":["import { IConsumerSubscriptionService } from '../SubscriptionService';\nimport { logger } from '../utils';\nimport { RBACPolicy, RBACPolicyRaw } from '../rbac';\nimport { IHeadlessRBACClient, ConsumerPermissionsMap } from '../public/rbac';\nimport { StytchProjectConfigurationInput } from '../public/typeConfig';\n\ntype CachedConfig = {\n rbacPolicy: RBACPolicyRaw | null;\n};\n\ntype DynamicConfig = Promise<CachedConfig>;\n\nexport class HeadlessRBACClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessRBACClient\n{\n private cachedPolicy: RBACPolicy | null;\n private policyPromise: Promise<RBACPolicy>;\n constructor(\n cachedConfig: CachedConfig,\n dynamicConfig: DynamicConfig,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n ) {\n this.cachedPolicy = cachedConfig.rbacPolicy ? RBACPolicy.fromJSON(cachedConfig.rbacPolicy) : null;\n this.policyPromise = dynamicConfig.then((data) => {\n if (!data.rbacPolicy) {\n logger.error('Unable to retrieve RBAC policy from servers. Assuming caller has no permissions.');\n return new RBACPolicy([], []);\n }\n // Update the existing policy too, so isAuthorizedSync will be up-to-date\n this.cachedPolicy = RBACPolicy.fromJSON(data.rbacPolicy);\n return this.cachedPolicy;\n });\n }\n\n allPermissions<Permissions extends Record<string, string>>() {\n return this.policyPromise.then(\n (policy) => policy.allPermissionsForCaller(this.roleIds()) as ConsumerPermissionsMap<Permissions>,\n );\n }\n\n isAuthorizedSync: IHeadlessRBACClient['isAuthorizedSync'] = (resourceId, action) => {\n return !!this.cachedPolicy?.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string);\n };\n\n isAuthorized: IHeadlessRBACClient['isAuthorized'] = (resourceId, action) => {\n return this.policyPromise.then((policy) =>\n policy.callerIsAuthorized(this.roleIds(), resourceId as string, action as unknown as string),\n );\n };\n\n private roleIds() {\n const user = this._subscriptionService.getUser();\n\n if (!user) {\n return [];\n }\n\n // Although user.roles is guaranteed to exist for fresh data, there is a chance\n // that the user stored in localstorage clientside comes from before roles were added to\n // the API response - in which case user.roles will be undefined and this will crash\n // TODO: [AUTH-2294] We can safely remove this ~3mos after RBAC is released\n return user.roles ?? [];\n }\n}\n"],"names":["HeadlessRBACClient","cachedPolicy","policyPromise","cachedConfig","dynamicConfig","_subscriptionService","rbacPolicy","RBACPolicy","fromJSON","then","data","logger","error","allPermissions","policy","allPermissionsForCaller","roleIds","isAuthorizedSync","resourceId","action","callerIsAuthorized","isAuthorized","user","getUser","roles"],"mappings":";;;AAYO,MAAMA,kBAAAA,CAAAA;;IAGHC,YAAAA;IACAC,aAAAA;AACR,IAAA,WAAA,CACEC,YAA0B,EAC1BC,aAA4B,EACpBC,oBAAyE,CACjF;aADQA,oBAAAA,GAAAA,oBAAAA;QAER,IAAI,CAACJ,YAAY,GAAGE,YAAAA,CAAaG,UAAU,GAAGC,UAAAA,CAAWC,QAAQ,CAACL,YAAAA,CAAaG,UAAU,CAAA,GAAI,IAAA;AAC7F,QAAA,IAAI,CAACJ,aAAa,GAAGE,aAAAA,CAAcK,IAAI,CAAC,CAACC,IAAAA,GAAAA;YACvC,IAAI,CAACA,IAAAA,CAAKJ,UAAU,EAAE;AACpBK,gBAAAA,MAAAA,CAAOC,KAAK,CAAC,kFAAA,CAAA;AACb,gBAAA,OAAO,IAAIL,UAAAA,CAAW,EAAE,EAAE,EAAE,CAAA;AAC9B,YAAA;;AAEA,YAAA,IAAI,CAACN,YAAY,GAAGM,WAAWC,QAAQ,CAACE,KAAKJ,UAAU,CAAA;YACvD,OAAO,IAAI,CAACL,YAAY;AAC1B,QAAA,CAAA,CAAA;AACF,IAAA;IAEAY,cAAAA,GAA6D;AAC3D,QAAA,OAAO,IAAI,CAACX,aAAa,CAACO,IAAI,CAC5B,CAACK,MAAAA,GAAWA,MAAAA,CAAOC,uBAAuB,CAAC,IAAI,CAACC,OAAO,EAAA,CAAA,CAAA;AAE3D,IAAA;AAEAC,IAAAA,gBAAAA,GAA4D,CAACC,UAAAA,EAAYC,MAAAA,GAAAA;QACvE,OAAO,CAAC,CAAC,IAAI,CAAClB,YAAY,EAAEmB,kBAAAA,CAAmB,IAAI,CAACJ,OAAO,EAAA,EAAIE,UAAAA,EAAsBC,MAAAA,CAAAA;IACvF,CAAA;AAEAE,IAAAA,YAAAA,GAAoD,CAACH,UAAAA,EAAYC,MAAAA,GAAAA;AAC/D,QAAA,OAAO,IAAI,CAACjB,aAAa,CAACO,IAAI,CAAC,CAACK,MAAAA,GAC9BA,MAAAA,CAAOM,kBAAkB,CAAC,IAAI,CAACJ,OAAO,IAAIE,UAAAA,EAAsBC,MAAAA,CAAAA,CAAAA;IAEpE,CAAA;IAEQH,OAAAA,GAAU;AAChB,QAAA,MAAMM,IAAAA,GAAO,IAAI,CAACjB,oBAAoB,CAACkB,OAAO,EAAA;AAE9C,QAAA,IAAI,CAACD,IAAAA,EAAM;AACT,YAAA,OAAO,EAAE;AACX,QAAA;;;;;QAMA,OAAOA,IAAAA,CAAKE,KAAK,IAAI,EAAE;AACzB,IAAA;AACF;;;;"}
|