@stytch/react 20.0.0-next.0 → 20.0.0-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/cjs/{StytchSSRProxy-CUOvjF03.js → StytchSSRProxy-Bz6LNYdq.js} +186 -1
- package/dist/cjs/StytchSSRProxy-Bz6LNYdq.js.map +1 -0
- package/dist/cjs/adminPortal/index.cjs +102 -26
- package/dist/cjs/adminPortal/index.cjs.map +1 -1
- package/dist/cjs/b2b/index.cjs +176 -138
- package/dist/cjs/b2b/index.cjs.map +1 -1
- package/dist/cjs/b2b/index.headless.cjs +24 -24
- package/dist/cjs/b2b/index.headless.cjs.map +1 -1
- package/dist/cjs/{idpHelpers-eUP8j58U.js → idpHelpers-Bj_7pbfW.js} +7 -191
- package/dist/cjs/idpHelpers-Bj_7pbfW.js.map +1 -0
- package/dist/cjs/{index-DfiRrtK8.js → index-Ni_dyEsz.js} +3 -3
- package/dist/cjs/{index-DfiRrtK8.js.map → index-Ni_dyEsz.js.map} +1 -1
- package/dist/cjs/index.cjs +207 -196
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.headless.cjs +32 -32
- package/dist/cjs/index.headless.cjs.map +1 -1
- package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js → passwordManagerDisableAutofillProps-DV31RTL_.js} +2 -2
- package/dist/cjs/{passwordManagerDisableAutofillProps-C0akDAKd.js.map → passwordManagerDisableAutofillProps-DV31RTL_.js.map} +1 -1
- package/dist/cjs/{shadcn-Bbv2Hk3P.js → shadcn-B8TEzQMT.js} +99 -81
- package/dist/cjs/shadcn-B8TEzQMT.js.map +1 -0
- package/dist/cjs-dev/{StytchSSRProxy-D0B5PuT0.js → StytchSSRProxy-CxXsyme4.js} +186 -1
- package/dist/cjs-dev/StytchSSRProxy-CxXsyme4.js.map +1 -0
- package/dist/cjs-dev/adminPortal/index.cjs +102 -26
- package/dist/cjs-dev/adminPortal/index.cjs.map +1 -1
- package/dist/cjs-dev/b2b/index.cjs +176 -138
- package/dist/cjs-dev/b2b/index.cjs.map +1 -1
- package/dist/cjs-dev/b2b/index.headless.cjs +24 -24
- package/dist/cjs-dev/b2b/index.headless.cjs.map +1 -1
- package/dist/cjs-dev/{idpHelpers-DOOVv6dT.js → idpHelpers-Cf8Qq1B4.js} +7 -191
- package/dist/cjs-dev/idpHelpers-Cf8Qq1B4.js.map +1 -0
- package/dist/cjs-dev/{index-paeFcHjf.js → index-DdK3Jt4u.js} +3 -3
- package/dist/cjs-dev/{index-paeFcHjf.js.map → index-DdK3Jt4u.js.map} +1 -1
- package/dist/cjs-dev/index.cjs +207 -196
- package/dist/cjs-dev/index.cjs.map +1 -1
- package/dist/cjs-dev/index.headless.cjs +32 -32
- package/dist/cjs-dev/index.headless.cjs.map +1 -1
- package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js → passwordManagerDisableAutofillProps-D70WyvIu.js} +2 -2
- package/dist/cjs-dev/{passwordManagerDisableAutofillProps-CnLBAXyr.js.map → passwordManagerDisableAutofillProps-D70WyvIu.js.map} +1 -1
- package/dist/cjs-dev/{shadcn-CdbmlhdF.js → shadcn-C4w3DtKK.js} +99 -81
- package/dist/cjs-dev/shadcn-C4w3DtKK.js.map +1 -0
- package/dist/esm/_virtual/index.mjs +4 -4
- 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/_virtual/index6.mjs +2 -2
- package/dist/esm/_virtual/index7.mjs +2 -2
- package/dist/esm/adminPortal/index.mjs +4 -1
- package/dist/esm/adminPortal/index.mjs.map +1 -1
- package/dist/esm/b2b/index.mjs.map +1 -1
- package/dist/esm/node_modules/lodash.merge/index.mjs +1 -1
- package/dist/esm/node_modules/use-sync-external-store/shim/index.mjs +1 -1
- package/dist/esm/packages/core/src/rpc/FrameClient.mjs +1 -0
- package/dist/esm/packages/core/src/rpc/FrameClient.mjs.map +1 -1
- package/dist/esm/packages/web/messages/b2b/en.json.mjs +10 -3
- package/dist/esm/packages/web/messages/b2b/en.json.mjs.map +1 -1
- package/dist/esm/packages/web/messages/en.json.mjs +10 -3
- package/dist/esm/packages/web/messages/en.json.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
- package/dist/esm/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
- package/dist/esm/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
- package/dist/esm/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
- package/dist/esm/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
- package/dist/esm/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
- package/dist/esm/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/utils/theme.mjs +1 -1
- package/dist/esm/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
- package/dist/esm/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
- package/dist/esm/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
- package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
- package/dist/esm/packages/web/src/adminPortal/utils/useRoles.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/components/OrganizationRow.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs +27 -3
- package/dist/esm/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
- package/dist/esm/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
- package/dist/esm/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2b/utils.mjs +8 -1
- package/dist/esm/packages/web/src/ui/b2b/utils.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Main/LoginForm/index.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Passkey/EditableRow.mjs +1 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +5 -68
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +71 -0
- package/dist/esm/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
- package/dist/esm/packages/web/src/ui/components/atoms/AnimatedContainer.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/Button.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs +4 -5
- package/dist/esm/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/CodeContainer.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/Column.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/Typography.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/VerticalTransition.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/VisuallyHidden.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs +14 -23
- package/dist/esm/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
- package/dist/esm/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
- package/dist/esm/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs +3 -2
- package/dist/esm/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
- package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
- package/dist/esm/packages/web/src/ui/components/molecules/OtpInput.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/PasswordStrengthCheck.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs +3 -4
- package/dist/esm/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
- package/dist/esm/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/components/organisms/IDPConsentManifest.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/organisms/OneTapError.mjs +1 -1
- package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs +2 -2
- package/dist/esm/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
- package/dist/esm/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
- package/dist/esm/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
- package/dist/esm/packages/web/src/utils/crypto.mjs +1 -1
- package/dist/esm-dev/_virtual/index.mjs +4 -4
- package/dist/esm-dev/_virtual/index3.mjs +3 -5
- package/dist/esm-dev/_virtual/index3.mjs.map +1 -1
- package/dist/esm-dev/_virtual/index4.mjs +5 -3
- package/dist/esm-dev/_virtual/index4.mjs.map +1 -1
- package/dist/esm-dev/_virtual/index6.mjs +2 -2
- package/dist/esm-dev/_virtual/index7.mjs +2 -2
- package/dist/esm-dev/adminPortal/index.mjs +4 -1
- package/dist/esm-dev/adminPortal/index.mjs.map +1 -1
- package/dist/esm-dev/b2b/index.mjs.map +1 -1
- package/dist/esm-dev/node_modules/lodash.merge/index.mjs +1 -1
- package/dist/esm-dev/node_modules/use-sync-external-store/shim/index.mjs +1 -1
- package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs +1 -0
- package/dist/esm-dev/packages/core/src/rpc/FrameClient.mjs.map +1 -1
- package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs +10 -3
- package/dist/esm-dev/packages/web/messages/b2b/en.json.mjs.map +1 -1
- package/dist/esm-dev/packages/web/messages/en.json.mjs +10 -3
- package/dist/esm-dev/packages/web/messages/en.json.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs +6 -3
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/AccessSection.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs +4 -1
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/InviteModal.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs +3 -1
- package/dist/esm-dev/packages/web/src/adminPortal/memberManagement/MemberListScreen.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs +6 -2
- package/dist/esm-dev/packages/web/src/adminPortal/scim/SCIMConnectionRoleAssignmentsSection.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs +7 -3
- package/dist/esm-dev/packages/web/src/adminPortal/settings/OrgSettingsRoleAssignmentsSection.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs +5 -1
- package/dist/esm-dev/packages/web/src/adminPortal/sso/RoleAssignmentsSection.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/theme.mjs +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRbac.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs +3 -3
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleAutocomplete.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs +2 -2
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoleDisplayInfo.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.mjs +7 -2
- package/dist/esm-dev/packages/web/src/adminPortal/utils/useRoles.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/EmailConfirmation.mjs +27 -3
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailConfirmation.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs +2 -0
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/RecoveryCodeEntryScreen.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs +2 -0
- package/dist/esm-dev/packages/web/src/ui/b2b/screens/SMSOTPEntryScreen.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs +8 -1
- package/dist/esm-dev/packages/web/src/ui/b2b/utils.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/components/GoogleOneTap.mjs +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/Passkey/EditableRow.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs +10 -4
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/EmailConfirmation.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs +2 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordCreateAuthenticate.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs +5 -68
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/PasswordlessAuthenticate.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs +71 -0
- package/dist/esm-dev/packages/web/src/ui/b2c/screens/Secondary/usePasswordlessAuthenticate.mjs.map +1 -0
- 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/CircularProgress.mjs +4 -5
- package/dist/esm-dev/packages/web/src/ui/components/atoms/CircularProgress.mjs.map +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/atoms/Watermark.mjs +14 -23
- package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/atoms/Watermark.module.css.mjs +2 -2
- package/dist/esm-dev/packages/web/src/ui/components/molecules/Badge.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/EmailInput.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs +12 -4
- package/dist/esm-dev/packages/web/src/ui/components/molecules/ErrorText.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs +3 -2
- package/dist/esm-dev/packages/web/src/ui/components/molecules/Input.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs +6 -6
- package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/molecules/MainContainer.module.css.mjs +2 -2
- 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/molecules/PhoneInput.mjs +3 -4
- package/dist/esm-dev/packages/web/src/ui/components/molecules/PhoneInput.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs +26 -3
- package/dist/esm-dev/packages/web/src/ui/components/organisms/EmailConfirmationView.mjs.map +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/ResendOTPButton.mjs +2 -2
- package/dist/esm-dev/packages/web/src/ui/components/organisms/ResendOTPButton.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs +0 -42
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalMemberManagement.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs +0 -40
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalOrgSettings.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs +0 -43
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSCIM.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs +0 -36
- package/dist/esm-dev/packages/web/src/ui/react/adminPortal/AdminPortalSSO.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/b2b/Stytch.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/ui/react/bindings/createB2BComponent.mjs.map +1 -1
- package/dist/esm-dev/packages/web/src/utils/crypto.mjs +1 -1
- package/dist/types/{StytchB2BClient-Dq-ITB7Q.d.ts → StytchB2BClient-C_7NUKZh.d.ts} +1 -1
- package/dist/types/{StytchClient-BV0sT3Ox.d.ts → StytchClient-Ccvk8Nj1.d.ts} +1 -2
- package/dist/types/adminPortal/index.d.ts +5 -4
- package/dist/types/b2b/index.d.ts +11 -11
- package/dist/types/b2b/index.headless.d.ts +4 -4
- package/dist/types/{createAuthUrlHandler-Ck5TyB9J.d.ts → createAuthUrlHandler-BJRA2PHG.d.ts} +939 -39
- package/dist/types/idpHelpers-aCVwNrDk.d.ts +36 -0
- package/dist/types/index.d.ts +8 -8
- package/dist/types/index.headless.d.ts +4 -4
- package/dist/types/{shadcn-CFz8Asq0.d.ts → shadcn-0e4fkV5Z.d.ts} +6 -6
- package/messages/b2b/en.po +6 -3
- package/messages/en.po +6 -3
- package/package.json +1 -1
- package/dist/cjs/StytchSSRProxy-CUOvjF03.js.map +0 -1
- package/dist/cjs/idpHelpers-eUP8j58U.js.map +0 -1
- package/dist/cjs/shadcn-Bbv2Hk3P.js.map +0 -1
- package/dist/cjs-dev/StytchSSRProxy-D0B5PuT0.js.map +0 -1
- package/dist/cjs-dev/idpHelpers-DOOVv6dT.js.map +0 -1
- package/dist/cjs-dev/shadcn-CdbmlhdF.js.map +0 -1
- package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
- package/dist/esm/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
- package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
- package/dist/esm/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
- package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs +0 -5
- package/dist/esm-dev/packages/web/src/adminPortal/MuiClassNameSetup.mjs.map +0 -1
- package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs +0 -5
- package/dist/esm-dev/packages/web/src/adminPortal/classNameSeed.mjs.map +0 -1
- package/dist/types/idpHelpers-hBhPCtAC.d.ts +0 -936
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"idpHelpers-eUP8j58U.js","sources":["../../../core/src/constants.ts","../../../core/src/public/ui.ts","../../../core/src/public/b2b/ui.ts","../../../core/src/NetworkClient.ts","../../../../node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/uuid/dist/esm-browser/regex.js","../../../../node_modules/uuid/dist/esm-browser/validate.js","../../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/uuid/dist/esm-browser/v4.js","../../../core/src/utils/loadESModule.ts","../../../core/src/utils/getHttpsUrl.ts","../../../core/src/utils/logger.ts","../../../core/src/utils/api.ts","../../../core/src/utils/checks.ts","../../../core/src/utils/dfp.ts","../../../core/src/utils/index.ts","../../../core/src/DFPProtectedAuthProvider.ts","../../../core/src/ErrorMarshaller.ts","../../../core/src/EventLogger.ts","../../../core/src/HeadlessClients/HeadlessMagicLinkClient.ts","../../../core/src/HeadlessClients/HeadlessCryptoWalletClient.ts","../../../core/src/HeadlessClients/HeadlessPasswordClient.ts","../../../core/src/rbac.ts","../../../core/src/HeadlessClients/b2b/HeadlessB2BMagicLinkClient.ts","../../../core/src/HeadlessClients/b2b/HeadlessB2BPasswordsClient.ts","../../../core/src/rpc/FrameClient.ts","../../../core/src/SearchManager.ts","../../../core/src/shouldTryRefresh.ts","../../../core/src/SessionManager.ts","../../../core/src/StateChangeClient.ts","../../../core/src/Vertical.ts","../../../web/src/BootstrapDataManager.ts","../../../web/src/CaptchaProvider.ts","../../../web/src/ClientsideServicesProvider.ts","../../../web/src/NetworkClient.ts","../../../web/src/oneTap/navigatorSupportsFedCM.ts","../../../web/src/oneTap/positionModes.ts","../../../web/src/oneTap/GoogleOneTapClient.ts","../../../web/src/oneTap/OneTapProvider.ts","../../../web/src/PKCEManager.ts","../../../../node_modules/js-cookie/dist/js.cookie.mjs","../../../web/src/SubscriptionService.ts","../../../web/src/utils/config.ts","../../../web/src/utils/createAuthUrlHandler.ts","../../../web/src/utils/idpHelpers.ts"],"sourcesContent":["export const TEST_API_URL = 'https://test.stytch.com';\nexport const LIVE_API_URL = 'https://api.stytch.com';\nexport const CLIENTSIDE_SERVICES_IFRAME_URL = 'https://js.stytch.com/clientside-services/index.html';\n\nexport const STYTCH_DFP_BACKEND_URL = `https://telemetry.stytch.com`;\nexport const STYTCH_DFP_CDN_URL = `https://elements.stytch.com`;\n\nexport const STYTCH_SESSION_COOKIE = 'stytch_session';\nexport const STYTCH_SESSION_JWT_COOKIE = 'stytch_session_jwt';\nexport const POWERED_BY_STYTCH_IMG_URL = 'https://public-assets.stytch.com/et_powered_by_stytch_logo.png';\n\nexport const GOOGLE_ONE_TAP_HOST = 'https://accounts.google.com/gsi';\n\nexport const GOOGLE_ONE_TAP_SCRIPT_URL = `${GOOGLE_ONE_TAP_HOST}/client`;\n\nexport const DEFAULT_SESSION_DURATION_MINUTES = 30;\nexport const DEFAULT_OTP_EXPIRATION_MINUTES = 5;\n\nexport const MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING =\n \"It looks like you're creating multiple copies of the Stytch client.\" +\n ' This behavior is unsupported, and unintended side effects may occur. ' +\n \"Make sure you are creating the Stytch client at the global level, and not inside a component's render function.\";\n","import { OTPsAuthenticateResponse, OTPsLoginOrCreateResponse } from './otps';\nimport { MagicLinksLoginOrCreateResponse } from './magicLinks';\nimport { CryptoWalletAuthenticateResponse, CryptoWalletAuthenticateStartResponse } from './cryptoWallets';\nimport {\n PasswordAuthenticateResponse,\n PasswordCreateResponse,\n PasswordResetByEmailResponse,\n PasswordResetByEmailStartResponse,\n} from './passwords';\nimport {\n B2BDiscoveryIntermediateSessionsExchangeResponse,\n B2BDiscoveryOrganizationsCreateResponse,\n B2BDiscoveryOTPEmailAuthenticateResponse,\n B2BDiscoveryOTPEmailSendResponse,\n B2BImpersonationAuthenticateResponse,\n B2BMagicLinkLoginOrSignupResponse,\n B2BMagicLinksAuthenticateResponse,\n B2BMagicLinksDiscoveryAuthenticateResponse,\n B2BMagicLinksEmailDiscoverySendResponse,\n B2BOAuthAuthenticateResponse,\n B2BOAuthDiscoveryAuthenticateResponse,\n B2BOrganizationsGetBySlugResponse,\n B2BOTPsEmailAuthenticateResponse,\n B2BOTPsEmailLoginOrSignupResponse,\n B2BPasswordAuthenticateResponse,\n B2BPasswordDiscoveryAuthenticateResponse,\n B2BPasswordDiscoveryResetByEmailResponse,\n B2BPasswordDiscoveryResetByEmailStartResponse,\n B2BPasswordResetByEmailResponse,\n B2BPasswordResetByEmailStartResponse,\n B2BPasswordResetBySessionResponse,\n B2BSMSAuthenticateResponse,\n B2BSMSSendResponse,\n B2BSSODiscoverConnectionsResponse,\n B2BTOTPAuthenticateResponse,\n B2BTOTPCreateResponse,\n RecoveryCodeRecoverResponse,\n SSOAuthenticateResponse,\n} from './b2b';\nimport { WebAuthnAuthenticateResponse, WebAuthnRegisterResponse } from './webauthn';\nimport { StytchSDKUIError } from './SDKErrors';\nimport { StytchProjectConfigurationInput } from './typeConfig';\nimport type { Values } from '../utils';\n\ntype DeepPartial<K> = {\n [attr in keyof K]?: K[attr] extends object ? DeepPartial<K[attr]> : K[attr];\n};\n\n/**\n * The options for email magic links. This is used if you've enabled the `emailMagicLinks` product\n * in your configuration.\n */\n\nexport type EmailMagicLinksOptions = {\n loginRedirectURL?: string;\n loginExpirationMinutes?: number;\n signupRedirectURL?: string;\n signupExpirationMinutes?: number;\n loginTemplateId?: string;\n signupTemplateId?: string;\n createUserAsPending?: boolean;\n /**\n * @param domainHint - An optional hint indicating what domain the email will be sent from.\n * This field is only required if your project uses more than one custom domain to send emails.\n */\n domainHint?: string;\n locale?: string;\n};\n\n/**\n * The OAuth providers we support in our OAuth product.\n * Currently we support `Amazon`, `Apple`, `Bitbucket`, `Discord`, `Facebook`, `Figma`, `Google`, `GitLab`,\n * `LinkedIn`, `Microsoft`, `Salesforce`, `Slack`, `Snapchat`, `TikTok`, `Twitch`, `Twitter`, and `Yahoo`.\n */\n\nexport const OAuthProviders = {\n Google: 'google',\n Microsoft: 'microsoft',\n Apple: 'apple',\n Github: 'github',\n GitLab: 'gitlab',\n Facebook: 'facebook',\n Discord: 'discord',\n Salesforce: 'salesforce',\n Slack: 'slack',\n Amazon: 'amazon',\n Bitbucket: 'bitbucket',\n LinkedIn: 'linkedin',\n Coinbase: 'coinbase',\n Twitch: 'twitch',\n Twitter: 'twitter',\n TikTok: 'tiktok',\n Snapchat: 'snapchat',\n Figma: 'figma',\n Yahoo: 'yahoo',\n} as const;\n\nexport type OAuthProviders = Values<typeof OAuthProviders>;\n\n/**\n * The Crypto Wallets we support in our crypto product.\n * Currently we support all ethereum and solana wallets.\n * We additionally detect and show popular wallets as distinct options.\n * The list of poular wallets include `Binance`, `Coinbase`, `Metamask`, and `Phantom`\n */\n\nexport const Wallets = {\n Phantom: 'Phantom',\n Metamask: 'Metamask',\n Coinbase: 'Coinbase',\n Binance: 'Binance',\n GenericEthereumWallet: 'GenericEthereumWallet',\n GenericSolanaWallet: 'GenericSolanaWallet',\n} as const;\n\nexport type Wallets = Values<typeof Wallets>;\n\n/**\n * Supported behaviors for positioning Google One Tap. The actual behavior\n * depends on browser support and Google's One Tap implementation.\n */\n\nexport const OneTapPositions = {\n /**\n * Display Google One Tap using a native browser prompt if available, or\n * embedded in the existing SDK login form otherwise.\n * @deprecated This option has been renamed to `floatingOrEmbedded`\n */\n embedded: 'embedded',\n /**\n * Display the One Tap prompt using a native browser prompt if available, or\n * in the top right corner otherwise. This is the default option.\n */\n floating: 'floating',\n /**\n * Display the One Tap prompt embedded in the existing SDK login form if a\n * native browser prompt is not available, or not at all otherwise. This\n * option is not recommended for new applications.\n */\n embeddedOnly: 'embeddedOnly',\n /**\n * Display the One Tap prompt using a native browser prompt if available, or\n * embedded in the existing SDK login form otherwise.\n */\n floatingOrEmbedded: 'floatingOrEmbedded',\n /**\n * Attempt to display the One Tap prompt embedded in the existing SDK login\n * form, even if a native browser prompt is supported. This option is not\n * recommended. It disables native browser FedCM support even where it is\n * available, and will stop being honored by Google in the future.\n */\n forceLegacyEmbedded: 'forceLegacyEmbedded',\n} as const;\n\nexport type OneTapPositions = Values<typeof OneTapPositions>;\n\nexport type ProviderOptions = {\n type: OAuthProviders;\n one_tap?: boolean;\n position?: OneTapPositions;\n /**\n * Whether to cancel the One Tap prompt when the user taps outside of it.\n * This is only applicable if one_tap is true.\n */\n cancel_on_tap_outside?: boolean;\n custom_scopes?: string[];\n provider_params?: Record<string, string>;\n};\n\n/**\n * An array of OAuth providers you wish to use. Each Provider is an object with a type key that\n * determines the type of provider. Each Provider accepts an optional custom_scopes array of\n * scopes that Stytch will request for your application in addition to the base set of scopes\n * required for login. The order of the providers in the array determines the order of the\n * rendered buttons.\n */\nexport type ProvidersOptions = ProviderOptions[];\n\n/**\n * The options for oAuth. This is required if you've enabled the `oauth` product\n * in your configuration.\n */\n\nexport type OAuthOptions = {\n loginRedirectURL?: string;\n signupRedirectURL?: string;\n providers: ProvidersOptions;\n};\n\n/**\n * The methods array allows you to specify the authentication methods that you would like to expose\n * to your users. The order of the products that you include here will also be the order in which\n * they appear in the login form, with the first product specified appearing at the top of the login\n * form. We currently support passcodes on `email`, `sms` and `whatsapp`\n */\n\nexport const OTPMethods = {\n SMS: 'sms',\n WhatsApp: 'whatsapp',\n Email: 'email',\n} as const;\n\nexport type OTPMethods = Values<typeof OTPMethods>;\n\n/**\n * The options for One Time Passcodes. This is required if you've enabled the `otp` product\n * in your configuration.\n */\n\nexport type OtpOptions = {\n methods: OTPMethods[];\n expirationMinutes: number;\n loginTemplateId?: string;\n signupTemplateId?: string;\n locale?: string;\n};\n\n/**\n * The options for passwords. This is used if you've enabled the `passwords` product\n * in your configuration.\n */\n\nexport type PasswordOptions = {\n loginRedirectURL?: string;\n loginExpirationMinutes?: number;\n resetPasswordRedirectURL?: string;\n resetPasswordExpirationMinutes?: number;\n resetPasswordTemplateId?: string;\n locale?: string;\n};\n\n/**\n * The options for Session Management. If you are using the UI components,\n * we also create a session for users when they log in.\n */\n\nexport type SessionOptions = {\n sessionDurationMinutes: number;\n};\n\nexport type PasskeyOptions = {\n /**\n * Sets the domain option for both webauthn registration and authentication.\n * @default window.location.hostname\n */\n domain?: string;\n};\n\nexport type StringsOptions = {\n /**\n * Specify custom strings to be used in the prebuilt UI. Consult the message\n * catalog (`messages/en.po` or `messages/b2b/en.po`) for the list of\n * available strings. Each value should be specified using ICU MessageFormat.\n *\n * Strings that are not defined will use the default English value as a\n * fallback.\n */\n strings?: Record<string, string>;\n};\n\n/**\n * The style configuration allows you to customize the look of the SDK. You can specify some of\n * them or none at all.\n */\nexport type StyleConfig = DeepPartial<{\n /**\n * The configuration object for the Stytch UI container.\n */\n container: {\n /**\n * The background color of the SDK container.\n */\n backgroundColor: string;\n /**\n * The border color of the SDK container.\n */\n borderColor: string;\n /**\n * The border radius of the SDK container.\n */\n borderRadius: string;\n /**\n * The width of the SDK container.\n */\n width: string;\n };\n\n /**\n * The configuration object for colors used in the Stytch UI.\n */\n colors: {\n /**\n * Your primary brand color. This will be applied to most of the text in the SDK.\n */\n primary: string;\n /**\n * Your secondary brand color. This will be applied to text disclaimers and other visual elements.\n */\n secondary: string;\n /**\n * Your accent brand color. This will be applied to backgrounds of messages to draw user's attention.\n * This should have strong contrast with the primary text color for accessibility.\n */\n accent: string;\n /**\n * A success color to be used in visual elements.\n */\n success: string;\n /**\n * A warning color to be used in visual elements.\n */\n warning: string;\n /**\n * An error color to be used in visual elements.\n */\n error: string;\n };\n\n /**\n * The configuration object for buttons in the Stytch UI components.\n */\n buttons: {\n /**\n * The configuration object for primary buttons. These buttons are used in primary actions\n * including magic links, one-time passcodes and passwords products.\n */\n primary: {\n /**\n * The background color of the primary button.\n */\n backgroundColor: string;\n /**\n * The text color of the primary button.\n */\n textColor: string;\n /**\n * The border color of the primary button.\n */\n borderColor: string;\n /**\n * The border radius of the primary button.\n */\n borderRadius: string;\n };\n\n /**\n * The configuration object for secondary buttons.\n */\n secondary: {\n /**\n * The background color of the secondary button. These buttons are used in secondary actions\n * including but not limited OAuth and crypto wallets.\n */\n backgroundColor: string;\n /**\n * The text color of the secondary button.\n */\n textColor: string;\n /**\n * The border color of the secondary button.\n */\n borderColor: string;\n /**\n * The border radius of the secondary button.\n */\n borderRadius: string;\n };\n\n /**\n * The configuration object for disabled buttons.\n */\n disabled: {\n /**\n * The background color of the disabled button.\n */\n backgroundColor: string;\n /**\n * The text color of the disabled button.\n */\n textColor: string;\n /**\n * The border color of the disabled button.\n */\n borderColor: string;\n /**\n * The border radius of the disabled button.\n */\n borderRadius: string;\n };\n };\n\n /**\n * The configuration object for text inputs in the Stytch UI components.\n */\n inputs: {\n /**\n * The background color of the text inputs.\n */\n backgroundColor: string;\n /**\n * The text color of the text inputs.\n */\n textColor: string;\n /**\n * The color of the placeholder text in the text inputs.\n */\n placeholderColor: string;\n /**\n * The border color of the text inputs.\n */\n borderColor: string;\n /**\n * The border radius of the text inputs.\n */\n borderRadius: string;\n };\n\n /**\n * The font family that will apply to all text in the SDK.\n */\n fontFamily: string;\n\n /**\n * When this value is false, the title and description text will not show in the SDK.\n */\n hideHeaderText: boolean;\n\n /**\n * The configuration object for your custom logo.\n */\n logo: {\n /**\n * The URL of your custom logo.\n */\n logoImageUrl: string;\n };\n}>;\n\nexport type IDPConsentItem =\n | string\n | {\n /**\n * A one liner description of access being requested\n * @example\n * 'View content and info about you'\n */\n text: string;\n /**\n * A detailed list of access being requested for a line item\n * Each item in the array will be displayed as a separate bullet point\n * @example\n * [\n * 'View content you have added to the platform, including videos and comments',\n * 'View information shared on the platform, including your name, and email'\n * ]\n */\n details?: string[];\n };\n\nexport type IDPConsentSection = {\n /**\n * A top-level header for a section of the consent screen\n * @example\n * '$Application is requesting to edit'\n */\n header: string;\n /**\n * A collection of {@link IDPConsentItem} rows to render with the supplied header\n */\n items: IDPConsentItem[];\n};\n\n/**\n * An IDP Consent Screen Manifest defines the text to be shown to the end user during\n * a consent flow. Manifests can be used to customize grouping of access controls.\n * For example, an application can choose to group access controls by action being performed,\n * by resource being accessed, or by something else entirely.\n * @example\n * // A simple list will be rendered as a list of bullet points\n * [\n * { text: 'Content and info about you' },\n * { text: 'Content and info about your workspace' },\n * { text: 'Create and delete new items in your workspace' },\n * ]\n * @example\n * // Items can have nested details\n * [\n * {\n * text: 'Content and info about you'\n * details: [\n * 'View content you have added to the platform, including videos and comments',\n * 'View information shared on the platform, including your name, and email'\n * ]\n * }\n * ]\n * @example\n * // Items can be grouped with headers\n * [\n * {\n * header: '$Application is requesting to view:',\n * items: [\n * { text: 'Content and info about you' },\n * { text: 'Content and info about your workspace' },\n * ]\n * },\n * {\n * header: '$Application is requesting to edit:',\n * items: [\n * { text: 'Your workspace items' }\n * ]\n * }\n * ]\n */\nexport type IDPConsentScreenManifest = IDPConsentSection[] | IDPConsentItem[];\n\nexport enum StytchEventType {\n MagicLinkLoginOrCreateEvent = 'MAGIC_LINK_LOGIN_OR_CREATE',\n OTPsLoginOrCreateEvent = 'OTP_LOGIN_OR_CREATE',\n OTPsAuthenticate = 'OTP_AUTHENTICATE',\n CryptoWalletAuthenticateStart = 'CRYPTO_WALLET_AUTHENTICATE_START',\n CryptoWalletAuthenticate = 'CRYPTO_WALLET_AUTHENTICATE',\n PasswordCreate = 'PASSWORD_CREATE',\n PasswordAuthenticate = 'PASSWORD_AUTHENTICATE',\n PasswordResetByEmailStart = 'PASSWORD_RESET_BY_EMAIL_START',\n PasswordResetByEmail = 'PASSWORD_RESET_BY_EMAIL',\n PasskeyRegister = 'PASSKEY_REGISTER',\n PasskeyAuthenticate = 'PASSKEY_AUTHENTICATE',\n PasskeySkip = 'PASSKEY_SKIP',\n PasskeyDone = 'PASSKEY_DONE',\n /**\n * The authentication UI flow has completed successfully, including any steps\n * that take place after obtaining a valid session (such as saving recovery\n * codes).\n */\n AuthenticateFlowComplete = 'AUTHENTICATE_FLOW_COMPLETE',\n /**\n * An OAuth Authorization flow has been initiated by a Connected Application.\n * The end-user may be prompted for consent to continue depending on the application\n * that is requesting access.\n */\n OAuthAuthorizeFlowStart = 'OAUTH_AUTHORIZE_FLOW_START',\n /**\n * The end-user has completed the Authorization flow and is about to be redirected\n * back to the Connected Application\n */\n OAuthAuthorizeFlowComplete = 'OAUTH_AUTHORIZE_FLOW_COMPLETE',\n /**\n * The end-user has denied the Authorization flow and is about to be redirected\n * back to the Connected Application with an error message\n */\n OAuthAuthorizeFlowConsentDenied = 'OAUTH_AUTHORIZE_FLOW_CONSENT_DENIED',\n // More Events will go here ...\n // B2B Events\n B2BMagicLinkEmailLoginOrSignup = 'B2B_MAGIC_LINK_EMAIL_LOGIN_OR_SIGNUP',\n B2BMagicLinkAuthenticate = 'B2B_MAGIC_LINK_AUTHENTICATE',\n B2BMagicLinkEmailDiscoverySend = 'B2B_MAGIC_LINK_EMAIL_DISCOVERY_SEND',\n B2BMagicLinkDiscoveryAuthenticate = 'B2B_MAGIC_LINK_DISCOVERY_AUTHENTICATE',\n B2BSSOStart = 'B2B_SSO_START',\n B2BSSOAuthenticate = 'B2B_SSO_AUTHENTICATE',\n B2BSSODiscoverConnections = 'B2B_SSO_DISCOVER_CONNECTIONS',\n B2BOAuthAuthenticate = 'B2B_OAUTH_AUTHENTICATE',\n B2BOAuthDiscoveryAuthenticate = 'B2B_OAUTH_DISCOVERY_AUTHENTICATE',\n B2BDiscoveryOrganizationsCreate = 'B2B_DISCOVERY_ORGANIZATIONS_CREATE',\n B2BDiscoveryIntermediateSessionExchange = 'B2B_DISCOVERY_INTERMEDIATE_SESSION_EXCHANGE',\n B2BPasswordAuthenticate = 'B2B_PASSWORD_AUTHENTICATE',\n B2BPasswordDiscoveryAuthenticate = 'B2B_PASSWORD_DISCOVERY_AUTHENTICATE',\n B2BPasswordResetByEmailStart = 'B2B_PASSWORD_RESET_BY_EMAIL_START',\n B2BPasswordResetByEmail = 'B2B_PASSWORD_RESET_BY_EMAIL',\n B2BPasswordResetBySession = 'B2B_PASSWORD_RESET_BY_SESSION',\n B2BSMSOTPSend = 'B2B_SMS_OTP_SEND',\n B2BSMSOTPAuthenticate = 'B2B_SMS_OTP_AUTHENTICATE',\n B2BTOTPCreate = 'B2B_TOTP_CREATE',\n B2BTOTPAuthenticate = 'B2B_TOTP_AUTHENTICATE',\n B2BRecoveryCodesRecover = 'B2B_RECOVERY_CODES_RECOVER',\n B2BPasswordDiscoveryResetStart = 'B2B_PASSWORD_DISCOVERY_RESET_BY_EMAIL_START',\n B2BDiscoveryPasswordReset = 'B2B_PASSWORD_DISCOVERY_RESET_BY_EMAIL',\n B2BImpersonationAuthenticate = 'B2B_IMPERSONATION_AUTHENTICATE',\n B2BOTPsEmailAuthenticate = 'B2B_OTPS_EMAIL_AUTHENTICATE',\n B2BOTPsEmailDiscoveryAuthenticate = 'B2B_OTPS_EMAIL_DISCOVERY_AUTHENTICATE',\n B2BOTPsEmailDiscoverySend = 'B2B_OTPS_EMAIL_DISCOVERY_SEND',\n B2BOTPsEmailLoginOrSignup = 'B2B_OTPS_EMAIL_LOGIN_OR_SIGNUP',\n B2BOrganizationsGetBySlug = 'B2B_ORGANIZATIONS_GET_BY_SLUG',\n}\n\ntype StytchEventMap<TProjectConfiguration extends StytchProjectConfigurationInput> = {\n [StytchEventType.MagicLinkLoginOrCreateEvent]: MagicLinksLoginOrCreateResponse & { email: string };\n [StytchEventType.OTPsLoginOrCreateEvent]: OTPsLoginOrCreateResponse;\n [StytchEventType.OTPsAuthenticate]: OTPsAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.CryptoWalletAuthenticateStart]: CryptoWalletAuthenticateStartResponse;\n [StytchEventType.CryptoWalletAuthenticate]: CryptoWalletAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.PasswordCreate]: PasswordCreateResponse<TProjectConfiguration>;\n [StytchEventType.PasswordAuthenticate]: PasswordAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BPasswordDiscoveryAuthenticate]: B2BPasswordDiscoveryAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.PasswordResetByEmailStart]: PasswordResetByEmailStartResponse;\n [StytchEventType.PasswordResetByEmail]: PasswordResetByEmailResponse<TProjectConfiguration>;\n [StytchEventType.AuthenticateFlowComplete]: Record<string, never>;\n [StytchEventType.B2BMagicLinkEmailLoginOrSignup]: B2BMagicLinkLoginOrSignupResponse & { email: string };\n [StytchEventType.B2BMagicLinkAuthenticate]: B2BMagicLinksAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BMagicLinkEmailDiscoverySend]: B2BMagicLinksEmailDiscoverySendResponse;\n [StytchEventType.B2BMagicLinkDiscoveryAuthenticate]: B2BMagicLinksDiscoveryAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BSSOStart]: Record<string, never>;\n [StytchEventType.B2BSSOAuthenticate]: SSOAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BSSODiscoverConnections]: B2BSSODiscoverConnectionsResponse;\n [StytchEventType.B2BDiscoveryOrganizationsCreate]: B2BDiscoveryOrganizationsCreateResponse<TProjectConfiguration>;\n [StytchEventType.B2BPasswordAuthenticate]: B2BPasswordAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BPasswordResetByEmailStart]: B2BPasswordResetByEmailStartResponse;\n [StytchEventType.B2BPasswordResetByEmail]: B2BPasswordResetByEmailResponse<TProjectConfiguration>;\n [StytchEventType.B2BPasswordResetBySession]: B2BPasswordResetBySessionResponse<TProjectConfiguration>;\n [StytchEventType.B2BDiscoveryIntermediateSessionExchange]: B2BDiscoveryIntermediateSessionsExchangeResponse<TProjectConfiguration>;\n [StytchEventType.B2BOAuthAuthenticate]: B2BOAuthAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BOAuthDiscoveryAuthenticate]: B2BOAuthDiscoveryAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.PasskeySkip]: Record<string, never>;\n [StytchEventType.PasskeyDone]: Record<string, never>;\n [StytchEventType.PasskeyRegister]: WebAuthnRegisterResponse<TProjectConfiguration>;\n [StytchEventType.PasskeyAuthenticate]: WebAuthnAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BSMSOTPSend]: B2BSMSSendResponse;\n [StytchEventType.B2BSMSOTPAuthenticate]: B2BSMSAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BTOTPCreate]: B2BTOTPCreateResponse;\n [StytchEventType.B2BTOTPAuthenticate]: B2BTOTPAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BRecoveryCodesRecover]: RecoveryCodeRecoverResponse<TProjectConfiguration>;\n [StytchEventType.B2BDiscoveryPasswordReset]: B2BPasswordDiscoveryResetByEmailResponse<TProjectConfiguration>;\n [StytchEventType.B2BPasswordDiscoveryResetStart]: B2BPasswordDiscoveryResetByEmailStartResponse;\n [StytchEventType.B2BImpersonationAuthenticate]: B2BImpersonationAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BOTPsEmailDiscoverySend]: B2BDiscoveryOTPEmailSendResponse;\n [StytchEventType.B2BOTPsEmailAuthenticate]: B2BOTPsEmailAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BOTPsEmailDiscoveryAuthenticate]: B2BDiscoveryOTPEmailAuthenticateResponse<TProjectConfiguration>;\n [StytchEventType.B2BOTPsEmailLoginOrSignup]: B2BOTPsEmailLoginOrSignupResponse;\n [StytchEventType.B2BOrganizationsGetBySlug]: B2BOrganizationsGetBySlugResponse;\n [StytchEventType.OAuthAuthorizeFlowStart]: { client_id: string; redirect_uri: string; scope: string };\n [StytchEventType.OAuthAuthorizeFlowComplete]: Record<string, never>;\n [StytchEventType.OAuthAuthorizeFlowConsentDenied]: Record<string, never>;\n // More Events will go here ...\n};\n\nexport type StytchEvent<\n TProjectConfiguration extends StytchProjectConfigurationInput = Stytch.DefaultProjectConfiguration,\n> = {\n [K in StytchEventType]: { type: K; data: StytchEventMap<TProjectConfiguration>[K] };\n}[keyof StytchEventMap<TProjectConfiguration>];\n\n/**\n * Optional callbacks that are triggered by various events in the SDK. See more details about the callbacks\n * {@link https://stytch.com/docs/sdks/javascript-sdk#resources_ui-callbacks here}.\n */\nexport type Callbacks<\n TProjectConfiguration extends StytchProjectConfigurationInput = Stytch.DefaultProjectConfiguration,\n> = {\n /**\n * A callback function that responds to errors in the SDK. It is useful for debugging during development\n * and error handling in production.\n *\n * @param error - the error from the SDK with an additional error message\n */\n onError?(error: StytchSDKUIError): void;\n /**\n * A callback function that responds to events sent from the SDK. For the full list of events see the\n * {@link StytchEvent StytchEvent}\n *\n * @param event - the event fired by the SDK\n */\n onEvent?(event: StytchEvent<TProjectConfiguration>): void;\n};\n\nexport type OneTapStyleConfig = {\n position?: OneTapPositions;\n};\n\nexport enum RNUIProducts {\n emailMagicLinks,\n oauth,\n otp,\n passwords,\n}\n\nexport type RNUIEmailMagicLinksOptions = {\n loginExpirationMinutes?: number;\n signupExpirationMinutes?: number;\n loginTemplateId?: string;\n signupTemplateId?: string;\n locale?: string;\n};\n\nexport type RNUIOAuthOptions = {\n providers: OAuthProviders[] | ProvidersOptions;\n /** @deprecated Use custom_scopes in ProvidersOptions instead */\n customScopes?: string[];\n /** @deprecated Use provider_params in ProvidersOptions instead */\n providerParams?: Record<string, string>;\n};\n\nexport type RNUIOTPOptions = {\n methods: OTPMethods[];\n expirationMinutes: number;\n loginTemplateId?: string;\n signupTemplateId?: string;\n locale?: string;\n};\n\nexport type RNUIPasswordOptions = {\n loginExpirationMinutes?: number;\n resetPasswordExpirationMinutes?: number;\n resetPasswordTemplateId?: string;\n locale?: string;\n};\n\nexport type RNUIProductConfig = {\n products: RNUIProducts[];\n emailMagicLinksOptions: RNUIEmailMagicLinksOptions;\n oAuthOptions: RNUIOAuthOptions;\n otpOptions: RNUIOTPOptions;\n sessionOptions: SessionOptions;\n passwordOptions: RNUIPasswordOptions;\n};\n","import { Values } from '../../utils';\n\n/**\n * The authentication methods we support through our UI.\n * Currently we support `emailMagicLinks`, `emailOtp`, `sso`, `passwords`, and `oauth`.\n */\n\nexport const AuthFlowType = {\n Discovery: 'Discovery',\n Organization: 'Organization',\n PasswordReset: 'PasswordReset',\n} as const;\n\nexport type AuthFlowType = Values<typeof AuthFlowType>;\n\nexport const RedirectURLType = {\n ResetPassword: 'reset_password',\n} as const;\n\nexport type RedirectURLType = Values<typeof RedirectURLType>;\n\n/**\n * The OAuth providers we support in our B2B OAuth product.\n */\nexport const B2BOAuthProviders = {\n Google: 'google',\n Microsoft: 'microsoft',\n HubSpot: 'hubspot',\n Slack: 'slack',\n GitHub: 'github',\n} as const;\nexport type B2BOAuthProviders = Values<typeof B2BOAuthProviders>;\n\n/**\n * The options for email magic links. This is used if you've enabled the `emailMagicLinks` product\n * in your configuration.\n */\n\nexport type B2BEmailMagicLinksOptions = {\n loginRedirectURL?: string;\n signupRedirectURL?: string;\n discoveryRedirectURL?: string;\n loginTemplateId?: string;\n signupTemplateId?: string;\n /**\n * @param domainHint - An optional hint indicating what domain the email will be sent from.\n * This field is only required if your project uses more than one custom domain to send emails.\n */\n domainHint?: string;\n locale?: string;\n};\n\n/**\n * The options for SSO. This is used if you've enabled the `sso` product\n * in your configuration.\n */\n\nexport type B2BSSOOptions = {\n loginRedirectURL?: string;\n signupRedirectURL?: string;\n};\n\n/**\n * The options for OAuth. This is required if you've enabled the `oauth` product\n * in your configuration.\n */\n\nexport type B2BOAuthOptions = {\n loginRedirectURL?: string;\n signupRedirectURL?: string;\n discoveryRedirectURL?: string;\n /** @deprecated Use customScopes in B2BOAuthProviderConfig instead */\n customScopes?: string[];\n providers: B2BOAuthProviderConfig[];\n /** @deprecated Use providerParams in B2BOAuthProviderConfig instead */\n providerParams?: Record<string, string>;\n locale?: string;\n};\n\n/**\n * Details about the OAuth provider you wish to use. Each B2BOAuthProviderConfig object can be either a plain\n * B2BOAuthProviders string (e.g. 'google'), or an object with a type key that determines the type of provider. For\n * Google OAuth, you can optionally specify the one_tap property to display Google One Tap.\n */\nexport type B2BOAuthProviderConfig =\n | B2BOAuthProviders\n | {\n type: typeof B2BOAuthProviders.Google;\n customScopes?: string[];\n providerParams?: Record<string, string>;\n\n one_tap: boolean;\n /**\n * Whether to cancel the One Tap prompt when the user taps outside of it.\n * This is only applicable if one_tap is true.\n */\n cancel_on_tap_outside?: boolean;\n }\n | {\n type: Exclude<B2BOAuthProviders, typeof B2BOAuthProviders.Google>;\n customScopes?: string[];\n providerParams?: Record<string, string>;\n };\n\n/**\n * The options for Passwords. This is used if you've enabled the `passwords` product\n * in your configuration.\n */\n\nexport type B2BPasswordOptions = {\n loginRedirectURL?: string;\n resetPasswordRedirectURL?: string;\n resetPasswordExpirationMinutes?: number;\n resetPasswordTemplateId?: string;\n discoveryRedirectURL?: string;\n verifyEmailTemplateId?: string;\n locale?: string;\n};\n\nexport type B2BEmailOTPOptions = {\n loginTemplateId?: string;\n signupTemplateId?: string;\n locale?: string;\n};\n\nexport type B2BSMSOTPOptions = {\n locale?: string;\n};\n\nexport type DirectLoginForSingleMembershipConfig = {\n /**\n * Whether or not direct login for single membership is enabled.\n */\n status: boolean;\n /**\n * If enabled, logs user in directly even if they have pending invite to a different organization\n */\n ignoreInvites: boolean;\n /**\n * If enabled, logs user in directly even if they have organizations they could join via JIT provisioning\n */\n ignoreJitProvisioning: boolean;\n};\n\nexport const B2BMFAProducts = {\n smsOtp: 'smsOtp',\n totp: 'totp',\n} as const;\nexport type B2BMFAProducts = Values<typeof B2BMFAProducts>;\n","import { AnalyticsEvent } from './Events';\nimport { ResponseCommon, StytchAPIUnreachableError, StytchAPIError, StytchAPISchemaError } from './public';\n\ntype SDKRequestMethodAndBody =\n | {\n method: 'GET' | 'DELETE';\n body?: null;\n }\n | {\n method: 'POST' | 'PUT';\n body?: Record<string, unknown>;\n };\n\nexport type SDKRequestInfo = SDKRequestMethodAndBody & {\n url: string;\n additionalMetadata?: Record<string, string>;\n};\n\nexport interface SDKTelemetry {\n event_id: string;\n app_session_id: string;\n persistent_id: string;\n client_sent_at: string;\n timezone: string;\n\n // Logged in user data\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\n // Versioning\n app: {\n identifier: string;\n version?: string;\n };\n os?: {\n identifier?: string;\n version?: string;\n };\n device?: {\n model?: string;\n screen_size?: string;\n };\n sdk: {\n identifier: string;\n version: string;\n };\n}\n\nexport type AdditionalTelemetryData =\n | { stytch_user_id?: string; stytch_session_id?: string }\n | { stytch_member_id?: string; stytch_member_session_id?: string };\n\nexport interface INetworkClient {\n createTelemetryBlob(additionalMetadata?: SDKRequestInfo['additionalMetadata']): SDKTelemetry;\n\n fetchSDK: <T extends ResponseCommon>(info: SDKRequestInfo) => Promise<T>;\n\n retriableFetchSDK: <T extends ResponseCommon>(info: RetriableSDKRequestInfo) => Promise<T>;\n\n logEvent<E extends AnalyticsEvent>({\n name,\n details,\n error,\n }: {\n name: E['name'];\n details: E['details'];\n error?: { error_code?: string; error_description?: string; http_status_code?: string };\n }): void;\n\n // @deprecated Use the new sessions.updateSession() method instead\n updateSessionToken: (sessionToken: string | null) => void;\n}\n\nexport type RetriableSDKRequestInfo = SDKRequestInfo & {\n retryCallback: (e: RetriableError, info: SDKBaseRequestInfo) => Promise<SDKBaseRequestInfo>;\n};\n\nexport type RetriableSDKBaseRequestInfo = SDKBaseRequestInfo & {\n retryCallback: (e: RetriableError, info: SDKBaseRequestInfo) => Promise<SDKBaseRequestInfo>;\n};\n\nexport enum RetriableErrorType {\n RequiredCaptcha = 'CAPTCHA required',\n}\n\nexport class RetriableError extends Error {\n type: RetriableErrorType;\n\n constructor(type: RetriableErrorType) {\n super(type);\n this.type = type;\n }\n}\n\nexport async function retriableFetchSDK<T extends ResponseCommon>({\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n retryCallback,\n}: RetriableSDKBaseRequestInfo): Promise<T> {\n let req: SDKBaseRequestInfo = {\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n };\n\n try {\n return await baseFetchSDK<T>(req);\n } catch (err) {\n if (err instanceof RetriableError) {\n req = await retryCallback(err, req);\n return await baseFetchSDK<T>(req);\n }\n throw err;\n }\n}\n\nexport type SDKBaseRequestInfo = {\n basicAuthHeader: string;\n xSDKClientHeader: string;\n xSDKParentHostHeader?: string;\n body: SDKRequestInfo['body'];\n method: SDKRequestInfo['method'];\n finalURL: string;\n};\n\nexport async function baseFetchSDK<T extends ResponseCommon>({\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n}: SDKBaseRequestInfo): Promise<T> {\n const headers: Record<string, string> = {\n Authorization: basicAuthHeader,\n 'Content-Type': 'application/json',\n 'X-SDK-Client': xSDKClientHeader,\n };\n\n if (xSDKParentHostHeader) {\n headers['X-SDK-Parent-Host'] = xSDKParentHostHeader;\n }\n\n const fetchOpts: RequestInit = {\n method,\n headers,\n body: body && JSON.stringify(body),\n credentials: 'include',\n };\n\n let resp;\n try {\n resp = await fetch(finalURL, fetchOpts);\n /* eslint-disable @typescript-eslint/no-explicit-any */\n } catch (e: any) {\n if (e.message === 'Failed to fetch') {\n throw new StytchAPIUnreachableError('Unable to contact our servers.');\n }\n throw e;\n }\n\n // We only return 200 from WB endpoints, but just in case let's accept all 2xx errors\n if (resp.status <= 299) {\n try {\n const respData = await resp.json();\n return respData.data;\n } catch {\n throw new StytchAPIUnreachableError('Invalid JSON response from our servers.');\n }\n }\n\n // 99% of errors will be well-formed JSON errors with an appropriate content-type set\n if (resp.status !== 200 && resp.headers.get('content-type')?.includes('application/json')) {\n let respError;\n try {\n respError = await resp.json();\n } catch {\n // Error was not JSON- but the content type said it was! This means the server lied to us, which it should never do...\n throw new StytchAPIUnreachableError('Invalid or no response from server');\n }\n // If this looks like a JSONSchema validation error, it probably means the caller isn't using\n // typescript and gave us a bad type.\n if ('body' in respError || 'params' in respError || 'query' in respError) {\n throw new StytchAPISchemaError(respError);\n }\n throw new StytchAPIError(respError);\n }\n\n // Finally handle the other 1% of errors (Captcha errors, network errors, 503s, etc.)\n let respData;\n try {\n respData = await resp.text();\n } catch {\n throw new StytchAPIUnreachableError('Invalid response from our servers.');\n }\n if (respData.includes('Captcha required')) {\n throw new RetriableError(RetriableErrorType.RequiredCaptcha);\n }\n throw new StytchAPIUnreachableError('Invalid response from our servers.');\n}\n\nexport async function baseSubmitFormSDK({\n method,\n finalURL,\n basicAuthHeader,\n xSDKClientHeader,\n xSDKParentHostHeader,\n body,\n}: SDKBaseRequestInfo): Promise<void> {\n const bodyParams = (body || {}) as Record<string, string>;\n const finalBody: Record<string, string> = {\n ...bodyParams,\n __Authorization: basicAuthHeader,\n '__X-SDK-Client': xSDKClientHeader,\n };\n\n if (xSDKParentHostHeader) {\n finalBody['__X-SDK-Parent-Host'] = xSDKParentHostHeader;\n }\n\n const children: HTMLInputElement[] = Object.entries(finalBody).map(([key, value]) => {\n const input = document.createElement('input');\n input.type = 'hidden';\n input.name = key;\n input.value = value;\n return input;\n });\n\n const form = document.createElement('form');\n form.method = method;\n form.action = finalURL;\n form.append(...children);\n\n document.body.appendChild(form);\n form.submit();\n}\n","// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nvar getRandomValues;\nvar rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation. Also,\n // find the complete implementation of crypto (msCrypto) on IE11.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","export default /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;","import REGEX from './regex.js';\n\nfunction validate(uuid) {\n return typeof uuid === 'string' && REGEX.test(uuid);\n}\n\nexport default validate;","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nvar byteToHex = [];\n\nfor (var i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).substr(1));\n}\n\nfunction stringify(arr) {\n var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","import rng from './rng.js';\nimport stringify from './stringify.js';\n\nfunction v4(options, buf, offset) {\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (var i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return stringify(rnds);\n}\n\nexport default v4;","const ModulePromiseCache: Record<string, Promise<unknown>> = {};\n\nexport const __clearcache = () => Object.keys(ModulePromiseCache).forEach((key) => delete ModulePromiseCache[key]);\n\nexport async function loadESModule<T>(url: string, moduleFromGlobalScope: () => T): Promise<T> {\n if (ModulePromiseCache[url] !== undefined) {\n return ModulePromiseCache[url] as Promise<T>;\n }\n\n ModulePromiseCache[url] = loadESModuleFromNetwork(url, moduleFromGlobalScope);\n return ModulePromiseCache[url] as Promise<T>;\n}\n\nfunction loadESModuleFromNetwork<T>(url: string, moduleFromGlobalScope: () => T): Promise<T> {\n return new Promise((resolve, reject) => {\n const maybeScript = findScript(url);\n if (maybeScript && maybeScript.dataset.loaded === 'true') {\n try {\n resolve(moduleFromGlobalScope());\n } catch (err) {\n return reject(new Error(`${url} already loaded, but module was not found in global scope: ${err}`));\n }\n }\n\n const script = createScript(url);\n\n script.addEventListener('load', () => {\n script.dataset.loaded = 'true';\n try {\n resolve(moduleFromGlobalScope());\n } catch (err) {\n reject(new Error(`${url} was loaded, but module was not found in global scope: ${err}`));\n }\n });\n\n script.addEventListener('error', (err) => {\n reject(new Error(`${url} could not be loaded: ${err}`));\n });\n });\n}\n\nconst findScriptsInDom = (url: string) => document.querySelectorAll<HTMLScriptElement>(`script[src=\"${url}\"]`);\n\nfunction findScript(url: string): HTMLScriptElement | undefined {\n const scripts = findScriptsInDom(url);\n if (scripts[0]) {\n return scripts[0];\n }\n}\n\nfunction createScript(url: string): HTMLScriptElement {\n const script = document.createElement('script');\n script.setAttribute('src', url);\n script.setAttribute('async', 'true');\n script.setAttribute('defer', 'true');\n document.head.appendChild(script);\n return script;\n}\n","export const getHttpsUrl = (urlOrDomain: string) => {\n // If it's already a valid URL, extract the domain\n try {\n const url = new URL(urlOrDomain);\n return `https://${url.hostname}`;\n } catch {\n // invalid URLs are OK\n }\n\n // Prepend a scheme and verify it's a valid URL\n try {\n const url = new URL(`https://${urlOrDomain}`);\n return `https://${url.hostname}`;\n } catch {\n // Invalid URL, fallback to undefined\n }\n\n // Input was neither a valid URL nor a valid domain\n return undefined;\n};\n","/**\n * A set of tokens to stylize the console.log output\n * First token is the raw text. %c is a placeholder for string formatting\n * Second token starts our stylizing - adding custom color and background\n * Third token resets stylizing to baseline before showing the rest of the content.\n */\nconst STYTCH_BADGE =\n process.env.NODE_ENV === 'production'\n ? ['[Stytch]']\n : ['%c[Stytch]%c', 'background: #19303d; color: #13E5C0; padding: 2px;border-radius: 4px', ''];\n\n// Turn this to true to enable debug logs\n// TODO: Make this an env var\nconst DEBUG = false;\n\n/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * An ultralightweight wrapper around console.log.\n * In the future, the logger might be passed in from the customer,\n * or the level might be configurable.\n */\nexport const logger = {\n debug: (...args: any[]) => DEBUG && console.log(...STYTCH_BADGE, ...args),\n log: (...args: any[]) => console.log(...STYTCH_BADGE, ...args),\n warn: (...args: any[]) => console.warn(...STYTCH_BADGE, ...args),\n error: (...args: any[]) => console.error(...STYTCH_BADGE, ...args),\n};\n\n/* eslint-enable @typescript-eslint/no-explicit-any */\n/* eslint-enable no-console */\n","import { LIVE_API_URL, TEST_API_URL } from '../constants';\nimport { InternalStytchClientOptions } from '../types';\nimport { getHttpsUrl } from './getHttpsUrl';\nimport { logger } from './logger';\n\nexport const getLiveApiURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.customBaseUrl ?? opts?.endpointOptions?.apiDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.customBaseUrl ? 'customBaseUrl' : 'apiDomain';\n logger.warn(`Unable to use custom API domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return opts?.endpoints?.liveAPIURL ?? LIVE_API_URL;\n};\n\nexport const getTestApiURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.customBaseUrl ?? opts?.endpointOptions?.testApiDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.customBaseUrl ? 'customBaseUrl' : 'testApiDomain';\n logger.warn(`Unable to use custom API domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return opts?.endpoints?.testAPIURL ?? TEST_API_URL;\n};\n","import { logger } from './logger';\n\nconst trailer = `\nYou can find your public token at https://stytch.com/dashboard/api-keys.`;\nexport const checkPublicToken = (publicToken: unknown) => {\n if (typeof publicToken !== 'string') {\n logger.warn(`Public token is malformed. Expected a string, got ${typeof publicToken}.${trailer}`);\n } else if (publicToken === '') {\n logger.warn(`Public token is malformed. Expected \"public-token-...\", got an empty string.${trailer}`);\n } else if (!publicToken.startsWith('public-token-')) {\n logger.warn(`Public token is malformed. Expected \"public-token-...\", got ${publicToken}.${trailer}`);\n }\n};\n\nexport const checkNotSSR = () => {\n if (typeof window === 'undefined') {\n throw new Error(\n `\\`new StytchClient()\\` is not supported in server environments. If using @stytch/react or @stytch/nextjs, use \\`createStytchClient()\\` instead.`,\n );\n }\n};\n\nexport const checkB2BNotSSR = () => {\n if (typeof window === 'undefined') {\n throw new Error(\n `\\`new StytchB2BClient()\\` is not supported in server environments. If using @stytch/react or @stytch/nextjs, use \\`createStytchB2BClient()\\` instead.`,\n );\n }\n};\n","import { STYTCH_DFP_BACKEND_URL, STYTCH_DFP_CDN_URL } from '../constants';\nimport { InternalStytchClientOptions } from '../types';\nimport { getHttpsUrl } from './getHttpsUrl';\nimport { logger } from './logger';\n\nexport const getDFPBackendURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.dfppaUrl ?? opts?.endpointOptions?.dfppaDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.dfppaUrl ? 'dfppaUrl' : 'dfppaDomain';\n logger.warn(`Unable to use custom DFPPA domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return opts?.endpoints?.dfpBackendURL ?? STYTCH_DFP_BACKEND_URL;\n};\n\nexport const getDFPCdnURL = (opts: InternalStytchClientOptions | undefined) => {\n const domain = opts?.dfpCdnUrl ?? opts?.endpointOptions?.dfpCdnDomain;\n if (domain) {\n const httpsUrl = getHttpsUrl(domain);\n if (httpsUrl) {\n return httpsUrl;\n } else {\n const key = opts?.dfpCdnUrl ? 'dfpCdnUrl' : 'dfpCdnDomain';\n logger.warn(`Unable to use custom DFP CDN domain \\`${domain}\\`. ${key} should be a valid domain.`);\n }\n }\n\n return STYTCH_DFP_CDN_URL;\n};\n","import { v4 as uuidv4 } from 'uuid';\n\nimport { OTPMethods, ResponseCommon, User } from '../public';\n\nexport type { Cacheable } from './Cacheable';\nexport type { EnumOrStringLiteral, StringLiteralFromEnum } from './EnumOrStringLiteral';\nexport { loadESModule } from './loadESModule';\nexport * from './api';\nexport * from './checks';\nexport * from './country';\nexport * from './dfp';\nexport * from './logger';\n\nexport { arrayUtils } from './arrayUtils';\n\nexport const isTestPublicToken = (token: string) => token.includes('public-token-test');\n\n/**\n * Normalizes an es5 promise with a .then(onSuccess, onFailure) signature to\n * the es6 .then().catch() signature\n */\nexport const normalizePromiseLike = <T>(prom: PromiseLike<T>): Promise<T> => {\n return new Promise<T>((resolve, reject) => {\n prom.then(resolve, reject);\n });\n};\n\nexport const createEventId = () => `event-id-${uuidv4()}`;\nexport const createAppSessionId = () => `app-session-id-${uuidv4()}`;\nexport const createPersistentId = () => `persistent-id-${uuidv4()}`;\n\nexport const isPhoneMethod = (selectionMethod: string) =>\n selectionMethod === OTPMethods.SMS || selectionMethod === OTPMethods.WhatsApp;\nexport const isEmailMethod = (selectionMethod: string) => selectionMethod === OTPMethods.Email;\n\nexport const removeResponseCommon = <T extends ResponseCommon>({\n request_id,\n\n status_code,\n ...rest\n}: T): Omit<T, keyof ResponseCommon> => rest;\n\nexport type WithUser<T> = T & { __user: User & ResponseCommon };\n\nexport const omitUser = <T extends ResponseCommon>(resp: T & { __user: User }): T => {\n const { __user, ...rest } = resp;\n return rest as unknown as T;\n};\n\nexport type Values<T extends object> = T[keyof T];\n\n// A simplified version of PartialDeep from type-fest to avoid referencing that package in exported types\ntype Primitive = null | undefined | string | number | boolean | symbol | bigint;\n\ntype _PartialDeep<T> = T extends Primitive\n ? T //\n : T extends object\n ? PartialObjectDeep<T>\n : unknown;\n\ntype PartialObjectDeep<ObjectType extends object> = {\n [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType]>;\n};\n\nexport type PartialDeep<T> = _PartialDeep<T>;\n","import { RetriableError, RetriableErrorType, SDKBaseRequestInfo } from './NetworkClient';\nimport { BootstrapData } from './types';\nimport { loadESModule } from './utils';\n\ndeclare global {\n // The telemetry.js script will set a global function called GetTelemetryID on the window\n // object. This interface is allows us to call that function while pleasing the TypeScript\n // compiler.\n interface Window {\n GetTelemetryID: (publicToken: string, submitURL: string) => Promise<string>;\n }\n}\n\nconst loadTelemetryJS = (domain: string) => loadESModule(`${domain}/telemetry.js`, () => window.GetTelemetryID);\n\nexport type DFPProtectedAuthMode = 'OBSERVATION' | 'DECISIONING';\n\nexport type DFPProtectedAuthState = {\n publicToken: string;\n dfpBackendURL: string;\n mode?: DFPProtectedAuthMode;\n enabled: boolean;\n loaded: boolean;\n executeRecaptcha: () => Promise<string | undefined>;\n};\n\nexport class DFPProtectedAuthProvider {\n private state: Promise<DFPProtectedAuthState>;\n constructor(\n publicToken: string,\n dfpBackendURL: string,\n dfpCdnDomain: string,\n private bootstrapPromise: Promise<BootstrapData>,\n executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n ) {\n this.state = bootstrapPromise.then(async (bootstrapData) => {\n if (!bootstrapData.runDFPProtectedAuth) {\n return { publicToken, dfpBackendURL, enabled: false, loaded: false, executeRecaptcha };\n }\n await loadTelemetryJS(dfpCdnDomain);\n return {\n publicToken,\n dfpBackendURL,\n enabled: true,\n mode: bootstrapData.dfpProtectedAuthMode || 'OBSERVATION',\n loaded: true,\n executeRecaptcha,\n };\n });\n }\n\n isEnabled = async (): Promise<boolean> => {\n return this.state.then((state) => state.enabled);\n };\n\n getTelemetryID = async (): Promise<string | undefined> => {\n const { publicToken, enabled, dfpBackendURL } = await this.state;\n if (!enabled) {\n return undefined;\n }\n return await window.GetTelemetryID(publicToken, `${dfpBackendURL}/submit`);\n };\n\n getDFPTelemetryIDAndCaptcha = async (): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }> => {\n const { enabled, executeRecaptcha, mode } = await this.state;\n\n let dfp_telemetry_id: string | undefined = undefined;\n let captcha_token: string | undefined = undefined;\n if (!enabled) {\n captcha_token = await executeRecaptcha();\n }\n if (mode === 'DECISIONING') {\n dfp_telemetry_id = await this.getTelemetryID();\n } else if (mode === 'OBSERVATION') {\n dfp_telemetry_id = await this.getTelemetryID();\n captcha_token = await executeRecaptcha();\n }\n return { dfp_telemetry_id, captcha_token };\n };\n\n retryWithCaptchaAndDFP = async (e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo> => {\n const { enabled, executeRecaptcha } = await this.state;\n if (e.type === RetriableErrorType.RequiredCaptcha && enabled) {\n if (req.body) {\n req.body.dfp_telemetry_id = await this.getTelemetryID();\n req.body.captcha_token = await executeRecaptcha();\n }\n return req;\n }\n throw new Error('Unable to query captcha and/or dfp telemetry ID');\n };\n}\n\nexport const DisabledDFPProtectedAuthProvider = () => ({\n isEnabled: async () => false,\n getTelemetryID: async () => undefined,\n getDFPTelemetryIDAndCaptcha: async () => ({\n dfp_telemetry_id: undefined,\n captcha_token: undefined,\n }),\n retryWithCaptchaAndDFP: async () => {\n throw new Error('DFP protected auth is disabled');\n },\n});\n\nexport interface IDFPProtectedAuthProvider {\n isEnabled(): Promise<boolean>;\n getTelemetryID(): Promise<string | undefined>;\n retryWithCaptchaAndDFP(e: RetriableError, req: SDKBaseRequestInfo): Promise<SDKBaseRequestInfo>;\n getDFPTelemetryIDAndCaptcha(): Promise<{ dfp_telemetry_id?: string; captcha_token?: string }>;\n}\n","import {\n StytchAPIUnreachableError,\n StytchAPIError,\n StytchAPISchemaError,\n SDKAPIUnreachableError,\n StytchSDKSchemaError,\n StytchSDKAPIError,\n} from './public';\n\n/**\n * Some errors are thrown from inside an iframe, but we can't serialize them\n * to the parent in Webkit. This class handles restoring marshalled errors\n * to their original form.\n * It preserves the error instance/class constructor by inspecting err.name\n * and calling `new` on the matching constructor.\n */\nexport class ErrorMarshaller {\n static inflate<T extends new (...any: never[]) => Error>(ErrorClass: T, ErrorData: Record<string, unknown>): Error {\n // !!HACK!!\n // We make the assumption that if the error takes in a required property\n // (StytchAPIError takes in an APIDetails obj...)\n // that we can just pass in the error body itself to satisfy the constructor...\n // And if the types don't work out, Object.assign(...) copies everything over anyway\n // This is a brittle and weak assumption.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const err = new ErrorClass(ErrorData);\n Object.assign(err, ErrorData);\n Object.setPrototypeOf(err, ErrorClass.prototype);\n return err as Error;\n }\n\n static unmarshall(error: Record<string, unknown>): Error {\n if ('name' in error) {\n switch (error.name) {\n case 'SDKAPIUnreachableError':\n return ErrorMarshaller.inflate(SDKAPIUnreachableError, error);\n case 'StytchSDKSchemaError':\n return ErrorMarshaller.inflate(StytchSDKSchemaError, error);\n case 'StytchAPIUnreachableError':\n return ErrorMarshaller.inflate(StytchAPIUnreachableError, error);\n case 'StytchAPISchemaError':\n return ErrorMarshaller.inflate(StytchAPISchemaError, error);\n case 'StytchSDKAPIError':\n return ErrorMarshaller.inflate(StytchSDKAPIError, error);\n case 'StytchAPIError':\n return ErrorMarshaller.inflate(StytchAPIError, error);\n case 'TypeError':\n return ErrorMarshaller.inflate(TypeError, error);\n case 'SyntaxError':\n return ErrorMarshaller.inflate(SyntaxError, error);\n case 'ReferenceError':\n return ErrorMarshaller.inflate(ReferenceError, error);\n case 'RangeError':\n return ErrorMarshaller.inflate(RangeError, error);\n case 'EvalError':\n return ErrorMarshaller.inflate(EvalError, error);\n case 'URIError':\n return ErrorMarshaller.inflate(URIError, error);\n }\n }\n return ErrorMarshaller.inflate(Error, error);\n }\n}\n","import { SDKTelemetry } from './NetworkClient';\n\nexport const DEFAULT_MAX_BATCH_SIZE = 15;\nexport const DEFAULT_INTERVAL_DURATION_MS = 800;\n\ntype EventLoggerArgs = {\n maxBatchSize: number;\n intervalDurationMs: number;\n logEventURL: string;\n};\n\nexport class EventLogger {\n private maxBatchSize: number;\n private logEventURL: string;\n private batch: Record<string, unknown>[];\n\n constructor(args: EventLoggerArgs) {\n this.maxBatchSize = args.maxBatchSize;\n this.logEventURL = args.logEventURL;\n // TODO: If we create more than one of these, we'll want a mechanism to clean up the intervals\n setInterval(this.flush.bind(this), args.intervalDurationMs);\n this.batch = [];\n }\n\n logEvent(telemetry: SDKTelemetry, event: Record<string, unknown>) {\n this.batch.push({ telemetry, event });\n if (this.batch.length >= this.maxBatchSize) {\n this.flush();\n }\n }\n\n async flush() {\n if (!this.batch.length) {\n return;\n }\n const batchToSubmit = this.batch;\n this.batch = [];\n try {\n await fetch(this.logEventURL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(batchToSubmit),\n });\n } catch {\n // Silently ignore fetch errors\n }\n }\n}\n","import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessMagicLinksClient,\n MagicLinksAuthenticateOptions,\n MagicLinksAuthenticateResponse,\n MagicLinksLoginOrCreateOptions,\n MagicLinksLoginOrCreateResponse,\n MagicLinksSendOptions,\n MagicLinksSendResponse,\n ResponseCommon,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForEmailMagicLinks: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForEmailMagicLinks: false,\n});\n\nexport class HeadlessMagicLinksClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessMagicLinksClient<TProjectConfiguration>\n{\n email: {\n loginOrCreate: (email: string, options?: MagicLinksLoginOrCreateOptions) => Promise<ResponseCommon>;\n send: (email: string, options?: MagicLinksSendOptions) => Promise<ResponseCommon>;\n };\n\n authenticate: (\n token: string,\n options: MagicLinksAuthenticateOptions,\n ) => Promise<MagicLinksAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _passwordResetPKCEManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.email = {\n loginOrCreate: async (email: string, options: MagicLinksLoginOrCreateOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n return this._networkClient.retriableFetchSDK<MagicLinksLoginOrCreateResponse>({\n url: '/magic_links/email/login_or_create',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n\n send: async (email: string, options: MagicLinksSendOptions = {}): Promise<ResponseCommon> => {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n\n let code_challenge: string | undefined = undefined;\n if (pkceRequiredForEmailMagicLinks) {\n code_challenge = await this.getCodeChallenge();\n }\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const requestBody = {\n ...options,\n email,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n };\n const isLoggedIn = !!this._subscriptionService.getSession();\n\n const endpoint = isLoggedIn ? '/magic_links/email/send/secondary' : '/magic_links/email/send/primary';\n\n return this._networkClient.retriableFetchSDK<MagicLinksSendResponse>({\n url: endpoint,\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n };\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (token: string, options: MagicLinksAuthenticateOptions) => {\n validateInDev(\n 'stytch.magicLinks.authenticate',\n { token, ...options },\n {\n token: 'string',\n session_duration_minutes: 'number',\n },\n );\n\n // When a user resets their password with PKCE turned on, they create a pkPair in the 'passwords' namespace.\n // However, when the user gets the reset password email, they have the option to log in without a password.\n // This redirects them to the magic link authenticate flow, which automatically looks for the pkce code_verifier\n // in the 'magic_links' namespace, breaking the flow. Unfortunately we won't know for sure in the eml authenticate call\n // whether or not the user is coming from a password reset flow. To handle this, we have to try to authenticate with\n // both the 'passwords' and 'magic_links' code_verifiers.\n const passwordResetPKPair = await this._passwordResetPKCEManager.getPKPair();\n\n let resp: WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>> | null = null;\n\n if (passwordResetPKPair?.code_verifier) {\n try {\n resp = await this.handlePKCEForAuthenticate(this._passwordResetPKCEManager, { token, ...options });\n } catch (e) {\n if ((e as Error).message.includes('pkce')) {\n // If pkce-related error, fall back to magic links code_verifier\n // eslint-disable-next-line no-console\n console.log(\n 'Authenticate with passwords pkce namespace failed. Falling back to authenticate with magic_links namespace.',\n );\n } else {\n throw e;\n }\n }\n }\n\n if (!resp) {\n resp = await this.handlePKCEForAuthenticate(this._pkceManager, { token, ...options });\n }\n\n return omitUser(resp);\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string> {\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n private async handlePKCEForAuthenticate(\n pkceManager: IPKCEManager,\n data: MagicLinksAuthenticateOptions & { token: string },\n ): Promise<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>> {\n const pkPair = await pkceManager.getPKPair();\n\n const requestBody = {\n code_verifier: pkPair?.code_verifier,\n ...data,\n };\n\n const resp = await this._networkClient.fetchSDK<WithUser<MagicLinksAuthenticateResponse<TProjectConfiguration>>>({\n url: '/magic_links/authenticate',\n body: requestBody,\n method: 'POST',\n });\n\n pkceManager.clearPKPair();\n\n return resp;\n }\n}\n","import { IConsumerSubscriptionService, IDFPProtectedAuthProvider, INetworkClient } from '..';\nimport {\n CryptoWalletAuthenticateOptions,\n CryptoWalletAuthenticateResponse,\n CryptoWalletAuthenticateStartOptions,\n CryptoWalletAuthenticateStartResponse,\n IHeadlessCryptoWalletClient,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n siweRequiredForCryptoWallets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n siweRequiredForCryptoWallets: false,\n});\n\nexport class HeadlessCryptoWalletClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessCryptoWalletClient<TProjectConfiguration>\n{\n authenticate: (\n options: CryptoWalletAuthenticateOptions,\n ) => Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _apiNetworkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private executeRecaptcha: () => Promise<string | undefined> = () => Promise.resolve(undefined),\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n private _config: DynamicConfig = DefaultDynamicConfig,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (\n options: CryptoWalletAuthenticateOptions,\n ): Promise<CryptoWalletAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.cryptoWallets.authenticate', options, {\n signature: 'string',\n crypto_wallet_address: 'string',\n crypto_wallet_type: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._apiNetworkClient.retriableFetchSDK<\n WithUser<CryptoWalletAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/crypto_wallets/authenticate',\n method: 'POST',\n body: {\n session_duration_minutes: options.session_duration_minutes,\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n signature: options.signature,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n }\n\n async authenticateStart(\n options: CryptoWalletAuthenticateStartOptions,\n ): Promise<CryptoWalletAuthenticateStartResponse> {\n validateInDev('stytch.cryptoWallets.authenticateStart', options, {\n crypto_wallet_address: 'string',\n crypto_wallet_type: 'string',\n });\n if (options.siwe_params) {\n validateInDev('stytch.cryptoWallets.authenticateStart', options.siwe_params, {\n uri: 'optionalString',\n chain_id: 'optionalString',\n issued_at: 'optionalString',\n statement: 'optionalString',\n not_before: 'optionalString',\n message_request_id: 'optionalString',\n resources: 'optionalStringArray',\n });\n }\n\n const isLoggedIn = !!this._subscriptionService.getSession();\n const captcha_token = await this.executeRecaptcha();\n const { siweRequiredForCryptoWallets } = await this._config;\n\n const body: CryptoWalletAuthenticateStartOptions = {\n crypto_wallet_address: options.crypto_wallet_address,\n crypto_wallet_type: options.crypto_wallet_type,\n };\n if (siweRequiredForCryptoWallets && options.crypto_wallet_type == 'ethereum') {\n body.siwe_params = { ...options.siwe_params, uri: options.siwe_params?.uri || window.location.origin };\n }\n\n const endpoint = isLoggedIn\n ? '/crypto_wallets/authenticate/start/secondary'\n : '/crypto_wallets/authenticate/start/primary';\n\n const requestBody = {\n ...body,\n captcha_token,\n };\n return this._apiNetworkClient.fetchSDK<CryptoWalletAuthenticateStartResponse>({\n url: endpoint,\n method: 'POST',\n body: requestBody,\n });\n }\n}\n","import { IConsumerSubscriptionService } from '..';\nimport { IDFPProtectedAuthProvider } from '../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../NetworkClient';\nimport { IPKCEManager } from '../PKCEManager';\nimport {\n IHeadlessPasswordClient,\n PasswordAuthenticateOptions,\n PasswordAuthenticateResponse,\n PasswordCreateOptions,\n PasswordCreateResponse,\n PasswordResetByEmailOptions,\n PasswordResetByEmailResponse,\n PasswordResetByEmailStartOptions,\n PasswordResetByEmailStartResponse,\n PasswordResetByExistingPasswordOptions,\n PasswordResetByExistingPasswordResponse,\n PasswordResetBySessionOptions,\n PasswordResetBySessionResponse,\n PasswordStrengthCheckOptions,\n PasswordStrengthCheckResponse,\n StytchProjectConfigurationInput,\n} from '../public';\nimport { omitUser, WithUser } from '../utils';\nimport { validateInDev } from '../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessPasswordClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessPasswordClient<TProjectConfiguration>\n{\n create: (options: PasswordCreateOptions) => Promise<PasswordCreateResponse<TProjectConfiguration>>;\n\n authenticate: (options: PasswordAuthenticateOptions) => Promise<PasswordAuthenticateResponse<TProjectConfiguration>>;\n\n resetByEmail: (options: PasswordResetByEmailOptions) => Promise<PasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: PasswordResetByExistingPasswordOptions,\n ) => Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: PasswordResetBySessionOptions,\n ) => Promise<PasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IConsumerSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.create = this._subscriptionService.withUpdateSession(\n async (options: PasswordCreateOptions): Promise<PasswordCreateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.create', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordCreateResponse<TProjectConfiguration>>\n >({\n url: '/passwords',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (options: PasswordAuthenticateOptions): Promise<PasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n password: 'string',\n email: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordAuthenticateResponse<TProjectConfiguration>>\n >({\n url: '/passwords/authenticate',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (options: PasswordResetByEmailOptions): Promise<PasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByEmailResponse<TProjectConfiguration>>\n >({\n url: '/passwords/email/reset',\n method: 'POST',\n body: {\n token: options.token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n code_verifier,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return omitUser(resp);\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetByExistingPasswordOptions,\n ): Promise<PasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email: 'string',\n existing_password: 'string',\n new_password: 'string',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const resp = await this._networkClient.retriableFetchSDK<\n WithUser<PasswordResetByExistingPasswordResponse<TProjectConfiguration>>\n >({\n url: '/passwords/existing_password/reset',\n method: 'POST',\n body: {\n email: options.email,\n existing_password: options.existing_password,\n new_password: options.new_password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n return omitUser(resp);\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: PasswordResetBySessionOptions,\n ): Promise<PasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n dfp_telemetry_id,\n captcha_token,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: PasswordResetByEmailStartOptions): Promise<PasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<PasswordResetByEmailStartResponse>({\n url: '/passwords/email/reset/start',\n method: 'POST',\n body: {\n email: options.email,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: PasswordStrengthCheckOptions): Promise<PasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<PasswordStrengthCheckResponse>({\n url: '/passwords/strength_check',\n method: 'POST',\n body: {\n email: options.email,\n password: options.password,\n },\n });\n }\n}\n","export const WILDCARD_ACTION = '*';\n\nexport type RBACPolicyRole = {\n role_id: string;\n description: string;\n permissions: {\n resource_id: string;\n actions: string[];\n }[];\n};\n\nexport type RBACPolicyScope = {\n scope: string;\n description: string;\n permissions: {\n resource_id: string;\n actions: string[];\n }[];\n};\n\nexport type RBACPolicyResource = {\n resource_id: string;\n description: string;\n actions: string[];\n};\n\nexport type RBACPolicyRaw = {\n roles: RBACPolicyRole[];\n resources: RBACPolicyResource[];\n scopes: RBACPolicyScope[];\n};\n\n/**\n * RBACPolicy represents an instance of a parsed Stytch RBAC policy object\n * It contains methods for computing outcomes for various permissions questions\n */\nexport class RBACPolicy {\n private rolesByID: Record<string, RBACPolicyRole>;\n\n constructor(\n public roles: RBACPolicyRole[],\n public resources: RBACPolicyResource[],\n ) {\n this.rolesByID = {};\n roles.forEach((role) => (this.rolesByID[role.role_id] = role));\n }\n\n static fromJSON(input: RBACPolicyRaw): RBACPolicy {\n return new RBACPolicy(input.roles, input.resources);\n }\n\n /**\n * Merges organization custom roles with this project policy.\n * Custom roles are additive - they add additional roles on top of the base project policy.\n * Resources remain from the project policy, roles are combined.\n * @param customRoles Array of custom organization roles to add\n * @returns A new RBACPolicy instance with merged roles\n */\n mergeWithCustomRoles(customRoles: RBACPolicyRole[]): RBACPolicy {\n const mergedRoles = [...this.roles, ...customRoles];\n\n // Resources come from the project policy - custom roles don't define new resources\n return new RBACPolicy(mergedRoles, this.resources);\n }\n\n /**\n * isAuthorized returns whether or not a user with a specific set of roles can perform a desired action\n * @example\n * const canDoIt = policy.callerIsAuthorized(roles, 'files', 'create')\n * console.log(canDoIt) // true\n */\n callerIsAuthorized(memberRoles: string[], resourceId: string, action: string): boolean {\n return !!memberRoles\n .map((roleId) => this.rolesByID[roleId])\n // Defense in depth: filter out null/undefined in case memberRoles contains a role that doesn't match the policy\n // This may happen if the member is loaded _before_ a fresh RBAC policy is loaded\n .filter((v) => v)\n .flatMap((role) => role.permissions)\n .filter((permission) => permission.resource_id === resourceId)\n .find((permission) => permission.actions.includes(action) || permission.actions.includes(WILDCARD_ACTION));\n }\n\n /**\n * allPermissions generates a map that allows quick lookup of all the permissions available to the user\n * @example\n * const perms = policy.allPermissions(roles)\n * console.log(perms.files.create) // true\n * console.log(perms.files.delete) // false\n */\n allPermissionsForCaller(memberRoles: string[]): Record<string, Record<string, boolean>> {\n const allPermsMap: Record<string, Record<string, boolean>> = Object.create(null);\n this.resources.forEach((resource) => {\n allPermsMap[resource.resource_id] = {};\n resource.actions.forEach((action) => {\n allPermsMap[resource.resource_id][action] = this.callerIsAuthorized(memberRoles, resource.resource_id, action);\n });\n });\n return allPermsMap;\n }\n}\n","import { DisabledDFPProtectedAuthProvider, IDFPProtectedAuthProvider } from '../../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../../NetworkClient';\nimport { IPKCEManager } from '../../PKCEManager';\nimport { IB2BSubscriptionService } from '../../SubscriptionService';\nimport {\n B2BMagicLinksInviteOptions,\n B2BMagicLinksInviteResponse,\n ResponseCommon,\n StytchProjectConfigurationInput,\n} from '../../public';\nimport {\n B2BMagicLinkLoginOrSignupOptions,\n B2BMagicLinkLoginOrSignupResponse,\n B2BMagicLinksAuthenticateOptions,\n B2BMagicLinksAuthenticateResponse,\n B2BMagicLinksDiscoveryAuthenticateOptions,\n B2BMagicLinksDiscoveryAuthenticateResponse,\n B2BMagicLinksEmailDiscoverySendOptions,\n B2BMagicLinksEmailDiscoverySendResponse,\n IHeadlessB2BMagicLinksClient,\n} from '../../public/b2b/magicLinks';\n\nimport { validateInDev } from '../../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForEmailMagicLinks: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForEmailMagicLinks: false,\n});\n\nexport class HeadlessB2BMagicLinksClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessB2BMagicLinksClient<TProjectConfiguration>\n{\n email: {\n invite: (data: B2BMagicLinksInviteOptions) => Promise<B2BMagicLinksInviteResponse>;\n loginOrSignup: (data: B2BMagicLinkLoginOrSignupOptions) => Promise<ResponseCommon>;\n discovery: {\n send: (data: B2BMagicLinksEmailDiscoverySendOptions) => Promise<B2BMagicLinksEmailDiscoverySendResponse>;\n };\n };\n\n authenticate: (\n data: B2BMagicLinksAuthenticateOptions,\n ) => Promise<B2BMagicLinksAuthenticateResponse<TProjectConfiguration>>;\n\n discovery: {\n authenticate: (\n data: B2BMagicLinksDiscoveryAuthenticateOptions,\n ) => Promise<B2BMagicLinksDiscoveryAuthenticateResponse<TProjectConfiguration>>;\n };\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IB2BSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _passwordResetPKCEManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider = DisabledDFPProtectedAuthProvider(),\n ) {\n this.email = {\n invite: async (data: B2BMagicLinksInviteOptions): Promise<B2BMagicLinksInviteResponse> => {\n validateInDev('stytch.magicLinks.email.invite', data, {\n email_address: 'string',\n invite_redirect_url: 'optionalString',\n invite_template_id: 'optionalString',\n name: 'optionalString',\n locale: 'optionalString',\n roles: 'optionalStringArray',\n invite_expiration_minutes: 'optionalNumber',\n });\n\n return this._networkClient.fetchSDK<B2BMagicLinksInviteResponse>({\n url: '/b2b/magic_links/email/invite',\n body: data,\n method: 'POST',\n });\n },\n loginOrSignup: async (data: B2BMagicLinkLoginOrSignupOptions): Promise<ResponseCommon> => {\n validateInDev('stytch.magicLinks.email.loginOrSignup', data, {\n email_address: 'string',\n organization_id: 'string',\n login_redirect_url: 'optionalString',\n login_template_id: 'optionalString',\n signup_redirect_url: 'optionalString',\n signup_template_id: 'optionalString',\n locale: 'optionalString',\n login_expiration_minutes: 'optionalNumber',\n signup_expiration_minutes: 'optionalNumber',\n });\n\n const pkce_code_challenge = await this.getCodeChallenge();\n const requestBody = {\n ...data,\n pkce_code_challenge,\n };\n return this._networkClient.fetchSDK<B2BMagicLinkLoginOrSignupResponse>({\n url: '/b2b/magic_links/email/login_or_signup',\n body: requestBody,\n method: 'POST',\n });\n },\n discovery: {\n send: async (\n data: B2BMagicLinksEmailDiscoverySendOptions,\n ): Promise<B2BMagicLinksEmailDiscoverySendResponse> => {\n validateInDev('stytch.magicLinks.email.discovery.send', data, {\n email_address: 'string',\n discovery_redirect_url: 'optionalString',\n login_template_id: 'optionalString',\n locale: 'optionalString',\n discovery_expiration_minutes: 'optionalNumber',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkce_code_challenge = await this.getCodeChallenge();\n const requestBody = {\n ...data,\n pkce_code_challenge,\n dfp_telemetry_id,\n captcha_token,\n };\n return this._networkClient.retriableFetchSDK<B2BMagicLinksEmailDiscoverySendResponse>({\n url: '/b2b/magic_links/email/discovery/send',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n },\n };\n\n this.authenticate = this._subscriptionService.withUpdateSession(async (data: B2BMagicLinksAuthenticateOptions) => {\n validateInDev('stytch.magicLinks.authenticate', data, {\n magic_links_token: 'string',\n session_duration_minutes: 'number',\n locale: 'optionalString',\n });\n\n // When a user resets their password with PKCE turned on, they create a pkPair in the 'passwords' namespace.\n // However, when the user gets the reset password email, they have the option to log in without a password.\n // This redirects them to the magic link authenticate flow, which automatically looks for the pkce code_verifier\n // in the 'magic_links' namespace, breaking the flow. Unfortunately we won't know for sure in the eml authenticate call\n // whether or not the user is coming from a password reset flow. To handle this, we have to try to authenticate with\n // both the 'passwords' and 'magic_links' code_verifiers.\n const passwordResetPKPair = await this._passwordResetPKCEManager.getPKPair();\n\n let resp: B2BMagicLinksAuthenticateResponse<TProjectConfiguration> | null = null;\n\n if (passwordResetPKPair?.code_verifier) {\n try {\n resp = await this.handlePKCEForAuthenticate(this._passwordResetPKCEManager, data);\n } catch (e) {\n if ((e as Error).message.includes('pkce')) {\n // If pkce-related error, fall back to magic links code_verifier\n // eslint-disable-next-line no-console\n console.log(\n 'Authenticate with passwords pkce namespace failed. Falling back to authenticate with magic_links namespace.',\n );\n } else {\n throw e;\n }\n }\n }\n\n if (!resp) {\n resp = await this.handlePKCEForAuthenticate(this._pkceManager, data);\n }\n\n return resp;\n });\n\n this.discovery = {\n authenticate: this._subscriptionService.withUpdateSession(\n async (\n data: B2BMagicLinksDiscoveryAuthenticateOptions,\n ): Promise<B2BMagicLinksDiscoveryAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.magicLinks.discovery.authenticate', data, {\n discovery_magic_links_token: 'string',\n });\n\n const pkPair = await this._pkceManager.getPKPair();\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n pkce_code_verifier: pkPair?.code_verifier,\n dfp_telemetry_id,\n captcha_token,\n ...data,\n };\n const resp = await this._networkClient.retriableFetchSDK<\n B2BMagicLinksDiscoveryAuthenticateResponse<TProjectConfiguration>\n >({\n url: '/b2b/magic_links/discovery/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return resp;\n },\n ),\n };\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForEmailMagicLinks } = await this._config;\n if (!pkceRequiredForEmailMagicLinks) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n private async handlePKCEForAuthenticate(\n pkceManager: IPKCEManager,\n data: B2BMagicLinksAuthenticateOptions,\n ): Promise<B2BMagicLinksAuthenticateResponse<TProjectConfiguration>> {\n const pkPair = await pkceManager.getPKPair();\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n const requestBody = {\n pkce_code_verifier: pkPair?.code_verifier,\n dfp_telemetry_id,\n captcha_token,\n intermediate_session_token: (await this._subscriptionService.getIntermediateSessionToken()) || undefined,\n ...data,\n };\n const resp = await this._networkClient.retriableFetchSDK<B2BMagicLinksAuthenticateResponse<TProjectConfiguration>>({\n url: '/b2b/magic_links/authenticate',\n body: requestBody,\n method: 'POST',\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n pkceManager.clearPKPair();\n\n return resp;\n }\n}\n","import { IDFPProtectedAuthProvider } from '../../DFPProtectedAuthProvider';\nimport { INetworkClient } from '../../NetworkClient';\nimport { IPKCEManager } from '../../PKCEManager';\nimport { IB2BSubscriptionService } from '../../SubscriptionService';\nimport { StytchProjectConfigurationInput } from '../../public/typeConfig';\nimport {\n B2BPasswordDiscoveryResetByEmailStartOptions,\n B2BPasswordDiscoveryResetByEmailStartResponse,\n B2BPasswordDiscoveryResetByEmailOptions,\n B2BPasswordDiscoveryResetByEmailResponse,\n B2BPasswordAuthenticateOptions,\n B2BPasswordAuthenticateResponse,\n B2BPasswordResetByEmailOptions,\n B2BPasswordResetByEmailResponse,\n B2BPasswordResetByEmailStartOptions,\n B2BPasswordResetByEmailStartResponse,\n B2BPasswordResetByExistingPasswordOptions,\n B2BPasswordResetByExistingPasswordResponse,\n B2BPasswordResetBySessionOptions,\n B2BPasswordResetBySessionResponse,\n B2BPasswordStrengthCheckOptions,\n B2BPasswordStrengthCheckResponse,\n IHeadlessB2BPasswordClient,\n B2BPasswordDiscoveryAuthenticateOptions,\n B2BPasswordDiscoveryAuthenticateResponse,\n} from '../../public/b2b/passwords';\nimport { validateInDev } from '../../utils/dev';\n\ntype DynamicConfig = Promise<{\n pkceRequiredForPasswordResets: boolean;\n}>;\n\nconst DefaultDynamicConfig = Promise.resolve({\n pkceRequiredForPasswordResets: false,\n});\n\nexport class HeadlessB2BPasswordsClient<TProjectConfiguration extends StytchProjectConfigurationInput>\n implements IHeadlessB2BPasswordClient<TProjectConfiguration>\n{\n authenticate: (\n options: B2BPasswordAuthenticateOptions,\n ) => Promise<B2BPasswordAuthenticateResponse<TProjectConfiguration>>;\n\n discovery: {\n resetByEmailStart: (\n options: B2BPasswordDiscoveryResetByEmailStartOptions,\n ) => Promise<B2BPasswordDiscoveryResetByEmailStartResponse>;\n resetByEmail: (\n options: B2BPasswordDiscoveryResetByEmailOptions,\n ) => Promise<B2BPasswordDiscoveryResetByEmailResponse<TProjectConfiguration>>;\n authenticate: (\n options: B2BPasswordDiscoveryAuthenticateOptions,\n ) => Promise<B2BPasswordDiscoveryAuthenticateResponse<TProjectConfiguration>>;\n };\n\n resetByEmail: (\n options: B2BPasswordResetByEmailOptions,\n ) => Promise<B2BPasswordResetByEmailResponse<TProjectConfiguration>>;\n\n resetByExistingPassword: (\n options: B2BPasswordResetByExistingPasswordOptions,\n ) => Promise<B2BPasswordResetByExistingPasswordResponse<TProjectConfiguration>>;\n\n resetBySession: (\n options: B2BPasswordResetBySessionOptions,\n ) => Promise<B2BPasswordResetBySessionResponse<TProjectConfiguration>>;\n\n constructor(\n private _networkClient: INetworkClient,\n private _subscriptionService: IB2BSubscriptionService<TProjectConfiguration>,\n private _pkceManager: IPKCEManager,\n private _config: DynamicConfig = DefaultDynamicConfig,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {\n this.authenticate = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordAuthenticateOptions,\n ): Promise<B2BPasswordAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.authenticate', options, {\n organization_id: 'string',\n password: 'string',\n email_address: 'string',\n session_duration_minutes: 'number',\n locale: 'optionalString',\n });\n\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordAuthenticateResponse<TProjectConfiguration>>({\n url: '/b2b/passwords/authenticate',\n method: 'POST',\n body: {\n organization_id: options.organization_id,\n email_address: options.email_address,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n locale: options.locale,\n captcha_token,\n dfp_telemetry_id,\n code_verifier,\n intermediate_session_token: this._subscriptionService.getIntermediateSessionToken() || undefined,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n\n this.discovery = {\n resetByEmailStart: async (\n options: B2BPasswordDiscoveryResetByEmailStartOptions,\n ): Promise<B2BPasswordDiscoveryResetByEmailStartResponse> => {\n validateInDev('stytch.passwords.discovery.resetByEmailStart', options, {\n email_address: 'string',\n discovery_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n verify_email_template_id: 'optionalString',\n locale: 'optionalString',\n });\n\n const pkce_code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordDiscoveryResetByEmailStartResponse>({\n url: '/b2b/passwords/discovery/reset/start',\n method: 'POST',\n body: {\n email_address: options.email_address,\n discovery_redirect_url: options.discovery_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n verify_email_template_id: options.verify_email_template_id,\n locale: options.locale,\n pkce_code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n resetByEmail: this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordDiscoveryResetByEmailOptions,\n ): Promise<B2BPasswordDiscoveryResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.discovery.resetByEmail', options, {\n password_reset_token: 'string',\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const pkce_code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n B2BPasswordDiscoveryResetByEmailResponse<TProjectConfiguration>\n >({\n url: '/b2b/passwords/discovery/reset',\n method: 'POST',\n body: {\n password_reset_token: options.password_reset_token,\n password: options.password,\n captcha_token,\n dfp_telemetry_id,\n pkce_code_verifier,\n intermediate_session_token: (await this._subscriptionService.getIntermediateSessionToken()) || undefined,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n\n return resp;\n },\n ),\n\n authenticate: this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordDiscoveryAuthenticateOptions,\n ): Promise<B2BPasswordDiscoveryAuthenticateResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.discovery.authenticate', options, {\n password: 'string',\n email_address: 'string',\n });\n\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordDiscoveryAuthenticateResponse<TProjectConfiguration>>(\n {\n url: '/b2b/passwords/discovery/authenticate',\n method: 'POST',\n body: {\n email_address: options.email_address,\n password: options.password,\n captcha_token,\n dfp_telemetry_id,\n code_verifier,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n },\n );\n },\n ),\n };\n\n this.resetByEmail = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordResetByEmailOptions,\n ): Promise<B2BPasswordResetByEmailResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByEmail', options, {\n password_reset_token: 'string',\n password: 'string',\n session_duration_minutes: 'number',\n locale: 'optionalString',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n const pkPair = await this._pkceManager.getPKPair();\n const code_verifier = pkPair?.code_verifier;\n\n const resp = await this._networkClient.retriableFetchSDK<\n B2BPasswordResetByEmailResponse<TProjectConfiguration>\n >({\n url: '/b2b/passwords/email/reset',\n method: 'POST',\n body: {\n password_reset_token: options.password_reset_token,\n password: options.password,\n session_duration_minutes: options.session_duration_minutes,\n locale: options.locale,\n captcha_token,\n dfp_telemetry_id,\n code_verifier: code_verifier,\n intermediate_session_token: this._subscriptionService.getIntermediateSessionToken() || undefined,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n\n this._pkceManager.clearPKPair();\n return resp;\n },\n );\n\n this.resetByExistingPassword = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordResetByExistingPasswordOptions,\n ): Promise<B2BPasswordResetByExistingPasswordResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetByExistingPassword', options, {\n email_address: 'string',\n existing_password: 'string',\n new_password: 'string',\n locale: 'optionalString',\n session_duration_minutes: 'number',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordResetByExistingPasswordResponse<TProjectConfiguration>>(\n {\n url: '/b2b/passwords/existing_password/reset',\n method: 'POST',\n body: {\n organization_id: options.organization_id,\n email_address: options.email_address,\n existing_password: options.existing_password,\n new_password: options.new_password,\n locale: options.locale,\n session_duration_minutes: options.session_duration_minutes,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n },\n );\n },\n );\n\n this.resetBySession = this._subscriptionService.withUpdateSession(\n async (\n options: B2BPasswordResetBySessionOptions,\n ): Promise<B2BPasswordResetBySessionResponse<TProjectConfiguration>> => {\n validateInDev('stytch.passwords.resetBySession', options, {\n password: 'string',\n });\n\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordResetBySessionResponse<TProjectConfiguration>>({\n url: '/b2b/passwords/session/reset',\n method: 'POST',\n body: {\n password: options.password,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n },\n );\n }\n\n private async getCodeChallenge(): Promise<string | undefined> {\n const { pkceRequiredForPasswordResets } = await this._config;\n if (!pkceRequiredForPasswordResets) {\n return undefined;\n }\n let keyPair = await this._pkceManager.getPKPair();\n if (keyPair) {\n return keyPair.code_challenge;\n }\n keyPair = await this._pkceManager.startPKCETransaction();\n return keyPair.code_challenge;\n }\n\n async resetByEmailStart(options: B2BPasswordResetByEmailStartOptions): Promise<B2BPasswordResetByEmailStartResponse> {\n validateInDev('stytch.passwords.resetByEmailStart', options, {\n email_address: 'string',\n login_redirect_url: 'optionalString',\n reset_password_redirect_url: 'optionalString',\n reset_password_template_id: 'optionalString',\n reset_password_expiration_minutes: 'optionalNumber',\n verify_email_template_id: 'optionalString',\n locale: 'optionalString',\n });\n\n const code_challenge = await this.getCodeChallenge();\n const { dfp_telemetry_id, captcha_token } = await this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha();\n\n return this._networkClient.retriableFetchSDK<B2BPasswordResetByEmailStartResponse>({\n url: '/b2b/passwords/email/reset/start',\n method: 'POST',\n body: {\n organization_id: options.organization_id,\n email_address: options.email_address,\n login_redirect_url: options.login_redirect_url,\n reset_password_redirect_url: options.reset_password_redirect_url,\n reset_password_expiration_minutes: options.reset_password_expiration_minutes,\n reset_password_template_id: options.reset_password_template_id,\n verify_email_template_id: options.verify_email_template_id,\n locale: options.locale,\n code_challenge,\n captcha_token,\n dfp_telemetry_id,\n },\n retryCallback: this.dfpProtectedAuth.retryWithCaptchaAndDFP,\n });\n }\n\n async strengthCheck(options: B2BPasswordStrengthCheckOptions): Promise<B2BPasswordStrengthCheckResponse> {\n validateInDev('stytch.passwords.strengthCheck', options, {\n email_address: 'optionalString',\n password: 'string',\n });\n\n return this._networkClient.fetchSDK<B2BPasswordStrengthCheckResponse>({\n url: '/b2b/passwords/strength_check',\n method: 'POST',\n body: {\n email_address: options.email_address,\n password: options.password,\n },\n });\n }\n}\n","import { ErrorMarshaller } from '../ErrorMarshaller';\nimport { MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING } from '../constants';\nimport { logger } from '../utils';\n\ntype RequestPayload = {\n method: string;\n args: unknown[];\n};\n\ntype ResponsePayload<T> = {\n success: boolean;\n payload: T;\n error: Record<string, unknown>;\n};\n\nexport class IframeHostClient {\n frame!: Promise<HTMLIFrameElement>;\n\n constructor(private iframeURL: string) {\n this.createIframe();\n }\n\n private createIframe() {\n let existingIframe = document.querySelector(`[src~=\"${this.iframeURL}\"]`) as HTMLIFrameElement;\n\n /* If an iframe does not exist yet, create one */\n if (!existingIframe) {\n existingIframe = document.createElement('iframe');\n existingIframe.src = this.iframeURL;\n existingIframe.style.position = 'absolute';\n existingIframe.style.width = '0';\n existingIframe.style.height = '0';\n existingIframe.style.border = '0';\n document.body.appendChild(existingIframe);\n } else {\n logger.warn(MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING);\n }\n\n /**\n * [NASTY BUG]\n * If we postMessage to an iframe that is _not yet loaded_, chrome will give a cryptic error message\n * Failed to execute 'postMessage' on 'DOMWindow':\n * The target origin provided ('https://js.stytch.com') does not match the recipient window's origin ('http://localhost:3000').\n * There is no builtin way to determine if an iframe is already loaded,\n * so we set a dataset attr in our onload handler and use that to determine loading state\n */\n if (existingIframe.dataset.loaded === 'true') {\n this.frame = Promise.resolve(existingIframe);\n return;\n }\n\n this.frame = new Promise((resolve) => {\n existingIframe.addEventListener(\n 'load',\n () => {\n existingIframe.dataset.loaded = 'true';\n resolve(existingIframe);\n },\n { once: true },\n );\n });\n }\n\n async call<T>(method: string, args: unknown[]): Promise<T> {\n const frame = await this.frame;\n const channel = new MessageChannel();\n\n return new Promise((resolve, reject) => {\n channel.port1.onmessage = (event) => {\n const resp = event.data as ResponsePayload<T>;\n channel.port1.close();\n if (resp.success) {\n resolve(resp.payload);\n } else {\n reject(ErrorMarshaller.unmarshall(resp.error));\n }\n };\n\n const message: RequestPayload = {\n method,\n args,\n };\n\n frame.contentWindow?.postMessage(message, this.iframeURL, [channel.port2]);\n });\n }\n}\n","import { INetworkClient } from './NetworkClient';\nimport { Member, ResponseCommon } from './public';\nimport { IDFPProtectedAuthProvider } from './DFPProtectedAuthProvider';\n\ntype UserSearchData = ResponseCommon & {\n userType: 'new' | 'passwordless' | 'password';\n};\n\nexport type InternalMember = Pick<Member, 'status' | 'name' | 'member_password_id'>;\n\nexport type MemberSearchData = ResponseCommon & { member: InternalMember | null };\n\nexport interface ISearchData {\n searchUser: (email: string) => Promise<UserSearchData>;\n searchMember: (email: string, organization_id: string) => Promise<MemberSearchData>;\n}\n\nexport class SearchDataManager implements ISearchData {\n constructor(\n private _networkClient: INetworkClient,\n private dfpProtectedAuth: IDFPProtectedAuthProvider,\n ) {}\n\n searchUser(email: string): Promise<UserSearchData> {\n return this.dfpProtectedAuth.getDFPTelemetryIDAndCaptcha().then(({ dfp_telemetry_id, captcha_token }) => {\n return this._networkClient.fetchSDK<UserSearchData>({\n url: `/users/search`,\n method: 'POST',\n body: { email, dfp_telemetry_id, captcha_token },\n });\n });\n }\n\n searchMember(email: string, organization_id: string): Promise<MemberSearchData> {\n return this._networkClient.fetchSDK<MemberSearchData>({\n url: `/b2b/organizations/members/search`,\n method: 'POST',\n body: { email_address: email, organization_id },\n });\n }\n}\n","import { B2BState, ConsumerState } from './public';\n\n// We should try refreshing the session if there exists a cached session in\n// state that might be stale. Otherwise, we know there is no session, so there's\n// no need.\nexport const shouldTryRefresh = <T extends ConsumerState | B2BState>(state: T | null) => !!state?.session;\n","import { MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING } from './constants';\nimport {\n B2BState,\n ConsumerState,\n IHeadlessB2BSessionClient,\n IHeadlessSessionClient,\n SessionAuthenticateOptions,\n StytchProjectConfigurationInput,\n UNRECOVERABLE_ERROR_TYPES,\n} from './public';\nimport { shouldTryRefresh } from './shouldTryRefresh';\nimport { IB2BSubscriptionService, IConsumerSubscriptionService } from './SubscriptionService';\nimport { logger } from './utils';\nimport { SessionUpdateOptions } from './types';\n\nclass SessionManagerRegistry {\n private hasWarned = false;\n\n private registry = new Map<string, ISessionManager>();\n\n public register(key: string, sessionManager: ISessionManager) {\n const otherManager = this.registry.get(key);\n\n // If there appears to be another registered session manager, issue a\n // warning and cancel its background refresh in favor the newer registration\n if (otherManager && otherManager !== sessionManager) {\n if (!this.hasWarned) {\n logger.warn(MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING);\n this.hasWarned = true;\n }\n otherManager.cancelBackgroundRefresh();\n }\n this.registry.set(key, sessionManager);\n }\n\n public unregister(publicToken: string, sessionManager: ISessionManager) {\n const otherManager = this.registry.get(publicToken);\n if (otherManager && otherManager === sessionManager) {\n this.registry.delete(publicToken);\n }\n }\n}\n\nexport interface ISessionManager {\n performBackgroundRefresh: () => void;\n cancelBackgroundRefresh: () => void;\n}\n\nexport class SessionManager<TProjectConfiguration extends StytchProjectConfigurationInput> implements ISessionManager {\n // Three minutes\n private static REFRESH_INTERVAL_MS = 1000 * 60 * 3;\n // When testing - it's often more useful to set to a shorter duration\n // private static REFRESH_INTERVAL_MS = 1000 * 3;\n\n private timeout: ReturnType<typeof setTimeout> | null = null;\n\n /** In minutes */\n private lastAuthenticationSessionDuration: number | undefined;\n\n private static registry = new SessionManagerRegistry();\n\n private register() {\n SessionManager.registry.register(this._publicToken, this);\n }\n\n private unregister() {\n SessionManager.registry.unregister(this._publicToken, this);\n }\n\n constructor(\n private _subscriptionService:\n | IConsumerSubscriptionService<TProjectConfiguration>\n | IB2BSubscriptionService<TProjectConfiguration>,\n private _headlessSessionClient:\n | IHeadlessSessionClient<TProjectConfiguration>\n | IHeadlessB2BSessionClient<TProjectConfiguration>,\n private _publicToken: string,\n private _options: { keepSessionAlive?: boolean },\n ) {\n this._subscriptionService.subscribeToState(this._onDataChange);\n }\n\n /**\n * The core logic of the session refresh recursive trampoline\n * - Refreshes the currently issued session\n * - Schedules a future refresh if successful\n */\n performBackgroundRefresh() {\n logger.debug('performing background refresh at ', Date.now());\n this._reauthenticateWithBackoff()\n .then(() => {\n this.scheduleBackgroundRefresh();\n })\n .catch((error: unknown) => {\n logger.warn('Session background refresh failed. Signalling to app that user is logged out.', { error });\n this._subscriptionService.destroySession();\n });\n }\n\n private scheduleBackgroundRefresh() {\n /* Highlander rules - there can only ever be one */\n this.cancelBackgroundRefresh();\n this.register();\n logger.debug('Scheduling bg refresh', Date.now());\n this.timeout = setTimeout(() => {\n this.performBackgroundRefresh();\n }, SessionManager.REFRESH_INTERVAL_MS);\n }\n\n cancelBackgroundRefresh() {\n if (this.timeout !== null) {\n this.unregister();\n logger.debug('Cancelling bg refresh', Date.now());\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n\n /**\n * We need to listen to a few types of events:\n * - If the user logs in via invoking a .authenticate() call, we should start the background worker\n * - If the user steps up their authentication via another .authenticate call(), we should restart the background worker\n * - If the user logs out, we should terminate the worker\n * - We should ignore session changes that we ourselves caused - so if we already have a timeout, leave it be!\n */\n private _onDataChange = (\n state: (ConsumerState & SessionUpdateOptions) | (B2BState & SessionUpdateOptions) | null,\n ) => {\n if (state != null && state.sessionDurationMinutes) {\n this.lastAuthenticationSessionDuration = state.sessionDurationMinutes;\n }\n\n if (shouldTryRefresh(state)) {\n this.scheduleBackgroundRefresh();\n } else {\n this.cancelBackgroundRefresh();\n }\n };\n\n // In cases where we cannot get a satisfactory request:\n // - Stytch is hard-down\n // - The user's network is disconnected for an extended period of time\n // we will continue to retry every 4 minutes ad infinum\n private _reauthenticateWithBackoff = async () => {\n let count = 0;\n while (true) {\n try {\n const options: SessionAuthenticateOptions = {\n session_duration_minutes: this._options.keepSessionAlive ? this.lastAuthenticationSessionDuration : undefined,\n };\n\n return await this._headlessSessionClient.authenticate(options);\n } catch (err) {\n if (SessionManager.isUnrecoverableError(err)) {\n return Promise.reject(err);\n }\n count++;\n await new Promise((done) => setTimeout(done, SessionManager.timeoutForAttempt(count)));\n }\n }\n };\n\n // We start with a backoff of 2000ms and increase exponentially to ~4 minutes (+/- 175 ms for jitter)\n // A short backoff initially helps increase the chance that we refresh the session before the JWT expires\n static timeoutForAttempt(count: number) {\n count = Math.min(count, 7);\n const jitter = Math.floor(Math.random() * 350) - 175;\n const delayMS = 2000 * 2 ** count;\n return jitter + delayMS;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n static isUnrecoverableError(error: any) {\n return UNRECOVERABLE_ERROR_TYPES.includes(error.error_type);\n }\n}\n","import { ISubscriptionService } from './SubscriptionService';\nimport { UnsubscribeFunction } from './public';\nimport { AllowedOpaqueTokens } from './typeConfig';\n\ntype DeepReadonly<T> = {\n readonly [P in keyof T]: DeepReadonly<T[P]>;\n};\n\nexport type StateChangeHandler<T> = (state: DeepReadonly<T>) => void;\nexport type StateChangeRegisterFunction<T> = (callback: StateChangeHandler<T>) => UnsubscribeFunction;\n\nexport class StateChangeClient<T> {\n constructor(\n private readonly _subscriptionService: ISubscriptionService<T | null, AllowedOpaqueTokens>,\n private readonly emptyState: T,\n ) {}\n\n public onStateChange: StateChangeRegisterFunction<T> = (callback) => {\n return this._subscriptionService.subscribeToState((state) => {\n callback(state ?? this.emptyState);\n });\n };\n}\n","export const VERTICAL_B2B = 'B2B';\nexport const VERTICAL_CONSUMER = 'CONSUMER';\n\nexport type Vertical = typeof VERTICAL_B2B | typeof VERTICAL_CONSUMER;\n","import { BootstrapData, RBACPolicyRaw, DFPProtectedAuthMode, INetworkClient, logger, Vertical } from '@stytch/core';\nimport { B2BSubscriptionDataLayer, ConsumerSubscriptionDataLayer } from './SubscriptionService';\n\nexport interface IBootstrapData {\n getSync: () => BootstrapData;\n getAsync: () => Promise<BootstrapData>;\n}\n\ninterface RawBootstrapData {\n request_id: string;\n project_name: string;\n status_code: number;\n disable_sdk_watermark: boolean;\n cname_domain: string | null;\n email_domains: string[];\n captcha_settings: BootstrapData['captchaSettings'];\n pkce_required_for_email_magic_links: boolean;\n pkce_required_for_password_resets: boolean;\n pkce_required_for_oauth: boolean;\n pkce_required_for_sso: boolean;\n slug_pattern: string | null;\n create_organization_enabled: boolean;\n password_config: { luds_complexity: number; luds_minimum_count: number } | null;\n dfp_protected_auth_enabled?: boolean;\n dfp_protected_auth_mode?: DFPProtectedAuthMode;\n rbac_policy?: RBACPolicyRaw;\n siwe_required_for_crypto_wallets: boolean;\n vertical: Vertical;\n}\n\nconst BOOTSTRAP_CACHE_KEY = 'bootstrap';\nconst DEFAULT_BOOTSTRAP = (): BootstrapData => ({\n displayWatermark: false,\n projectName: null,\n cnameDomain: null,\n emailDomains: ['stytch.com'],\n captchaSettings: { enabled: false },\n pkceRequiredForEmailMagicLinks: false,\n pkceRequiredForPasswordResets: false,\n pkceRequiredForOAuth: false,\n pkceRequiredForSso: false,\n slugPattern: null,\n createOrganizationEnabled: false,\n passwordConfig: null,\n runDFPProtectedAuth: false,\n rbacPolicy: null,\n siweRequiredForCryptoWallets: false,\n vertical: null,\n});\n\nexport class BootstrapDataManager implements IBootstrapData {\n private readonly _bootstrapDataPromise: Promise<BootstrapData>;\n\n constructor(\n private _publicToken: string,\n private _networkClient: INetworkClient,\n private _dataLayer: ConsumerSubscriptionDataLayer | B2BSubscriptionDataLayer,\n ) {\n // TODO: Push the async version of this into @stytch/core\n // for RN to use, have getSync throw a NotImplementedError\n // and inherit it to create a sync one here?\n this._bootstrapDataPromise = this._networkClient\n .fetchSDK<RawBootstrapData>({\n url: `/projects/bootstrap/${this._publicToken}`,\n method: 'GET',\n })\n .then(BootstrapDataManager.mapBootstrapData)\n .then((data) => {\n this._dataLayer.setItem(BOOTSTRAP_CACHE_KEY, JSON.stringify(data));\n return data;\n })\n .catch((error: unknown) => {\n logger.error(error);\n return DEFAULT_BOOTSTRAP();\n });\n }\n\n static mapBootstrapData(response: RawBootstrapData): BootstrapData {\n const passwordConfig =\n response.password_config !== null\n ? {\n ludsComplexity: response.password_config.luds_complexity,\n ludsMinimumCount: response.password_config.luds_minimum_count,\n }\n : null;\n\n return {\n projectName: response.project_name,\n displayWatermark: !response.disable_sdk_watermark,\n captchaSettings: response.captcha_settings,\n cnameDomain: response.cname_domain,\n emailDomains: response.email_domains,\n\n pkceRequiredForEmailMagicLinks: response.pkce_required_for_email_magic_links,\n pkceRequiredForPasswordResets: response.pkce_required_for_password_resets,\n pkceRequiredForOAuth: response.pkce_required_for_oauth,\n pkceRequiredForSso: response.pkce_required_for_sso,\n slugPattern: response.slug_pattern,\n createOrganizationEnabled: response.create_organization_enabled,\n passwordConfig,\n runDFPProtectedAuth: response.dfp_protected_auth_enabled ?? false,\n dfpProtectedAuthMode: response.dfp_protected_auth_mode,\n rbacPolicy: response.rbac_policy ?? null,\n siweRequiredForCryptoWallets: response.siwe_required_for_crypto_wallets,\n vertical: response.vertical,\n };\n }\n\n getSync(): BootstrapData {\n const cached = this._dataLayer.getItem(BOOTSTRAP_CACHE_KEY);\n if (cached === null) {\n return DEFAULT_BOOTSTRAP();\n }\n try {\n return JSON.parse(cached) as BootstrapData;\n } catch {\n return DEFAULT_BOOTSTRAP();\n }\n }\n\n getAsync(): Promise<BootstrapData> {\n return this._bootstrapDataPromise;\n }\n}\n","import { BootstrapData, loadESModule } from '@stytch/core';\n\nconst loadRecaptchaClient = (siteKey: string) =>\n loadESModule(`https://www.google.com/recaptcha/enterprise.js?render=${siteKey}`, () => window.grecaptcha.enterprise);\n\ntype CaptchaState =\n | { configured: true; captchaClient: ReCaptchaV2.ReCaptcha; siteKey: string }\n | { configured: false; captchaClient: undefined; siteKey: undefined };\n\nexport class CaptchaProvider {\n private state: Promise<CaptchaState>;\n constructor(private bootstrapPromise: Promise<BootstrapData>) {\n this.state = bootstrapPromise.then(async (bootstrapData) => {\n if (!bootstrapData.captchaSettings.enabled) {\n return { configured: false };\n }\n return {\n configured: true,\n captchaClient: await loadRecaptchaClient(bootstrapData.captchaSettings.siteKey),\n siteKey: bootstrapData.captchaSettings.siteKey,\n };\n });\n }\n\n executeRecaptcha = async () => {\n const { captchaClient, configured, siteKey } = await this.state;\n if (!configured) {\n return undefined;\n }\n await new Promise<void>((resolve) => captchaClient.ready(resolve));\n return captchaClient.execute(siteKey, {\n action: 'LOGIN',\n });\n };\n}\n","import { IframeHostClient, RPCManifest } from '@stytch/core';\n\nexport class ClientsideServicesProvider implements RPCManifest {\n private _frameClient: IframeHostClient | undefined;\n constructor(private iframeURL: string) {}\n\n /**\n * The frameClient is lazily initialized - we don't want to force users\n * that don't use any of its features to still download the bundle!\n * @private\n */\n private get frameClient(): IframeHostClient {\n this._frameClient = this._frameClient ?? new IframeHostClient(this.iframeURL);\n return this._frameClient;\n }\n\n private call<T, U>(handlerName: string, req: T): Promise<U> {\n return this.frameClient.call<U>(handlerName, [req]);\n }\n\n oneTapStart: RPCManifest['oneTapStart'] = (req) => this.call('oneTapStart', req);\n oneTapSubmit: RPCManifest['oneTapSubmit'] = (req) => this.call('oneTapSubmit', req);\n parsedPhoneNumber: RPCManifest['parsedPhoneNumber'] = (req) => this.call('parsedPhoneNumber', req);\n getExamplePhoneNumber: RPCManifest['getExamplePhoneNumber'] = (req) => this.call('getExamplePhoneNumber', req);\n}\n","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","// Inspired by https://developers.google.com/privacy-sandbox/3pcd/fedcm-developer-guide#sign-into-rp\nexport const navigatorSupportsFedCM = typeof window !== 'undefined' && 'IdentityCredential' in window;\n","import { OneTapPositions } from '@stytch/core/public';\nimport { navigatorSupportsFedCM } from './navigatorSupportsFedCM';\n\nexport const getConfiguredEmbeddedMode = (position: OneTapPositions | undefined) => {\n if (position === OneTapPositions.forceLegacyEmbedded) {\n return 'force';\n }\n\n if (\n position === OneTapPositions.embeddedOnly ||\n position === OneTapPositions.embedded ||\n position === OneTapPositions.floatingOrEmbedded\n ) {\n return true;\n }\n\n return false;\n};\n\nexport const getShouldRenderEmbeddedOneTap = (position: OneTapPositions | undefined) => {\n // Attempt embedded positioning if some embedded mode has been requested, and\n // either:\n // - the browser does not support FedCM (in which case embedded positioning\n // could work), or\n // - the developer has specified legacy embedded positioning (in which case\n // embedded positioning may not be honored)\n\n const embeddedMode = getConfiguredEmbeddedMode(position);\n return embeddedMode === 'force' || (embeddedMode && !navigatorSupportsFedCM);\n};\n\nexport const getShouldRenderFloatingOneTap = (position: OneTapPositions | undefined) => {\n // Use floating positioning if we aren't using embedded positioning and the\n // developer hasn't specifically requested not to use floating positioning\n return position !== OneTapPositions.embeddedOnly && !getShouldRenderEmbeddedOneTap(position);\n};\n\nexport const getRenderedOneTapMode = (position: OneTapPositions | undefined) => {\n const embeddedMode = getConfiguredEmbeddedMode(position);\n\n if (embeddedMode === 'force' || (embeddedMode && !navigatorSupportsFedCM)) {\n return 'embedded';\n }\n\n if (position !== OneTapPositions.embeddedOnly) {\n return 'floating';\n }\n\n return false;\n};\n","import type { accounts, CredentialResponse, IdConfiguration, PromptMomentNotification } from 'google-one-tap';\nimport { GOOGLE_ONE_TAP_HOST } from '@stytch/core';\nimport { OneTapStyleConfig } from '@stytch/core/public';\nimport { getConfiguredEmbeddedMode, getShouldRenderEmbeddedOneTap } from './positionModes';\n\ntype OneTapNotShownReason =\n | ReturnType<PromptMomentNotification['getNotDisplayedReason']>\n | ReturnType<PromptMomentNotification['getSkippedReason']>;\n\nexport type OneTapRenderResult = { success: true } | { success: false; reason: OneTapNotShownReason };\n\n/**\n * Wrapper around Google One Tap JS client that combines initialize() and prompt()\n * into one async render() call\n *\n * @see https://developers.google.com/identity/gsi/web/guides/display-google-one-tap#javascript\n */\nexport class GoogleOneTapClient {\n constructor(\n private _googleClient: accounts['id'],\n private _clientId: string,\n ) {}\n\n cancel(): void {\n this._googleClient.cancel();\n }\n\n async render({\n callback,\n onOneTapCancelled,\n style,\n cancelOnTapOutside = true,\n }: {\n callback: (response: CredentialResponse) => void;\n onOneTapCancelled?: (showError?: boolean) => void;\n style: OneTapStyleConfig;\n cancelOnTapOutside?: boolean;\n }): Promise<OneTapRenderResult> {\n const embeddedMode = getConfiguredEmbeddedMode(style.position);\n const shouldRenderEmbeddedOneTap = getShouldRenderEmbeddedOneTap(style.position);\n\n const config: IdConfiguration = {\n client_id: this._clientId,\n callback: callback,\n auto_select: false,\n context: 'use',\n itp_support: true,\n use_fedcm_for_prompt: embeddedMode !== 'force',\n cancel_on_tap_outside: cancelOnTapOutside,\n };\n if (shouldRenderEmbeddedOneTap) {\n config.prompt_parent_id = 'google-parent-prompt';\n config.cancel_on_tap_outside = false;\n }\n this._googleClient.initialize(config);\n\n return new Promise((resolve) => {\n this._googleClient.prompt((notification: PromptMomentNotification) => {\n if (notification.isSkippedMoment()) {\n // After FedCM is mandatory, `getSkippedReason` will no longer be\n // supported, so access it defensively.\n const reason = notification.getSkippedReason?.() ?? 'unknown_reason';\n\n if (reason === 'user_cancel') {\n onOneTapCancelled?.();\n }\n return resolve({\n success: false,\n reason,\n });\n }\n\n // At some point after FedCM is mandatory, `isNotDisplayed` and\n // `getNotDisplayedReason` (and display moments in general) will not be\n // supported. If we can tell they're not available and we're trying to\n // show an embedded one tap UI, we should treat it as a failure, because\n // we won't expect an embedded UI to work (by virtue of FedCM being\n // mandatory) and won't expect any other notifications.\n if ((!notification.isNotDisplayed && shouldRenderEmbeddedOneTap) || notification.isNotDisplayed?.()) {\n return resolve({\n success: false,\n reason: notification.getNotDisplayedReason?.() ?? 'unknown_reason',\n });\n }\n\n if (!notification.isDismissedMoment()) {\n this.styleFrame(shouldRenderEmbeddedOneTap);\n return resolve({ success: true });\n }\n });\n });\n }\n\n styleFrame(shouldRenderEmbeddedOneTap: boolean) {\n if (!shouldRenderEmbeddedOneTap) {\n return;\n }\n Array.from(document.getElementsByTagName('iframe')).forEach((frame) => {\n if (frame.src.includes(GOOGLE_ONE_TAP_HOST)) {\n frame.style.width = '100%';\n }\n });\n }\n}\n","import { GOOGLE_ONE_TAP_SCRIPT_URL, OneTapStartResponse, loadESModule, RPCManifest } from '@stytch/core';\nimport { StytchAPIError } from '@stytch/core/public';\nimport type { CredentialResponse } from 'google-one-tap';\nimport { GoogleOneTapClient } from './GoogleOneTapClient';\n\nexport const loadGoogleOneTapClient = (): Promise<google.accounts['id']> =>\n loadESModule(GOOGLE_ONE_TAP_SCRIPT_URL, () => window.google.accounts.id);\n\ntype OneTapNotLoadedReason =\n // These come from the API directly - err.error_type\n | 'oauth_config_not_found'\n | 'no_login_redirect_urls_set'\n | 'no_signup_redirect_urls_set'\n // If we have an unhandled error :$\n | string;\n\ntype OneTapLoadResult =\n | { success: true; client: GoogleOneTapClient }\n | { success: false; reason: OneTapNotLoadedReason };\n\n/**\n * Handles loading One Tap config from Stytch API and initializing {@link GoogleOneTapClient}\n */\nexport class OneTapProvider {\n private googleConfig?: Promise<OneTapStartResponse>;\n\n constructor(\n private _publicToken: string,\n private clientsideServices: RPCManifest,\n ) {}\n\n async createOneTapClient(): Promise<OneTapLoadResult> {\n let googleClientId: string;\n try {\n ({ googleClientId } = await this.fetchGoogleStart());\n } catch (e) {\n const err = StytchAPIError.from(e);\n return { success: false, reason: err.error_type };\n }\n\n if (googleClientId === '') {\n return { success: false, reason: 'oauth_config_not_found' };\n }\n const client = new GoogleOneTapClient(await loadGoogleOneTapClient(), googleClientId);\n return { success: true, client };\n }\n\n createOnSuccessHandler =\n ({\n loginRedirectUrl,\n signupRedirectUrl,\n onSuccess,\n }: {\n loginRedirectUrl?: string;\n signupRedirectUrl?: string;\n onSuccess: (redirect_url: string) => void;\n }) =>\n async (response: CredentialResponse) => {\n const { credential } = response;\n const { redirect_url } = await this.submitGoogleOneTapToken({\n credential,\n loginRedirectUrl,\n signupRedirectUrl,\n });\n onSuccess(redirect_url);\n };\n\n private fetchGoogleStart() {\n if (this.googleConfig) {\n return this.googleConfig;\n }\n this.googleConfig = this.clientsideServices.oneTapStart({\n publicToken: this._publicToken,\n });\n return this.googleConfig;\n }\n\n private async submitGoogleOneTapToken({\n credential,\n loginRedirectUrl,\n signupRedirectUrl,\n }: {\n credential: string;\n loginRedirectUrl?: string;\n signupRedirectUrl?: string;\n }) {\n const { oauthCallbackId } = await this.fetchGoogleStart();\n\n return this.clientsideServices.oneTapSubmit({\n publicToken: this._publicToken,\n idToken: credential,\n loginRedirectURL: loginRedirectUrl,\n oauthCallbackID: oauthCallbackId,\n signupRedirectURL: signupRedirectUrl,\n });\n }\n\n redirectOnSuccess = (redirect_url: string) => {\n window.location.href = redirect_url;\n };\n\n /**\n * Google One Tap will show a banner on the bottom of the screen on certain mobile devices\n * This logic is controlled via some sniffing of the useragent string on startup\n * These specific strings were extracted from the One Tap minified source code\n * See the linked PR for details and screenshots\n */\n static willGoogleOneTapShowEmbedded(ua = navigator.userAgent): boolean {\n const uaContains = (userAgent: string, searchString: string) => userAgent.indexOf(searchString) !== -1;\n\n const isTabletUA =\n uaContains(ua, 'iPad') || (uaContains(ua, 'Android') && !uaContains(ua, 'Mobile')) || uaContains(ua, 'Silk');\n\n const isMobileUA =\n uaContains(ua, 'iPod') || uaContains(ua, 'iPhone') || uaContains(ua, 'Android') || uaContains(ua, 'IEMobile');\n\n return !isTabletUA && isMobileUA;\n }\n}\n","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","/*! js-cookie v3.0.1 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (key, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n key = encodeURIComponent(key)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n key + '=' + converter.write(value, key) + stringifiedAttributes)\n }\n\n function get (key) {\n if (typeof document === 'undefined' || (arguments.length && !key)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var foundKey = decodeURIComponent(parts[0]);\n jar[foundKey] = converter.read(value, foundKey);\n\n if (key === foundKey) {\n break\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar\n }\n\n return Object.create(\n {\n set: set,\n get: get,\n remove: function (key, attributes) {\n set(\n key,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport default api;\n","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","import {\n CLIENTSIDE_SERVICES_IFRAME_URL,\n InternalStytchClientOptions,\n getDFPBackendURL,\n getDFPCdnURL,\n getLiveApiURL,\n getTestApiURL,\n validateInDev,\n isTestPublicToken,\n} from '@stytch/core';\nimport { StytchClientOptions } from '@stytch/core/public';\n\nexport const buildFinalConfig = (clientName: string, opts: InternalStytchClientOptions = {}) => {\n const { cookieOptions, keepSessionAlive } = opts;\n\n validateInDev(clientName, opts, {\n keepSessionAlive: 'optionalBoolean',\n });\n\n if (cookieOptions) {\n validateInDev(`${clientName}.cookieOptions`, cookieOptions, {\n opaqueTokenCookieName: 'optionalString',\n jwtCookieName: 'optionalString',\n istCookieName: 'optionalString',\n path: 'optionalString',\n domain: 'optionalString',\n });\n }\n\n return {\n cookieOptions,\n keepSessionAlive,\n endpoints: {\n testAPIURL: getTestApiURL(opts),\n liveAPIURL: getLiveApiURL(opts),\n dfpBackendURL: getDFPBackendURL(opts),\n dfpCdnURL: getDFPCdnURL(opts),\n clientsideServicesIframeURL: opts?.endpoints?.clientsideServicesIframeURL ?? CLIENTSIDE_SERVICES_IFRAME_URL,\n },\n };\n};\n\n/**\n * rawOptions should be the original object passed into the client, not the output from buildFinalConfig\n */\nexport const hasCustomApiEndpoint = (token: string, rawOptions: StytchClientOptions = {}) => {\n // endpointOptions is deprecated, but we still need to account for it\n const { customBaseUrl, endpointOptions } = rawOptions;\n return isTestPublicToken(token)\n ? !!(customBaseUrl || endpointOptions?.testApiDomain)\n : !!(customBaseUrl || endpointOptions?.apiDomain);\n};\n","import type { SessionDurationOptions } from '@stytch/core/public';\n\nfunction isHandledTokenType<HandledTokenType extends string>(\n handledTypes: HandledTokenType[],\n tokenType: string,\n): tokenType is HandledTokenType {\n return handledTypes.includes(tokenType as HandledTokenType);\n}\n\nexport const clearStytchTokenParams = () => {\n const url = removeStytchTokenParams(window.location.toString());\n window.history.replaceState(null, document.title, url);\n};\n\nexport type ParseAuthenticateUrl<HandledTokenType extends string> = (\n href?: string,\n) =>\n | { handled: true; token: string; tokenType: HandledTokenType }\n | { handled: false; token: string; tokenType: string }\n | null;\n\nexport type AuthenticateByUrl<TokenType extends string> = (\n options: {\n /**\n * Clear token and stytch_token_type URL params after authenticate is called.\n * @default true if the href parameter is window.location.href (the default)\n **/\n clearParams?: boolean;\n } & SessionDurationOptions,\n\n /**\n * Allow overriding URL where the token and stytch_token_type params are extracted from.\n * You usually would not need to set this.\n * @default window.location.href\n */\n href?: string,\n) => Promise<\n | {\n handled: true;\n tokenType: TokenType;\n data: unknown;\n }\n | {\n handled: false;\n tokenType: string;\n token: string;\n }\n | null\n>;\n\n/**\n * Creates both parseAuthenticateUrl and authenticateByUrl from the set of handlers passed in to ensure\n * both functions agree on what is handled.\n */\nexport const createAuthUrlHandler = <HandledTokenType extends string = string>(\n handlers: Record<HandledTokenType, (token: string, options: SessionDurationOptions) => Promise<unknown>>,\n) => {\n const handledTokenTypes = Object.keys(handlers) as HandledTokenType[];\n\n const parseAuthenticateUrl: ParseAuthenticateUrl<HandledTokenType> = (href = window.location.href) => {\n const url = new URL(href);\n const tokenType = url.searchParams.get('stytch_token_type');\n const token = url.searchParams.get('token');\n if (!token || !tokenType) {\n return null;\n }\n\n if (isHandledTokenType(handledTokenTypes, tokenType)) {\n return {\n handled: true,\n token,\n tokenType,\n };\n }\n\n return {\n handled: false,\n token,\n tokenType,\n };\n };\n\n const authenticateByUrl: AuthenticateByUrl<HandledTokenType> = async (\n { clearParams, ...options },\n href = window.location.href,\n ) => {\n const shouldClearParams = clearParams ?? href === window.location.href;\n const parsed = parseAuthenticateUrl(href);\n if (parsed == null) return null;\n if (!parsed.handled) return parsed;\n\n const { token, tokenType } = parsed;\n const handler = handlers[tokenType as HandledTokenType];\n try {\n const data = await handler(token, options);\n return {\n handled: true,\n tokenType: tokenType as HandledTokenType,\n data,\n };\n } finally {\n if (shouldClearParams) {\n clearStytchTokenParams();\n }\n }\n };\n\n return {\n authenticateByUrl,\n parseAuthenticateUrl,\n };\n};\n\n// Exported for testing\nexport function removeStytchTokenParams(href: string) {\n const url = new URL(href);\n const params = url.searchParams;\n\n params.delete('token');\n params.delete('stytch_token_type');\n\n return url;\n}\n","/* eslint-disable lingui/no-unlocalized-strings -- user-facing strings in this file can be overridden using different APIs */\n\nimport { IDPConsentItem } from '@stytch/core/public';\nimport { RBACPolicyRaw } from '@stytch/core';\n\nconst OPENID_CONSENT_ITEM: IDPConsentItem = {\n text: 'Verify your identity',\n details: ['View information stored within your account'],\n};\n\n// Full Access didn't really make the cut\n// const FULL_ACCESS_CONSENT_ITEM: IDPConsentItem = {\n// text: 'Act on behalf of you',\n// details: [],\n// };\n\nconst PROFILE_CONSENT_ITEM: IDPConsentItem = {\n text: 'View your personal profile information',\n details: [],\n};\n\nconst OFFLINE_ACCESS_CONSENT_ITEM: IDPConsentItem = {\n text: \"Maintain access to your data even when you're not actively using the app\",\n details: [\n 'Access your data even when you are offline.',\n 'Synchronize data and process background tasks on your behalf.',\n ],\n};\n\nconst OPENID_SCOPE = 'openid';\nconst PROFILE_SCOPE = 'profile';\nconst EMAIL_SCOPE = 'email';\nconst PHONE_SCOPE = 'phone';\nconst FULL_ACCESS_SCOPE = 'full_access';\nconst OFFLINE_ACCESS_SCOPE = 'offline_access';\n\nconst DEFAULT_SCOPES = new Set([\n OPENID_SCOPE,\n PROFILE_SCOPE,\n EMAIL_SCOPE,\n PHONE_SCOPE,\n FULL_ACCESS_SCOPE,\n OFFLINE_ACCESS_SCOPE,\n]);\n\n// Scope is an optional param in OAuth2.1\n// When no scope is present, this is what we default to\nconst FALLBACK_SCOPES = [OPENID_SCOPE, EMAIL_SCOPE, PROFILE_SCOPE];\n\nexport const containsCustomScopes = (scope: string): boolean => {\n // set.difference is not in ES2015\n return scope.split(' ').some((sc) => !DEFAULT_SCOPES.has(sc));\n};\n\nexport const createBuiltinScopeDescriptions = (scopes: string[]): IDPConsentItem[] => {\n const descriptions: IDPConsentItem[] = [];\n\n if (scopes.includes(OPENID_SCOPE)) {\n descriptions.push(OPENID_CONSENT_ITEM);\n }\n\n if (scopes.includes(EMAIL_SCOPE) || scopes.includes(PROFILE_SCOPE) || scopes.includes(PHONE_SCOPE)) {\n descriptions.push(\n createProfileScopeDescription({\n containsEmail: scopes.includes(EMAIL_SCOPE),\n containsPhoneNumber: scopes.includes(PHONE_SCOPE),\n containsProfile: scopes.includes(PROFILE_SCOPE),\n }),\n );\n }\n\n // if (scopes.has(FULL_ACCESS_SCOPE)) {\n // descriptions.push();\n // }\n\n if (scopes.includes(OFFLINE_ACCESS_SCOPE)) {\n descriptions.push(OFFLINE_ACCESS_CONSENT_ITEM);\n }\n\n return descriptions;\n};\n\nconst createProfileScopeDescription = ({\n containsProfile,\n containsEmail,\n containsPhoneNumber,\n}: {\n containsProfile: boolean;\n containsEmail: boolean;\n containsPhoneNumber: boolean;\n}): IDPConsentItem => {\n const details = [];\n if (containsProfile) {\n details.push('Your name, profile picture, and language preferences');\n }\n if (containsEmail) {\n details.push('Your email address');\n }\n if (containsPhoneNumber) {\n details.push('Your phone number');\n }\n\n return {\n text: PROFILE_CONSENT_ITEM.text,\n details: details,\n };\n};\n\nexport const createCustomScopeDescriptions = (scopes: string[], rbacPolicy: RBACPolicyRaw | null): string[] => {\n if (!rbacPolicy) return [];\n\n const descriptions: string[] = [];\n\n for (const scope of scopes) {\n if (DEFAULT_SCOPES.has(scope)) continue;\n const found = rbacPolicy.scopes.find((policyScope) => policyScope.scope === scope);\n if (found && found.description) {\n descriptions.push(found.description);\n } else {\n descriptions.push(`Use the ${scope} scope`);\n }\n }\n\n return descriptions;\n};\n\nexport const fallbackConsentManifestGenerator = ({\n scopes,\n clientName,\n rbacPolicy,\n}: {\n scopes: string[];\n clientName: string;\n rbacPolicy: RBACPolicyRaw | null;\n}) => {\n return [\n {\n header: `${clientName} is requesting to:`,\n items: createBuiltinScopeDescriptions(scopes).concat(createCustomScopeDescriptions(scopes, rbacPolicy)),\n },\n ];\n};\n\nexport type OAuthAuthorizeParams = {\n // Required.\n client_id: string;\n redirect_uri: string;\n // Required, but has default\n response_type: string;\n scopes: string[];\n // Optional.\n code_challenge?: string;\n state?: string;\n nonce?: string;\n prompt?: string;\n resources?: string[];\n};\n\nexport type OAuthLogoutParams = {\n // Required.\n client_id: string;\n post_logout_redirect_uri: string;\n // Optional.\n id_token_hint?: string;\n state?: string;\n};\n\nexport type IDPFlowParams =\n | { type: 'Authorize'; params: OAuthAuthorizeParams }\n | { type: 'Logout'; params: OAuthLogoutParams };\n\n/**\n * Parse the OAuth Authorize params from the URL search parameters to pass in to subsequent OAuthAuthorize calls.\n *\n * @param params - The URL search parameters to parse.\n * @returns The parsed OAuth Authorize parameters.\n */\nexport const parseOAuthAuthorizeParams = (\n params: URLSearchParams,\n): { error: string | null; result: OAuthAuthorizeParams } => {\n const authorizeParams: OAuthAuthorizeParams = {\n client_id: '',\n redirect_uri: '',\n // As of writing, ChatGPT isn't sending `response_type` when making calls to our\n // authorization endpoint, even though it's technically a required field in the spec.\n // We default it to 'code' here and server-side.\n // See: https://stytchio.slack.com/archives/C07U0MHAH7G/p1749075544763149.\n response_type: 'code',\n // Default to this initial set of scopes when the client does not provide this param\n scopes: [...FALLBACK_SCOPES],\n };\n\n const requiredFields = ['client_id', 'redirect_uri'] as const;\n for (const field of requiredFields) {\n const value = params.get(field);\n if (!value) {\n return {\n error: `Required parameter is missing: ${field}. Please reach out to the application developer.`,\n result: authorizeParams,\n };\n }\n authorizeParams[field] = value;\n }\n\n const optionalStringFields = ['response_type', 'scope', 'code_challenge', 'state', 'nonce', 'prompt'] as const;\n for (const field of optionalStringFields) {\n const value = params.get(field);\n if (value) {\n if (field === 'scope') {\n authorizeParams.scopes = value.split(' ').filter(Boolean);\n } else {\n authorizeParams[field] = value;\n }\n }\n }\n\n if (params.has('resource')) {\n authorizeParams.resources = params.getAll('resource');\n }\n\n return { error: null, result: authorizeParams };\n};\n\nexport const parseOAuthLogoutParams = (\n params: URLSearchParams,\n): { error: string | null; result: OAuthLogoutParams } => {\n const logoutParams: OAuthLogoutParams = {\n client_id: '',\n post_logout_redirect_uri: '',\n };\n\n const requiredFields = ['client_id', 'post_logout_redirect_uri'] as const;\n for (const field of requiredFields) {\n const value = params.get(field);\n if (!value) {\n return {\n error: `Required parameter is missing: ${field}. Please reach out to the application developer.`,\n result: logoutParams,\n };\n }\n logoutParams[field] = value;\n }\n\n logoutParams.id_token_hint = params.get('id_token_hint') || undefined;\n logoutParams.state = params.get('state') || undefined;\n\n return { error: null, result: logoutParams };\n};\n\n/**\n * Parse generic IDP parameters and determine if it is an Authorize or Logout request.\n */\nexport const parseIDPParams = (searchParams: string): { error: string | null; flow: IDPFlowParams } => {\n const params = new URLSearchParams(searchParams);\n\n // Check if `post_logout_redirect_uri` exists to determine if it's a Logout request.\n if (params.has('post_logout_redirect_uri')) {\n const logoutResult = parseOAuthLogoutParams(params);\n return { error: logoutResult.error, flow: { type: 'Logout', params: logoutResult.result } };\n }\n\n // Otherwise, assume it's an Authorize request.\n const authorizeResult = parseOAuthAuthorizeParams(params);\n return { error: authorizeResult.error, flow: { type: 'Authorize', params: authorizeResult.result! } };\n};\n"],"names":["TEST_API_URL","LIVE_API_URL","CLIENTSIDE_SERVICES_IFRAME_URL","STYTCH_DFP_BACKEND_URL","STYTCH_DFP_CDN_URL","GOOGLE_ONE_TAP_HOST","GOOGLE_ONE_TAP_SCRIPT_URL","DEFAULT_SESSION_DURATION_MINUTES","DEFAULT_OTP_EXPIRATION_MINUTES","MULTIPLE_STYTCH_CLIENTS_DETECTED_WARNING","OAuthProviders","Google","Microsoft","Apple","Github","GitLab","Facebook","Discord","Salesforce","Slack","Amazon","Bitbucket","LinkedIn","Coinbase","Twitch","Twitter","TikTok","Snapchat","Figma","Yahoo","Wallets","Phantom","Metamask","Binance","GenericEthereumWallet","GenericSolanaWallet","OneTapPositions","embedded","floating","embeddedOnly","floatingOrEmbedded","forceLegacyEmbedded","OTPMethods","SMS","WhatsApp","Email","StytchEventType","RNUIProducts","AuthFlowType","Discovery","Organization","PasswordReset","RedirectURLType","ResetPassword","B2BOAuthProviders","HubSpot","GitHub","B2BMFAProducts","smsOtp","totp","RetriableErrorType","RetriableError","Error","type","constructor","retriableFetchSDK","method","finalURL","basicAuthHeader","xSDKClientHeader","xSDKParentHostHeader","body","retryCallback","req","baseFetchSDK","err","headers","Authorization","fetchOpts","JSON","stringify","credentials","resp","fetch","e","message","StytchAPIUnreachableError","status","respData","json","data","get","includes","respError","StytchAPISchemaError","StytchAPIError","text","baseSubmitFormSDK","bodyParams","finalBody","__Authorization","children","Object","entries","map","key","value","input","document","createElement","name","form","action","append","appendChild","submit","ModulePromiseCache","loadESModule","url","moduleFromGlobalScope","undefined","loadESModuleFromNetwork","Promise","resolve","reject","maybeScript","findScript","dataset","loaded","script","createScript","addEventListener","findScriptsInDom","querySelectorAll","scripts","setAttribute","head","getHttpsUrl","urlOrDomain","URL","hostname","STYTCH_BADGE","DEBUG","logger","debug","args","log","console","warn","error","getLiveApiURL","opts","domain","customBaseUrl","endpointOptions","apiDomain","httpsUrl","endpoints","liveAPIURL","getTestApiURL","testApiDomain","testAPIURL","trailer","checkPublicToken","publicToken","startsWith","checkNotSSR","window","checkB2BNotSSR","getDFPBackendURL","dfppaUrl","dfppaDomain","dfpBackendURL","getDFPCdnURL","dfpCdnUrl","dfpCdnDomain","isTestPublicToken","token","createEventId","uuidv4","createAppSessionId","createPersistentId","removeResponseCommon","request_id","status_code","rest","omitUser","__user","loadTelemetryJS","GetTelemetryID","DFPProtectedAuthProvider","state","bootstrapPromise","executeRecaptcha","isEnabled","then","enabled","getTelemetryID","getDFPTelemetryIDAndCaptcha","mode","dfp_telemetry_id","captcha_token","retryWithCaptchaAndDFP","RequiredCaptcha","bootstrapData","runDFPProtectedAuth","dfpProtectedAuthMode","DisabledDFPProtectedAuthProvider","ErrorMarshaller","inflate","ErrorClass","ErrorData","assign","setPrototypeOf","prototype","unmarshall","SDKAPIUnreachableError","StytchSDKSchemaError","StytchSDKAPIError","TypeError","SyntaxError","ReferenceError","RangeError","EvalError","URIError","DEFAULT_MAX_BATCH_SIZE","DEFAULT_INTERVAL_DURATION_MS","EventLogger","maxBatchSize","logEventURL","batch","setInterval","flush","bind","intervalDurationMs","logEvent","telemetry","event","push","length","batchToSubmit","DefaultDynamicConfig","pkceRequiredForEmailMagicLinks","HeadlessMagicLinksClient","email","authenticate","_config","dfpProtectedAuth","_networkClient","_subscriptionService","_pkceManager","_passwordResetPKCEManager","loginOrCreate","options","code_challenge","getCodeChallenge","requestBody","send","isLoggedIn","getSession","endpoint","withUpdateSession","passwordResetPKPair","getPKPair","code_verifier","handlePKCEForAuthenticate","keyPair","startPKCETransaction","pkceManager","pkPair","fetchSDK","clearPKPair","siweRequiredForCryptoWallets","HeadlessCryptoWalletClient","_apiNetworkClient","session_duration_minutes","crypto_wallet_address","crypto_wallet_type","signature","authenticateStart","siwe_params","uri","location","origin","pkceRequiredForPasswordResets","HeadlessPasswordClient","create","resetByEmail","resetByExistingPassword","resetBySession","password","existing_password","new_password","resetByEmailStart","login_redirect_url","reset_password_redirect_url","reset_password_expiration_minutes","reset_password_template_id","locale","strengthCheck","WILDCARD_ACTION","RBACPolicy","rolesByID","resources","roles","forEach","role","role_id","fromJSON","mergeWithCustomRoles","customRoles","mergedRoles","callerIsAuthorized","memberRoles","resourceId","roleId","filter","v","flatMap","permissions","permission","resource_id","find","actions","allPermissionsForCaller","allPermsMap","resource","HeadlessB2BMagicLinksClient","discovery","invite","loginOrSignup","pkce_code_challenge","pkce_code_verifier","intermediate_session_token","getIntermediateSessionToken","HeadlessB2BPasswordsClient","organization_id","email_address","discovery_redirect_url","verify_email_template_id","password_reset_token","IframeHostClient","frame","iframeURL","createIframe","existingIframe","querySelector","src","style","position","width","height","border","once","call","channel","MessageChannel","port1","onmessage","close","success","payload","contentWindow","postMessage","port2","SearchDataManager","searchUser","searchMember","shouldTryRefresh","session","SessionManagerRegistry","hasWarned","registry","Map","register","sessionManager","otherManager","cancelBackgroundRefresh","set","unregister","delete","SessionManager","REFRESH_INTERVAL_MS","timeout","lastAuthenticationSessionDuration","_publicToken","_headlessSessionClient","_options","_onDataChange","sessionDurationMinutes","scheduleBackgroundRefresh","_reauthenticateWithBackoff","count","keepSessionAlive","isUnrecoverableError","done","setTimeout","timeoutForAttempt","subscribeToState","performBackgroundRefresh","catch","destroySession","clearTimeout","Math","min","jitter","floor","random","delayMS","UNRECOVERABLE_ERROR_TYPES","error_type","StateChangeClient","emptyState","onStateChange","callback","VERTICAL_B2B","VERTICAL_CONSUMER","BOOTSTRAP_CACHE_KEY","DEFAULT_BOOTSTRAP","displayWatermark","projectName","cnameDomain","emailDomains","captchaSettings","pkceRequiredForOAuth","pkceRequiredForSso","slugPattern","createOrganizationEnabled","passwordConfig","rbacPolicy","vertical","BootstrapDataManager","_bootstrapDataPromise","_dataLayer","mapBootstrapData","setItem","response","password_config","ludsComplexity","luds_complexity","ludsMinimumCount","luds_minimum_count","project_name","disable_sdk_watermark","captcha_settings","cname_domain","email_domains","pkce_required_for_email_magic_links","pkce_required_for_password_resets","pkce_required_for_oauth","pkce_required_for_sso","slug_pattern","create_organization_enabled","dfp_protected_auth_enabled","dfp_protected_auth_mode","rbac_policy","siwe_required_for_crypto_wallets","getSync","cached","getItem","parse","getAsync","loadRecaptchaClient","siteKey","grecaptcha","enterprise","CaptchaProvider","captchaClient","configured","ready","execute","ClientsideServicesProvider","_frameClient","oneTapStart","oneTapSubmit","parsedPhoneNumber","getExamplePhoneNumber","frameClient","handlerName","NetworkClient","eventLogger","baseURL","_subscriptionDataLayer","_liveAPIURL","_testAPIURL","additionalTelemetryDataFn","updateSessionToken","buildSDKUrl","details","createTelemetryBlob","public_token","event_name","error_code","error_description","http_status_code","event_id","app_session_id","persistent_id","client_sent_at","Date","toISOString","timezone","Intl","DateTimeFormat","resolvedOptions","timeZone","app","identifier","sdk","version","PACKAGE_VERSION","sessionToken","readSessionCookie","session_token","btoa","submitFormSDK","navigatorSupportsFedCM","getConfiguredEmbeddedMode","getShouldRenderEmbeddedOneTap","embeddedMode","getShouldRenderFloatingOneTap","getRenderedOneTapMode","GoogleOneTapClient","_clientId","_googleClient","cancel","render","onOneTapCancelled","cancelOnTapOutside","shouldRenderEmbeddedOneTap","config","client_id","auto_select","context","itp_support","use_fedcm_for_prompt","cancel_on_tap_outside","prompt_parent_id","initialize","prompt","notification","isSkippedMoment","reason","getSkippedReason","isNotDisplayed","getNotDisplayedReason","isDismissedMoment","styleFrame","Array","from","getElementsByTagName","loadGoogleOneTapClient","google","accounts","id","OneTapProvider","googleConfig","clientsideServices","createOnSuccessHandler","loginRedirectUrl","signupRedirectUrl","onSuccess","credential","redirect_url","submitGoogleOneTapToken","redirectOnSuccess","href","createOneTapClient","googleClientId","fetchGoogleStart","client","oauthCallbackId","idToken","loginRedirectURL","oauthCallbackID","signupRedirectURL","willGoogleOneTapShowEmbedded","ua","navigator","userAgent","uaContains","searchString","indexOf","isTabletUA","isMobileUA","PKCE_VERIFIER_STORAGE_KEY","toHex","n","str","toString","base64URLEncode","buf","String","fromCharCode","Uint8Array","replace","PKCEManager","namespace","createProofkeyPair","serialized","removeItem","bytes","Uint32Array","crypto","getRandomValues","codeVerifier","join","digest","subtle","TextEncoder","encode","STYTCH_SESSION_COOKIE","STYTCH_SESSION_JWT_COOKIE","STYTCH_INTERMEDIATE_SESSION_TOKEN_COOKIE","SEEN_DOMAINS_KEY","SubscriptionDataLayer","_opaqueTokenCookieName","_jwtCookieName","_cookiePath","_domain","_cookieAvailableToSubdomains","_istCookieName","subscriptions","_localStorage","browserSessionStorage","getKeyBoundStorage","safeLocalStorage","safeSessionStorage","cookieOptions","opaqueTokenCookieName","jwtCookieName","path","availableToSubdomains","istCookieName","localStorageState","parsedState","syncToLocalStorage","Cookies","session_jwt","readIntermediateSessionTokenCookie","writeSessionCookie","stateDiff","cookieOpts","generateCookieOpts","expiresAt","expires_at","addSeenDomain","alternateCookieOptions","hasMultipleCookies","remove","writeIntermediateSessionTokenCookie","IST","expiresAtTime","now","removeSessionCookie","removeCookies","removeISTCookie","cookiesToRemove","trackedDomains","getSeenDomains","allDomains","uniqueDomains","Set","cookieName","storedDomains","parsed","isArray","expires","sameSite","isLocalhost","secure","host","ConsumerSubscriptionDataLayer","B2BSubscriptionDataLayer","consumerDataLayerCacheSymbol","Symbol","for","b2bDataLayerCacheSymbol","getConsumerDataLayerCache","wdw","getB2BDataLayerCache","getConsumerDataLayer","dataLayerCache","getB2BDataLayer","addSubscriber","collection","subscriber","uniqueId","slice","notifySubscribers","values","cb","deepEqualData","createDeepEqual","KEYS_TO_EXCLUDE","BaseSubscriptionService","fromCache","_datalayer","usingCustomApiEndpoint","_listen","getPersistentStorageKey","parsedValue","newValue","updateState","getTokens","destroyState","updateStateAndTokens","_updateStateAndTokensInternal","oldStateValue","newStateValue","wasCached","getFromCache","setCacheRefreshed","fromExternalSource","hasStateChanged","updateTokens","tokens","cookie","diff","getState","destroy","removeEventListener","syncFromDeviceStorage","ConsumerSubscriptionService","updateUser","user","getUser","updateSession","a","B2BSubscriptionService","updateMember","member","getMember","updateOrganization","organization","getOrganization","member_session","buildFinalConfig","clientName","dfpCdnURL","clientsideServicesIframeURL","hasCustomApiEndpoint","rawOptions","isHandledTokenType","handledTypes","tokenType","clearStytchTokenParams","removeStytchTokenParams","history","replaceState","title","createAuthUrlHandler","handlers","handledTokenTypes","keys","parseAuthenticateUrl","searchParams","handled","authenticateByUrl","clearParams","shouldClearParams","handler","params","OPENID_CONSENT_ITEM","PROFILE_CONSENT_ITEM","OFFLINE_ACCESS_CONSENT_ITEM","OPENID_SCOPE","PROFILE_SCOPE","EMAIL_SCOPE","PHONE_SCOPE","FULL_ACCESS_SCOPE","OFFLINE_ACCESS_SCOPE","DEFAULT_SCOPES","FALLBACK_SCOPES","containsCustomScopes","scope","split","some","sc","has","createBuiltinScopeDescriptions","scopes","descriptions","createProfileScopeDescription","containsEmail","containsPhoneNumber","containsProfile","createCustomScopeDescriptions","found","policyScope","description","fallbackConsentManifestGenerator","header","items","concat","parseOAuthAuthorizeParams","authorizeParams","redirect_uri","response_type","requiredFields","field","result","optionalStringFields","Boolean","getAll","parseOAuthLogoutParams","logoutParams","post_logout_redirect_uri","id_token_hint","parseIDPParams","URLSearchParams","logoutResult","flow","authorizeResult"],"mappings":"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","x_google_ignoreList":[4,5,6,7,8,40]}
|