@stytch/react 20.0.0-next.4 → 20.0.0-next.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -1
- package/dist/cjs/adminPortal/index.cjs +2 -2
- package/dist/cjs/b2b/index.cjs +11 -8
- 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 +11 -8
- 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/components/OAuthB2BButton.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2b/components/OAuthB2BButton.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/OAuthB2BButton.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/components/OAuthB2BButton.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
|
@@ -9,31 +9,31 @@ import { OneTapPositions } from '../../core/src/public/ui.mjs';
|
|
|
9
9
|
class HeadlessOAuthClient extends HeadlessOAuthClient$1 {
|
|
10
10
|
_oneTap;
|
|
11
11
|
constructor(_networkClient, _subscriptionService, _pkceManager, _dynamicConfig, _config, _oneTap){
|
|
12
|
-
super(_networkClient, _subscriptionService, _pkceManager, _dynamicConfig, _config), this._oneTap = _oneTap
|
|
13
|
-
const clientResult = await this._oneTap.createOneTapClient();
|
|
14
|
-
if (!clientResult.success) {
|
|
15
|
-
throw new Error(`One Tap could not load: ${clientResult.reason}`);
|
|
16
|
-
}
|
|
17
|
-
const { client } = clientResult;
|
|
18
|
-
const onSuccessCallback = this._oneTap.createOnSuccessHandler({
|
|
19
|
-
signupRedirectUrl: options.signup_redirect_url,
|
|
20
|
-
loginRedirectUrl: options.login_redirect_url,
|
|
21
|
-
onSuccess: this._oneTap.redirectOnSuccess
|
|
22
|
-
});
|
|
23
|
-
return client.render({
|
|
24
|
-
style: {
|
|
25
|
-
position: OneTapPositions.floating
|
|
26
|
-
},
|
|
27
|
-
onOneTapCancelled: options.onOneTapCancelled,
|
|
28
|
-
callback: onSuccessCallback,
|
|
29
|
-
cancelOnTapOutside: options.cancel_on_tap_outside
|
|
30
|
-
});
|
|
31
|
-
}, this.googleOneTap = {
|
|
32
|
-
start: this.startOneTap
|
|
33
|
-
};
|
|
12
|
+
super(_networkClient, _subscriptionService, _pkceManager, _dynamicConfig, _config), this._oneTap = _oneTap;
|
|
34
13
|
}
|
|
35
|
-
startOneTap
|
|
36
|
-
|
|
14
|
+
startOneTap = async (options)=>{
|
|
15
|
+
const clientResult = await this._oneTap.createOneTapClient();
|
|
16
|
+
if (!clientResult.success) {
|
|
17
|
+
throw new Error(`One Tap could not load: ${clientResult.reason}`);
|
|
18
|
+
}
|
|
19
|
+
const { client } = clientResult;
|
|
20
|
+
const onSuccessCallback = this._oneTap.createOnSuccessHandler({
|
|
21
|
+
signupRedirectUrl: options.signup_redirect_url,
|
|
22
|
+
loginRedirectUrl: options.login_redirect_url,
|
|
23
|
+
onSuccess: this._oneTap.redirectOnSuccess
|
|
24
|
+
});
|
|
25
|
+
return client.render({
|
|
26
|
+
style: {
|
|
27
|
+
position: OneTapPositions.floating
|
|
28
|
+
},
|
|
29
|
+
onOneTapCancelled: options.onOneTapCancelled,
|
|
30
|
+
callback: onSuccessCallback,
|
|
31
|
+
cancelOnTapOutside: options.cancel_on_tap_outside
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
googleOneTap = {
|
|
35
|
+
start: this.startOneTap
|
|
36
|
+
};
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
export { HeadlessOAuthClient };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HeadlessOAuthClient.mjs","sources":["../../../../../../web/src/HeadlessOAuthClient.ts"],"sourcesContent":["import { IHeadlessOAuthClient, OneTapPositions, StytchProjectConfigurationInput } from '@stytch/core/public';\nimport {\n HeadlessOAuthClient as BaseHeadlessOAuthClient,\n INetworkClient,\n IPKCEManager,\n IConsumerSubscriptionService,\n} from '@stytch/core';\nimport { OneTapProvider } from './oneTap/OneTapProvider';\nimport { OneTapRenderResult } from './oneTap/GoogleOneTapClient';\n\nexport type GoogleOneTapOAuthOptions = {\n /**\n * The URL that Stytch redirects to after the OAuth flow is completed for a user that already exists.\n * This URL should be an endpoint in the backend server that verifies the request by querying Stytch's /oauth/authenticate endpoint and finishes the login.\n * The URL should be configured as a Login URL in the Stytch Dashboard's Redirect URL page.\n * If the field is not specified, the default in the Dashboard is used.\n */\n login_redirect_url?: string;\n /**\n * The URL that Stytch redirects to after the OAuth flow is completed for a user that does not yet exist.\n * This URL should be an endpoint in the backend server that verifies the request by querying Stytch's /oauth/authenticate endpoint and finishes the login.\n * The URL should be configured as a Sign Up URL in the Stytch Dashboard's Redirect URL page.\n * If the field is not specified, the default in the Dashboard is used.\n */\n signup_redirect_url?: string;\n /**\n * An optional callback function that runs when a user explicitly cancels out of the one tap flow.\n * This callback may not be invoked immediately or at all depending on the behavior of the browser and Google's SDK.\n */\n onOneTapCancelled?: () => void;\n /**\n * Controls whether clicking outside the One Tap prompt dismisses the prompt.\n * Defaults to true.\n */\n cancel_on_tap_outside?: boolean;\n};\n\ninterface IGoogleOneTapOAuthProvider {\n /**\n * Start an OAuth flow by showing the Google one tap prompt in the top right corner of the user's browser.\n * You can configure this to be started by a user action (i.e Button click) or on load/render.\n * @example\n * const showGoogleOneTap = useCallback(()=> {\n * stytch.oauth.googleOneTap.start({\n * login_redirect_url: 'https://example.com/oauth/callback',\n * signup_redirect_url: 'https://example.com/oauth/callback',\n * })\n * }, [stytch]);\n * return (\n * <Button onClick={showGoogleOneTap}> Show Google one tap </Button>\n * );\n *\n * @param options - An {@link GoogleOneTapOAuthOptions} object\n *\n * @returns A {@link OneTapRenderResult} object. The result object includes if the one-tap prompt\n * was rendered, and a reason if it couldn't be rendered.\n *\n * @throws An Error if the one tap client cannot be created.\n */\n start(options?: GoogleOneTapOAuthOptions): Promise<OneTapRenderResult>;\n}\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 interface IWebOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends IHeadlessOAuthClient<TProjectConfiguration> {\n googleOneTap: IGoogleOneTapOAuthProvider;\n}\n\nexport class HeadlessOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseHeadlessOAuthClient<TProjectConfiguration>\n implements IWebOAuthClient<TProjectConfiguration>\n{\n constructor(\n _networkClient: INetworkClient,\n _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n _pkceManager: IPKCEManager,\n _dynamicConfig: DynamicConfig,\n _config: Config,\n private _oneTap: OneTapProvider,\n ) {\n super(_networkClient, _subscriptionService, _pkceManager, _dynamicConfig, _config);\n }\n\n private startOneTap = async (options: GoogleOneTapOAuthOptions): Promise<OneTapRenderResult> => {\n const clientResult = await this._oneTap.createOneTapClient();\n if (!clientResult.success) {\n throw new Error(`One Tap could not load: ${clientResult.reason}`);\n }\n\n const { client } = clientResult;\n\n const onSuccessCallback = this._oneTap.createOnSuccessHandler({\n signupRedirectUrl: options.signup_redirect_url,\n loginRedirectUrl: options.login_redirect_url,\n onSuccess: this._oneTap.redirectOnSuccess,\n });\n\n return client.render({\n style: {\n position: OneTapPositions.floating,\n },\n onOneTapCancelled: options.onOneTapCancelled,\n callback: onSuccessCallback,\n cancelOnTapOutside: options.cancel_on_tap_outside,\n });\n };\n\n googleOneTap: IGoogleOneTapOAuthProvider = {\n start: this.startOneTap,\n };\n}\n"],"names":["HeadlessOAuthClient","BaseHeadlessOAuthClient","
|
|
1
|
+
{"version":3,"file":"HeadlessOAuthClient.mjs","sources":["../../../../../../web/src/HeadlessOAuthClient.ts"],"sourcesContent":["import { IHeadlessOAuthClient, OneTapPositions, StytchProjectConfigurationInput } from '@stytch/core/public';\nimport {\n HeadlessOAuthClient as BaseHeadlessOAuthClient,\n INetworkClient,\n IPKCEManager,\n IConsumerSubscriptionService,\n} from '@stytch/core';\nimport { OneTapProvider } from './oneTap/OneTapProvider';\nimport { OneTapRenderResult } from './oneTap/GoogleOneTapClient';\n\nexport type GoogleOneTapOAuthOptions = {\n /**\n * The URL that Stytch redirects to after the OAuth flow is completed for a user that already exists.\n * This URL should be an endpoint in the backend server that verifies the request by querying Stytch's /oauth/authenticate endpoint and finishes the login.\n * The URL should be configured as a Login URL in the Stytch Dashboard's Redirect URL page.\n * If the field is not specified, the default in the Dashboard is used.\n */\n login_redirect_url?: string;\n /**\n * The URL that Stytch redirects to after the OAuth flow is completed for a user that does not yet exist.\n * This URL should be an endpoint in the backend server that verifies the request by querying Stytch's /oauth/authenticate endpoint and finishes the login.\n * The URL should be configured as a Sign Up URL in the Stytch Dashboard's Redirect URL page.\n * If the field is not specified, the default in the Dashboard is used.\n */\n signup_redirect_url?: string;\n /**\n * An optional callback function that runs when a user explicitly cancels out of the one tap flow.\n * This callback may not be invoked immediately or at all depending on the behavior of the browser and Google's SDK.\n */\n onOneTapCancelled?: () => void;\n /**\n * Controls whether clicking outside the One Tap prompt dismisses the prompt.\n * Defaults to true.\n */\n cancel_on_tap_outside?: boolean;\n};\n\ninterface IGoogleOneTapOAuthProvider {\n /**\n * Start an OAuth flow by showing the Google one tap prompt in the top right corner of the user's browser.\n * You can configure this to be started by a user action (i.e Button click) or on load/render.\n * @example\n * const showGoogleOneTap = useCallback(()=> {\n * stytch.oauth.googleOneTap.start({\n * login_redirect_url: 'https://example.com/oauth/callback',\n * signup_redirect_url: 'https://example.com/oauth/callback',\n * })\n * }, [stytch]);\n * return (\n * <Button onClick={showGoogleOneTap}> Show Google one tap </Button>\n * );\n *\n * @param options - An {@link GoogleOneTapOAuthOptions} object\n *\n * @returns A {@link OneTapRenderResult} object. The result object includes if the one-tap prompt\n * was rendered, and a reason if it couldn't be rendered.\n *\n * @throws An Error if the one tap client cannot be created.\n */\n start(options?: GoogleOneTapOAuthOptions): Promise<OneTapRenderResult>;\n}\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 interface IWebOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends IHeadlessOAuthClient<TProjectConfiguration> {\n googleOneTap: IGoogleOneTapOAuthProvider;\n}\n\nexport class HeadlessOAuthClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseHeadlessOAuthClient<TProjectConfiguration>\n implements IWebOAuthClient<TProjectConfiguration>\n{\n constructor(\n _networkClient: INetworkClient,\n _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n _pkceManager: IPKCEManager,\n _dynamicConfig: DynamicConfig,\n _config: Config,\n private _oneTap: OneTapProvider,\n ) {\n super(_networkClient, _subscriptionService, _pkceManager, _dynamicConfig, _config);\n }\n\n private startOneTap = async (options: GoogleOneTapOAuthOptions): Promise<OneTapRenderResult> => {\n const clientResult = await this._oneTap.createOneTapClient();\n if (!clientResult.success) {\n throw new Error(`One Tap could not load: ${clientResult.reason}`);\n }\n\n const { client } = clientResult;\n\n const onSuccessCallback = this._oneTap.createOnSuccessHandler({\n signupRedirectUrl: options.signup_redirect_url,\n loginRedirectUrl: options.login_redirect_url,\n onSuccess: this._oneTap.redirectOnSuccess,\n });\n\n return client.render({\n style: {\n position: OneTapPositions.floating,\n },\n onOneTapCancelled: options.onOneTapCancelled,\n callback: onSuccessCallback,\n cancelOnTapOutside: options.cancel_on_tap_outside,\n });\n };\n\n googleOneTap: IGoogleOneTapOAuthProvider = {\n start: this.startOneTap,\n };\n}\n"],"names":["HeadlessOAuthClient","BaseHeadlessOAuthClient","_networkClient","_subscriptionService","_pkceManager","_dynamicConfig","_config","_oneTap","startOneTap","options","clientResult","createOneTapClient","success","Error","reason","client","onSuccessCallback","createOnSuccessHandler","signupRedirectUrl","signup_redirect_url","loginRedirectUrl","login_redirect_url","onSuccess","redirectOnSuccess","render","style","position","OneTapPositions","floating","onOneTapCancelled","callback","cancelOnTapOutside","cancel_on_tap_outside","googleOneTap","start"],"mappings":";;;;;;;;AA6EO,MAAMA,mBAAAA,SACHC,qBAAAA,CAAAA;;AAGR,IAAA,WAAA,CACEC,cAA8B,EAC9BC,oBAAyE,EACzEC,YAA0B,EAC1BC,cAA6B,EAC7BC,OAAe,EACf,OAA+B,CAC/B;AACA,QAAA,KAAK,CAACJ,cAAAA,EAAgBC,oBAAAA,EAAsBC,YAAAA,EAAcC,cAAAA,EAAgBC,eAFlEC,OAAAA,GAAAA,OAAAA;AAGV,IAAA;AAEQC,IAAAA,WAAAA,GAAc,OAAOC,OAAAA,GAAAA;AAC3B,QAAA,MAAMC,eAAe,MAAM,IAAI,CAACH,OAAO,CAACI,kBAAkB,EAAA;QAC1D,IAAI,CAACD,YAAAA,CAAaE,OAAO,EAAE;AACzB,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,wBAAwB,EAAEH,YAAAA,CAAaI,MAAM,CAAA,CAAE,CAAA;AAClE,QAAA;QAEA,MAAM,EAAEC,MAAM,EAAE,GAAGL,YAAAA;AAEnB,QAAA,MAAMM,oBAAoB,IAAI,CAACT,OAAO,CAACU,sBAAsB,CAAC;AAC5DC,YAAAA,iBAAAA,EAAmBT,QAAQU,mBAAmB;AAC9CC,YAAAA,gBAAAA,EAAkBX,QAAQY,kBAAkB;AAC5CC,YAAAA,SAAAA,EAAW,IAAI,CAACf,OAAO,CAACgB;AAC1B,SAAA,CAAA;QAEA,OAAOR,MAAAA,CAAOS,MAAM,CAAC;YACnBC,KAAAA,EAAO;AACLC,gBAAAA,QAAAA,EAAUC,gBAAgBC;AAC5B,aAAA;AACAC,YAAAA,iBAAAA,EAAmBpB,QAAQoB,iBAAiB;YAC5CC,QAAAA,EAAUd,iBAAAA;AACVe,YAAAA,kBAAAA,EAAoBtB,QAAQuB;AAC9B,SAAA,CAAA;IACF,CAAA;IAEAC,YAAAA,GAA2C;QACzCC,KAAAA,EAAO,IAAI,CAAC1B;KACd;AACF;;;;"}
|
|
@@ -13,10 +13,6 @@ class NetworkClient {
|
|
|
13
13
|
this._publicToken = _publicToken;
|
|
14
14
|
this._subscriptionDataLayer = _subscriptionDataLayer;
|
|
15
15
|
this.additionalTelemetryDataFn = additionalTelemetryDataFn;
|
|
16
|
-
this.// @deprecated Use the new sessions.updateSession() method instead
|
|
17
|
-
updateSessionToken = ()=>{
|
|
18
|
-
return null;
|
|
19
|
-
};
|
|
20
16
|
this.baseURL = _liveAPIURL;
|
|
21
17
|
if (isTestPublicToken(_publicToken)) {
|
|
22
18
|
this.baseURL = _testAPIURL;
|
|
@@ -27,7 +23,10 @@ class NetworkClient {
|
|
|
27
23
|
logEventURL: this.buildSDKUrl('/events')
|
|
28
24
|
});
|
|
29
25
|
}
|
|
30
|
-
|
|
26
|
+
// @deprecated Use the new sessions.updateSession() method instead
|
|
27
|
+
updateSessionToken = ()=>{
|
|
28
|
+
return null;
|
|
29
|
+
};
|
|
31
30
|
logEvent({ name, details, error = {} }) {
|
|
32
31
|
this.eventLogger.logEvent(this.createTelemetryBlob(), {
|
|
33
32
|
public_token: this._publicToken,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkClient.mjs","sources":["../../../../../../web/src/NetworkClient.ts"],"sourcesContent":["import {\n AdditionalTelemetryData,\n createAppSessionId,\n createEventId,\n createPersistentId,\n DEFAULT_INTERVAL_DURATION_MS,\n DEFAULT_MAX_BATCH_SIZE,\n EventLogger,\n INetworkClient,\n isTestPublicToken,\n RetriableSDKRequestInfo,\n SDKRequestInfo,\n SDKTelemetry,\n} from '@stytch/core';\nimport { ResponseCommon } from '@stytch/core/public';\n\nimport { baseFetchSDK, baseSubmitFormSDK, retriableFetchSDK } from '@stytch/core';\nimport { version as PACKAGE_VERSION } from '../package.json';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\n\nexport class NetworkClient implements INetworkClient {\n private eventLogger: EventLogger;\n private readonly baseURL: string;\n\n constructor(\n private _publicToken: string,\n private _subscriptionDataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n _liveAPIURL: string,\n _testAPIURL: string,\n private additionalTelemetryDataFn: () => AdditionalTelemetryData,\n ) {\n this.baseURL = _liveAPIURL;\n if (isTestPublicToken(_publicToken)) {\n this.baseURL = _testAPIURL;\n }\n this.eventLogger = new EventLogger({\n maxBatchSize: DEFAULT_MAX_BATCH_SIZE,\n intervalDurationMs: DEFAULT_INTERVAL_DURATION_MS,\n logEventURL: this.buildSDKUrl('/events'),\n });\n }\n\n // @deprecated Use the new sessions.updateSession() method instead\n updateSessionToken = () => {\n return null;\n };\n\n logEvent({\n name,\n details,\n error = {},\n }: {\n name: string;\n details: Record<string, unknown>;\n error?: { error_code?: string; error_description?: string; http_status_code?: string };\n }): void {\n this.eventLogger.logEvent(this.createTelemetryBlob(), {\n public_token: this._publicToken,\n event_name: name,\n details: details,\n\n // Error fields\n error_code: error.error_code,\n error_description: error.error_description,\n http_status_code: error.http_status_code,\n });\n }\n\n createTelemetryBlob(): SDKTelemetry {\n return {\n event_id: createEventId(),\n // TODO: These should be persisted somewhere, not generated per request\n app_session_id: createAppSessionId(),\n persistent_id: createPersistentId(),\n\n client_sent_at: new Date().toISOString(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\n // Logged in data\n // This gets passed into the constructor from StytchClient or StytchB2BClient\n // We pass in the user & session id when the Consumer SDK is being used and member & session id\n // when the B2B SDK is being used.\n\n // Why don't we generate this from the session_token in the auth header?\n // - We don't want to tie analytics ingest to session validation. There's no need to put\n // that kind of pressure on API, and ingest could be moved to somewhere that doesn't\n // have the ability to validate tokens\n // - For bulk event batches, we want to keep track of whether or not a user was logged\n // in at each event. If we have 10 events, the user logs in at event 5, then they'll have\n // a token when they log the batch, but we want to know that they were not logged in for the\n // first 4 events\n ...this.additionalTelemetryDataFn(),\n\n // Versioning\n app: {\n identifier: window.location.hostname,\n },\n sdk: {\n // TODO: Pull these from package.json when there is a package\n // eslint-disable-next-line lingui/no-unlocalized-strings\n identifier: 'Stytch.js Javascript SDK',\n version: PACKAGE_VERSION,\n },\n };\n }\n\n async fetchSDK<T extends ResponseCommon>({ url, body, method }: SDKRequestInfo): Promise<T> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return baseFetchSDK<T>({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n });\n }\n\n async submitFormSDK({ url, body, method }: SDKRequestInfo): Promise<void> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return baseSubmitFormSDK({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n });\n }\n\n async retriableFetchSDK<T extends ResponseCommon>({\n url,\n body,\n method,\n retryCallback,\n }: RetriableSDKRequestInfo): Promise<T> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return retriableFetchSDK<T>({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n retryCallback,\n });\n }\n\n buildSDKUrl(url: string): string {\n // eslint-disable-next-line lingui/no-unlocalized-strings\n return `${this.baseURL}/sdk/v1${url}`;\n }\n}\n"],"names":["NetworkClient","eventLogger","baseURL","constructor","_subscriptionDataLayer","_liveAPIURL","_testAPIURL","_publicToken","additionalTelemetryDataFn","updateSessionToken","isTestPublicToken","EventLogger","maxBatchSize","DEFAULT_MAX_BATCH_SIZE","intervalDurationMs","DEFAULT_INTERVAL_DURATION_MS","logEventURL","buildSDKUrl","logEvent","name","details","error","createTelemetryBlob","public_token","event_name","error_code","error_description","http_status_code","event_id","createEventId","app_session_id","createAppSessionId","persistent_id","createPersistentId","client_sent_at","Date","toISOString","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","app","identifier","window","location","hostname","sdk","version","PACKAGE_VERSION","fetchSDK","url","body","method","sessionToken","readSessionCookie","session_token","basicAuthHeader","btoa","xSDKClientHeader","JSON","stringify","xSDKParentHostHeader","origin","baseFetchSDK","finalURL","submitFormSDK","baseSubmitFormSDK","retriableFetchSDK","retryCallback"],"mappings":";;;;;AAoBO,MAAMA,aAAAA,CAAAA;;;;IACHC,WAAAA;IACSC,OAAAA;AAEjBC,IAAAA,WAAAA,CACE,YAA4B,EACpBC,sBAAgF,EACxFC,WAAmB,EACnBC,WAAmB,EACnB,yBAAgE,CAChE;aALQC,YAAAA,GAAAA,YAAAA;aACAH,sBAAAA,GAAAA,sBAAAA;aAGAI,yBAAAA,GAAAA,yBAAAA;;QAcVC,kBAAAA,GAAqB,IAAA;YACnB,OAAO,IAAA;AACT,QAAA,CAAA;QAdE,IAAI,CAACP,OAAO,GAAGG,WAAAA;AACf,QAAA,IAAIK,kBAAkBH,YAAAA,CAAAA,EAAe;YACnC,IAAI,CAACL,OAAO,GAAGI,WAAAA;AACjB,QAAA;AACA,QAAA,IAAI,CAACL,WAAW,GAAG,IAAIU,WAAAA,CAAY;YACjCC,YAAAA,EAAcC,sBAAAA;YACdC,kBAAAA,EAAoBC,4BAAAA;YACpBC,WAAAA,EAAa,IAAI,CAACC,WAAW,CAAC,SAAA;AAChC,SAAA,CAAA;AACF,IAAA;IAGAR,kBAAAA;IAIAS,QAAAA,CAAS,EACPC,IAAI,EACJC,OAAO,EACPC,KAAAA,GAAQ,EAAE,EAKX,EAAQ;QACP,IAAI,CAACpB,WAAW,CAACiB,QAAQ,CAAC,IAAI,CAACI,mBAAmB,EAAA,EAAI;YACpDC,YAAAA,EAAc,IAAI,CAAChB,YAAY;YAC/BiB,UAAAA,EAAYL,IAAAA;YACZC,OAAAA,EAASA,OAAAA;;AAGTK,YAAAA,UAAAA,EAAYJ,MAAMI,UAAU;AAC5BC,YAAAA,iBAAAA,EAAmBL,MAAMK,iBAAiB;AAC1CC,YAAAA,gBAAAA,EAAkBN,MAAMM;AAC1B,SAAA,CAAA;AACF,IAAA;IAEAL,mBAAAA,GAAoC;QAClC,OAAO;YACLM,QAAAA,EAAUC,aAAAA,EAAAA;;YAEVC,cAAAA,EAAgBC,kBAAAA,EAAAA;YAChBC,aAAAA,EAAeC,kBAAAA,EAAAA;YAEfC,cAAAA,EAAgB,IAAIC,OAAOC,WAAW,EAAA;AACtCC,YAAAA,QAAAA,EAAUC,IAAAA,CAAKC,cAAc,EAAA,CAAGC,eAAe,GAAGC,QAAQ;;;;;;;;;;;;;YAe1D,GAAG,IAAI,CAACjC,yBAAyB,EAAE;;YAGnCkC,GAAAA,EAAK;gBACHC,UAAAA,EAAYC,MAAAA,CAAOC,QAAQ,CAACC;AAC9B,aAAA;YACAC,GAAAA,EAAK;;;gBAGHJ,UAAAA,EAAY,0BAAA;gBACZK,OAAAA,EAASC;AACX;AACF,SAAA;AACF,IAAA;IAEA,MAAMC,QAAAA,CAAmC,EAAEC,GAAG,EAAEC,IAAI,EAAEC,MAAM,EAAkB,EAAc;AAC1F,QAAA,MAAMC,eAAe,IAAI,CAAClD,sBAAsB,CAACmD,iBAAiB,GAAGC,aAAa;AAClF,QAAA,MAAMC,eAAAA,GAAkB,QAAA,GAAWb,MAAAA,CAAOc,IAAI,CAAC,IAAI,CAACnD,YAAY,GAAG,OAAO+C,YAAAA,IAAgB,IAAI,CAAC/C,YAAY,CAAD,CAAA;QAC1G,MAAMoD,gBAAAA,GAAmBf,OAAOc,IAAI,CAACE,KAAKC,SAAS,CAAC,IAAI,CAACvC,mBAAmB,EAAA,CAAA,CAAA;AAC5E,QAAA,MAAMwC,oBAAAA,GAAuBlB,MAAAA,CAAOC,QAAQ,CAACkB,MAAM;AAEnD,QAAA,OAAOC,YAAAA,CAAgB;AACrBP,YAAAA,eAAAA;AACAL,YAAAA,IAAAA;YACAa,QAAAA,EAAU,IAAI,CAAChD,WAAW,CAACkC,GAAAA,CAAAA;AAC3BE,YAAAA,MAAAA;AACAM,YAAAA,gBAAAA;AACAG,YAAAA;AACF,SAAA,CAAA;AACF,IAAA;IAEA,MAAMI,aAAAA,CAAc,EAAEf,GAAG,EAAEC,IAAI,EAAEC,MAAM,EAAkB,EAAiB;AACxE,QAAA,MAAMC,eAAe,IAAI,CAAClD,sBAAsB,CAACmD,iBAAiB,GAAGC,aAAa;AAClF,QAAA,MAAMC,eAAAA,GAAkB,QAAA,GAAWb,MAAAA,CAAOc,IAAI,CAAC,IAAI,CAACnD,YAAY,GAAG,OAAO+C,YAAAA,IAAgB,IAAI,CAAC/C,YAAY,CAAD,CAAA;QAC1G,MAAMoD,gBAAAA,GAAmBf,OAAOc,IAAI,CAACE,KAAKC,SAAS,CAAC,IAAI,CAACvC,mBAAmB,EAAA,CAAA,CAAA;AAC5E,QAAA,MAAMwC,oBAAAA,GAAuBlB,MAAAA,CAAOC,QAAQ,CAACkB,MAAM;AAEnD,QAAA,OAAOI,iBAAAA,CAAkB;AACvBV,YAAAA,eAAAA;AACAL,YAAAA,IAAAA;YACAa,QAAAA,EAAU,IAAI,CAAChD,WAAW,CAACkC,GAAAA,CAAAA;AAC3BE,YAAAA,MAAAA;AACAM,YAAAA,gBAAAA;AACAG,YAAAA;AACF,SAAA,CAAA;AACF,IAAA;IAEA,MAAMM,iBAAAA,CAA4C,EAChDjB,GAAG,EACHC,IAAI,EACJC,MAAM,EACNgB,aAAa,EACW,EAAc;AACtC,QAAA,MAAMf,eAAe,IAAI,CAAClD,sBAAsB,CAACmD,iBAAiB,GAAGC,aAAa;AAClF,QAAA,MAAMC,eAAAA,GAAkB,QAAA,GAAWb,MAAAA,CAAOc,IAAI,CAAC,IAAI,CAACnD,YAAY,GAAG,OAAO+C,YAAAA,IAAgB,IAAI,CAAC/C,YAAY,CAAD,CAAA;QAC1G,MAAMoD,gBAAAA,GAAmBf,OAAOc,IAAI,CAACE,KAAKC,SAAS,CAAC,IAAI,CAACvC,mBAAmB,EAAA,CAAA,CAAA;AAC5E,QAAA,MAAMwC,oBAAAA,GAAuBlB,MAAAA,CAAOC,QAAQ,CAACkB,MAAM;AAEnD,QAAA,OAAOK,iBAAAA,CAAqB;AAC1BX,YAAAA,eAAAA;AACAL,YAAAA,IAAAA;YACAa,QAAAA,EAAU,IAAI,CAAChD,WAAW,CAACkC,GAAAA,CAAAA;AAC3BE,YAAAA,MAAAA;AACAM,YAAAA,gBAAAA;AACAG,YAAAA,oBAAAA;AACAO,YAAAA;AACF,SAAA,CAAA;AACF,IAAA;AAEApD,IAAAA,WAAAA,CAAYkC,GAAW,EAAU;;AAE/B,QAAA,OAAO,GAAG,IAAI,CAACjD,OAAO,CAAC,OAAO,EAAEiD,GAAAA,CAAAA,CAAK;AACvC,IAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"NetworkClient.mjs","sources":["../../../../../../web/src/NetworkClient.ts"],"sourcesContent":["import {\n AdditionalTelemetryData,\n createAppSessionId,\n createEventId,\n createPersistentId,\n DEFAULT_INTERVAL_DURATION_MS,\n DEFAULT_MAX_BATCH_SIZE,\n EventLogger,\n INetworkClient,\n isTestPublicToken,\n RetriableSDKRequestInfo,\n SDKRequestInfo,\n SDKTelemetry,\n} from '@stytch/core';\nimport { ResponseCommon } from '@stytch/core/public';\n\nimport { baseFetchSDK, baseSubmitFormSDK, retriableFetchSDK } from '@stytch/core';\nimport { version as PACKAGE_VERSION } from '../package.json';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\n\nexport class NetworkClient implements INetworkClient {\n private eventLogger: EventLogger;\n private readonly baseURL: string;\n\n constructor(\n private _publicToken: string,\n private _subscriptionDataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n _liveAPIURL: string,\n _testAPIURL: string,\n private additionalTelemetryDataFn: () => AdditionalTelemetryData,\n ) {\n this.baseURL = _liveAPIURL;\n if (isTestPublicToken(_publicToken)) {\n this.baseURL = _testAPIURL;\n }\n this.eventLogger = new EventLogger({\n maxBatchSize: DEFAULT_MAX_BATCH_SIZE,\n intervalDurationMs: DEFAULT_INTERVAL_DURATION_MS,\n logEventURL: this.buildSDKUrl('/events'),\n });\n }\n\n // @deprecated Use the new sessions.updateSession() method instead\n updateSessionToken = () => {\n return null;\n };\n\n logEvent({\n name,\n details,\n error = {},\n }: {\n name: string;\n details: Record<string, unknown>;\n error?: { error_code?: string; error_description?: string; http_status_code?: string };\n }): void {\n this.eventLogger.logEvent(this.createTelemetryBlob(), {\n public_token: this._publicToken,\n event_name: name,\n details: details,\n\n // Error fields\n error_code: error.error_code,\n error_description: error.error_description,\n http_status_code: error.http_status_code,\n });\n }\n\n createTelemetryBlob(): SDKTelemetry {\n return {\n event_id: createEventId(),\n // TODO: These should be persisted somewhere, not generated per request\n app_session_id: createAppSessionId(),\n persistent_id: createPersistentId(),\n\n client_sent_at: new Date().toISOString(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n\n // Logged in data\n // This gets passed into the constructor from StytchClient or StytchB2BClient\n // We pass in the user & session id when the Consumer SDK is being used and member & session id\n // when the B2B SDK is being used.\n\n // Why don't we generate this from the session_token in the auth header?\n // - We don't want to tie analytics ingest to session validation. There's no need to put\n // that kind of pressure on API, and ingest could be moved to somewhere that doesn't\n // have the ability to validate tokens\n // - For bulk event batches, we want to keep track of whether or not a user was logged\n // in at each event. If we have 10 events, the user logs in at event 5, then they'll have\n // a token when they log the batch, but we want to know that they were not logged in for the\n // first 4 events\n ...this.additionalTelemetryDataFn(),\n\n // Versioning\n app: {\n identifier: window.location.hostname,\n },\n sdk: {\n // TODO: Pull these from package.json when there is a package\n // eslint-disable-next-line lingui/no-unlocalized-strings\n identifier: 'Stytch.js Javascript SDK',\n version: PACKAGE_VERSION,\n },\n };\n }\n\n async fetchSDK<T extends ResponseCommon>({ url, body, method }: SDKRequestInfo): Promise<T> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return baseFetchSDK<T>({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n });\n }\n\n async submitFormSDK({ url, body, method }: SDKRequestInfo): Promise<void> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return baseSubmitFormSDK({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n });\n }\n\n async retriableFetchSDK<T extends ResponseCommon>({\n url,\n body,\n method,\n retryCallback,\n }: RetriableSDKRequestInfo): Promise<T> {\n const sessionToken = this._subscriptionDataLayer.readSessionCookie().session_token;\n const basicAuthHeader = 'Basic ' + window.btoa(this._publicToken + ':' + (sessionToken || this._publicToken));\n const xSDKClientHeader = window.btoa(JSON.stringify(this.createTelemetryBlob()));\n const xSDKParentHostHeader = window.location.origin;\n\n return retriableFetchSDK<T>({\n basicAuthHeader,\n body,\n finalURL: this.buildSDKUrl(url),\n method,\n xSDKClientHeader,\n xSDKParentHostHeader,\n retryCallback,\n });\n }\n\n buildSDKUrl(url: string): string {\n // eslint-disable-next-line lingui/no-unlocalized-strings\n return `${this.baseURL}/sdk/v1${url}`;\n }\n}\n"],"names":["NetworkClient","eventLogger","baseURL","_subscriptionDataLayer","_liveAPIURL","_testAPIURL","_publicToken","additionalTelemetryDataFn","isTestPublicToken","EventLogger","maxBatchSize","DEFAULT_MAX_BATCH_SIZE","intervalDurationMs","DEFAULT_INTERVAL_DURATION_MS","logEventURL","buildSDKUrl","updateSessionToken","logEvent","name","details","error","createTelemetryBlob","public_token","event_name","error_code","error_description","http_status_code","event_id","createEventId","app_session_id","createAppSessionId","persistent_id","createPersistentId","client_sent_at","Date","toISOString","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","app","identifier","window","location","hostname","sdk","version","PACKAGE_VERSION","fetchSDK","url","body","method","sessionToken","readSessionCookie","session_token","basicAuthHeader","btoa","xSDKClientHeader","JSON","stringify","xSDKParentHostHeader","origin","baseFetchSDK","finalURL","submitFormSDK","baseSubmitFormSDK","retriableFetchSDK","retryCallback"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PKCEManager.mjs","sources":["../../../../../../web/src/PKCEManager.ts"],"sourcesContent":["import { ISyncPKCEManager, ProofkeyPair } from '@stytch/core';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\nimport { logger } from '@stytch/core';\n\nconst PKCE_VERIFIER_STORAGE_KEY = 'PKCE_VERIFIER' as const;\n\nfunction toHex(n: number): string {\n let str = n.toString(16);\n if (str.length === 1) {\n str = '0' + str;\n }\n return str;\n}\n\nfunction base64URLEncode(buf: ArrayBuffer) {\n // Convert the ArrayBuffer to string using Uint8 array.\n // btoa takes chars from 0-255 and base64 encodes.\n // Then convert the base64 encoded to base64url encoded.\n // (replace + with -, replace / with _, trim trailing =)\n return btoa(String.fromCharCode.call(null, ...new Uint8Array(buf)))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nexport class PKCEManager implements ISyncPKCEManager {\n constructor(\n private _dataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n private namespace: string,\n ) {}\n\n private key() {\n return `${PKCE_VERIFIER_STORAGE_KEY}:${this.namespace}` as const;\n }\n\n async startPKCETransaction(): Promise<ProofkeyPair> {\n const keyPair = await PKCEManager.createProofkeyPair();\n this._dataLayer.setItem(this.key(), JSON.stringify(keyPair));\n return keyPair;\n }\n\n getPKPair(): ProofkeyPair | undefined {\n const serialized = this._dataLayer.getItem(this.key());\n if (serialized === null) {\n return undefined;\n }\n try {\n return JSON.parse(serialized) as ProofkeyPair;\n } catch {\n logger.warn('Found malformed Proof Key pair in localstorage.');\n return undefined;\n }\n }\n\n clearPKPair(): void {\n return this._dataLayer.removeItem(this.key());\n }\n\n static async createProofkeyPair(): Promise<ProofkeyPair> {\n const bytes = new Uint32Array(16);\n window.crypto.getRandomValues(bytes);\n const codeVerifier = Array.from(bytes).map(toHex).join('');\n\n const digest = await window.crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));\n\n return {\n code_challenge: base64URLEncode(digest),\n code_verifier: codeVerifier,\n };\n }\n}\n"],"names":["PKCE_VERIFIER_STORAGE_KEY","toHex","n","str","toString","length","base64URLEncode","buf","btoa","String","fromCharCode","call","Uint8Array","replace","PKCEManager","
|
|
1
|
+
{"version":3,"file":"PKCEManager.mjs","sources":["../../../../../../web/src/PKCEManager.ts"],"sourcesContent":["import { ISyncPKCEManager, ProofkeyPair } from '@stytch/core';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\nimport { logger } from '@stytch/core';\n\nconst PKCE_VERIFIER_STORAGE_KEY = 'PKCE_VERIFIER' as const;\n\nfunction toHex(n: number): string {\n let str = n.toString(16);\n if (str.length === 1) {\n str = '0' + str;\n }\n return str;\n}\n\nfunction base64URLEncode(buf: ArrayBuffer) {\n // Convert the ArrayBuffer to string using Uint8 array.\n // btoa takes chars from 0-255 and base64 encodes.\n // Then convert the base64 encoded to base64url encoded.\n // (replace + with -, replace / with _, trim trailing =)\n return btoa(String.fromCharCode.call(null, ...new Uint8Array(buf)))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nexport class PKCEManager implements ISyncPKCEManager {\n constructor(\n private _dataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n private namespace: string,\n ) {}\n\n private key() {\n return `${PKCE_VERIFIER_STORAGE_KEY}:${this.namespace}` as const;\n }\n\n async startPKCETransaction(): Promise<ProofkeyPair> {\n const keyPair = await PKCEManager.createProofkeyPair();\n this._dataLayer.setItem(this.key(), JSON.stringify(keyPair));\n return keyPair;\n }\n\n getPKPair(): ProofkeyPair | undefined {\n const serialized = this._dataLayer.getItem(this.key());\n if (serialized === null) {\n return undefined;\n }\n try {\n return JSON.parse(serialized) as ProofkeyPair;\n } catch {\n logger.warn('Found malformed Proof Key pair in localstorage.');\n return undefined;\n }\n }\n\n clearPKPair(): void {\n return this._dataLayer.removeItem(this.key());\n }\n\n static async createProofkeyPair(): Promise<ProofkeyPair> {\n const bytes = new Uint32Array(16);\n window.crypto.getRandomValues(bytes);\n const codeVerifier = Array.from(bytes).map(toHex).join('');\n\n const digest = await window.crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier));\n\n return {\n code_challenge: base64URLEncode(digest),\n code_verifier: codeVerifier,\n };\n }\n}\n"],"names":["PKCE_VERIFIER_STORAGE_KEY","toHex","n","str","toString","length","base64URLEncode","buf","btoa","String","fromCharCode","call","Uint8Array","replace","PKCEManager","namespace","_dataLayer","key","startPKCETransaction","keyPair","createProofkeyPair","setItem","JSON","stringify","getPKPair","serialized","getItem","undefined","parse","logger","warn","clearPKPair","removeItem","bytes","Uint32Array","window","crypto","getRandomValues","codeVerifier","Array","from","map","join","digest","subtle","TextEncoder","encode","code_challenge","code_verifier"],"mappings":";;AAIA,MAAMA,yBAAAA,GAA4B,eAAA;AAElC,SAASC,MAAMC,CAAS,EAAA;IACtB,IAAIC,GAAAA,GAAMD,CAAAA,CAAEE,QAAQ,CAAC,EAAA,CAAA;IACrB,IAAID,GAAAA,CAAIE,MAAM,KAAK,CAAA,EAAG;AACpBF,QAAAA,GAAAA,GAAM,GAAA,GAAMA,GAAAA;AACd,IAAA;IACA,OAAOA,GAAAA;AACT;AAEA,SAASG,gBAAgBC,GAAgB,EAAA;;;;;IAKvC,OAAOC,IAAAA,CAAKC,OAAOC,YAAY,CAACC,IAAI,CAAC,IAAA,EAAA,GAAS,IAAIC,UAAAA,CAAWL,GAAAA,CAAAA,CAAAA,CAAAA,CAC1DM,OAAO,CAAC,KAAA,EAAO,KACfA,OAAO,CAAC,OAAO,GAAA,CAAA,CACfA,OAAO,CAAC,KAAA,EAAO,EAAA,CAAA;AACpB;AAEO,MAAMC,WAAAA,CAAAA;;;AACX,IAAA,WAAA,CACE,UAA4E,EACpEC,SAAiB,CACzB;aAFQC,UAAAA,GAAAA,UAAAA;aACAD,SAAAA,GAAAA,SAAAA;AACP,IAAA;IAEKE,GAAAA,GAAM;AACZ,QAAA,OAAO,GAAGjB,yBAAAA,CAA0B,CAAC,EAAE,IAAI,CAACe,SAAS,CAAA,CAAE;AACzD,IAAA;AAEA,IAAA,MAAMG,oBAAAA,GAA8C;QAClD,MAAMC,OAAAA,GAAU,MAAML,WAAAA,CAAYM,kBAAkB,EAAA;QACpD,IAAI,CAACJ,UAAU,CAACK,OAAO,CAAC,IAAI,CAACJ,GAAG,EAAA,EAAIK,IAAAA,CAAKC,SAAS,CAACJ,OAAAA,CAAAA,CAAAA;QACnD,OAAOA,OAAAA;AACT,IAAA;IAEAK,SAAAA,GAAsC;QACpC,MAAMC,UAAAA,GAAa,IAAI,CAACT,UAAU,CAACU,OAAO,CAAC,IAAI,CAACT,GAAG,EAAA,CAAA;AACnD,QAAA,IAAIQ,eAAe,IAAA,EAAM;YACvB,OAAOE,SAAAA;AACT,QAAA;QACA,IAAI;YACF,OAAOL,IAAAA,CAAKM,KAAK,CAACH,UAAAA,CAAAA;AACpB,QAAA,CAAA,CAAE,OAAM;AACNI,YAAAA,MAAAA,CAAOC,IAAI,CAAC,iDAAA,CAAA;YACZ,OAAOH,SAAAA;AACT,QAAA;AACF,IAAA;IAEAI,WAAAA,GAAoB;QAClB,OAAO,IAAI,CAACf,UAAU,CAACgB,UAAU,CAAC,IAAI,CAACf,GAAG,EAAA,CAAA;AAC5C,IAAA;AAEA,IAAA,aAAaG,kBAAAA,GAA4C;QACvD,MAAMa,KAAAA,GAAQ,IAAIC,WAAAA,CAAY,EAAA,CAAA;QAC9BC,MAAAA,CAAOC,MAAM,CAACC,eAAe,CAACJ,KAAAA,CAAAA;QAC9B,MAAMK,YAAAA,GAAeC,MAAMC,IAAI,CAACP,OAAOQ,GAAG,CAACxC,KAAAA,CAAAA,CAAOyC,IAAI,CAAC,EAAA,CAAA;AAEvD,QAAA,MAAMC,MAAAA,GAAS,MAAMR,MAAAA,CAAOC,MAAM,CAACQ,MAAM,CAACD,MAAM,CAAC,SAAA,EAAW,IAAIE,WAAAA,EAAAA,CAAcC,MAAM,CAACR,YAAAA,CAAAA,CAAAA;QAErF,OAAO;AACLS,YAAAA,cAAAA,EAAgBzC,eAAAA,CAAgBqC,MAAAA,CAAAA;YAChCK,aAAAA,EAAeV;AACjB,SAAA;AACF,IAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StytchClient.mjs","sources":["../../../../../../web/src/StytchClient.ts"],"sourcesContent":["import {\n checkNotSSR,\n checkPublicToken,\n DFPProtectedAuthProvider,\n HeadlessCryptoWalletClient,\n HeadlessMagicLinksClient,\n HeadlessOTPClient,\n HeadlessPasswordClient,\n HeadlessImpersonationClient,\n HeadlessSessionClient,\n HeadlessTOTPClient,\n HeadlessUserClient,\n HeadlessWebAuthnClient,\n INetworkClient,\n SearchDataManager,\n SessionManager,\n StateChangeClient,\n StateChangeRegisterFunction,\n VERTICAL_B2B,\n logger,\n HeadlessRBACClient,\n HeadlessIDPClient,\n} from '@stytch/core';\nimport {\n ConsumerState,\n IHeadlessCryptoWalletClient,\n IHeadlessMagicLinksClient,\n IHeadlessOTPsClient,\n IHeadlessPasswordClient,\n IHeadlessSessionClient,\n IHeadlessTOTPClient,\n IHeadlessUserClient,\n IHeadlessWebAuthnClient,\n IHeadlessImpersonationClient,\n StytchClientOptions,\n StytchProjectConfigurationInput,\n IHeadlessRBACClient,\n} from '@stytch/core/public';\nimport { BootstrapDataManager } from './BootstrapDataManager';\nimport { CaptchaProvider } from './CaptchaProvider';\nimport { ClientsideServicesProvider } from './ClientsideServicesProvider';\nimport { HeadlessOAuthClient, IWebOAuthClient } from './HeadlessOAuthClient';\nimport { NetworkClient } from './NetworkClient';\nimport { OneTapProvider } from './oneTap/OneTapProvider';\nimport { PKCEManager } from './PKCEManager';\nimport {\n ConsumerSubscriptionDataLayer,\n ConsumerSubscriptionService,\n getConsumerDataLayer,\n} from './SubscriptionService';\nimport { writeB2CInternals } from './utils/internal';\nimport { buildFinalConfig, hasCustomApiEndpoint } from './utils/config';\nimport { createAuthUrlHandler, AuthenticateByUrl, ParseAuthenticateUrl } from './utils/createAuthUrlHandler';\n\nexport type HandledTokenType = 'magic_links' | 'oauth' | 'impersonation';\n\n/**\n * A headless client used for invoking the Stytch API.\n * The Stytch Headless Client can be used as a drop-in solution for authentication and session management.\n * Full documentation can be found {@link https://stytch.com/docs/sdks/javascript-sdk online}.\n * @example\n * const stytch = new StytchClient('public-token-<find yours in the stytch dashboard>');\n * stytch.magicLinks.email.loginOrCreate('sandbox@stytch.com', {\n * login_magic_link_url: 'https://example.com/authenticate',\n * login_expiration_minutes: 60,\n * signup_magic_link_url: 'https://example.com/authenticate',\n * signup_expiration_minutes: 60,\n * });\n */\nexport class StytchClient<\n TProjectConfiguration extends StytchProjectConfigurationInput = Stytch.DefaultProjectConfiguration,\n> {\n private readonly _subscriptionService: ConsumerSubscriptionService<TProjectConfiguration>;\n private readonly _sessionManager: SessionManager<TProjectConfiguration>;\n private readonly _networkClient: INetworkClient;\n private readonly _dataLayer: ConsumerSubscriptionDataLayer;\n private readonly _stateChangeClient: StateChangeClient<ConsumerState>;\n\n // External API Clients\n user: IHeadlessUserClient;\n magicLinks: IHeadlessMagicLinksClient<TProjectConfiguration>;\n session: IHeadlessSessionClient<TProjectConfiguration>;\n otps: IHeadlessOTPsClient<TProjectConfiguration>;\n oauth: IWebOAuthClient<TProjectConfiguration>;\n cryptoWallets: IHeadlessCryptoWalletClient<TProjectConfiguration>;\n totps: IHeadlessTOTPClient<TProjectConfiguration>;\n webauthn: IHeadlessWebAuthnClient<TProjectConfiguration>;\n passwords: IHeadlessPasswordClient<TProjectConfiguration>;\n impersonation: IHeadlessImpersonationClient<TProjectConfiguration>;\n rbac: IHeadlessRBACClient;\n idp: HeadlessIDPClient;\n\n // External methods\n /**\n * Register a callback function to be invoked whenever certain state changes\n * occur, like a user or session object being updated.\n *\n * This is an alternative to more specific methods like `user.onChange` and\n * `session.onChange`. It can be helpful if you want to be notified of related\n * changes to different parts of state at once.\n *\n * If you are only interested in specific state changes, consider using more\n * specific methods like `user.onChange` and `session.onChange` instead.\n */\n onStateChange: StateChangeRegisterFunction<ConsumerState>;\n\n /**\n * Extracts token and token type from the current page URL's query parameters.\n * If the current URL do not have the required query params, this will return null.\n * Otherwise, returns an object { handled: boolean, tokenType: string, token: string }\n */\n parseAuthenticateUrl: ParseAuthenticateUrl<HandledTokenType>;\n\n /**\n * Call this method to authenticate the user when the user has been redirected\n * to this page with a token in the query parameters, such as after OAuth\n * or through an email magic link. This method currently supports\n *\n * - Magic links\n * - OAuth\n * - Impersonation\n *\n * Returns null if token or stytch_token_type query parameters are not present,\n * or returns an unhandled result if the token type is not recognized.\n */\n authenticateByUrl: AuthenticateByUrl<HandledTokenType>;\n\n constructor(publicTokenRaw: string, options?: StytchClientOptions) {\n checkNotSSR();\n\n // Intentionally check the raw public token so that we can log a correct error message,\n // but then coalesce to an empty string so that the UI components don't fail to render.\n checkPublicToken(publicTokenRaw);\n const _PUBLIC_TOKEN = publicTokenRaw ?? '';\n\n // Not casting to InternalStytchClientOptions since InternalStytchClientOptions is currently a superset\n const config = buildFinalConfig(this.constructor.name, options);\n const usingCustomApiEndpoint = hasCustomApiEndpoint(_PUBLIC_TOKEN, options);\n\n this._dataLayer = getConsumerDataLayer(_PUBLIC_TOKEN, config);\n this._subscriptionService = new ConsumerSubscriptionService(_PUBLIC_TOKEN, this._dataLayer, {\n usingCustomApiEndpoint,\n });\n this._stateChangeClient = new StateChangeClient(this._subscriptionService, {});\n this.onStateChange = (...args) => this._stateChangeClient.onStateChange(...args);\n\n const additionalTelemetryDataFn = () => ({\n stytch_user_id: this._dataLayer.state?.user?.user_id,\n stytch_session_id: this._dataLayer.state?.session?.session_id,\n });\n\n const passwordsPKCEManager = new PKCEManager(this._dataLayer, 'passwords');\n const networkClient = new NetworkClient(\n _PUBLIC_TOKEN,\n this._dataLayer,\n config.endpoints.liveAPIURL,\n config.endpoints.testAPIURL,\n additionalTelemetryDataFn,\n );\n this._networkClient = networkClient;\n\n const bootstrap = new BootstrapDataManager(_PUBLIC_TOKEN, this._networkClient, this._dataLayer);\n const captcha = new CaptchaProvider(bootstrap.getAsync());\n const dfpProtectedAuth = new DFPProtectedAuthProvider(\n _PUBLIC_TOKEN,\n config.endpoints.dfpBackendURL,\n config.endpoints.dfpCdnURL,\n bootstrap.getAsync(),\n captcha.executeRecaptcha,\n );\n const clientsideServices = new ClientsideServicesProvider(config.endpoints.clientsideServicesIframeURL);\n const oneTap = new OneTapProvider(_PUBLIC_TOKEN, clientsideServices);\n const searchManager = new SearchDataManager(this._networkClient, dfpProtectedAuth);\n\n this.user = new HeadlessUserClient(this._networkClient, this._subscriptionService);\n this.session = new HeadlessSessionClient(this._networkClient, this._subscriptionService);\n this.magicLinks = new HeadlessMagicLinksClient(\n this._networkClient,\n this._subscriptionService,\n new PKCEManager(this._dataLayer, 'magic_links'),\n passwordsPKCEManager,\n bootstrap.getAsync(),\n dfpProtectedAuth,\n );\n this.otps = new HeadlessOTPClient(\n this._networkClient,\n this._subscriptionService,\n captcha.executeRecaptcha,\n dfpProtectedAuth,\n );\n this.oauth = new HeadlessOAuthClient(\n this._networkClient,\n this._subscriptionService,\n new PKCEManager(this._dataLayer, 'oauth'),\n bootstrap.getAsync(),\n {\n publicToken: _PUBLIC_TOKEN,\n testAPIURL: config.endpoints.testAPIURL,\n liveAPIURL: config.endpoints.liveAPIURL,\n },\n oneTap,\n );\n this.cryptoWallets = new HeadlessCryptoWalletClient(\n this._networkClient,\n this._networkClient,\n this._subscriptionService,\n captcha.executeRecaptcha,\n dfpProtectedAuth,\n bootstrap.getAsync(),\n );\n this.totps = new HeadlessTOTPClient(this._networkClient, this._subscriptionService, dfpProtectedAuth);\n this.webauthn = new HeadlessWebAuthnClient(this._networkClient, this._subscriptionService, dfpProtectedAuth);\n this.passwords = new HeadlessPasswordClient(\n this._networkClient,\n this._subscriptionService,\n passwordsPKCEManager,\n bootstrap.getAsync(),\n dfpProtectedAuth,\n );\n this.impersonation = new HeadlessImpersonationClient(\n this._networkClient,\n this._subscriptionService,\n dfpProtectedAuth,\n );\n\n this.rbac = new HeadlessRBACClient(bootstrap.getSync(), bootstrap.getAsync(), this._subscriptionService);\n this.idp = new HeadlessIDPClient(this._networkClient);\n this._sessionManager = new SessionManager(this._subscriptionService, this.session, _PUBLIC_TOKEN, {\n keepSessionAlive: config.keepSessionAlive,\n });\n\n // If the session does not exist in localstorage (like if we are in an iframe)\n // then the cookie might still be set and we can retrieve the session via an API call.\n // If a custom API endpoint is being used, the session may be being managed by\n // HttpOnly cookies, which we can't detect.\n if (usingCustomApiEndpoint || this._dataLayer.readSessionCookie().session_token) {\n this._sessionManager.performBackgroundRefresh();\n }\n\n this._networkClient.logEvent({\n name: 'sdk_instance_instantiated',\n details: {\n event_callback_registered: false,\n error_callback_registered: false,\n success_callback_registered: false,\n },\n });\n\n bootstrap.getAsync().then((bootstrapData) => {\n if (bootstrapData.vertical === VERTICAL_B2B) {\n logger.error(\n 'This application is using a Stytch client for Consumer projects, but the public token is for a Stytch B2B project. Use a B2B Stytch client instead, or verify that the public token is correct.',\n );\n }\n });\n\n const { authenticateByUrl, parseAuthenticateUrl } = createAuthUrlHandler({\n magic_links: (token, options) => this.magicLinks.authenticate(token, options),\n oauth: (token, options) => this.oauth.authenticate(token, options),\n impersonation: (token: string) => this.impersonation.authenticate({ impersonation_token: token }),\n });\n\n this.authenticateByUrl = authenticateByUrl;\n this.parseAuthenticateUrl = parseAuthenticateUrl;\n\n writeB2CInternals(this, {\n bootstrap,\n clientsideServices,\n captcha,\n oneTap,\n searchManager,\n publicToken: _PUBLIC_TOKEN,\n dataLayer: this._dataLayer,\n networkClient: this._networkClient,\n });\n }\n}\n"],"names":["StytchClient","_subscriptionService","_sessionManager","_networkClient","_dataLayer","_stateChangeClient","user","magicLinks","session","otps","oauth","cryptoWallets","totps","webauthn","passwords","impersonation","rbac","idp","onStateChange","parseAuthenticateUrl","authenticateByUrl","constructor","publicTokenRaw","options","checkNotSSR","checkPublicToken","_PUBLIC_TOKEN","config","buildFinalConfig","name","usingCustomApiEndpoint","hasCustomApiEndpoint","getConsumerDataLayer","ConsumerSubscriptionService","StateChangeClient","args","additionalTelemetryDataFn","stytch_user_id","state","user_id","stytch_session_id","session_id","passwordsPKCEManager","PKCEManager","networkClient","NetworkClient","endpoints","liveAPIURL","testAPIURL","bootstrap","BootstrapDataManager","captcha","CaptchaProvider","getAsync","dfpProtectedAuth","DFPProtectedAuthProvider","dfpBackendURL","dfpCdnURL","executeRecaptcha","clientsideServices","ClientsideServicesProvider","clientsideServicesIframeURL","oneTap","OneTapProvider","searchManager","SearchDataManager","HeadlessUserClient","HeadlessSessionClient","HeadlessMagicLinksClient","HeadlessOTPClient","HeadlessOAuthClient","publicToken","HeadlessCryptoWalletClient","HeadlessTOTPClient","HeadlessWebAuthnClient","HeadlessPasswordClient","HeadlessImpersonationClient","HeadlessRBACClient","getSync","HeadlessIDPClient","SessionManager","keepSessionAlive","readSessionCookie","session_token","performBackgroundRefresh","logEvent","details","event_callback_registered","error_callback_registered","success_callback_registered","then","bootstrapData","vertical","VERTICAL_B2B","logger","error","createAuthUrlHandler","magic_links","token","authenticate","impersonation_token","writeB2CInternals","dataLayer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StytchClient.mjs","sources":["../../../../../../web/src/StytchClient.ts"],"sourcesContent":["import {\n checkNotSSR,\n checkPublicToken,\n DFPProtectedAuthProvider,\n HeadlessCryptoWalletClient,\n HeadlessMagicLinksClient,\n HeadlessOTPClient,\n HeadlessPasswordClient,\n HeadlessImpersonationClient,\n HeadlessSessionClient,\n HeadlessTOTPClient,\n HeadlessUserClient,\n HeadlessWebAuthnClient,\n INetworkClient,\n SearchDataManager,\n SessionManager,\n StateChangeClient,\n StateChangeRegisterFunction,\n VERTICAL_B2B,\n logger,\n HeadlessRBACClient,\n HeadlessIDPClient,\n} from '@stytch/core';\nimport {\n ConsumerState,\n IHeadlessCryptoWalletClient,\n IHeadlessMagicLinksClient,\n IHeadlessOTPsClient,\n IHeadlessPasswordClient,\n IHeadlessSessionClient,\n IHeadlessTOTPClient,\n IHeadlessUserClient,\n IHeadlessWebAuthnClient,\n IHeadlessImpersonationClient,\n StytchClientOptions,\n StytchProjectConfigurationInput,\n IHeadlessRBACClient,\n} from '@stytch/core/public';\nimport { BootstrapDataManager } from './BootstrapDataManager';\nimport { CaptchaProvider } from './CaptchaProvider';\nimport { ClientsideServicesProvider } from './ClientsideServicesProvider';\nimport { HeadlessOAuthClient, IWebOAuthClient } from './HeadlessOAuthClient';\nimport { NetworkClient } from './NetworkClient';\nimport { OneTapProvider } from './oneTap/OneTapProvider';\nimport { PKCEManager } from './PKCEManager';\nimport {\n ConsumerSubscriptionDataLayer,\n ConsumerSubscriptionService,\n getConsumerDataLayer,\n} from './SubscriptionService';\nimport { writeB2CInternals } from './utils/internal';\nimport { buildFinalConfig, hasCustomApiEndpoint } from './utils/config';\nimport { createAuthUrlHandler, AuthenticateByUrl, ParseAuthenticateUrl } from './utils/createAuthUrlHandler';\n\nexport type HandledTokenType = 'magic_links' | 'oauth' | 'impersonation';\n\n/**\n * A headless client used for invoking the Stytch API.\n * The Stytch Headless Client can be used as a drop-in solution for authentication and session management.\n * Full documentation can be found {@link https://stytch.com/docs/sdks/javascript-sdk online}.\n * @example\n * const stytch = new StytchClient('public-token-<find yours in the stytch dashboard>');\n * stytch.magicLinks.email.loginOrCreate('sandbox@stytch.com', {\n * login_magic_link_url: 'https://example.com/authenticate',\n * login_expiration_minutes: 60,\n * signup_magic_link_url: 'https://example.com/authenticate',\n * signup_expiration_minutes: 60,\n * });\n */\nexport class StytchClient<\n TProjectConfiguration extends StytchProjectConfigurationInput = Stytch.DefaultProjectConfiguration,\n> {\n private readonly _subscriptionService: ConsumerSubscriptionService<TProjectConfiguration>;\n private readonly _sessionManager: SessionManager<TProjectConfiguration>;\n private readonly _networkClient: INetworkClient;\n private readonly _dataLayer: ConsumerSubscriptionDataLayer;\n private readonly _stateChangeClient: StateChangeClient<ConsumerState>;\n\n // External API Clients\n user: IHeadlessUserClient;\n magicLinks: IHeadlessMagicLinksClient<TProjectConfiguration>;\n session: IHeadlessSessionClient<TProjectConfiguration>;\n otps: IHeadlessOTPsClient<TProjectConfiguration>;\n oauth: IWebOAuthClient<TProjectConfiguration>;\n cryptoWallets: IHeadlessCryptoWalletClient<TProjectConfiguration>;\n totps: IHeadlessTOTPClient<TProjectConfiguration>;\n webauthn: IHeadlessWebAuthnClient<TProjectConfiguration>;\n passwords: IHeadlessPasswordClient<TProjectConfiguration>;\n impersonation: IHeadlessImpersonationClient<TProjectConfiguration>;\n rbac: IHeadlessRBACClient;\n idp: HeadlessIDPClient;\n\n // External methods\n /**\n * Register a callback function to be invoked whenever certain state changes\n * occur, like a user or session object being updated.\n *\n * This is an alternative to more specific methods like `user.onChange` and\n * `session.onChange`. It can be helpful if you want to be notified of related\n * changes to different parts of state at once.\n *\n * If you are only interested in specific state changes, consider using more\n * specific methods like `user.onChange` and `session.onChange` instead.\n */\n onStateChange: StateChangeRegisterFunction<ConsumerState>;\n\n /**\n * Extracts token and token type from the current page URL's query parameters.\n * If the current URL do not have the required query params, this will return null.\n * Otherwise, returns an object { handled: boolean, tokenType: string, token: string }\n */\n parseAuthenticateUrl: ParseAuthenticateUrl<HandledTokenType>;\n\n /**\n * Call this method to authenticate the user when the user has been redirected\n * to this page with a token in the query parameters, such as after OAuth\n * or through an email magic link. This method currently supports\n *\n * - Magic links\n * - OAuth\n * - Impersonation\n *\n * Returns null if token or stytch_token_type query parameters are not present,\n * or returns an unhandled result if the token type is not recognized.\n */\n authenticateByUrl: AuthenticateByUrl<HandledTokenType>;\n\n constructor(publicTokenRaw: string, options?: StytchClientOptions) {\n checkNotSSR();\n\n // Intentionally check the raw public token so that we can log a correct error message,\n // but then coalesce to an empty string so that the UI components don't fail to render.\n checkPublicToken(publicTokenRaw);\n const _PUBLIC_TOKEN = publicTokenRaw ?? '';\n\n // Not casting to InternalStytchClientOptions since InternalStytchClientOptions is currently a superset\n const config = buildFinalConfig(this.constructor.name, options);\n const usingCustomApiEndpoint = hasCustomApiEndpoint(_PUBLIC_TOKEN, options);\n\n this._dataLayer = getConsumerDataLayer(_PUBLIC_TOKEN, config);\n this._subscriptionService = new ConsumerSubscriptionService(_PUBLIC_TOKEN, this._dataLayer, {\n usingCustomApiEndpoint,\n });\n this._stateChangeClient = new StateChangeClient(this._subscriptionService, {});\n this.onStateChange = (...args) => this._stateChangeClient.onStateChange(...args);\n\n const additionalTelemetryDataFn = () => ({\n stytch_user_id: this._dataLayer.state?.user?.user_id,\n stytch_session_id: this._dataLayer.state?.session?.session_id,\n });\n\n const passwordsPKCEManager = new PKCEManager(this._dataLayer, 'passwords');\n const networkClient = new NetworkClient(\n _PUBLIC_TOKEN,\n this._dataLayer,\n config.endpoints.liveAPIURL,\n config.endpoints.testAPIURL,\n additionalTelemetryDataFn,\n );\n this._networkClient = networkClient;\n\n const bootstrap = new BootstrapDataManager(_PUBLIC_TOKEN, this._networkClient, this._dataLayer);\n const captcha = new CaptchaProvider(bootstrap.getAsync());\n const dfpProtectedAuth = new DFPProtectedAuthProvider(\n _PUBLIC_TOKEN,\n config.endpoints.dfpBackendURL,\n config.endpoints.dfpCdnURL,\n bootstrap.getAsync(),\n captcha.executeRecaptcha,\n );\n const clientsideServices = new ClientsideServicesProvider(config.endpoints.clientsideServicesIframeURL);\n const oneTap = new OneTapProvider(_PUBLIC_TOKEN, clientsideServices);\n const searchManager = new SearchDataManager(this._networkClient, dfpProtectedAuth);\n\n this.user = new HeadlessUserClient(this._networkClient, this._subscriptionService);\n this.session = new HeadlessSessionClient(this._networkClient, this._subscriptionService);\n this.magicLinks = new HeadlessMagicLinksClient(\n this._networkClient,\n this._subscriptionService,\n new PKCEManager(this._dataLayer, 'magic_links'),\n passwordsPKCEManager,\n bootstrap.getAsync(),\n dfpProtectedAuth,\n );\n this.otps = new HeadlessOTPClient(\n this._networkClient,\n this._subscriptionService,\n captcha.executeRecaptcha,\n dfpProtectedAuth,\n );\n this.oauth = new HeadlessOAuthClient(\n this._networkClient,\n this._subscriptionService,\n new PKCEManager(this._dataLayer, 'oauth'),\n bootstrap.getAsync(),\n {\n publicToken: _PUBLIC_TOKEN,\n testAPIURL: config.endpoints.testAPIURL,\n liveAPIURL: config.endpoints.liveAPIURL,\n },\n oneTap,\n );\n this.cryptoWallets = new HeadlessCryptoWalletClient(\n this._networkClient,\n this._networkClient,\n this._subscriptionService,\n captcha.executeRecaptcha,\n dfpProtectedAuth,\n bootstrap.getAsync(),\n );\n this.totps = new HeadlessTOTPClient(this._networkClient, this._subscriptionService, dfpProtectedAuth);\n this.webauthn = new HeadlessWebAuthnClient(this._networkClient, this._subscriptionService, dfpProtectedAuth);\n this.passwords = new HeadlessPasswordClient(\n this._networkClient,\n this._subscriptionService,\n passwordsPKCEManager,\n bootstrap.getAsync(),\n dfpProtectedAuth,\n );\n this.impersonation = new HeadlessImpersonationClient(\n this._networkClient,\n this._subscriptionService,\n dfpProtectedAuth,\n );\n\n this.rbac = new HeadlessRBACClient(bootstrap.getSync(), bootstrap.getAsync(), this._subscriptionService);\n this.idp = new HeadlessIDPClient(this._networkClient);\n this._sessionManager = new SessionManager(this._subscriptionService, this.session, _PUBLIC_TOKEN, {\n keepSessionAlive: config.keepSessionAlive,\n });\n\n // If the session does not exist in localstorage (like if we are in an iframe)\n // then the cookie might still be set and we can retrieve the session via an API call.\n // If a custom API endpoint is being used, the session may be being managed by\n // HttpOnly cookies, which we can't detect.\n if (usingCustomApiEndpoint || this._dataLayer.readSessionCookie().session_token) {\n this._sessionManager.performBackgroundRefresh();\n }\n\n this._networkClient.logEvent({\n name: 'sdk_instance_instantiated',\n details: {\n event_callback_registered: false,\n error_callback_registered: false,\n success_callback_registered: false,\n },\n });\n\n bootstrap.getAsync().then((bootstrapData) => {\n if (bootstrapData.vertical === VERTICAL_B2B) {\n logger.error(\n 'This application is using a Stytch client for Consumer projects, but the public token is for a Stytch B2B project. Use a B2B Stytch client instead, or verify that the public token is correct.',\n );\n }\n });\n\n const { authenticateByUrl, parseAuthenticateUrl } = createAuthUrlHandler({\n magic_links: (token, options) => this.magicLinks.authenticate(token, options),\n oauth: (token, options) => this.oauth.authenticate(token, options),\n impersonation: (token: string) => this.impersonation.authenticate({ impersonation_token: token }),\n });\n\n this.authenticateByUrl = authenticateByUrl;\n this.parseAuthenticateUrl = parseAuthenticateUrl;\n\n writeB2CInternals(this, {\n bootstrap,\n clientsideServices,\n captcha,\n oneTap,\n searchManager,\n publicToken: _PUBLIC_TOKEN,\n dataLayer: this._dataLayer,\n networkClient: this._networkClient,\n });\n }\n}\n"],"names":["StytchClient","_subscriptionService","_sessionManager","_networkClient","_dataLayer","_stateChangeClient","user","magicLinks","session","otps","oauth","cryptoWallets","totps","webauthn","passwords","impersonation","rbac","idp","onStateChange","parseAuthenticateUrl","authenticateByUrl","publicTokenRaw","options","checkNotSSR","checkPublicToken","_PUBLIC_TOKEN","config","buildFinalConfig","name","usingCustomApiEndpoint","hasCustomApiEndpoint","getConsumerDataLayer","ConsumerSubscriptionService","StateChangeClient","args","additionalTelemetryDataFn","stytch_user_id","state","user_id","stytch_session_id","session_id","passwordsPKCEManager","PKCEManager","networkClient","NetworkClient","endpoints","liveAPIURL","testAPIURL","bootstrap","BootstrapDataManager","captcha","CaptchaProvider","getAsync","dfpProtectedAuth","DFPProtectedAuthProvider","dfpBackendURL","dfpCdnURL","executeRecaptcha","clientsideServices","ClientsideServicesProvider","clientsideServicesIframeURL","oneTap","OneTapProvider","searchManager","SearchDataManager","HeadlessUserClient","HeadlessSessionClient","HeadlessMagicLinksClient","HeadlessOTPClient","HeadlessOAuthClient","publicToken","HeadlessCryptoWalletClient","HeadlessTOTPClient","HeadlessWebAuthnClient","HeadlessPasswordClient","HeadlessImpersonationClient","HeadlessRBACClient","getSync","HeadlessIDPClient","SessionManager","keepSessionAlive","readSessionCookie","session_token","performBackgroundRefresh","logEvent","details","event_callback_registered","error_callback_registered","success_callback_registered","then","bootstrapData","vertical","VERTICAL_B2B","logger","error","createAuthUrlHandler","magic_links","token","authenticate","impersonation_token","writeB2CInternals","dataLayer"],"mappings":"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"}
|
|
@@ -292,18 +292,10 @@ class BaseSubscriptionService {
|
|
|
292
292
|
_datalayer;
|
|
293
293
|
/**
|
|
294
294
|
* Whether the state was retrieved from the cache and is awaiting a refresh
|
|
295
|
-
*/ fromCache;
|
|
295
|
+
*/ fromCache = true;
|
|
296
296
|
constructor(_publicToken, _datalayer, { usingCustomApiEndpoint }){
|
|
297
297
|
this._publicToken = _publicToken;
|
|
298
298
|
this._datalayer = _datalayer;
|
|
299
|
-
this.fromCache = true;
|
|
300
|
-
this._listen = (e)=>{
|
|
301
|
-
if (e.key !== getPersistentStorageKey(this._publicToken, '')) {
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
const parsedValue = e.newValue === null || e.newValue === 'null' ? null : JSON.parse(e.newValue);
|
|
305
|
-
this.updateState(parsedValue, true);
|
|
306
|
-
};
|
|
307
299
|
window.addEventListener('storage', this._listen);
|
|
308
300
|
// If a custom API endpoint is being used, the session may be being managed
|
|
309
301
|
// by HttpOnly cookies, which we can't detect.
|
|
@@ -318,7 +310,13 @@ class BaseSubscriptionService {
|
|
|
318
310
|
}
|
|
319
311
|
}
|
|
320
312
|
// Listening for state changes across tabs
|
|
321
|
-
_listen
|
|
313
|
+
_listen = (e)=>{
|
|
314
|
+
if (e.key !== getPersistentStorageKey(this._publicToken, '')) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const parsedValue = e.newValue === null || e.newValue === 'null' ? null : JSON.parse(e.newValue);
|
|
318
|
+
this.updateState(parsedValue, true);
|
|
319
|
+
};
|
|
322
320
|
getTokens() {
|
|
323
321
|
const { session_token, session_jwt } = this._datalayer.readSessionCookie();
|
|
324
322
|
if (!(typeof session_token === 'string') || !(typeof session_jwt === 'string')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubscriptionService.mjs","sources":["../../../../../../web/src/SubscriptionService.ts"],"sourcesContent":["import {\n B2BState,\n ConsumerState,\n Member,\n Organization,\n SessionTokens,\n SessionTokensUpdate,\n StytchClientOptions,\n StytchProjectConfigurationInput,\n AuthenticateResponse,\n B2BAuthenticateResponse,\n B2BAuthenticateResponseWithMFA,\n B2BDiscoveryAuthenticateResponse,\n UnsubscribeFunction,\n User,\n} from '@stytch/core/public';\nimport {\n AllowedOpaqueTokens,\n ExtractOpaqueTokens,\n IB2BSubscriptionService,\n logger,\n IConsumerSubscriptionService,\n IfOpaqueTokens,\n ISubscriptionService,\n CommonAuthenticateOptions,\n OpaqueTokensNeverConfig,\n SessionUpdateOptions,\n InternalSessionUpdateOptions,\n} from '@stytch/core';\nimport Cookies from 'js-cookie';\nimport { createDeepEqual } from '@stytch/js-utils';\nimport { hasMultipleCookies, isLocalhost } from '../src/utils';\nimport {\n getKeyBoundStorage,\n getPersistentStorageKey,\n IKeyBoundStorage,\n safeLocalStorage,\n safeSessionStorage,\n StorageKey,\n} from './utils/storage';\n\ntype SubscriberFunction<T> = (value: T | null) => void;\ntype Subscribers<T> = Record<string, SubscriberFunction<T>>;\n\nconst STYTCH_SESSION_COOKIE = 'stytch_session';\nconst STYTCH_SESSION_JWT_COOKIE = 'stytch_session_jwt';\nconst STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE = 'stytch_intermediate_session_token';\nconst SEEN_DOMAINS_KEY = 'seen_domains';\n\nexport class SubscriptionDataLayer<T extends ConsumerState | B2BState> {\n publicToken: string;\n state: T | null;\n private readonly _opaqueTokenCookieName: string | null = null;\n private readonly _jwtCookieName: string | null = null;\n private readonly _cookiePath: string | null = null;\n private readonly _domain: string | null = null;\n private readonly _cookieAvailableToSubdomains: boolean = false;\n private readonly _istCookieName: string | null = null;\n\n subscriptions: Subscribers<T & SessionUpdateOptions>;\n\n private readonly _localStorage: IKeyBoundStorage;\n readonly browserSessionStorage: IKeyBoundStorage;\n\n constructor(publicToken: string, options?: StytchClientOptions) {\n this.publicToken = publicToken;\n this.state = null;\n this.subscriptions = {};\n\n // Initialize storage utilities\n this._localStorage = getKeyBoundStorage(safeLocalStorage, publicToken);\n this.browserSessionStorage = getKeyBoundStorage(safeSessionStorage, publicToken);\n\n if (options?.cookieOptions) {\n this._opaqueTokenCookieName = options.cookieOptions.opaqueTokenCookieName || null;\n this._jwtCookieName = options.cookieOptions.jwtCookieName || null;\n this._cookiePath = options.cookieOptions.path || null;\n this._domain = options.cookieOptions.domain || null;\n this._cookieAvailableToSubdomains = options.cookieOptions.availableToSubdomains || false;\n this._istCookieName = options.cookieOptions.istCookieName || null;\n }\n\n const localStorageState = this._localStorage.getItem('');\n\n if (!localStorageState) {\n return;\n }\n let parsedState: unknown;\n try {\n parsedState = JSON.parse(localStorageState);\n } catch {\n // Overwrite the bad data with nulls\n this.syncToLocalStorage();\n return;\n }\n // TODO: Validate the data looks decent & matches Session/User format\n this.state = parsedState as T;\n }\n\n protected get opaqueTokenCookieName(): string {\n return this._opaqueTokenCookieName ?? STYTCH_SESSION_COOKIE;\n }\n\n protected get jwtCookieName(): string {\n return this._jwtCookieName ?? STYTCH_SESSION_JWT_COOKIE;\n }\n\n protected get istCookieName(): string {\n return this._istCookieName ?? STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE;\n }\n\n readSessionCookie() {\n return {\n session_token: Cookies.get(this.opaqueTokenCookieName),\n session_jwt: Cookies.get(this.jwtCookieName),\n };\n }\n\n readIntermediateSessionTokenCookie() {\n return Cookies.get(this.istCookieName);\n }\n\n writeSessionCookie(stateDiff: StateWithReadableTokensLoggedIn<T>) {\n const { state, session_token, session_jwt } = stateDiff;\n\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: state?.session?.expires_at ?? '',\n availableToSubdomains: this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n if (cookieOpts.domain) {\n this.addSeenDomain(cookieOpts.domain);\n }\n\n Cookies.set(this.opaqueTokenCookieName, session_token, cookieOpts);\n Cookies.set(this.jwtCookieName, session_jwt, cookieOpts);\n\n /**\n * If a developer flips the boolean value of availableToSubdomains at any point,\n * there will be two cookies set which will could cause the user to log out since\n * the js-cookie API always returns the first cookie set. Thus, we will clear the\n * cookie that doesn't relate to the current cookie options.\n */\n\n const alternateCookieOptions = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: state?.session?.expires_at ?? '',\n availableToSubdomains: !this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n if (alternateCookieOptions.domain) {\n this.addSeenDomain(alternateCookieOptions.domain);\n }\n\n if (hasMultipleCookies(this.jwtCookieName)) {\n Cookies.remove(this.jwtCookieName, alternateCookieOptions);\n }\n\n if (hasMultipleCookies(this.opaqueTokenCookieName)) {\n Cookies.remove(this.opaqueTokenCookieName, alternateCookieOptions);\n }\n\n if (hasMultipleCookies(this.jwtCookieName)) {\n logger.warn(\n 'Could not remove extraneous JWT cookie. This might happen if the cookie has been set using multiple `path` settings, and may produce unwanted behavior.',\n );\n }\n\n if (hasMultipleCookies(this.opaqueTokenCookieName)) {\n logger.warn('Could not remove extraneous opaque token cookie.');\n }\n }\n\n writeIntermediateSessionTokenCookie(IST: string) {\n // ISTs are valid for 10 minutes\n const expiresAtTime = new Date(Date.now() + 10 * 60000);\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: expiresAtTime.toString(),\n availableToSubdomains: this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n Cookies.set(this.istCookieName, IST, cookieOpts);\n }\n\n removeSessionCookie() {\n this.removeCookies([this.opaqueTokenCookieName, this.jwtCookieName]);\n }\n\n removeISTCookie() {\n this.removeCookies([this.istCookieName]);\n }\n\n removeCookies(cookiesToRemove: string[]) {\n /**\n * Spray and Pray approach:\n * In order to delete a cookie, both the path and domain must match exactly\n * We don't always know how the cookie was set - we can use the path & info that the SDK was created with\n * but if the SDK settings have changed (e.g. a dev is developing) then things might get strange.\n * Note: it is _impossible_ to reliably delete a cookie if you don't know what path it was set at - thank,; internet\n * Our best effort approach is to just list off the likely combinations\n *\n * As of 2025-07-14, we track all domains that have been used to set cookies and try to delete\n * cookies from all of them to handle cases where domains change (e.g. something.com -> web.something.com)\n */\n\n // Get all previously seen domains\n const trackedDomains = this.getSeenDomains();\n // Include the current domain and null (no domain) in our attempts\n const allDomains = [this._domain, null, ...trackedDomains];\n // Remove duplicates\n const uniqueDomains = [...new Set(allDomains)];\n\n [true, false].forEach((availableToSubdomains) => {\n [this._cookiePath, null].forEach((path) => {\n uniqueDomains.forEach((domain) => {\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: new Date(0).toString(),\n availableToSubdomains,\n path,\n domain,\n });\n cookiesToRemove.forEach((cookieName) => {\n Cookies.remove(cookieName, cookieOpts);\n });\n });\n });\n });\n }\n\n syncToLocalStorage(): void {\n this._localStorage.setItem('', JSON.stringify(this.state));\n }\n\n getItem(key: StorageKey): string | null {\n return this._localStorage.getItem(key);\n }\n\n setItem(key: StorageKey, value: string): void {\n this._localStorage.setItem(key, value);\n }\n\n removeItem(key: StorageKey): void {\n this._localStorage.removeItem(key);\n }\n\n /**\n * Get all previously seen domains from local storage\n */\n private getSeenDomains(): string[] {\n const storedDomains = this.getItem(SEEN_DOMAINS_KEY);\n\n if (!storedDomains) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(storedDomains);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n /**\n * Add a domain to the seen domains list\n */\n private addSeenDomain(domain: string | null): void {\n if (!domain) {\n return;\n }\n\n const storedDomains = this.getSeenDomains();\n if (!storedDomains.includes(domain)) {\n storedDomains.push(domain);\n this.setItem(SEEN_DOMAINS_KEY, JSON.stringify(storedDomains));\n }\n }\n\n static generateCookieOpts({\n path,\n domain,\n availableToSubdomains,\n expiresAt,\n }: {\n path: string | null;\n domain: string | null;\n availableToSubdomains: boolean;\n expiresAt: string;\n }): Cookies.CookieAttributes {\n const cookieOpts: Cookies.CookieAttributes = {\n expires: new Date(expiresAt),\n sameSite: 'lax',\n };\n\n if (path) {\n cookieOpts.path = path;\n }\n\n if (isLocalhost()) {\n // We do not require HTTPS for localhost / local development\n // TODO: Could investigate disabling HTTPS for test projects\n cookieOpts.secure = false;\n } else {\n if (availableToSubdomains) {\n // Domain must be expressly configured in order for the cookie to\n // be sent to subdomains\n // UNLESS it is localhost, in which case domain should not be set\n // cf. https://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain\n cookieOpts.domain = domain || window.location.host;\n }\n cookieOpts.secure = true;\n }\n return cookieOpts;\n }\n}\n\nexport class ConsumerSubscriptionDataLayer extends SubscriptionDataLayer<ConsumerState> {}\nexport class B2BSubscriptionDataLayer extends SubscriptionDataLayer<B2BState> {}\n\n/**\n * We want multiple instances of the same Stytch SDK for the same project in the same page to\n * effectively share state - to do this, we create a single cache for the data layer.\n * In order to preserve the cache state across project hot module reloads, we bind it to\n * the global window object using a stytch-internal symbol.\n *\n * This also allows various StytchClients to communicate across package boundaries -\n * consider the following scenario:\n * - Next App splits out bundles per-page\n * - Next App uses Headless Client on all pages, and UI Client on one page\n * - UI client page includes its own copy of Headless Client (since UI depends on Headless CLient)\n * - B/C of code splitting & recombining, if someone navigates from a Headless page to a UI page\n * the there will actually be two copies of the HeadlessClient loaded,\n * one in the main bundle, and one included inside the UI Client code\n * - So using an in-memory global object will not suffice, we'll end up with two global objects in two diff packages\n */\ntype ConsumerDataLayerCache = Record<string, SubscriptionDataLayer<ConsumerState>>;\ntype B2BDataLayerCache = Record<string, SubscriptionDataLayer<B2BState>>;\n\nconst consumerDataLayerCacheSymbol = Symbol.for('__stytch_DataLayer');\nconst b2bDataLayerCacheSymbol = Symbol.for('__stytch_b2b_DataLayer');\n\nconst getConsumerDataLayerCache = (): ConsumerDataLayerCache => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wdw = window as any;\n if (!wdw[consumerDataLayerCacheSymbol]) {\n wdw[consumerDataLayerCacheSymbol] = {};\n }\n return wdw[consumerDataLayerCacheSymbol];\n};\n\nconst getB2BDataLayerCache = (): B2BDataLayerCache => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wdw = window as any;\n if (!wdw[b2bDataLayerCacheSymbol]) {\n wdw[b2bDataLayerCacheSymbol] = {};\n }\n return wdw[b2bDataLayerCacheSymbol];\n};\n\nexport const __clearConsumerDataLayerCache = () => {\n const dataLayerCache = getConsumerDataLayerCache();\n Object.keys(dataLayerCache).forEach((key) => delete dataLayerCache[key]);\n};\n\nexport const __clearB2BDataLayerCache = () => {\n const dataLayerCache = getB2BDataLayerCache();\n Object.keys(dataLayerCache).forEach((key) => delete dataLayerCache[key]);\n};\n\nexport const getConsumerDataLayer = (\n publicToken: string,\n options?: StytchClientOptions,\n): ConsumerSubscriptionDataLayer => {\n const dataLayerCache = getConsumerDataLayerCache();\n if (!dataLayerCache[publicToken]) {\n dataLayerCache[publicToken] = new ConsumerSubscriptionDataLayer(publicToken, options);\n }\n return dataLayerCache[publicToken];\n};\n\nexport const getB2BDataLayer = (publicToken: string, options?: StytchClientOptions): B2BSubscriptionDataLayer => {\n const dataLayerCache = getB2BDataLayerCache();\n if (!dataLayerCache[publicToken]) {\n dataLayerCache[publicToken] = new B2BSubscriptionDataLayer(publicToken, options);\n }\n return dataLayerCache[publicToken];\n};\n\nconst addSubscriber = <T>(collection: Subscribers<T>, subscriber: SubscriberFunction<T>): UnsubscribeFunction => {\n const uniqueId = Math.random().toString(36).slice(-10);\n collection[uniqueId] = subscriber;\n return () => delete collection[uniqueId];\n};\n\nconst notifySubscribers = <T>(collection: Subscribers<T>, value: T | null): void => {\n Object.values(collection).forEach((cb) => cb(value));\n};\n\ntype StateWithReadableTokensLoggedIn<T> = {\n state: T | null;\n intermediate_session_token: null;\n session_token: string;\n session_jwt: string;\n};\n\ntype StateIfOpaqueTokensLoggedIn<T> = {\n state: T | null;\n intermediate_session_token: null;\n session_token: true;\n session_jwt: true;\n};\n\ntype StateWithTokensLoggedIn<T> = StateWithReadableTokensLoggedIn<T> | StateIfOpaqueTokensLoggedIn<T>;\n\ntype StateWithTokensLoggedOut = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: null;\n};\n\ntype StateWithReadableIntermediateSessionToken = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: string;\n};\n\ntype StateWithOpaqueIntermediateSessionToken = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: true;\n};\n\ntype StateWithIntermediateSessionToken =\n | StateWithReadableIntermediateSessionToken\n | StateWithOpaqueIntermediateSessionToken;\n\ntype StateWithTokensDiff<T> = StateWithTokensLoggedIn<T> | StateWithTokensLoggedOut | StateWithIntermediateSessionToken;\n\nconst deepEqualData = createDeepEqual({\n KEYS_TO_EXCLUDE: ['last_accessed_at'],\n});\n\nexport class BaseSubscriptionService<T extends ConsumerState | B2BState, TOpaqueTokens extends AllowedOpaqueTokens>\n implements ISubscriptionService<T, TOpaqueTokens>\n{\n /**\n * Whether the state was retrieved from the cache and is awaiting a refresh\n */\n private fromCache = true;\n\n constructor(\n private _publicToken: string,\n private _datalayer: SubscriptionDataLayer<T>,\n { usingCustomApiEndpoint }: { usingCustomApiEndpoint: boolean },\n ) {\n window.addEventListener('storage', this._listen);\n\n // If a custom API endpoint is being used, the session may be being managed\n // by HttpOnly cookies, which we can't detect.\n if (!usingCustomApiEndpoint) {\n // If the session does not exist in localstorage (like if we are in an iframe)\n // then the cookie might still be set and we can retrieve the session via an API call\n const { session_token } = this._datalayer.readSessionCookie();\n if (!session_token) {\n this.destroySession();\n return;\n }\n }\n }\n\n // Listening for state changes across tabs\n private _listen = (e: StorageEvent) => {\n if (e.key !== getPersistentStorageKey(this._publicToken, '')) {\n return;\n }\n\n const parsedValue = e.newValue === null || e.newValue === 'null' ? null : (JSON.parse(e.newValue) as T);\n this.updateState(parsedValue, true);\n };\n\n getTokens(): IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null> {\n const { session_token, session_jwt } = this._datalayer.readSessionCookie();\n if (!(typeof session_token === 'string') || !(typeof session_jwt === 'string')) {\n return null as IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null>;\n }\n return { session_token, session_jwt } as IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null>;\n }\n\n getIntermediateSessionToken(): string | null {\n return this._datalayer.readIntermediateSessionTokenCookie() || null;\n }\n\n destroyState() {\n this.updateStateAndTokens({\n state: null,\n session_token: null,\n session_jwt: null,\n intermediate_session_token: null,\n });\n }\n\n destroySession() {\n this._datalayer.removeSessionCookie();\n this.updateState(null);\n }\n\n _updateStateAndTokensInternal(stateDiff: StateWithTokensDiff<T>, options: InternalSessionUpdateOptions) {\n const oldStateValue = this._datalayer.state;\n const newStateValue = stateDiff.state === null ? null : ({ ...this._datalayer.state, ...stateDiff.state } as T);\n this._datalayer.state = newStateValue;\n const wasCached = this.getFromCache();\n this.setCacheRefreshed();\n\n // NOTE: This means that our tab executes first before we signal the state change to other tabs\n // TODO: Should we avoid notifying subscribers in the same thread? Should we put\n // notifications in a setImmediate or setTimeout(..., 0)?\n // Should subscribers let us know if they are active/passive when they sign up?\n if (wasCached || !deepEqualData(oldStateValue, newStateValue)) {\n let notification: (T & SessionUpdateOptions) | null;\n if (newStateValue == null || options.fromCache) {\n notification = newStateValue;\n } else {\n notification = {\n ...newStateValue,\n sessionDurationMinutes: options.sessionDurationMinutes,\n };\n }\n\n notifySubscribers(this._datalayer.subscriptions, notification);\n }\n }\n\n updateStateAndTokens(\n stateDiff: StateWithTokensDiff<T>,\n options: InternalSessionUpdateOptions = { fromCache: false },\n ) {\n if (stateDiff.state) {\n if (typeof stateDiff.session_token === 'string') {\n this._datalayer.writeSessionCookie(stateDiff);\n } else {\n // The session token is opaque, so let's clear any residual session\n // cookies that may have been left over\n this._datalayer.removeSessionCookie();\n }\n this._datalayer.removeISTCookie();\n } else if (stateDiff.intermediate_session_token) {\n if (typeof stateDiff.intermediate_session_token === 'string') {\n this._datalayer.writeIntermediateSessionTokenCookie(stateDiff.intermediate_session_token);\n } else {\n // The intermediate session token is opaque, so let's clear any residual\n // intermediate session token cookies that may have been left over\n this._datalayer.removeISTCookie();\n }\n this._datalayer.removeSessionCookie();\n } else {\n this._datalayer.removeSessionCookie();\n this._datalayer.removeISTCookie();\n }\n\n this._updateStateAndTokensInternal(stateDiff, options);\n\n this._datalayer.syncToLocalStorage();\n }\n\n updateState(state: T | null, fromExternalSource = false) {\n const oldStateValue = this._datalayer.state;\n const newStateValue = state === null ? null : ({ ...this._datalayer.state, ...state } as T);\n this._datalayer.state = newStateValue;\n const wasCached = this.getFromCache();\n this.setCacheRefreshed();\n\n const hasStateChanged = !deepEqualData(oldStateValue, newStateValue);\n if (wasCached || hasStateChanged) {\n notifySubscribers(this._datalayer.subscriptions, newStateValue);\n\n // If there is no state change, or if this update was itself triggered by\n // a storage event, there is no need to sync to local storage since the\n // state is already in sync.\n if (hasStateChanged && !fromExternalSource) {\n // Delay notifying other tabs until after we have refreshed ourselves\n this._datalayer.syncToLocalStorage();\n }\n }\n }\n\n updateTokens(tokens: SessionTokensUpdate) {\n const { session_token, session_jwt } = tokens;\n const cookie = this._datalayer.readSessionCookie();\n const diff = {\n ...cookie,\n session_token,\n session_jwt,\n } as StateWithTokensDiff<T>;\n if (typeof session_token === 'string' || typeof session_jwt === 'string') {\n this._datalayer.writeSessionCookie(diff as StateWithReadableTokensLoggedIn<T>);\n this._datalayer.removeISTCookie();\n } else {\n this._datalayer.removeSessionCookie();\n }\n }\n\n subscribeToState(callback: SubscriberFunction<T & SessionUpdateOptions>): UnsubscribeFunction {\n return addSubscriber(this._datalayer.subscriptions, callback);\n }\n\n getState(): T | null {\n return this._datalayer.state;\n }\n\n destroy() {\n window.removeEventListener('storage', this._listen);\n }\n\n syncFromDeviceStorage() {\n return null;\n }\n\n getFromCache(): boolean {\n return this.fromCache;\n }\n\n setCacheRefreshed() {\n this.fromCache = false;\n }\n}\n\nexport class ConsumerSubscriptionService<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseSubscriptionService<ConsumerState, ExtractOpaqueTokens<TProjectConfiguration>>\n implements IConsumerSubscriptionService<TProjectConfiguration>\n{\n updateUser = (user: User) => this.updateState({ user });\n getUser = () => this.getState()?.user ?? null;\n getSession = () => this.getState()?.session ?? null;\n updateSession: IConsumerSubscriptionService<TProjectConfiguration>['updateSession'] = (resp, options) => {\n const { session, user, session_jwt, session_token } = resp;\n\n if (session_token && session_jwt) {\n this.updateStateAndTokens(\n {\n state: { session, user },\n session_jwt,\n session_token,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n } else {\n this.updateStateAndTokens(\n {\n state: { session, user },\n session_token: true,\n session_jwt: true,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n }\n };\n\n withUpdateSession =\n <\n Args extends [] | [options?: CommonAuthenticateOptions] | (string | CommonAuthenticateOptions)[],\n Ret extends AuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig> | null,\n >(\n authenticate: (...args: Args) => Promise<Ret>,\n ): ((...args: Args) => Promise<Ret>) =>\n async (...args) => {\n const resp = await authenticate(...args);\n if (resp != null) {\n const options = args.find((a): a is CommonAuthenticateOptions => a != null && !(typeof a === 'string'));\n this.updateSession(resp, {\n sessionDurationMinutes: options?.session_duration_minutes,\n });\n }\n return resp;\n };\n}\n\nexport class B2BSubscriptionService<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseSubscriptionService<B2BState, ExtractOpaqueTokens<TProjectConfiguration>>\n implements IB2BSubscriptionService<TProjectConfiguration>\n{\n updateMember = (member: Member) => this.updateState({ member });\n getMember = () => this.getState()?.member ?? null;\n updateOrganization = (organization: Organization) => this.updateState({ organization });\n getOrganization = () => this.getState()?.organization ?? null;\n getSession = () => this.getState()?.session ?? null;\n updateSession: IB2BSubscriptionService<TProjectConfiguration>['updateSession'] = (resp, options) => {\n if ('member_session' in resp && resp.member_session) {\n const tokens =\n resp.session_token && resp.session_jwt\n ? { session_token: resp.session_token, session_jwt: resp.session_jwt }\n : ({ session_token: true, session_jwt: true } as const);\n\n this.updateStateAndTokens(\n {\n state: {\n session: resp.member_session,\n member: resp.member,\n organization: resp.organization,\n },\n ...tokens,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n } else {\n this.updateStateAndTokens(\n {\n state: null,\n session_token: null,\n session_jwt: null,\n intermediate_session_token: resp.intermediate_session_token || true,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n }\n };\n\n withUpdateSession =\n <\n Options extends CommonAuthenticateOptions | undefined,\n Ret extends\n | B2BAuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig>\n | B2BAuthenticateResponseWithMFA<TProjectConfiguration & OpaqueTokensNeverConfig>\n | B2BDiscoveryAuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig>,\n >(\n authenticate: (options: Options) => Promise<Ret>,\n ): ((options: Options) => Promise<Ret>) =>\n async (options) => {\n const resp = await authenticate(options);\n this.updateSession(resp, {\n sessionDurationMinutes: options?.session_duration_minutes,\n });\n return resp;\n };\n}\n"],"names":["STYTCH_SESSION_COOKIE","STYTCH_SESSION_JWT_COOKIE","STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE","SEEN_DOMAINS_KEY","SubscriptionDataLayer","publicToken","state","_opaqueTokenCookieName","_jwtCookieName","_cookiePath","_domain","_cookieAvailableToSubdomains","_istCookieName","subscriptions","_localStorage","browserSessionStorage","constructor","options","getKeyBoundStorage","safeLocalStorage","safeSessionStorage","cookieOptions","opaqueTokenCookieName","jwtCookieName","path","domain","availableToSubdomains","istCookieName","localStorageState","getItem","parsedState","JSON","parse","syncToLocalStorage","readSessionCookie","session_token","Cookies","get","session_jwt","readIntermediateSessionTokenCookie","writeSessionCookie","stateDiff","cookieOpts","generateCookieOpts","expiresAt","session","expires_at","addSeenDomain","set","alternateCookieOptions","hasMultipleCookies","remove","logger","warn","writeIntermediateSessionTokenCookie","IST","expiresAtTime","Date","now","toString","removeSessionCookie","removeCookies","removeISTCookie","cookiesToRemove","trackedDomains","getSeenDomains","allDomains","uniqueDomains","Set","forEach","cookieName","setItem","stringify","key","value","removeItem","storedDomains","parsed","Array","isArray","includes","push","expires","sameSite","isLocalhost","secure","window","location","host","ConsumerSubscriptionDataLayer","B2BSubscriptionDataLayer","consumerDataLayerCacheSymbol","Symbol","for","b2bDataLayerCacheSymbol","getConsumerDataLayerCache","wdw","getB2BDataLayerCache","getConsumerDataLayer","dataLayerCache","getB2BDataLayer","addSubscriber","collection","subscriber","uniqueId","Math","random","slice","notifySubscribers","Object","values","cb","deepEqualData","createDeepEqual","KEYS_TO_EXCLUDE","BaseSubscriptionService","fromCache","_publicToken","_datalayer","usingCustomApiEndpoint","_listen","e","getPersistentStorageKey","parsedValue","newValue","updateState","addEventListener","destroySession","getTokens","getIntermediateSessionToken","destroyState","updateStateAndTokens","intermediate_session_token","_updateStateAndTokensInternal","oldStateValue","newStateValue","wasCached","getFromCache","setCacheRefreshed","notification","sessionDurationMinutes","fromExternalSource","hasStateChanged","updateTokens","tokens","cookie","diff","subscribeToState","callback","getState","destroy","removeEventListener","syncFromDeviceStorage","ConsumerSubscriptionService","updateUser","user","getUser","getSession","updateSession","resp","withUpdateSession","authenticate","args","find","a","session_duration_minutes","B2BSubscriptionService","updateMember","member","getMember","updateOrganization","organization","getOrganization","member_session"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SubscriptionService.mjs","sources":["../../../../../../web/src/SubscriptionService.ts"],"sourcesContent":["import {\n B2BState,\n ConsumerState,\n Member,\n Organization,\n SessionTokens,\n SessionTokensUpdate,\n StytchClientOptions,\n StytchProjectConfigurationInput,\n AuthenticateResponse,\n B2BAuthenticateResponse,\n B2BAuthenticateResponseWithMFA,\n B2BDiscoveryAuthenticateResponse,\n UnsubscribeFunction,\n User,\n} from '@stytch/core/public';\nimport {\n AllowedOpaqueTokens,\n ExtractOpaqueTokens,\n IB2BSubscriptionService,\n logger,\n IConsumerSubscriptionService,\n IfOpaqueTokens,\n ISubscriptionService,\n CommonAuthenticateOptions,\n OpaqueTokensNeverConfig,\n SessionUpdateOptions,\n InternalSessionUpdateOptions,\n} from '@stytch/core';\nimport Cookies from 'js-cookie';\nimport { createDeepEqual } from '@stytch/js-utils';\nimport { hasMultipleCookies, isLocalhost } from '../src/utils';\nimport {\n getKeyBoundStorage,\n getPersistentStorageKey,\n IKeyBoundStorage,\n safeLocalStorage,\n safeSessionStorage,\n StorageKey,\n} from './utils/storage';\n\ntype SubscriberFunction<T> = (value: T | null) => void;\ntype Subscribers<T> = Record<string, SubscriberFunction<T>>;\n\nconst STYTCH_SESSION_COOKIE = 'stytch_session';\nconst STYTCH_SESSION_JWT_COOKIE = 'stytch_session_jwt';\nconst STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE = 'stytch_intermediate_session_token';\nconst SEEN_DOMAINS_KEY = 'seen_domains';\n\nexport class SubscriptionDataLayer<T extends ConsumerState | B2BState> {\n publicToken: string;\n state: T | null;\n private readonly _opaqueTokenCookieName: string | null = null;\n private readonly _jwtCookieName: string | null = null;\n private readonly _cookiePath: string | null = null;\n private readonly _domain: string | null = null;\n private readonly _cookieAvailableToSubdomains: boolean = false;\n private readonly _istCookieName: string | null = null;\n\n subscriptions: Subscribers<T & SessionUpdateOptions>;\n\n private readonly _localStorage: IKeyBoundStorage;\n readonly browserSessionStorage: IKeyBoundStorage;\n\n constructor(publicToken: string, options?: StytchClientOptions) {\n this.publicToken = publicToken;\n this.state = null;\n this.subscriptions = {};\n\n // Initialize storage utilities\n this._localStorage = getKeyBoundStorage(safeLocalStorage, publicToken);\n this.browserSessionStorage = getKeyBoundStorage(safeSessionStorage, publicToken);\n\n if (options?.cookieOptions) {\n this._opaqueTokenCookieName = options.cookieOptions.opaqueTokenCookieName || null;\n this._jwtCookieName = options.cookieOptions.jwtCookieName || null;\n this._cookiePath = options.cookieOptions.path || null;\n this._domain = options.cookieOptions.domain || null;\n this._cookieAvailableToSubdomains = options.cookieOptions.availableToSubdomains || false;\n this._istCookieName = options.cookieOptions.istCookieName || null;\n }\n\n const localStorageState = this._localStorage.getItem('');\n\n if (!localStorageState) {\n return;\n }\n let parsedState: unknown;\n try {\n parsedState = JSON.parse(localStorageState);\n } catch {\n // Overwrite the bad data with nulls\n this.syncToLocalStorage();\n return;\n }\n // TODO: Validate the data looks decent & matches Session/User format\n this.state = parsedState as T;\n }\n\n protected get opaqueTokenCookieName(): string {\n return this._opaqueTokenCookieName ?? STYTCH_SESSION_COOKIE;\n }\n\n protected get jwtCookieName(): string {\n return this._jwtCookieName ?? STYTCH_SESSION_JWT_COOKIE;\n }\n\n protected get istCookieName(): string {\n return this._istCookieName ?? STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE;\n }\n\n readSessionCookie() {\n return {\n session_token: Cookies.get(this.opaqueTokenCookieName),\n session_jwt: Cookies.get(this.jwtCookieName),\n };\n }\n\n readIntermediateSessionTokenCookie() {\n return Cookies.get(this.istCookieName);\n }\n\n writeSessionCookie(stateDiff: StateWithReadableTokensLoggedIn<T>) {\n const { state, session_token, session_jwt } = stateDiff;\n\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: state?.session?.expires_at ?? '',\n availableToSubdomains: this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n if (cookieOpts.domain) {\n this.addSeenDomain(cookieOpts.domain);\n }\n\n Cookies.set(this.opaqueTokenCookieName, session_token, cookieOpts);\n Cookies.set(this.jwtCookieName, session_jwt, cookieOpts);\n\n /**\n * If a developer flips the boolean value of availableToSubdomains at any point,\n * there will be two cookies set which will could cause the user to log out since\n * the js-cookie API always returns the first cookie set. Thus, we will clear the\n * cookie that doesn't relate to the current cookie options.\n */\n\n const alternateCookieOptions = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: state?.session?.expires_at ?? '',\n availableToSubdomains: !this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n if (alternateCookieOptions.domain) {\n this.addSeenDomain(alternateCookieOptions.domain);\n }\n\n if (hasMultipleCookies(this.jwtCookieName)) {\n Cookies.remove(this.jwtCookieName, alternateCookieOptions);\n }\n\n if (hasMultipleCookies(this.opaqueTokenCookieName)) {\n Cookies.remove(this.opaqueTokenCookieName, alternateCookieOptions);\n }\n\n if (hasMultipleCookies(this.jwtCookieName)) {\n logger.warn(\n 'Could not remove extraneous JWT cookie. This might happen if the cookie has been set using multiple `path` settings, and may produce unwanted behavior.',\n );\n }\n\n if (hasMultipleCookies(this.opaqueTokenCookieName)) {\n logger.warn('Could not remove extraneous opaque token cookie.');\n }\n }\n\n writeIntermediateSessionTokenCookie(IST: string) {\n // ISTs are valid for 10 minutes\n const expiresAtTime = new Date(Date.now() + 10 * 60000);\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: expiresAtTime.toString(),\n availableToSubdomains: this._cookieAvailableToSubdomains,\n path: this._cookiePath,\n domain: this._domain,\n });\n\n Cookies.set(this.istCookieName, IST, cookieOpts);\n }\n\n removeSessionCookie() {\n this.removeCookies([this.opaqueTokenCookieName, this.jwtCookieName]);\n }\n\n removeISTCookie() {\n this.removeCookies([this.istCookieName]);\n }\n\n removeCookies(cookiesToRemove: string[]) {\n /**\n * Spray and Pray approach:\n * In order to delete a cookie, both the path and domain must match exactly\n * We don't always know how the cookie was set - we can use the path & info that the SDK was created with\n * but if the SDK settings have changed (e.g. a dev is developing) then things might get strange.\n * Note: it is _impossible_ to reliably delete a cookie if you don't know what path it was set at - thank,; internet\n * Our best effort approach is to just list off the likely combinations\n *\n * As of 2025-07-14, we track all domains that have been used to set cookies and try to delete\n * cookies from all of them to handle cases where domains change (e.g. something.com -> web.something.com)\n */\n\n // Get all previously seen domains\n const trackedDomains = this.getSeenDomains();\n // Include the current domain and null (no domain) in our attempts\n const allDomains = [this._domain, null, ...trackedDomains];\n // Remove duplicates\n const uniqueDomains = [...new Set(allDomains)];\n\n [true, false].forEach((availableToSubdomains) => {\n [this._cookiePath, null].forEach((path) => {\n uniqueDomains.forEach((domain) => {\n const cookieOpts = SubscriptionDataLayer.generateCookieOpts({\n expiresAt: new Date(0).toString(),\n availableToSubdomains,\n path,\n domain,\n });\n cookiesToRemove.forEach((cookieName) => {\n Cookies.remove(cookieName, cookieOpts);\n });\n });\n });\n });\n }\n\n syncToLocalStorage(): void {\n this._localStorage.setItem('', JSON.stringify(this.state));\n }\n\n getItem(key: StorageKey): string | null {\n return this._localStorage.getItem(key);\n }\n\n setItem(key: StorageKey, value: string): void {\n this._localStorage.setItem(key, value);\n }\n\n removeItem(key: StorageKey): void {\n this._localStorage.removeItem(key);\n }\n\n /**\n * Get all previously seen domains from local storage\n */\n private getSeenDomains(): string[] {\n const storedDomains = this.getItem(SEEN_DOMAINS_KEY);\n\n if (!storedDomains) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(storedDomains);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n }\n\n /**\n * Add a domain to the seen domains list\n */\n private addSeenDomain(domain: string | null): void {\n if (!domain) {\n return;\n }\n\n const storedDomains = this.getSeenDomains();\n if (!storedDomains.includes(domain)) {\n storedDomains.push(domain);\n this.setItem(SEEN_DOMAINS_KEY, JSON.stringify(storedDomains));\n }\n }\n\n static generateCookieOpts({\n path,\n domain,\n availableToSubdomains,\n expiresAt,\n }: {\n path: string | null;\n domain: string | null;\n availableToSubdomains: boolean;\n expiresAt: string;\n }): Cookies.CookieAttributes {\n const cookieOpts: Cookies.CookieAttributes = {\n expires: new Date(expiresAt),\n sameSite: 'lax',\n };\n\n if (path) {\n cookieOpts.path = path;\n }\n\n if (isLocalhost()) {\n // We do not require HTTPS for localhost / local development\n // TODO: Could investigate disabling HTTPS for test projects\n cookieOpts.secure = false;\n } else {\n if (availableToSubdomains) {\n // Domain must be expressly configured in order for the cookie to\n // be sent to subdomains\n // UNLESS it is localhost, in which case domain should not be set\n // cf. https://stackoverflow.com/questions/1134290/cookies-on-localhost-with-explicit-domain\n cookieOpts.domain = domain || window.location.host;\n }\n cookieOpts.secure = true;\n }\n return cookieOpts;\n }\n}\n\nexport class ConsumerSubscriptionDataLayer extends SubscriptionDataLayer<ConsumerState> {}\nexport class B2BSubscriptionDataLayer extends SubscriptionDataLayer<B2BState> {}\n\n/**\n * We want multiple instances of the same Stytch SDK for the same project in the same page to\n * effectively share state - to do this, we create a single cache for the data layer.\n * In order to preserve the cache state across project hot module reloads, we bind it to\n * the global window object using a stytch-internal symbol.\n *\n * This also allows various StytchClients to communicate across package boundaries -\n * consider the following scenario:\n * - Next App splits out bundles per-page\n * - Next App uses Headless Client on all pages, and UI Client on one page\n * - UI client page includes its own copy of Headless Client (since UI depends on Headless CLient)\n * - B/C of code splitting & recombining, if someone navigates from a Headless page to a UI page\n * the there will actually be two copies of the HeadlessClient loaded,\n * one in the main bundle, and one included inside the UI Client code\n * - So using an in-memory global object will not suffice, we'll end up with two global objects in two diff packages\n */\ntype ConsumerDataLayerCache = Record<string, SubscriptionDataLayer<ConsumerState>>;\ntype B2BDataLayerCache = Record<string, SubscriptionDataLayer<B2BState>>;\n\nconst consumerDataLayerCacheSymbol = Symbol.for('__stytch_DataLayer');\nconst b2bDataLayerCacheSymbol = Symbol.for('__stytch_b2b_DataLayer');\n\nconst getConsumerDataLayerCache = (): ConsumerDataLayerCache => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wdw = window as any;\n if (!wdw[consumerDataLayerCacheSymbol]) {\n wdw[consumerDataLayerCacheSymbol] = {};\n }\n return wdw[consumerDataLayerCacheSymbol];\n};\n\nconst getB2BDataLayerCache = (): B2BDataLayerCache => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const wdw = window as any;\n if (!wdw[b2bDataLayerCacheSymbol]) {\n wdw[b2bDataLayerCacheSymbol] = {};\n }\n return wdw[b2bDataLayerCacheSymbol];\n};\n\nexport const __clearConsumerDataLayerCache = () => {\n const dataLayerCache = getConsumerDataLayerCache();\n Object.keys(dataLayerCache).forEach((key) => delete dataLayerCache[key]);\n};\n\nexport const __clearB2BDataLayerCache = () => {\n const dataLayerCache = getB2BDataLayerCache();\n Object.keys(dataLayerCache).forEach((key) => delete dataLayerCache[key]);\n};\n\nexport const getConsumerDataLayer = (\n publicToken: string,\n options?: StytchClientOptions,\n): ConsumerSubscriptionDataLayer => {\n const dataLayerCache = getConsumerDataLayerCache();\n if (!dataLayerCache[publicToken]) {\n dataLayerCache[publicToken] = new ConsumerSubscriptionDataLayer(publicToken, options);\n }\n return dataLayerCache[publicToken];\n};\n\nexport const getB2BDataLayer = (publicToken: string, options?: StytchClientOptions): B2BSubscriptionDataLayer => {\n const dataLayerCache = getB2BDataLayerCache();\n if (!dataLayerCache[publicToken]) {\n dataLayerCache[publicToken] = new B2BSubscriptionDataLayer(publicToken, options);\n }\n return dataLayerCache[publicToken];\n};\n\nconst addSubscriber = <T>(collection: Subscribers<T>, subscriber: SubscriberFunction<T>): UnsubscribeFunction => {\n const uniqueId = Math.random().toString(36).slice(-10);\n collection[uniqueId] = subscriber;\n return () => delete collection[uniqueId];\n};\n\nconst notifySubscribers = <T>(collection: Subscribers<T>, value: T | null): void => {\n Object.values(collection).forEach((cb) => cb(value));\n};\n\ntype StateWithReadableTokensLoggedIn<T> = {\n state: T | null;\n intermediate_session_token: null;\n session_token: string;\n session_jwt: string;\n};\n\ntype StateIfOpaqueTokensLoggedIn<T> = {\n state: T | null;\n intermediate_session_token: null;\n session_token: true;\n session_jwt: true;\n};\n\ntype StateWithTokensLoggedIn<T> = StateWithReadableTokensLoggedIn<T> | StateIfOpaqueTokensLoggedIn<T>;\n\ntype StateWithTokensLoggedOut = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: null;\n};\n\ntype StateWithReadableIntermediateSessionToken = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: string;\n};\n\ntype StateWithOpaqueIntermediateSessionToken = {\n state: null;\n session_token: null;\n session_jwt: null;\n intermediate_session_token: true;\n};\n\ntype StateWithIntermediateSessionToken =\n | StateWithReadableIntermediateSessionToken\n | StateWithOpaqueIntermediateSessionToken;\n\ntype StateWithTokensDiff<T> = StateWithTokensLoggedIn<T> | StateWithTokensLoggedOut | StateWithIntermediateSessionToken;\n\nconst deepEqualData = createDeepEqual({\n KEYS_TO_EXCLUDE: ['last_accessed_at'],\n});\n\nexport class BaseSubscriptionService<T extends ConsumerState | B2BState, TOpaqueTokens extends AllowedOpaqueTokens>\n implements ISubscriptionService<T, TOpaqueTokens>\n{\n /**\n * Whether the state was retrieved from the cache and is awaiting a refresh\n */\n private fromCache = true;\n\n constructor(\n private _publicToken: string,\n private _datalayer: SubscriptionDataLayer<T>,\n { usingCustomApiEndpoint }: { usingCustomApiEndpoint: boolean },\n ) {\n window.addEventListener('storage', this._listen);\n\n // If a custom API endpoint is being used, the session may be being managed\n // by HttpOnly cookies, which we can't detect.\n if (!usingCustomApiEndpoint) {\n // If the session does not exist in localstorage (like if we are in an iframe)\n // then the cookie might still be set and we can retrieve the session via an API call\n const { session_token } = this._datalayer.readSessionCookie();\n if (!session_token) {\n this.destroySession();\n return;\n }\n }\n }\n\n // Listening for state changes across tabs\n private _listen = (e: StorageEvent) => {\n if (e.key !== getPersistentStorageKey(this._publicToken, '')) {\n return;\n }\n\n const parsedValue = e.newValue === null || e.newValue === 'null' ? null : (JSON.parse(e.newValue) as T);\n this.updateState(parsedValue, true);\n };\n\n getTokens(): IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null> {\n const { session_token, session_jwt } = this._datalayer.readSessionCookie();\n if (!(typeof session_token === 'string') || !(typeof session_jwt === 'string')) {\n return null as IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null>;\n }\n return { session_token, session_jwt } as IfOpaqueTokens<TOpaqueTokens, never, SessionTokens | null>;\n }\n\n getIntermediateSessionToken(): string | null {\n return this._datalayer.readIntermediateSessionTokenCookie() || null;\n }\n\n destroyState() {\n this.updateStateAndTokens({\n state: null,\n session_token: null,\n session_jwt: null,\n intermediate_session_token: null,\n });\n }\n\n destroySession() {\n this._datalayer.removeSessionCookie();\n this.updateState(null);\n }\n\n _updateStateAndTokensInternal(stateDiff: StateWithTokensDiff<T>, options: InternalSessionUpdateOptions) {\n const oldStateValue = this._datalayer.state;\n const newStateValue = stateDiff.state === null ? null : ({ ...this._datalayer.state, ...stateDiff.state } as T);\n this._datalayer.state = newStateValue;\n const wasCached = this.getFromCache();\n this.setCacheRefreshed();\n\n // NOTE: This means that our tab executes first before we signal the state change to other tabs\n // TODO: Should we avoid notifying subscribers in the same thread? Should we put\n // notifications in a setImmediate or setTimeout(..., 0)?\n // Should subscribers let us know if they are active/passive when they sign up?\n if (wasCached || !deepEqualData(oldStateValue, newStateValue)) {\n let notification: (T & SessionUpdateOptions) | null;\n if (newStateValue == null || options.fromCache) {\n notification = newStateValue;\n } else {\n notification = {\n ...newStateValue,\n sessionDurationMinutes: options.sessionDurationMinutes,\n };\n }\n\n notifySubscribers(this._datalayer.subscriptions, notification);\n }\n }\n\n updateStateAndTokens(\n stateDiff: StateWithTokensDiff<T>,\n options: InternalSessionUpdateOptions = { fromCache: false },\n ) {\n if (stateDiff.state) {\n if (typeof stateDiff.session_token === 'string') {\n this._datalayer.writeSessionCookie(stateDiff);\n } else {\n // The session token is opaque, so let's clear any residual session\n // cookies that may have been left over\n this._datalayer.removeSessionCookie();\n }\n this._datalayer.removeISTCookie();\n } else if (stateDiff.intermediate_session_token) {\n if (typeof stateDiff.intermediate_session_token === 'string') {\n this._datalayer.writeIntermediateSessionTokenCookie(stateDiff.intermediate_session_token);\n } else {\n // The intermediate session token is opaque, so let's clear any residual\n // intermediate session token cookies that may have been left over\n this._datalayer.removeISTCookie();\n }\n this._datalayer.removeSessionCookie();\n } else {\n this._datalayer.removeSessionCookie();\n this._datalayer.removeISTCookie();\n }\n\n this._updateStateAndTokensInternal(stateDiff, options);\n\n this._datalayer.syncToLocalStorage();\n }\n\n updateState(state: T | null, fromExternalSource = false) {\n const oldStateValue = this._datalayer.state;\n const newStateValue = state === null ? null : ({ ...this._datalayer.state, ...state } as T);\n this._datalayer.state = newStateValue;\n const wasCached = this.getFromCache();\n this.setCacheRefreshed();\n\n const hasStateChanged = !deepEqualData(oldStateValue, newStateValue);\n if (wasCached || hasStateChanged) {\n notifySubscribers(this._datalayer.subscriptions, newStateValue);\n\n // If there is no state change, or if this update was itself triggered by\n // a storage event, there is no need to sync to local storage since the\n // state is already in sync.\n if (hasStateChanged && !fromExternalSource) {\n // Delay notifying other tabs until after we have refreshed ourselves\n this._datalayer.syncToLocalStorage();\n }\n }\n }\n\n updateTokens(tokens: SessionTokensUpdate) {\n const { session_token, session_jwt } = tokens;\n const cookie = this._datalayer.readSessionCookie();\n const diff = {\n ...cookie,\n session_token,\n session_jwt,\n } as StateWithTokensDiff<T>;\n if (typeof session_token === 'string' || typeof session_jwt === 'string') {\n this._datalayer.writeSessionCookie(diff as StateWithReadableTokensLoggedIn<T>);\n this._datalayer.removeISTCookie();\n } else {\n this._datalayer.removeSessionCookie();\n }\n }\n\n subscribeToState(callback: SubscriberFunction<T & SessionUpdateOptions>): UnsubscribeFunction {\n return addSubscriber(this._datalayer.subscriptions, callback);\n }\n\n getState(): T | null {\n return this._datalayer.state;\n }\n\n destroy() {\n window.removeEventListener('storage', this._listen);\n }\n\n syncFromDeviceStorage() {\n return null;\n }\n\n getFromCache(): boolean {\n return this.fromCache;\n }\n\n setCacheRefreshed() {\n this.fromCache = false;\n }\n}\n\nexport class ConsumerSubscriptionService<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseSubscriptionService<ConsumerState, ExtractOpaqueTokens<TProjectConfiguration>>\n implements IConsumerSubscriptionService<TProjectConfiguration>\n{\n updateUser = (user: User) => this.updateState({ user });\n getUser = () => this.getState()?.user ?? null;\n getSession = () => this.getState()?.session ?? null;\n updateSession: IConsumerSubscriptionService<TProjectConfiguration>['updateSession'] = (resp, options) => {\n const { session, user, session_jwt, session_token } = resp;\n\n if (session_token && session_jwt) {\n this.updateStateAndTokens(\n {\n state: { session, user },\n session_jwt,\n session_token,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n } else {\n this.updateStateAndTokens(\n {\n state: { session, user },\n session_token: true,\n session_jwt: true,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n }\n };\n\n withUpdateSession =\n <\n Args extends [] | [options?: CommonAuthenticateOptions] | (string | CommonAuthenticateOptions)[],\n Ret extends AuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig> | null,\n >(\n authenticate: (...args: Args) => Promise<Ret>,\n ): ((...args: Args) => Promise<Ret>) =>\n async (...args) => {\n const resp = await authenticate(...args);\n if (resp != null) {\n const options = args.find((a): a is CommonAuthenticateOptions => a != null && !(typeof a === 'string'));\n this.updateSession(resp, {\n sessionDurationMinutes: options?.session_duration_minutes,\n });\n }\n return resp;\n };\n}\n\nexport class B2BSubscriptionService<TProjectConfiguration extends StytchProjectConfigurationInput>\n extends BaseSubscriptionService<B2BState, ExtractOpaqueTokens<TProjectConfiguration>>\n implements IB2BSubscriptionService<TProjectConfiguration>\n{\n updateMember = (member: Member) => this.updateState({ member });\n getMember = () => this.getState()?.member ?? null;\n updateOrganization = (organization: Organization) => this.updateState({ organization });\n getOrganization = () => this.getState()?.organization ?? null;\n getSession = () => this.getState()?.session ?? null;\n updateSession: IB2BSubscriptionService<TProjectConfiguration>['updateSession'] = (resp, options) => {\n if ('member_session' in resp && resp.member_session) {\n const tokens =\n resp.session_token && resp.session_jwt\n ? { session_token: resp.session_token, session_jwt: resp.session_jwt }\n : ({ session_token: true, session_jwt: true } as const);\n\n this.updateStateAndTokens(\n {\n state: {\n session: resp.member_session,\n member: resp.member,\n organization: resp.organization,\n },\n ...tokens,\n intermediate_session_token: null,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n } else {\n this.updateStateAndTokens(\n {\n state: null,\n session_token: null,\n session_jwt: null,\n intermediate_session_token: resp.intermediate_session_token || true,\n },\n {\n fromCache: false,\n sessionDurationMinutes: options?.sessionDurationMinutes,\n },\n );\n }\n };\n\n withUpdateSession =\n <\n Options extends CommonAuthenticateOptions | undefined,\n Ret extends\n | B2BAuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig>\n | B2BAuthenticateResponseWithMFA<TProjectConfiguration & OpaqueTokensNeverConfig>\n | B2BDiscoveryAuthenticateResponse<TProjectConfiguration & OpaqueTokensNeverConfig>,\n >(\n authenticate: (options: Options) => Promise<Ret>,\n ): ((options: Options) => Promise<Ret>) =>\n async (options) => {\n const resp = await authenticate(options);\n this.updateSession(resp, {\n sessionDurationMinutes: options?.session_duration_minutes,\n });\n return resp;\n };\n}\n"],"names":["STYTCH_SESSION_COOKIE","STYTCH_SESSION_JWT_COOKIE","STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE","SEEN_DOMAINS_KEY","SubscriptionDataLayer","publicToken","state","_opaqueTokenCookieName","_jwtCookieName","_cookiePath","_domain","_cookieAvailableToSubdomains","_istCookieName","subscriptions","_localStorage","browserSessionStorage","options","getKeyBoundStorage","safeLocalStorage","safeSessionStorage","cookieOptions","opaqueTokenCookieName","jwtCookieName","path","domain","availableToSubdomains","istCookieName","localStorageState","getItem","parsedState","JSON","parse","syncToLocalStorage","readSessionCookie","session_token","Cookies","get","session_jwt","readIntermediateSessionTokenCookie","writeSessionCookie","stateDiff","cookieOpts","generateCookieOpts","expiresAt","session","expires_at","addSeenDomain","set","alternateCookieOptions","hasMultipleCookies","remove","logger","warn","writeIntermediateSessionTokenCookie","IST","expiresAtTime","Date","now","toString","removeSessionCookie","removeCookies","removeISTCookie","cookiesToRemove","trackedDomains","getSeenDomains","allDomains","uniqueDomains","Set","forEach","cookieName","setItem","stringify","key","value","removeItem","storedDomains","parsed","Array","isArray","includes","push","expires","sameSite","isLocalhost","secure","window","location","host","ConsumerSubscriptionDataLayer","B2BSubscriptionDataLayer","consumerDataLayerCacheSymbol","Symbol","for","b2bDataLayerCacheSymbol","getConsumerDataLayerCache","wdw","getB2BDataLayerCache","getConsumerDataLayer","dataLayerCache","getB2BDataLayer","addSubscriber","collection","subscriber","uniqueId","Math","random","slice","notifySubscribers","Object","values","cb","deepEqualData","createDeepEqual","KEYS_TO_EXCLUDE","BaseSubscriptionService","fromCache","_publicToken","_datalayer","usingCustomApiEndpoint","addEventListener","_listen","destroySession","e","getPersistentStorageKey","parsedValue","newValue","updateState","getTokens","getIntermediateSessionToken","destroyState","updateStateAndTokens","intermediate_session_token","_updateStateAndTokensInternal","oldStateValue","newStateValue","wasCached","getFromCache","setCacheRefreshed","notification","sessionDurationMinutes","fromExternalSource","hasStateChanged","updateTokens","tokens","cookie","diff","subscribeToState","callback","getState","destroy","removeEventListener","syncFromDeviceStorage","ConsumerSubscriptionService","updateUser","user","getUser","getSession","updateSession","resp","withUpdateSession","authenticate","args","find","a","session_duration_minutes","B2BSubscriptionService","updateMember","member","getMember","updateOrganization","organization","getOrganization","member_session"],"mappings":"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"}
|
package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AuthManagementSection.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React__default, { useState } from 'react';
|
|
2
|
-
import '../../../../../_virtual/
|
|
2
|
+
import '../../../../../_virtual/index.mjs';
|
|
3
3
|
import { useSWRConfig } from '../../../../../node_modules/swr/_internal/dist/index.mjs';
|
|
4
4
|
import { Button } from '../components/Button.mjs';
|
|
5
5
|
import { Checkbox } from '../components/Checkbox.mjs';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React__default, { useState } from 'react';
|
|
2
|
-
import '../../../../../_virtual/
|
|
2
|
+
import '../../../../../_virtual/index.mjs';
|
|
3
3
|
import { useSWRConfig } from '../../../../../node_modules/swr/_internal/dist/index.mjs';
|
|
4
4
|
import { Modal } from '../components/Modal.mjs';
|
|
5
5
|
import { Typography } from '../components/Typography.mjs';
|
|
@@ -7,7 +7,7 @@ import { Button } from '../components/Button.mjs';
|
|
|
7
7
|
import { useRbac } from '../utils/useRbac.mjs';
|
|
8
8
|
import { Modal } from '../components/Modal.mjs';
|
|
9
9
|
import { scimGetConnectionKey } from '../utils/useScimConnection.mjs';
|
|
10
|
-
import '../../../../../_virtual/
|
|
10
|
+
import '../../../../../_virtual/index.mjs';
|
|
11
11
|
import { useSWRConfig } from '../../../../../node_modules/swr/_internal/dist/index.mjs';
|
|
12
12
|
import { useStytchClient } from '../utils/useStytchClient.mjs';
|
|
13
13
|
import { useMutateWithToast } from '../utils/useMutateWithToast.mjs';
|
package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionTokenRotationSection.mjs
CHANGED
|
@@ -11,7 +11,7 @@ import { Table } from '../components/Table.mjs';
|
|
|
11
11
|
import { SCIMFields } from '../components/ScimFields.mjs';
|
|
12
12
|
import { Checkbox } from '../components/Checkbox.mjs';
|
|
13
13
|
import { NO_VALUE } from '../utils/noValue.mjs';
|
|
14
|
-
import '../../../../../_virtual/
|
|
14
|
+
import '../../../../../_virtual/index.mjs';
|
|
15
15
|
import { useSWRConfig } from '../../../../../node_modules/swr/_internal/dist/index.mjs';
|
|
16
16
|
import { useStytchClient } from '../utils/useStytchClient.mjs';
|
|
17
17
|
import { useMutateWithToast } from '../utils/useMutateWithToast.mjs';
|