@stytch/vanilla-js 6.0.9 → 6.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/{StytchSSRProxy-DjO95TII.js → StytchSSRProxy-BG8v1Uf6.js} +19 -23
  3. package/dist/cjs/StytchSSRProxy-BG8v1Uf6.js.map +1 -0
  4. package/dist/cjs/b2b/index.cjs +47 -39
  5. package/dist/cjs/b2b/index.cjs.map +1 -1
  6. package/dist/cjs/b2b/index.headless.cjs +1 -1
  7. package/dist/cjs/index.cjs +2 -2
  8. package/dist/cjs/index.headless.cjs +1 -1
  9. package/dist/cjs/{shadcn-DnwRqCY0.js → shadcn-Ds1x7jpl.js} +2 -2
  10. package/dist/cjs/{shadcn-DnwRqCY0.js.map → shadcn-Ds1x7jpl.js.map} +1 -1
  11. package/dist/cjs-dev/{StytchSSRProxy-t6BtsVJa.js → StytchSSRProxy-CCpBazSd.js} +19 -23
  12. package/dist/cjs-dev/StytchSSRProxy-CCpBazSd.js.map +1 -0
  13. package/dist/cjs-dev/b2b/index.cjs +47 -39
  14. package/dist/cjs-dev/b2b/index.cjs.map +1 -1
  15. package/dist/cjs-dev/b2b/index.headless.cjs +1 -1
  16. package/dist/cjs-dev/index.cjs +2 -2
  17. package/dist/cjs-dev/index.headless.cjs +1 -1
  18. package/dist/cjs-dev/{shadcn-C7p3HE31.js → shadcn-YlPYvF-0.js} +2 -2
  19. package/dist/cjs-dev/{shadcn-C7p3HE31.js.map → shadcn-YlPYvF-0.js.map} +1 -1
  20. package/dist/esm/node_modules/js-cookie/dist/js.cookie.mjs +17 -21
  21. package/dist/esm/node_modules/js-cookie/dist/js.cookie.mjs.map +1 -1
  22. package/dist/esm/packages/web/src/NetworkClient.mjs +1 -1
  23. package/dist/esm/packages/web/src/ui/b2b/screens/EmailForm.mjs +1 -20
  24. package/dist/esm/packages/web/src/ui/b2b/screens/EmailForm.mjs.map +1 -1
  25. package/dist/esm/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs +42 -37
  26. package/dist/esm/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs.map +1 -1
  27. package/dist/esm/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs +28 -0
  28. package/dist/esm/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs.map +1 -0
  29. package/dist/esm-dev/node_modules/js-cookie/dist/js.cookie.mjs +17 -21
  30. package/dist/esm-dev/node_modules/js-cookie/dist/js.cookie.mjs.map +1 -1
  31. package/dist/esm-dev/packages/web/src/NetworkClient.mjs +1 -1
  32. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailForm.mjs +1 -20
  33. package/dist/esm-dev/packages/web/src/ui/b2b/screens/EmailForm.mjs.map +1 -1
  34. package/dist/esm-dev/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs +42 -37
  35. package/dist/esm-dev/packages/web/src/ui/b2b/screens/PasswordEmailForm.mjs.map +1 -1
  36. package/dist/esm-dev/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs +28 -0
  37. package/dist/esm-dev/packages/web/src/ui/b2b/screens/useParseErrorMessage.mjs.map +1 -0
  38. package/dist/iife/b2b/index.headless.js +1 -1
  39. package/dist/iife/b2b/index.headless.js.map +1 -1
  40. package/dist/iife/b2b/index.js +3 -3
  41. package/dist/iife/b2b/index.js.map +1 -1
  42. package/dist/iife/index.headless.js +1 -1
  43. package/dist/iife/index.headless.js.map +1 -1
  44. package/dist/iife/index.js +1 -1
  45. package/dist/iife/index.js.map +1 -1
  46. package/dist/types/{DFPProtectedAuthProvider-Cg2QSi2l.d.ts → DFPProtectedAuthProvider-DQV4qHPT.d.ts} +1 -1
  47. package/dist/types/{GoogleOneTapClient-iv3nb_kU.d.ts → GoogleOneTapClient-BITSM9oM.d.ts} +1 -1
  48. package/dist/types/{PresentationConfig-CxQiKzO8.d.ts → PresentationConfig-BjjsTM1r.d.ts} +1 -1
  49. package/dist/types/{StytchB2BClient-C-2u87oo.d.ts → StytchB2BClient-DkrU-AQy.d.ts} +2 -2
  50. package/dist/types/{StytchClient-CCLs7DV6.d.ts → StytchClient-CUz_XnTa.d.ts} +2 -2
  51. package/dist/types/adminPortal/index.d.ts +5 -5
  52. package/dist/types/b2b/index.d.ts +9 -9
  53. package/dist/types/b2b/index.headless.d.ts +5 -5
  54. package/dist/types/compat.d.ts +2 -2
  55. package/dist/types/{idpHelpers-CxSGKrN9.d.ts → idpHelpers-DsFYR_P9.d.ts} +1 -1
  56. package/dist/types/index.d.ts +9 -9
  57. package/dist/types/index.headless.d.ts +5 -5
  58. package/dist/types/{themes-MdCoynbd.d.ts → themes-LfxL9FBW.d.ts} +5 -5
  59. package/package.json +1 -1
  60. package/dist/cjs/StytchSSRProxy-DjO95TII.js.map +0 -1
  61. package/dist/cjs-dev/StytchSSRProxy-t6BtsVJa.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"EmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport UsePasswordButton from '../components/UsePasswordButton';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { useEffectiveAuthConfig } from '../hooks/useEffectiveAuthConfig';\nimport { useEmailOtpDiscoverySend } from '../hooks/useEmailOtpDiscoverySend';\nimport { useEmailOtpLoginOrSignup } from '../hooks/useEmailOtpLoginOrSignup';\nimport { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend';\nimport { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup';\nimport { AppScreens } from '../types/AppScreens';\nimport { hasProduct } from '../utils';\n\nconst JIT_PROVISIONING_ERRORS = ['email_jit_provisioning_not_allowed', 'invalid_email_for_jit_provisioning'];\n\nconst useParseErrorMessage = () => {\n const { t } = useLingui();\n return (error: StytchAPIError, { email, org: organizationName }: { email: string; org: string }) => {\n if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {\n return t({\n id: 'error.jitIneligible',\n message: `${email} does not have access to ${organizationName}. If you think this is a mistake, contact your admin`,\n });\n }\n return getTranslatedError(error, t);\n };\n};\n\nexport const EmailForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [emailInput, setEmailInput] = useState(state.formState.passwordState.email);\n const parseErrorMessage = useParseErrorMessage();\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = hasProduct(products, 'emailMagicLinks');\n const enableOtp = hasProduct(products, 'emailOtp');\n\n const providedEmail = state.primary.email;\n const email = providedEmail || emailInput;\n\n const { trigger: stytchEmlLoginOrSignup, error: emlError, isMutating: emlIsMutating } = useEmlLoginOrSignup();\n const { trigger: stytchOtpLoginOrSignup, error: otpError, isMutating: otpIsMutating } = useEmailOtpLoginOrSignup();\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n const organization = state.flowState.organization;\n if (!organization) return <></>;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n } else if (enableOtp) {\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }\n };\n\n if (providedEmail) {\n return (\n <Column gap={2}>\n {products\n .filter((product) => product.id === 'emailMagicLinks' || product.id === 'emailOtp')\n .map((product) => {\n switch (product.id) {\n case 'emailMagicLinks':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={emlIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailLink', message: 'Email me a link' })}\n </Button>\n );\n\n case 'emailOtp':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={otpIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailCode', message: 'Email me a code' })}\n </Button>\n );\n }\n })}\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n }\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmailInput}\n hideLabel\n error={error ? parseErrorMessage(error, { email, org: organization.organization_name }) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n\nexport const EmailDiscoveryForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [email, setEmail] = useState(state.formState.passwordState.email);\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = products.some((p) => p.id === 'emailMagicLinks');\n const enableOtp = products.some((p) => p.id === 'emailOtp');\n\n const { trigger: stytchEmlDiscoverySend, error: emlError, isMutating: emlIsMutating } = useEmlDiscoverySend();\n const { trigger: stytchOtpDiscoverySend, error: otpError, isMutating: otpIsMutating } = useEmailOtpDiscoverySend();\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlDiscoverySend({ email });\n } else if (enableOtp) {\n stytchOtpDiscoverySend({ email });\n }\n };\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmail}\n hideLabel\n error={error ? getTranslatedError(error, t) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n"],"names":["JIT_PROVISIONING_ERRORS","useParseErrorMessage","useLingui","error","email","org","organizationName","includes","error_type","getTranslatedError","EmailForm","showPasswordButton","state","dispatch","useGlobalReducer","emailInput","setEmailInput","useState","formState","passwordState","parseErrorMessage","products","useEffectiveAuthConfig","enableEml","hasProduct","enableOtp","providedEmail","primary","trigger","stytchEmlLoginOrSignup","emlError","isMutating","emlIsMutating","useEmlLoginOrSignup","stytchOtpLoginOrSignup","otpError","otpIsMutating","useEmailOtpLoginOrSignup","organization","flowState","React","handleSubmit","e","preventDefault","type","screen","AppScreens","EmailMethodSelection","history","organization_id","Column","gap","filter","product","id","map","Button","key","onClick","loading","disabled","variant","UsePasswordButton","as","onSubmit","EmailInput","setEmail","hideLabel","organization_name","undefined","EmailDiscoveryForm","some","p","stytchEmlDiscoverySend","useEmlDiscoverySend","stytchOtpDiscoverySend","useEmailOtpDiscoverySend"],"mappings":"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"}
1
+ {"version":3,"file":"EmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport React, { useState } from 'react';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport UsePasswordButton from '../components/UsePasswordButton';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { useEffectiveAuthConfig } from '../hooks/useEffectiveAuthConfig';\nimport { useEmailOtpDiscoverySend } from '../hooks/useEmailOtpDiscoverySend';\nimport { useEmailOtpLoginOrSignup } from '../hooks/useEmailOtpLoginOrSignup';\nimport { useEmlDiscoverySend } from '../hooks/useEmlDiscoverySend';\nimport { useEmlLoginOrSignup } from '../hooks/useEmlLoginOrSignup';\nimport { AppScreens } from '../types/AppScreens';\nimport { hasProduct } from '../utils';\nimport { useParseErrorMessage } from './useParseErrorMessage';\n\nexport const EmailForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [emailInput, setEmailInput] = useState(state.formState.passwordState.email);\n const parseErrorMessage = useParseErrorMessage();\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = hasProduct(products, 'emailMagicLinks');\n const enableOtp = hasProduct(products, 'emailOtp');\n\n const providedEmail = state.primary.email;\n const email = providedEmail || emailInput;\n\n const { trigger: stytchEmlLoginOrSignup, error: emlError, isMutating: emlIsMutating } = useEmlLoginOrSignup();\n const { trigger: stytchOtpLoginOrSignup, error: otpError, isMutating: otpIsMutating } = useEmailOtpLoginOrSignup();\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n const organization = state.flowState.organization;\n if (!organization) return <></>;\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n } else if (enableOtp) {\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }\n };\n\n if (providedEmail) {\n return (\n <Column gap={2}>\n {products\n .filter((product) => product.id === 'emailMagicLinks' || product.id === 'emailOtp')\n .map((product) => {\n switch (product.id) {\n case 'emailMagicLinks':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchEmlLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={emlIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailLink', message: 'Email me a link' })}\n </Button>\n );\n\n case 'emailOtp':\n return (\n <Button\n key={product.id}\n onClick={() => {\n dispatch({ type: 'set_user_supplied_email', email });\n stytchOtpLoginOrSignup({ email, organization_id: organization.organization_id });\n }}\n loading={otpIsMutating}\n disabled={isMutating}\n variant=\"outline\"\n >\n {t({ id: 'button.emailCode', message: 'Email me a code' })}\n </Button>\n );\n }\n })}\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n }\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmailInput}\n hideLabel\n error={error ? parseErrorMessage(error, { email, org: organization.organization_name }) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n\nexport const EmailDiscoveryForm = ({ showPasswordButton }: { showPasswordButton: boolean }) => {\n const [state, dispatch] = useGlobalReducer();\n const [email, setEmail] = useState(state.formState.passwordState.email);\n const { t } = useLingui();\n\n const { products } = useEffectiveAuthConfig();\n const enableEml = products.some((p) => p.id === 'emailMagicLinks');\n const enableOtp = products.some((p) => p.id === 'emailOtp');\n\n const { trigger: stytchEmlDiscoverySend, error: emlError, isMutating: emlIsMutating } = useEmlDiscoverySend();\n const { trigger: stytchOtpDiscoverySend, error: otpError, isMutating: otpIsMutating } = useEmailOtpDiscoverySend();\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n dispatch({ type: 'set_user_supplied_email', email });\n\n if (enableEml && enableOtp) {\n dispatch({ type: 'transition', screen: AppScreens.EmailMethodSelection, history: 'push' });\n } else if (enableEml) {\n stytchEmlDiscoverySend({ email });\n } else if (enableOtp) {\n stytchOtpDiscoverySend({ email });\n }\n };\n\n const isMutating = emlIsMutating || otpIsMutating;\n const error = emlError || otpError;\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput\n email={email}\n setEmail={setEmail}\n hideLabel\n error={error ? getTranslatedError(error, t) : undefined}\n />\n\n <Button type=\"submit\" variant=\"primary\" loading={isMutating}>\n {t({ id: 'button.continueWithEmail', message: 'Continue with email' })}\n </Button>\n\n {showPasswordButton && <UsePasswordButton email={email} />}\n </Column>\n );\n};\n"],"names":["EmailForm","showPasswordButton","state","dispatch","useGlobalReducer","emailInput","setEmailInput","useState","formState","passwordState","email","parseErrorMessage","useParseErrorMessage","useLingui","products","useEffectiveAuthConfig","enableEml","hasProduct","enableOtp","providedEmail","primary","trigger","stytchEmlLoginOrSignup","error","emlError","isMutating","emlIsMutating","useEmlLoginOrSignup","stytchOtpLoginOrSignup","otpError","otpIsMutating","useEmailOtpLoginOrSignup","organization","flowState","React","handleSubmit","e","preventDefault","type","screen","AppScreens","EmailMethodSelection","history","organization_id","Column","gap","filter","product","id","map","Button","key","onClick","loading","disabled","variant","UsePasswordButton","as","onSubmit","EmailInput","setEmail","hideLabel","org","organization_name","undefined","EmailDiscoveryForm","some","p","stytchEmlDiscoverySend","useEmlDiscoverySend","stytchOtpDiscoverySend","useEmailOtpDiscoverySend","getTranslatedError"],"mappings":";;;;;;;;;;;;;;;;;;AAkBO,MAAMA,SAAAA,GAAY,CAAC,EAAEC,kBAAkB,EAAmC,GAAA;IAC/E,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,gBAAAA,EAAAA;IAC1B,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,CAAAA,CAASL,MAAMM,SAAS,CAACC,aAAa,CAACC,KAAK,CAAA;AAChF,IAAA,MAAMC,iBAAAA,GAAoBC,oBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,GAAA,EAAA,GAAQC,SAAAA,EAAAA;IAEd,MAAM,EAAEC,QAAQ,EAAE,GAAGC,sBAAAA,EAAAA;IACrB,MAAMC,SAAAA,GAAYC,WAAWH,QAAAA,EAAU,iBAAA,CAAA;IACvC,MAAMI,SAAAA,GAAYD,WAAWH,QAAAA,EAAU,UAAA,CAAA;AAEvC,IAAA,MAAMK,aAAAA,GAAgBjB,KAAAA,CAAMkB,OAAO,CAACV,KAAK;AACzC,IAAA,MAAMA,QAAQS,aAAAA,IAAiBd,UAAAA;IAE/B,MAAM,EAAEgB,OAAAA,EAASC,sBAAsB,EAAEC,KAAAA,EAAOC,QAAQ,EAAEC,UAAAA,EAAYC,aAAa,EAAE,GAAGC,mBAAAA,EAAAA;IACxF,MAAM,EAAEN,OAAAA,EAASO,sBAAsB,EAAEL,KAAAA,EAAOM,QAAQ,EAAEJ,UAAAA,EAAYK,aAAa,EAAE,GAAGC,wBAAAA,EAAAA;AAExF,IAAA,MAAMN,aAAaC,aAAAA,IAAiBI,aAAAA;AACpC,IAAA,MAAMP,QAAQC,QAAAA,IAAYK,QAAAA;AAE1B,IAAA,MAAMG,YAAAA,GAAe9B,KAAAA,CAAM+B,SAAS,CAACD,YAAY;IACjD,IAAI,CAACA,cAAc,qBAAOE,EAAA,CAAA,aAAA,CAAAA,EAAA,CAAA,QAAA,EAAA,IAAA,CAAA;AAE1B,IAAA,MAAMC,eAAe,OAAOC,CAAAA,GAAAA;AAC1BA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;QAChBlC,QAAAA,CAAS;YAAEmC,IAAAA,EAAM,yBAAA;AAA2B5B,YAAAA;AAAM,SAAA,CAAA;AAElD,QAAA,IAAIM,aAAaE,SAAAA,EAAW;YAC1Bf,QAAAA,CAAS;gBAAEmC,IAAAA,EAAM,YAAA;AAAcC,gBAAAA,MAAAA,EAAQC,WAAWC,oBAAoB;gBAAEC,OAAAA,EAAS;AAAO,aAAA,CAAA;AAC1F,QAAA,CAAA,MAAO,IAAI1B,SAAAA,EAAW;YACpBM,sBAAAA,CAAuB;AAAEZ,gBAAAA,KAAAA;AAAOiC,gBAAAA,eAAAA,EAAiBX,aAAaW;AAAgB,aAAA,CAAA;AAChF,QAAA,CAAA,MAAO,IAAIzB,SAAAA,EAAW;YACpBU,sBAAAA,CAAuB;AAAElB,gBAAAA,KAAAA;AAAOiC,gBAAAA,eAAAA,EAAiBX,aAAaW;AAAgB,aAAA,CAAA;AAChF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAIxB,aAAAA,EAAe;AACjB,QAAA,qBACEe,EAAA,CAAA,aAAA,CAACU,MAAAA,EAAAA;YAAOC,GAAAA,EAAK;AACV/B,SAAAA,EAAAA,QAAAA,CACEgC,MAAM,CAAC,CAACC,OAAAA,GAAYA,QAAQC,EAAE,KAAK,iBAAA,IAAqBD,OAAAA,CAAQC,EAAE,KAAK,UAAA,CAAA,CACvEC,GAAG,CAAC,CAACF,OAAAA,GAAAA;AACJ,YAAA,OAAQA,QAAQC,EAAE;gBAChB,KAAK,iBAAA;AACH,oBAAA,qBACEd,EAAA,CAAA,aAAA,CAACgB,MAAAA,EAAAA;AACCC,wBAAAA,GAAAA,EAAKJ,QAAQC,EAAE;wBACfI,OAAAA,EAAS,IAAA;4BACPjD,QAAAA,CAAS;gCAAEmC,IAAAA,EAAM,yBAAA;AAA2B5B,gCAAAA;AAAM,6BAAA,CAAA;4BAClDY,sBAAAA,CAAuB;AAAEZ,gCAAAA,KAAAA;AAAOiC,gCAAAA,eAAAA,EAAiBX,aAAaW;AAAgB,6BAAA,CAAA;AAChF,wBAAA,CAAA;wBACAU,OAAAA,EAAS3B,aAAAA;wBACT4B,QAAAA,EAAU7B,UAAAA;wBACV8B,OAAAA,EAAQ;;;;;gBAMd,KAAK,UAAA;AACH,oBAAA,qBACErB,EAAA,CAAA,aAAA,CAACgB,MAAAA,EAAAA;AACCC,wBAAAA,GAAAA,EAAKJ,QAAQC,EAAE;wBACfI,OAAAA,EAAS,IAAA;4BACPjD,QAAAA,CAAS;gCAAEmC,IAAAA,EAAM,yBAAA;AAA2B5B,gCAAAA;AAAM,6BAAA,CAAA;4BAClDkB,sBAAAA,CAAuB;AAAElB,gCAAAA,KAAAA;AAAOiC,gCAAAA,eAAAA,EAAiBX,aAAaW;AAAgB,6BAAA,CAAA;AAChF,wBAAA,CAAA;wBACAU,OAAAA,EAASvB,aAAAA;wBACTwB,QAAAA,EAAU7B,UAAAA;wBACV8B,OAAAA,EAAQ;;;;;AAKhB;AACF,QAAA,CAAA,CAAA,EAEDtD,oCAAsBiC,EAAA,CAAA,aAAA,CAACsB,iBAAAA,EAAAA;YAAkB9C,KAAAA,EAAOA;;AAGvD,IAAA;AAEA,IAAA,qBACEwB,EAAA,CAAA,aAAA,CAACU,MAAAA,EAAAA;QAAOa,EAAAA,EAAG,MAAA;QAAOC,QAAAA,EAAUvB,YAAAA;QAAcU,GAAAA,EAAK;qBAC7CX,EAAA,CAAA,aAAA,CAACyB,UAAAA,EAAAA;QACCjD,KAAAA,EAAOA,KAAAA;QACPkD,QAAAA,EAAUtD,aAAAA;QACVuD,SAAAA,EAAAA,IAAAA;QACAtC,KAAAA,EAAOA,KAAAA,GAAQZ,kBAAkBY,KAAAA,EAAO;AAAEb,YAAAA,KAAAA;AAAOoD,YAAAA,GAAAA,EAAK9B,aAAa+B;SAAkB,CAAA,GAAKC;sBAG5F9B,EAAA,CAAA,aAAA,CAACgB,MAAAA,EAAAA;QAAOZ,IAAAA,EAAK,QAAA;QAASiB,OAAAA,EAAQ,SAAA;QAAUF,OAAAA,EAAS5B;;;;AAIhDxB,KAAAA,CAAAA,CAAAA,EAAAA,kBAAAA,kBAAsBiC,EAAA,CAAA,aAAA,CAACsB,iBAAAA,EAAAA;QAAkB9C,KAAAA,EAAOA;;AAGvD;AAEO,MAAMuD,kBAAAA,GAAqB,CAAC,EAAEhE,kBAAkB,EAAmC,GAAA;IACxF,MAAM,CAACC,KAAAA,EAAOC,QAAAA,CAAS,GAAGC,gBAAAA,EAAAA;IAC1B,MAAM,CAACM,KAAAA,EAAOkD,QAAAA,CAAS,GAAGrD,CAAAA,CAASL,MAAMM,SAAS,CAACC,aAAa,CAACC,KAAK,CAAA;AACtE,IAAA,MAAM,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,GAAA,EAAA,GAAQG,SAAAA,EAAAA;IAEd,MAAM,EAAEC,QAAQ,EAAE,GAAGC,sBAAAA,EAAAA;IACrB,MAAMC,SAAAA,GAAYF,SAASoD,IAAI,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEnB,EAAE,KAAK,iBAAA,CAAA;IAChD,MAAM9B,SAAAA,GAAYJ,SAASoD,IAAI,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAEnB,EAAE,KAAK,UAAA,CAAA;IAEhD,MAAM,EAAE3B,OAAAA,EAAS+C,sBAAsB,EAAE7C,KAAAA,EAAOC,QAAQ,EAAEC,UAAAA,EAAYC,aAAa,EAAE,GAAG2C,mBAAAA,EAAAA;IACxF,MAAM,EAAEhD,OAAAA,EAASiD,sBAAsB,EAAE/C,KAAAA,EAAOM,QAAQ,EAAEJ,UAAAA,EAAYK,aAAa,EAAE,GAAGyC,wBAAAA,EAAAA;AAExF,IAAA,MAAMpC,eAAe,OAAOC,CAAAA,GAAAA;AAC1BA,QAAAA,CAAAA,CAAEC,cAAc,EAAA;QAChBlC,QAAAA,CAAS;YAAEmC,IAAAA,EAAM,yBAAA;AAA2B5B,YAAAA;AAAM,SAAA,CAAA;AAElD,QAAA,IAAIM,aAAaE,SAAAA,EAAW;YAC1Bf,QAAAA,CAAS;gBAAEmC,IAAAA,EAAM,YAAA;AAAcC,gBAAAA,MAAAA,EAAQC,WAAWC,oBAAoB;gBAAEC,OAAAA,EAAS;AAAO,aAAA,CAAA;AAC1F,QAAA,CAAA,MAAO,IAAI1B,SAAAA,EAAW;YACpBoD,sBAAAA,CAAuB;AAAE1D,gBAAAA;AAAM,aAAA,CAAA;AACjC,QAAA,CAAA,MAAO,IAAIQ,SAAAA,EAAW;YACpBoD,sBAAAA,CAAuB;AAAE5D,gBAAAA;AAAM,aAAA,CAAA;AACjC,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMe,aAAaC,aAAAA,IAAiBI,aAAAA;AACpC,IAAA,MAAMP,QAAQC,QAAAA,IAAYK,QAAAA;AAE1B,IAAA,qBACEK,EAAA,CAAA,aAAA,CAACU,MAAAA,EAAAA;QAAOa,EAAAA,EAAG,MAAA;QAAOC,QAAAA,EAAUvB,YAAAA;QAAcU,GAAAA,EAAK;qBAC7CX,EAAA,CAAA,aAAA,CAACyB,UAAAA,EAAAA;QACCjD,KAAAA,EAAOA,KAAAA;QACPkD,QAAAA,EAAUA,QAAAA;QACVC,SAAAA,EAAAA,IAAAA;QACAtC,KAAAA,EAAOA,KAAAA,GAAQiD,mBAAmBjD,KAAAA,EAAAA,GAAAA,CAAAA,GAAYyC;sBAGhD9B,EAAA,CAAA,aAAA,CAACgB,MAAAA,EAAAA;QAAOZ,IAAAA,EAAK,QAAA;QAASiB,OAAAA,EAAQ,SAAA;QAAUF,OAAAA,EAAS5B;;;;AAIhDxB,KAAAA,CAAAA,CAAAA,EAAAA,kBAAAA,kBAAsBiC,EAAA,CAAA,aAAA,CAACsB,iBAAAA,EAAAA;QAAkB9C,KAAAA,EAAOA;;AAGvD;;;;"}
@@ -1,7 +1,6 @@
1
1
  import { useLingui } from '../../../../../../node_modules/@lingui/react/dist/index.mjs';
2
2
  import wn from '../../../../../../node_modules/preact/compat/dist/compat.module.mjs';
3
3
  import { EMAIL_REGEX } from '../../../utils/index.mjs';
4
- import { getTranslatedError } from '../../../utils/getTranslatedError.mjs';
5
4
  import { readB2BInternals } from '../../../utils/internal.mjs';
6
5
  import Button from '../../components/atoms/Button.mjs';
7
6
  import Column from '../../components/atoms/Column.mjs';
@@ -10,53 +9,58 @@ import { PasswordInput } from '../../components/molecules/PasswordInput.mjs';
10
9
  import { useGlobalReducer } from '../GlobalContextProvider.mjs';
11
10
  import { AppScreens } from '../types/AppScreens.mjs';
12
11
  import { usePasswordInput } from '../usePasswordInput.mjs';
12
+ import { useParseErrorMessage } from './useParseErrorMessage.mjs';
13
13
  import { useState as h } from '../../../../../../node_modules/preact/hooks/dist/hooks.module.mjs';
14
14
 
15
15
  const PasswordsEmailForm = ()=>{
16
16
  const [, dispatch] = useGlobalReducer();
17
17
  const { i18n: $__i18n, _: $__ } = useLingui();
18
+ const parseErrorMessages = useParseErrorMessage();
18
19
  const { stytch, email, setEmail, password, setPassword, organization, errorMessage, setErrorMessage, isSubmitting, setIsSubmitting, submitPassword, submitDiscoveryPassword, handleNonMemberReset } = usePasswordInput();
19
20
  const [hideInput, setHideInput] = h(!!organization && !email);
20
21
  const handleSubmit = async (e)=>{
21
22
  e.preventDefault();
22
- if (organization) {
23
- const organization_id = organization.organization_id;
24
- // If we have processed the email, submit the password field
25
- if (!hideInput) {
26
- submitPassword(organization_id);
27
- return;
28
- }
29
- // Validate we have a member with a password. Otherwise, check if we can jit
30
- // provision and kickoff verification and session reset
31
- if (!email.match(EMAIL_REGEX)) {
32
- setErrorMessage($__i18n._({
33
- id: "error.invalidEmailAddress",
34
- message: "Invalid email address"
35
- }));
36
- return;
37
- }
38
- setErrorMessage('');
39
- setIsSubmitting(true);
40
- readB2BInternals(stytch).searchManager.searchMember(email, organization.organization_id).then(({ member })=>{
41
- if (member) {
42
- setHideInput(false);
43
- setIsSubmitting(false);
44
- dispatch({
45
- type: 'set_password_state',
46
- email
47
- });
48
- return;
49
- }
50
- // No member password flow: verify email and use reset by session
51
- handleNonMemberReset();
52
- }).catch((err)=>{
53
- setIsSubmitting(false);
54
- setErrorMessage(getTranslatedError(err, $__));
55
- });
56
- } else {
23
+ if (!organization) {
57
24
  // Discovery flow
58
25
  submitDiscoveryPassword();
26
+ return;
27
+ }
28
+ const organization_id = organization.organization_id;
29
+ // If we have processed the email, submit the password field
30
+ if (!hideInput) {
31
+ submitPassword(organization_id);
32
+ return;
59
33
  }
34
+ // Validate we have a member with a password. Otherwise, check if we can jit
35
+ // provision and kickoff verification and session reset
36
+ if (!email.match(EMAIL_REGEX)) {
37
+ setErrorMessage($__i18n._({
38
+ id: "error.invalidEmailAddress",
39
+ message: "Invalid email address"
40
+ }));
41
+ return;
42
+ }
43
+ setErrorMessage('');
44
+ setIsSubmitting(true);
45
+ readB2BInternals(stytch).searchManager.searchMember(email, organization.organization_id).then(({ member })=>{
46
+ if (member) {
47
+ setHideInput(false);
48
+ setIsSubmitting(false);
49
+ dispatch({
50
+ type: 'set_password_state',
51
+ email
52
+ });
53
+ return;
54
+ }
55
+ // No member password flow: verify email and use reset by session
56
+ handleNonMemberReset();
57
+ }).catch((err)=>{
58
+ setIsSubmitting(false);
59
+ setErrorMessage(parseErrorMessages(err, {
60
+ email,
61
+ org: organization_id
62
+ }));
63
+ });
60
64
  };
61
65
  const onGetHelp = ()=>{
62
66
  dispatch({
@@ -74,7 +78,8 @@ const PasswordsEmailForm = ()=>{
74
78
  gap: 2
75
79
  }, /*#__PURE__*/ wn.createElement(EmailInput, {
76
80
  email: email,
77
- setEmail: setEmail
81
+ setEmail: setEmail,
82
+ error: hideInput ? errorMessage : undefined
78
83
  }), !hideInput && /*#__PURE__*/ wn.createElement(PasswordInput, {
79
84
  password: password,
80
85
  setPassword: setPassword,
@@ -1 +1 @@
1
- {"version":3,"file":"PasswordEmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/PasswordEmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { EMAIL_REGEX } from '../../../utils';\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport { readB2BInternals } from '../../../utils/internal';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport { PasswordInput } from '../../components/molecules/PasswordInput';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { usePasswordInput } from '../usePasswordInput';\n\nexport const PasswordsEmailForm = () => {\n const [, dispatch] = useGlobalReducer();\n const { t } = useLingui();\n\n const {\n stytch,\n email,\n setEmail,\n password,\n setPassword,\n organization,\n errorMessage,\n setErrorMessage,\n isSubmitting,\n setIsSubmitting,\n submitPassword,\n submitDiscoveryPassword,\n handleNonMemberReset,\n } = usePasswordInput();\n\n const [hideInput, setHideInput] = useState(!!organization && !email);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (organization) {\n const organization_id = organization.organization_id;\n\n // If we have processed the email, submit the password field\n if (!hideInput) {\n submitPassword(organization_id);\n return;\n }\n\n // Validate we have a member with a password. Otherwise, check if we can jit\n // provision and kickoff verification and session reset\n if (!email.match(EMAIL_REGEX)) {\n setErrorMessage(t({ id: 'error.invalidEmailAddress', message: 'Invalid email address' }));\n return;\n }\n setErrorMessage('');\n setIsSubmitting(true);\n readB2BInternals(stytch)\n .searchManager.searchMember(email, organization.organization_id)\n .then(({ member }) => {\n if (member) {\n setHideInput(false);\n setIsSubmitting(false);\n dispatch({ type: 'set_password_state', email });\n return;\n }\n // No member password flow: verify email and use reset by session\n handleNonMemberReset();\n })\n .catch((err: StytchAPIError) => {\n setIsSubmitting(false);\n setErrorMessage(getTranslatedError(err, t));\n });\n } else {\n // Discovery flow\n submitDiscoveryPassword();\n }\n };\n\n const onGetHelp = () => {\n dispatch({ type: 'set_password_state', email: email });\n dispatch({ type: 'transition', screen: AppScreens.PasswordForgotForm });\n };\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput email={email} setEmail={setEmail} />\n\n {!hideInput && (\n <PasswordInput password={password} setPassword={setPassword} type=\"current\" error={errorMessage} />\n )}\n\n <Button variant=\"primary\" loading={isSubmitting} type=\"submit\">\n {t({ id: 'button.continue', message: 'Continue' })}\n </Button>\n\n {!hideInput && (\n <Button variant=\"outline\" onClick={onGetHelp}>\n {t({ id: 'link.signupResetPassword', message: 'Sign up or reset password' })}\n </Button>\n )}\n </Column>\n );\n};\n"],"names":["PasswordsEmailForm","dispatch","useGlobalReducer","useLingui","stytch","email","setEmail","password","setPassword","organization","errorMessage","setErrorMessage","isSubmitting","setIsSubmitting","submitPassword","submitDiscoveryPassword","handleNonMemberReset","usePasswordInput","hideInput","setHideInput","useState","handleSubmit","e","preventDefault","organization_id","match","EMAIL_REGEX","readB2BInternals","searchManager","searchMember","then","member","type","catch","err","getTranslatedError","onGetHelp","screen","AppScreens","PasswordForgotForm","React","Column","as","onSubmit","gap","EmailInput","PasswordInput","error","Button","variant","loading","onClick"],"mappings":"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"}
1
+ {"version":3,"file":"PasswordEmailForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/PasswordEmailForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\nimport React, { useState } from 'react';\n\nimport { EMAIL_REGEX } from '../../../utils';\nimport { readB2BInternals } from '../../../utils/internal';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport { PasswordInput } from '../../components/molecules/PasswordInput';\nimport { useGlobalReducer } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { usePasswordInput } from '../usePasswordInput';\nimport { useParseErrorMessage } from './useParseErrorMessage';\n\nexport const PasswordsEmailForm = () => {\n const [, dispatch] = useGlobalReducer();\n const { t } = useLingui();\n\n const parseErrorMessages = useParseErrorMessage();\n\n const {\n stytch,\n email,\n setEmail,\n password,\n setPassword,\n organization,\n errorMessage,\n setErrorMessage,\n isSubmitting,\n setIsSubmitting,\n submitPassword,\n submitDiscoveryPassword,\n handleNonMemberReset,\n } = usePasswordInput();\n\n const [hideInput, setHideInput] = useState(!!organization && !email);\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (!organization) {\n // Discovery flow\n submitDiscoveryPassword();\n return;\n }\n\n const organization_id = organization.organization_id;\n\n // If we have processed the email, submit the password field\n if (!hideInput) {\n submitPassword(organization_id);\n return;\n }\n\n // Validate we have a member with a password. Otherwise, check if we can jit\n // provision and kickoff verification and session reset\n if (!email.match(EMAIL_REGEX)) {\n setErrorMessage(t({ id: 'error.invalidEmailAddress', message: 'Invalid email address' }));\n return;\n }\n setErrorMessage('');\n setIsSubmitting(true);\n readB2BInternals(stytch)\n .searchManager.searchMember(email, organization.organization_id)\n .then(({ member }) => {\n if (member) {\n setHideInput(false);\n setIsSubmitting(false);\n dispatch({ type: 'set_password_state', email });\n return;\n }\n // No member password flow: verify email and use reset by session\n handleNonMemberReset();\n })\n .catch((err: StytchAPIError) => {\n setIsSubmitting(false);\n setErrorMessage(parseErrorMessages(err, { email, org: organization_id }));\n });\n };\n\n const onGetHelp = () => {\n dispatch({ type: 'set_password_state', email: email });\n dispatch({ type: 'transition', screen: AppScreens.PasswordForgotForm });\n };\n\n return (\n <Column as=\"form\" onSubmit={handleSubmit} gap={2}>\n <EmailInput email={email} setEmail={setEmail} error={hideInput ? errorMessage : undefined} />\n\n {!hideInput && (\n <PasswordInput password={password} setPassword={setPassword} type=\"current\" error={errorMessage} />\n )}\n\n <Button variant=\"primary\" loading={isSubmitting} type=\"submit\">\n {t({ id: 'button.continue', message: 'Continue' })}\n </Button>\n\n {!hideInput && (\n <Button variant=\"outline\" onClick={onGetHelp}>\n {t({ id: 'link.signupResetPassword', message: 'Sign up or reset password' })}\n </Button>\n )}\n </Column>\n );\n};\n"],"names":["PasswordsEmailForm","dispatch","useGlobalReducer","useLingui","parseErrorMessages","useParseErrorMessage","stytch","email","setEmail","password","setPassword","organization","errorMessage","setErrorMessage","isSubmitting","setIsSubmitting","submitPassword","submitDiscoveryPassword","handleNonMemberReset","usePasswordInput","hideInput","setHideInput","useState","handleSubmit","e","preventDefault","organization_id","match","EMAIL_REGEX","readB2BInternals","searchManager","searchMember","then","member","type","catch","err","org","onGetHelp","screen","AppScreens","PasswordForgotForm","React","Column","as","onSubmit","gap","EmailInput","error","undefined","PasswordInput","Button","variant","loading","onClick"],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { useLingui } from '../../../../../../node_modules/@lingui/react/dist/index.mjs';
2
+ import { getTranslatedError } from '../../../utils/getTranslatedError.mjs';
3
+
4
+ const JIT_PROVISIONING_ERRORS = [
5
+ 'email_jit_provisioning_not_allowed',
6
+ 'invalid_email_for_jit_provisioning'
7
+ ];
8
+ /**
9
+ * Translates error message to user friendlier format including handling for JIT errors
10
+ */ const useParseErrorMessage = ()=>{
11
+ const { i18n: $__i18n, _: $__ } = useLingui();
12
+ return (error, { email, org: organizationName })=>{
13
+ if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {
14
+ return $__i18n._({
15
+ id: "error.jitIneligible",
16
+ message: "{email} does not have access to {organizationName}. If you think this is a mistake, contact your admin",
17
+ values: {
18
+ email: email,
19
+ organizationName: organizationName
20
+ }
21
+ });
22
+ }
23
+ return getTranslatedError(error, $__);
24
+ };
25
+ };
26
+
27
+ export { useParseErrorMessage };
28
+ //# sourceMappingURL=useParseErrorMessage.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useParseErrorMessage.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/useParseErrorMessage.ts"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { StytchAPIError } from '@stytch/core/public';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\n\nconst JIT_PROVISIONING_ERRORS = ['email_jit_provisioning_not_allowed', 'invalid_email_for_jit_provisioning'];\n\n/**\n * Translates error message to user friendlier format including handling for JIT errors\n */\nexport const useParseErrorMessage = () => {\n const { t } = useLingui();\n return (error: StytchAPIError, { email, org: organizationName }: { email: string; org: string }) => {\n if (JIT_PROVISIONING_ERRORS.includes(error.error_type)) {\n return t({\n id: 'error.jitIneligible',\n message: `${email} does not have access to ${organizationName}. If you think this is a mistake, contact your admin`,\n });\n }\n return getTranslatedError(error, t);\n };\n};\n"],"names":["JIT_PROVISIONING_ERRORS","useParseErrorMessage","useLingui","error","email","org","organizationName","includes","error_type","getTranslatedError"],"mappings":";;;AAKA,MAAMA,uBAAAA,GAA0B;AAAC,IAAA,oCAAA;AAAsC,IAAA;AAAqC,CAAA;AAE5G;;UAGaC,oBAAAA,GAAuB,IAAA;AAClC,IAAA,MAAM,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,GAAA,EAAA,GAAQC,SAAAA,EAAAA;AACd,IAAA,OAAO,CAACC,KAAAA,EAAuB,EAAEC,KAAK,EAAEC,GAAAA,EAAKC,gBAAgB,EAAkC,GAAA;AAC7F,QAAA,IAAIN,uBAAAA,CAAwBO,QAAQ,CAACJ,KAAAA,CAAMK,UAAU,CAAA,EAAG;AACtD,YAAA,OAAA,OAAA,CAAA,CAAA,CAAA;;;;AAEcJ,oBAAAA,KAAAA,EAAAA,KAAAA;AAAiCE,oBAAAA,gBAAAA,EAAAA;;;AAEjD,QAAA;AACA,QAAA,OAAOG,kBAAAA,CAAmBN,KAAAA,EAAAA,GAAAA,CAAAA;AAC5B,IAAA,CAAA;AACF;;;;"}
@@ -29,5 +29,5 @@ const myComponent = () => {
29
29
  \`\`\`
30
30
 
31
31
  If you want to make API calls from server environments, please use the Stytch Node Library
32
- https://www.npmjs.com/package/stytch.`)}}),eY="bootstrap",eJ=()=>({displayWatermark:!1,projectName:null,cnameDomain:null,emailDomains:["stytch.com"],captchaSettings:{enabled:!1},pkceRequiredForEmailMagicLinks:!1,pkceRequiredForPasswordResets:!1,pkceRequiredForOAuth:!1,pkceRequiredForSso:!1,slugPattern:null,createOrganizationEnabled:!1,passwordConfig:null,runDFPProtectedAuth:!1,rbacPolicy:null,siweRequiredForCryptoWallets:!1,vertical:null});class eX{_publicToken;_networkClient;_dataLayer;_bootstrapDataPromise;constructor(e,t,i){this._publicToken=e,this._networkClient=t,this._dataLayer=i,this._bootstrapDataPromise=this._networkClient.fetchSDK({url:`/projects/bootstrap/${this._publicToken}`,method:"GET"}).then(eX.mapBootstrapData).then(e=>(this._dataLayer.setItem(eY,JSON.stringify(e)),e)).catch(e=>(em(e),eJ()))}static mapBootstrapData(e){let t=null!==e.password_config?{ludsComplexity:e.password_config.luds_complexity,ludsMinimumCount:e.password_config.luds_minimum_count}:null;return{projectName:e.project_name,displayWatermark:!e.disable_sdk_watermark,captchaSettings:e.captcha_settings,cnameDomain:e.cname_domain,emailDomains:e.email_domains,pkceRequiredForEmailMagicLinks:e.pkce_required_for_email_magic_links,pkceRequiredForPasswordResets:e.pkce_required_for_password_resets,pkceRequiredForOAuth:e.pkce_required_for_oauth,pkceRequiredForSso:e.pkce_required_for_sso,slugPattern:e.slug_pattern,createOrganizationEnabled:e.create_organization_enabled,passwordConfig:t,runDFPProtectedAuth:e.dfp_protected_auth_enabled??!1,dfpProtectedAuthMode:e.dfp_protected_auth_mode,rbacPolicy:e.rbac_policy??null,siweRequiredForCryptoWallets:e.siwe_required_for_crypto_wallets,vertical:e.vertical}}getSync(){let e=this._dataLayer.getItem(eY);if(null===e)return eJ();try{return JSON.parse(e)}catch{return eJ()}}getAsync(){return this._bootstrapDataPromise}}class eZ{bootstrapPromise;state;constructor(e){this.bootstrapPromise=e,this.state=e.then(async e=>{let t;return e.captchaSettings.enabled?{configured:!0,captchaClient:await (t=e.captchaSettings.siteKey,eb(`https://www.google.com/recaptcha/enterprise.js?render=${t}`,()=>window.grecaptcha.enterprise)),siteKey:e.captchaSettings.siteKey}:{configured:!1}})}executeRecaptcha=async()=>{let{captchaClient:e,configured:t,siteKey:i}=await this.state;if(t)return await new Promise(t=>e.ready(t)),e.execute(i,{action:"LOGIN"})}}class eQ{iframeURL;_frameClient;constructor(e){this.iframeURL=e}get frameClient(){return this._frameClient=this._frameClient??new e$(this.iframeURL),this._frameClient}call(e,t){return this.frameClient.call(e,[t])}oneTapStart=e=>this.call("oneTapStart",e);oneTapSubmit=e=>this.call("oneTapSubmit",e);parsedPhoneNumber=e=>this.call("parsedPhoneNumber",e);getExamplePhoneNumber=e=>this.call("getExamplePhoneNumber",e)}class e2{_publicToken;_subscriptionDataLayer;additionalTelemetryDataFn;eventLogger;baseURL;constructor(e,t,i,r,s){this._publicToken=e,this._subscriptionDataLayer=t,this.additionalTelemetryDataFn=s,this.baseURL=i,(e=>e.includes("public-token-test"))(e)&&(this.baseURL=r),this.eventLogger=new ek({maxBatchSize:15,intervalDurationMs:800,logEventURL:this.buildSDKUrl("/events")})}updateSessionToken=()=>null;logEvent({name:e,details:t,error:i={}}){this.eventLogger.logEvent(this.createTelemetryBlob(),{public_token:this._publicToken,event_name:e,details:t,error_code:i.error_code,error_description:i.error_description,http_status_code:i.http_status_code})}createTelemetryBlob(){return{event_id:`event-id-${eh()}`,app_session_id:`app-session-id-${eh()}`,persistent_id:`persistent-id-${eh()}`,client_sent_at:new Date().toISOString(),timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,...this.additionalTelemetryDataFn(),app:{identifier:window.location.hostname},sdk:{identifier:"Stytch.js Javascript SDK",version:"@stytch/vanilla-js@6.0.9"}}}async fetchSDK({url:e,body:t,method:i}){let r=this._subscriptionDataLayer.readSessionCookie().session_token,s="Basic "+window.btoa(this._publicToken+":"+(r||this._publicToken)),o=window.btoa(JSON.stringify(this.createTelemetryBlob())),n=window.location.origin;return eo({basicAuthHeader:s,body:t,finalURL:this.buildSDKUrl(e),method:i,xSDKClientHeader:o,xSDKParentHostHeader:n})}async submitFormSDK({url:e,body:t,method:i}){let r=this._subscriptionDataLayer.readSessionCookie().session_token,s="Basic "+window.btoa(this._publicToken+":"+(r||this._publicToken)),o=window.btoa(JSON.stringify(this.createTelemetryBlob())),n=window.location.origin;return en({basicAuthHeader:s,body:t,finalURL:this.buildSDKUrl(e),method:i,xSDKClientHeader:o,xSDKParentHostHeader:n})}async retriableFetchSDK({url:e,body:t,method:i,retryCallback:r}){let s=this._subscriptionDataLayer.readSessionCookie().session_token,o="Basic "+window.btoa(this._publicToken+":"+(s||this._publicToken)),n=window.btoa(JSON.stringify(this.createTelemetryBlob())),a=window.location.origin;return es({basicAuthHeader:o,body:t,finalURL:this.buildSDKUrl(e),method:i,xSDKClientHeader:n,xSDKParentHostHeader:a,retryCallback:r})}buildSDKUrl(e){return`${this.baseURL}/sdk/v1${e}`}}function e0(e){let t=e.toString(16);return 1===t.length&&(t="0"+t),t}class e1{_dataLayer;namespace;constructor(e,t){this._dataLayer=e,this.namespace=t}key(){return`PKCE_VERIFIER:${this.namespace}`}async startPKCETransaction(){let e=await e1.createProofkeyPair();return this._dataLayer.setItem(this.key(),JSON.stringify(e)),e}getPKPair(){let e=this._dataLayer.getItem(this.key());if(null!==e)try{return JSON.parse(e)}catch{ep("Found malformed Proof Key pair in localstorage.");return}}clearPKPair(){return this._dataLayer.removeItem(this.key())}static async createProofkeyPair(){var e;let t=new Uint32Array(16);window.crypto.getRandomValues(t);let i=Array.from(t).map(e0).join("");return{code_challenge:(e=await window.crypto.subtle.digest("SHA-256",new TextEncoder().encode(i)),btoa(String.fromCharCode.call(null,...new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")),code_verifier:i}}}function e6(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var r in i)e[r]=i[r]}return e}var e3=function e(t,i){function r(e,r,s){if("u">typeof document){"number"==typeof(s=e6({},i,s)).expires&&(s.expires=new Date(Date.now()+864e5*s.expires)),s.expires&&(s.expires=s.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var o="";for(var n in s)s[n]&&(o+="; "+n,!0!==s[n]&&(o+="="+s[n].split(";")[0]));return document.cookie=e+"="+t.write(r,e)+o}}return Object.create({set:r,get:function(e){if("u">typeof document&&(!arguments.length||e)){for(var i=document.cookie?document.cookie.split("; "):[],r={},s=0;s<i.length;s++){var o=i[s].split("="),n=o.slice(1).join("=");try{var a=decodeURIComponent(o[0]);if(r[a]=t.read(n,a),e===a)break}catch(e){}}return e?r[e]:r}},remove:function(e,t){r(e,"",e6({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,e6({},this.attributes,t))},withConverter:function(t){return e(e6({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(i)},converter:{value:Object.freeze(t)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});let e5=e=>(document.cookie?document.cookie.split("; "):[]).filter(t=>{let[i]=t.split("=");return e===i}).length>1,e9=(e,t)=>`stytch_sdk_state_${e}${t?`::${t}`:""}`;function e4(e){return null==e?{getItem:()=>null,removeItem(){},setItem(){}}:{getItem(t,i){let r=e9(t,i);try{return e.getItem(r)}catch{return null}},setItem(t,i,r){let s=e9(t,i);try{r&&e.setItem(s,r)}catch{}},removeItem(t,i){let r=e9(t,i);try{e.removeItem(r)}catch{}}}}let e8=e4(globalThis.localStorage),e7=e4(globalThis.sessionStorage);function te(e,t){return{getItem:i=>e.getItem(t,i),setItem(i,r){e.setItem(t,i,r)},removeItem(i){e.removeItem(t,i)}}}let tt="seen_domains";class ti{publicToken;state;_opaqueTokenCookieName=null;_jwtCookieName=null;_cookiePath=null;_domain=null;_cookieAvailableToSubdomains=!1;_istCookieName=null;subscriptions;_localStorage;browserSessionStorage;constructor(e,t){let i;this.publicToken=e,this.state=null,this.subscriptions={},this._localStorage=te(e8,e),this.browserSessionStorage=te(e7,e),t?.cookieOptions&&(this._opaqueTokenCookieName=t.cookieOptions.opaqueTokenCookieName||null,this._jwtCookieName=t.cookieOptions.jwtCookieName||null,this._cookiePath=t.cookieOptions.path||null,this._domain=t.cookieOptions.domain||null,this._cookieAvailableToSubdomains=t.cookieOptions.availableToSubdomains||!1,this._istCookieName=t.cookieOptions.istCookieName||null);const r=this._localStorage.getItem("");if(!r)return;try{i=JSON.parse(r)}catch{this.syncToLocalStorage();return}this.state=i}get opaqueTokenCookieName(){return this._opaqueTokenCookieName??"stytch_session"}get jwtCookieName(){return this._jwtCookieName??"stytch_session_jwt"}get istCookieName(){return this._istCookieName??"stytch_intermediate_session_token"}readSessionCookie(){return{session_token:e3.get(this.opaqueTokenCookieName),session_jwt:e3.get(this.jwtCookieName)}}readIntermediateSessionTokenCookie(){return e3.get(this.istCookieName)}writeSessionCookie(e){let{state:t,session_token:i,session_jwt:r}=e,s=ti.generateCookieOpts({expiresAt:t?.session?.expires_at??"",availableToSubdomains:this._cookieAvailableToSubdomains,path:this._cookiePath,domain:this._domain});s.domain&&this.addSeenDomain(s.domain),e3.set(this.opaqueTokenCookieName,i,s),e3.set(this.jwtCookieName,r,s);let o=ti.generateCookieOpts({expiresAt:t?.session?.expires_at??"",availableToSubdomains:!this._cookieAvailableToSubdomains,path:this._cookiePath,domain:this._domain});o.domain&&this.addSeenDomain(o.domain),e5(this.jwtCookieName)&&e3.remove(this.jwtCookieName,o),e5(this.opaqueTokenCookieName)&&e3.remove(this.opaqueTokenCookieName,o),e5(this.jwtCookieName)&&ep("Could not remove extraneous JWT cookie. This might happen if the cookie has been set using multiple `path` settings, and may produce unwanted behavior."),e5(this.opaqueTokenCookieName)&&ep("Could not remove extraneous opaque token cookie.")}writeIntermediateSessionTokenCookie(e){let t=new Date(Date.now()+6e5),i=ti.generateCookieOpts({expiresAt:t.toString(),availableToSubdomains:this._cookieAvailableToSubdomains,path:this._cookiePath,domain:this._domain});e3.set(this.istCookieName,e,i)}removeSessionCookie(){this.removeCookies([this.opaqueTokenCookieName,this.jwtCookieName])}removeISTCookie(){this.removeCookies([this.istCookieName])}removeCookies(e){let t=this.getSeenDomains(),i=[...new Set([this._domain,null,...t])];[!0,!1].forEach(t=>{[this._cookiePath,null].forEach(r=>{i.forEach(i=>{let s=ti.generateCookieOpts({expiresAt:new Date(0).toString(),availableToSubdomains:t,path:r,domain:i});e.forEach(e=>{e3.remove(e,s)})})})})}syncToLocalStorage(){this._localStorage.setItem("",JSON.stringify(this.state))}getItem(e){return this._localStorage.getItem(e)}setItem(e,t){this._localStorage.setItem(e,t)}removeItem(e){this._localStorage.removeItem(e)}getSeenDomains(){let e=this.getItem(tt);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}addSeenDomain(e){if(!e)return;let t=this.getSeenDomains();t.includes(e)||(t.push(e),this.setItem(tt,JSON.stringify(t)))}static generateCookieOpts({path:e,domain:t,availableToSubdomains:i,expiresAt:r}){let s={expires:new Date(r),sameSite:"lax"};return e&&(s.path=e),"localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)?s.secure=!1:(i&&(s.domain=t||window.location.host),s.secure=!0),s}}class tr extends ti{}let ts=Symbol.for("__stytch_b2b_DataLayer"),to=(e,t)=>{Object.values(e).forEach(e=>e(t))},tn=(({KEYS_TO_EXCLUDE:e=[]}={})=>{let t=(i,r)=>typeof i==typeof r&&(null===i||null===r?i===r:"object"==typeof i?!(Object.keys(i).length!==Object.keys(r).length||Object.keys(i).some(e=>!(e in r)))&&Object.entries(i).filter(([t])=>!e.includes(t)).every(([e,i])=>t(i,r[e])):i===r);return t})({KEYS_TO_EXCLUDE:["last_accessed_at"]});class ta{_publicToken;_datalayer;fromCache=!0;constructor(e,t,{usingCustomApiEndpoint:i}){if(this._publicToken=e,this._datalayer=t,window.addEventListener("storage",this._listen),!i){const{session_token:e}=this._datalayer.readSessionCookie();if(!e)return void this.destroySession()}}_listen=e=>{if(e.key!==e9(this._publicToken,""))return;let t=null===e.newValue||"null"===e.newValue?null:JSON.parse(e.newValue);this.updateState(t,!0)};getTokens(){let{session_token:e,session_jwt:t}=this._datalayer.readSessionCookie();return"string"!=typeof e||"string"!=typeof t?null:{session_token:e,session_jwt:t}}getIntermediateSessionToken(){return this._datalayer.readIntermediateSessionTokenCookie()||null}destroyState(){this.updateStateAndTokens({state:null,session_token:null,session_jwt:null,intermediate_session_token:null})}destroySession(){this._datalayer.removeSessionCookie(),this.updateState(null)}_updateStateAndTokensInternal(e,t){let i=this._datalayer.state,r=null===e.state?null:{...this._datalayer.state,...e.state};this._datalayer.state=r;let s=this.getFromCache();if(this.setCacheRefreshed(),s||!tn(i,r)){let e;e=null==r||t.fromCache?r:{...r,sessionDurationMinutes:t.sessionDurationMinutes},to(this._datalayer.subscriptions,e)}}updateStateAndTokens(e,t={fromCache:!1}){e.state?("string"==typeof e.session_token?this._datalayer.writeSessionCookie(e):this._datalayer.removeSessionCookie(),this._datalayer.removeISTCookie()):e.intermediate_session_token?("string"==typeof e.intermediate_session_token?this._datalayer.writeIntermediateSessionTokenCookie(e.intermediate_session_token):this._datalayer.removeISTCookie(),this._datalayer.removeSessionCookie()):(this._datalayer.removeSessionCookie(),this._datalayer.removeISTCookie()),this._updateStateAndTokensInternal(e,t),this._datalayer.syncToLocalStorage()}updateState(e,t=!1){let i=this._datalayer.state,r=null===e?null:{...this._datalayer.state,...e};this._datalayer.state=r;let s=this.getFromCache();this.setCacheRefreshed();let o=!tn(i,r);(s||o)&&(to(this._datalayer.subscriptions,r),o&&!t&&this._datalayer.syncToLocalStorage())}updateTokens(e){let{session_token:t,session_jwt:i}=e,r={...this._datalayer.readSessionCookie(),session_token:t,session_jwt:i};"string"==typeof t||"string"==typeof i?(this._datalayer.writeSessionCookie(r),this._datalayer.removeISTCookie()):this._datalayer.removeSessionCookie()}subscribeToState(e){var t;let i;return t=this._datalayer.subscriptions,t[i=Math.random().toString(36).slice(-10)]=e,()=>delete t[i]}getState(){return this._datalayer.state}destroy(){window.removeEventListener("storage",this._listen)}syncFromDeviceStorage(){return null}getFromCache(){return this.fromCache}setCacheRefreshed(){this.fromCache=!1}}class tc extends ta{updateMember=e=>this.updateState({member:e});getMember=()=>this.getState()?.member??null;updateOrganization=e=>this.updateState({organization:e});getOrganization=()=>this.getState()?.organization??null;getSession=()=>this.getState()?.session??null;updateSession=(e,t)=>{if("member_session"in e&&e.member_session){let i=e.session_token&&e.session_jwt?{session_token:e.session_token,session_jwt:e.session_jwt}:{session_token:!0,session_jwt:!0};this.updateStateAndTokens({state:{session:e.member_session,member:e.member,organization:e.organization},...i,intermediate_session_token:null},{fromCache:!1,sessionDurationMinutes:t?.sessionDurationMinutes})}else this.updateStateAndTokens({state:null,session_token:null,session_jwt:null,intermediate_session_token:e.intermediate_session_token||!0},{fromCache:!1,sessionDurationMinutes:t?.sessionDurationMinutes})};withUpdateSession=e=>async t=>{let i=await e(t);return this.updateSession(i,{sessionDurationMinutes:t?.session_duration_minutes}),i}}let tl=Symbol.for("stytch__internal_b2b");class td extends eD{_oneTap;constructor(e,t,i,r,s,o=ew(),n){super(e,t,i,r,s,o),this._oneTap=n}startOneTapDiscovery=async e=>{let t=await this._oneTap.createOneTapClient();if(!t.success)throw Error(`One Tap could not load: ${t.reason}`);let{client:i}=t,r=this._oneTap.createOnDiscoverySuccessHandler({discoveryRedirectUrl:e.discovery_redirect_url,onSuccess:this._oneTap.redirectOnSuccess});return i.render({style:{position:Y.floating},callback:r,cancelOnTapOutside:e.cancel_on_tap_outside})};startOneTap=async e=>{if(!e.organization_id)throw new n("stytch.oauth.googleOneTap.start","organization_id is a required argument");let t=await this._oneTap.createOneTapClient();if(!t.success)throw Error(`One Tap could not load: ${t.reason}`);let{client:i}=t,r=this._oneTap.createOnSuccessHandler({organizationId:e.organization_id,signupRedirectUrl:e.signup_redirect_url,loginRedirectUrl:e.login_redirect_url,onSuccess:this._oneTap.redirectOnSuccess});return i.render({style:{position:Y.floating},callback:r,cancelOnTapOutside:e.cancel_on_tap_outside})};googleOneTap={discovery:{start:this.startOneTapDiscovery},start:this.startOneTap}}let th="u">typeof window&&"IdentityCredential"in window,tu=e=>e===Y.forceLegacyEmbedded?"force":e===Y.embeddedOnly||e===Y.embedded||e===Y.floatingOrEmbedded;class t_{_googleClient;_clientId;constructor(e,t){this._googleClient=e,this._clientId=t}cancel(){this._googleClient.cancel()}async render({callback:e,onOneTapCancelled:t,style:i,cancelOnTapOutside:r=!0}){let s,o=tu(i.position),n="force"===(s=tu(i.position))||s&&!th,a={client_id:this._clientId,callback:e,auto_select:!1,context:"use",itp_support:!0,use_fedcm_for_prompt:"force"!==o,cancel_on_tap_outside:r};return n&&(a.prompt_parent_id="google-parent-prompt",a.cancel_on_tap_outside=!1),this._googleClient.initialize(a),new Promise(e=>{this._googleClient.prompt(i=>{if(i.isSkippedMoment()){let r=i.getSkippedReason?.()??"unknown_reason";return"user_cancel"===r&&t?.(),e({success:!1,reason:r})}return!i.isNotDisplayed&&n||i.isNotDisplayed?.()?e({success:!1,reason:i.getNotDisplayedReason?.()??"unknown_reason"}):i.isDismissedMoment()?void 0:(this.styleFrame(n),e({success:!0}))})})}styleFrame(e){e&&Array.from(document.getElementsByTagName("iframe")).forEach(e=>{e.src.includes(t)&&(e.style.width="100%")})}}let tp=Promise.resolve({pkceRequiredForOAuth:!1});class tm{_networkClient;_pkceManager;_config;googleClientID;constructor(e,t,i=tp){this._networkClient=e,this._pkceManager=t,this._config=i}async fetchGoogleStart(){if(this.googleClientID)return this.googleClientID;let e=await this._networkClient.fetchSDK({url:"/b2b/oauth/google/onetap/start",method:"GET"});return this.googleClientID=e.google_client_id,this.googleClientID}async submitGoogleOneTapTokenDiscovery({credential:e,discoveryRedirectUrl:t}){let i,{pkceRequiredForOAuth:r}=await this._config;return r?i=(await this._pkceManager.startPKCETransaction()).code_challenge:this._pkceManager.clearPKPair(),await this._networkClient.fetchSDK({url:"/b2b/oauth/google/onetap/discovery/submit",method:"POST",body:{id_token:e,discovery_redirect_url:t,pkce_code_challenge:i}})}async submitGoogleOneTapToken({credential:e,organizationId:t,signupRedirectUrl:i,loginRedirectUrl:r}){let s,{pkceRequiredForOAuth:o}=await this._config;return o?s=(await this._pkceManager.startPKCETransaction()).code_challenge:this._pkceManager.clearPKPair(),await this._networkClient.fetchSDK({url:"/b2b/oauth/google/onetap/submit",method:"POST",body:{id_token:e,organization_id:t,signup_redirect_url:i,login_redirect_url:r,pkce_code_challenge:s}})}async createOneTapClient(){let e;try{e=await this.fetchGoogleStart()}catch(e){return{success:!1,reason:_.from(e).error_type}}return""===e?{success:!1,reason:"oauth_config_not_found"}:{success:!0,client:new t_(await eb(i,()=>window.google.accounts.id),e)}}createOnDiscoverySuccessHandler=({discoveryRedirectUrl:e,onSuccess:t,onError:i})=>async r=>{let{credential:s}=r,o=this.submitGoogleOneTapTokenDiscovery({credential:s,discoveryRedirectUrl:e}).then(e=>t(e.redirect_url));i&&(o=o.catch(e=>i(e))),await o};createOnSuccessHandler=({organizationId:e,signupRedirectUrl:t,loginRedirectUrl:i,onSuccess:r,onError:s})=>async o=>{let{credential:n}=o,a=this.submitGoogleOneTapToken({credential:n,organizationId:e,signupRedirectUrl:t,loginRedirectUrl:i}).then(e=>r(e.redirect_url));s&&(a=a.catch(e=>s(e))),await a};redirectOnSuccess=e=>{window.location.href=e}}class tg{_subscriptionService;_sessionManager;_networkClient;_dataLayer;_stateChangeClient;magicLinks;session;member;self;organization;oauth;sso;discovery;passwords;otps;totp;recoveryCodes;rbac;scim;impersonation;idp;onStateChange;parseAuthenticateUrl;authenticateByUrl;constructor(e,t){if("u"<typeof window)throw Error("`new StytchB2BClient()` is not supported in server environments. If using @stytch/react or @stytch/nextjs, use `createStytchB2BClient()` instead.");(e=>{"string"!=typeof e?ep(`Public token is malformed. Expected a string, got ${typeof e}.${eg}`):""===e?ep(`Public token is malformed. Expected "public-token-...", got an empty string.${eg}`):e.startsWith("public-token-")||ep(`Public token is malformed. Expected "public-token-...", got ${e}.${eg}`)})(e);const i=e??"",r=((e,t={})=>{let{cookieOptions:i,keepSessionAlive:r}=t;return eC(e,t,{keepSessionAlive:"optionalBoolean"}),i&&eC(`${e}.cookieOptions`,i,{opaqueTokenCookieName:"optionalString",jwtCookieName:"optionalString",istCookieName:"optionalString",path:"optionalString",domain:"optionalString"}),{cookieOptions:i,keepSessionAlive:r,endpoints:{testAPIURL:(e=>{let t=e?.customBaseUrl??e?.endpointOptions?.testApiDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.customBaseUrl?"customBaseUrl":"testApiDomain";ep(`Unable to use custom API domain \`${t}\`. ${i} should be a valid domain.`)}}return e?.endpoints?.testAPIURL??"https://test.stytch.com"})(t),liveAPIURL:(e=>{let t=e?.customBaseUrl??e?.endpointOptions?.apiDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.customBaseUrl?"customBaseUrl":"apiDomain";ep(`Unable to use custom API domain \`${t}\`. ${i} should be a valid domain.`)}}return e?.endpoints?.liveAPIURL??"https://api.stytch.com"})(t),dfpBackendURL:(e=>{let t=e?.dfppaUrl??e?.endpointOptions?.dfppaDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.dfppaUrl?"dfppaUrl":"dfppaDomain";ep(`Unable to use custom DFPPA domain \`${t}\`. ${i} should be a valid domain.`)}}return e?.endpoints?.dfpBackendURL??"https://telemetry.stytch.com"})(t),dfpCdnURL:(e=>{let t=e?.dfpCdnUrl??e?.endpointOptions?.dfpCdnDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.dfpCdnUrl?"dfpCdnUrl":"dfpCdnDomain";ep(`Unable to use custom DFP CDN domain \`${t}\`. ${i} should be a valid domain.`)}}return"https://elements.stytch.com"})(t),clientsideServicesIframeURL:t?.endpoints?.clientsideServicesIframeURL??"https://js.stytch.com/clientside-services/index.html"}}})(this.constructor.name,t),s=((e,t={})=>{let{customBaseUrl:i,endpointOptions:r}=t;return e.includes("public-token-test")?!!(i||r?.testApiDomain):!!(i||r?.apiDomain)})(i,t);this._dataLayer=((e,t)=>{let i,r=((i=window)[ts]||(i[ts]={}),i[ts]);return r[e]||(r[e]=new tr(e,t)),r[e]})(i,r),this._subscriptionService=new tc(i,this._dataLayer,{usingCustomApiEndpoint:s}),this._stateChangeClient=new eq(this._subscriptionService,{}),this.onStateChange=(...e)=>this._stateChangeClient.onStateChange(...e);const o=()=>({stytch_member_id:this._dataLayer.state?.member?.member_id,stytch_member_session_id:this._dataLayer.state?.session?.member_session_id}),n=new e1(this._dataLayer,"passwords"),a=new e2(i,this._dataLayer,r.endpoints.liveAPIURL,r.endpoints.testAPIURL,o);this._networkClient=a;const c=new eX(i,a,this._dataLayer),l=new eZ(c.getAsync()),d=new eS(i,r.endpoints.dfpBackendURL,r.endpoints.dfpCdnURL,c.getAsync(),l.executeRecaptcha),h=new eQ(r.endpoints.clientsideServicesIframeURL),u=new e1(this._dataLayer,"oauth"),_=new tm(a,u,c.getAsync());this.organization=new eO(a,a,this._subscriptionService),this.member=new eN(a,a,this._subscriptionService),this.self=new eN(a,a,this._subscriptionService),this.session=new eM(a,this._subscriptionService),this.magicLinks=new eE(a,this._subscriptionService,new e1(this._dataLayer,"magic_links"),n,c.getAsync(),d),this.oauth=new td(a,this._subscriptionService,u,c.getAsync(),{publicToken:i,testAPIURL:r.endpoints.testAPIURL,liveAPIURL:r.endpoints.liveAPIURL},d,_),this.sso=new ex(a,this._subscriptionService,new e1(this._dataLayer,"sso"),c.getAsync(),{publicToken:i,testAPIURL:r.endpoints.testAPIURL,liveAPIURL:r.endpoints.liveAPIURL},d),this.discovery=new ev(a,this._subscriptionService),this.passwords=new eR(a,this._subscriptionService,n,c.getAsync(),d),this.otps=new eI(a,this._subscriptionService,d),this.totp=new ez(a,this._subscriptionService,d),this.recoveryCodes=new eF(a,this._subscriptionService,d),this.rbac=new eK(c.getSync(),c.getAsync(),this._subscriptionService),this.scim=new eL(this._networkClient,this._subscriptionService),this.impersonation=new eT(this._networkClient,this._subscriptionService,d),this.idp=new eP(a),this._sessionManager=new eG(this._subscriptionService,this.session,i,{keepSessionAlive:r.keepSessionAlive});const p=new ej(a,d);(s||this._dataLayer.readSessionCookie().session_token)&&this._sessionManager.performBackgroundRefresh();const{authenticateByUrl:m,parseAuthenticateUrl:g}=(e=>{let t=Object.keys(e),i=(e=window.location.href)=>{let i=new URL(e),r=i.searchParams.get("stytch_token_type"),s=i.searchParams.get("token");return s&&r?t.includes(r)?{handled:!0,token:s,tokenType:r}:{handled:!1,token:s,tokenType:r}:null};return{authenticateByUrl:async({clearParams:t,...r},s=window.location.href)=>{let o,n,a,c=t??s===window.location.href,l=i(s);if(null==l)return null;if(!l.handled)return l;let{token:d,tokenType:h}=l,u=e[h];return c&&((n=(o=new URL(window.location.toString())).searchParams).delete("token"),n.delete("stytch_token_type"),a=o,window.history.replaceState(null,document.title,a)),{handled:!0,tokenType:h,data:await u(d,r)}},parseAuthenticateUrl:i}})({discovery:e=>this.magicLinks.discovery.authenticate({discovery_magic_links_token:e}),discovery_oauth:e=>this.oauth.discovery.authenticate({discovery_oauth_token:e}),oauth:(e,t)=>this.oauth.authenticate({oauth_token:e,...t}),sso:(e,t)=>this.sso.authenticate({sso_token:e,...t}),multi_tenant_magic_links:(e,t)=>this.magicLinks.authenticate({magic_links_token:e,...t}),multi_tenant_impersonation:e=>this.impersonation.authenticate({impersonation_token:e})});this.authenticateByUrl=m,this.parseAuthenticateUrl=g,a.logEvent({name:"b2b_sdk_instance_instantiated",details:{event_callback_registered:!1,error_callback_registered:!1,success_callback_registered:!1}}),c.getAsync().then(e=>{"CONSUMER"===e.vertical&&em("This application is using a Stytch client for B2B projects, but the public token is for a Stytch Consumer project. Use a Consumer Stytch client instead, or verify that the public token is correct.")}),((e,t)=>{Object.assign(e,{[tl]:t})})(this,{bootstrap:c,clientsideServices:h,publicToken:i,searchManager:p,dataLayer:this._dataLayer,networkClient:a,oneTap:_})}}let ty=["openid","email","profile"],tb=(...e)=>"u"<typeof window?eV("stytch"):new tg(...e);return e.AuthFlowType={Discovery:"Discovery",Organization:"Organization",PasswordReset:"PasswordReset"},e.B2BMFAProducts={smsOtp:"smsOtp",totp:"totp"},e.B2BOAuthProviders=s,e.BiometricRegistrationIdIsNullOrBlank=H,e.BiometricsAlreadyEnrolledError=class extends p{constructor(){super("BiometricsAlreadyEnrolledError","There is already a biometric factor enrolled on this device. Fully authenticate with all factors and remove the existing registration before attempting to register again.")}},e.BiometricsFailedError=U,e.BiometricsUnavailableError=b,e.ChallengeSigningFailedError=D,e.DFPNotConfigured=V,e.DeviceCredentialsNotAllowedError=v,e.FailedCodeChallengeError=I,e.FailedToDecryptDataError=R,e.IDPOAuthFlowMissingParamError=class extends p{constructor(e){super("IDPOAuthFlowMissingParamError",e)}},e.InternalError=g,e.InvalidAuthorizationCredentialError=T,e.InvalidCredentialTypeError=N,e.InvalidPrivateKeyLength=q,e.InvalidRedirectSchemeError=F,e.InvalidStartUrlError=K,e.JSONDataNotConvertibleToStringError=x,e.KeyInvalidatedError=S,e.KeystoreUnavailableError=w,e.MissingAttestationObjectError=M,e.MissingAuthorizationCredentialIDTokenError=P,e.MissingCipherIv=G,e.MissingGoogleClientIDError=class extends p{constructor(){super("MissingGoogleClientIDError","No Google client ID was found in the project.")}},e.MissingPKCEError=class extends p{constructor(){super("MissingPKCEError","Make sure this flow is completed on the same device on which it was started.")}},e.MissingPublicKeyError=E,e.MissingUrlError=L,e.NoBiometricsEnrolledError=f,e.NoBiometricsRegistrationError=y,e.NoCredentialsPresentError=A,e.NoCurrentSessionError=m,e.OAuthProviders={Google:"google",Microsoft:"microsoft",Apple:"apple",Github:"github",GitLab:"gitlab",Facebook:"facebook",Discord:"discord",Salesforce:"salesforce",Slack:"slack",Amazon:"amazon",Bitbucket:"bitbucket",LinkedIn:"linkedin",Coinbase:"coinbase",Twitch:"twitch",Twitter:"twitter",TikTok:"tiktok",Snapchat:"snapchat",Figma:"figma",Yahoo:"yahoo"},e.OTPMethods={SMS:"sms",WhatsApp:"whatsapp",Email:"email"},e.OneTapPositions=Y,e.PasskeysInvalidEncoding=$,e.PasskeysMisconfigured=j,e.PasskeysUnsupportedError=B,e.RNUIProducts=et,e.RandomNumberGenerationFailed=z,e.RedirectURLType={ResetPassword:"reset_password"},e.SDKAPIUnreachableError=o,e.SDKNotConfiguredError=O,e.SignInWithAppleMisconfigured=W,e.StytchAPIError=_,e.StytchAPISchemaError=u,e.StytchAPIUnreachableError=h,e.StytchB2BClient=tg,e.StytchB2BHeadlessClient=tg,e.StytchError=d,e.StytchEventType=ee,e.StytchSDKAPIError=c,e.StytchSDKError=p,e.StytchSDKSchemaError=a,e.StytchSDKUsageError=n,e.UNRECOVERABLE_ERROR_TYPES=l,e.UserCancellationError=k,e.UserLockedOutError=C,e.Wallets={Phantom:"Phantom",Metamask:"Metamask",Coinbase:"Coinbase",Binance:"Binance",GenericEthereumWallet:"GenericEthereumWallet",GenericSolanaWallet:"GenericSolanaWallet"},e.createStytchB2BClient=tb,e.createStytchB2BHeadlessClient=tb,e.errorToStytchError=function(e){if(e instanceof p)return e;switch(e.message){case"no_current_session":return new m;case"no_biometrics_registration":return new y;case"biometrics_unavailable":case"device_hardware_error":case"biometrics_not_available":return new b;case"key_invalidated":case"no_biometric_key":return new S;case"no_biometrics_enrolled":return new f;case"keystore_unavailable":return new w;case"device_credentials_not_allowed":return new v;case"user_cancellation":return new k;case"user_locked_out":return new C;case"google_onetap_missing_id_token":case"oauth_apple_missing_id_token":case"missing_authorization_credential_id_token":return new P;case"google_onetap_missing_member":case"oauth_apple_credential_invalid":case"invalid_authorization_credential":return new T;case"missing_public_key":return new E;case"challenge_signing_failed":return new D;case"no_credentials_present":return new A;case"sdk_not_configured":return new O;case"failed_code_challenge":return new I;case"passkeys_unsupported":return new B;case"failed_to_decrypt_data":return new R;case"biometrics_failed":return new U;case"invalid_start_url":return new K;case"invalid_redirect_scheme":return new F;case"missing_url":return new L;case"invalid_credential_type":return new N;case"missing_attestation_object":return new M;case"json_data_not_convertible_to_string":return new x;case"random_number_generation_failed":return new z;case"passkeys_invalid_encoding":return new $;case"passkeys_misconfigured":return new j;case"signinwithapple_misconfigured":return new W;case"missing_cipher_iv":return new G;case"invalid_private_key_length":return new q;case"biometric_registration_id_is_null_or_blank":return new H;case"dfp_not_configured":return new V;default:return new g(e)}},e.parseOAuthAuthorizeParams=e=>{let t={client_id:"",redirect_uri:"",response_type:"code",scopes:[...ty]};for(let i of["client_id","redirect_uri"]){let r=e.get(i);if(!r)return{error:`Required parameter is missing: ${i}. Please reach out to the application developer.`,result:t};t[i]=r}for(let i of["response_type","scope","code_challenge","state","nonce","prompt"]){let r=e.get(i);r&&("scope"===i?t.scopes=r.split(" ").filter(Boolean):t[i]=r)}return e.has("resource")&&(t.resources=e.getAll("resource")),{error:null,result:t}},e.parseOAuthLogoutParams=e=>{let t={client_id:"",post_logout_redirect_uri:""};for(let i of["client_id","post_logout_redirect_uri"]){let r=e.get(i);if(!r)return{error:`Required parameter is missing: ${i}. Please reach out to the application developer.`,result:t};t[i]=r}return t.id_token_hint=e.get("id_token_hint")||void 0,t.state=e.get("state")||void 0,{error:null,result:t}},e}({});
32
+ https://www.npmjs.com/package/stytch.`)}}),eY="bootstrap",eJ=()=>({displayWatermark:!1,projectName:null,cnameDomain:null,emailDomains:["stytch.com"],captchaSettings:{enabled:!1},pkceRequiredForEmailMagicLinks:!1,pkceRequiredForPasswordResets:!1,pkceRequiredForOAuth:!1,pkceRequiredForSso:!1,slugPattern:null,createOrganizationEnabled:!1,passwordConfig:null,runDFPProtectedAuth:!1,rbacPolicy:null,siweRequiredForCryptoWallets:!1,vertical:null});class eX{_publicToken;_networkClient;_dataLayer;_bootstrapDataPromise;constructor(e,t,i){this._publicToken=e,this._networkClient=t,this._dataLayer=i,this._bootstrapDataPromise=this._networkClient.fetchSDK({url:`/projects/bootstrap/${this._publicToken}`,method:"GET"}).then(eX.mapBootstrapData).then(e=>(this._dataLayer.setItem(eY,JSON.stringify(e)),e)).catch(e=>(em(e),eJ()))}static mapBootstrapData(e){let t=null!==e.password_config?{ludsComplexity:e.password_config.luds_complexity,ludsMinimumCount:e.password_config.luds_minimum_count}:null;return{projectName:e.project_name,displayWatermark:!e.disable_sdk_watermark,captchaSettings:e.captcha_settings,cnameDomain:e.cname_domain,emailDomains:e.email_domains,pkceRequiredForEmailMagicLinks:e.pkce_required_for_email_magic_links,pkceRequiredForPasswordResets:e.pkce_required_for_password_resets,pkceRequiredForOAuth:e.pkce_required_for_oauth,pkceRequiredForSso:e.pkce_required_for_sso,slugPattern:e.slug_pattern,createOrganizationEnabled:e.create_organization_enabled,passwordConfig:t,runDFPProtectedAuth:e.dfp_protected_auth_enabled??!1,dfpProtectedAuthMode:e.dfp_protected_auth_mode,rbacPolicy:e.rbac_policy??null,siweRequiredForCryptoWallets:e.siwe_required_for_crypto_wallets,vertical:e.vertical}}getSync(){let e=this._dataLayer.getItem(eY);if(null===e)return eJ();try{return JSON.parse(e)}catch{return eJ()}}getAsync(){return this._bootstrapDataPromise}}class eZ{bootstrapPromise;state;constructor(e){this.bootstrapPromise=e,this.state=e.then(async e=>{let t;return e.captchaSettings.enabled?{configured:!0,captchaClient:await (t=e.captchaSettings.siteKey,eb(`https://www.google.com/recaptcha/enterprise.js?render=${t}`,()=>window.grecaptcha.enterprise)),siteKey:e.captchaSettings.siteKey}:{configured:!1}})}executeRecaptcha=async()=>{let{captchaClient:e,configured:t,siteKey:i}=await this.state;if(t)return await new Promise(t=>e.ready(t)),e.execute(i,{action:"LOGIN"})}}class eQ{iframeURL;_frameClient;constructor(e){this.iframeURL=e}get frameClient(){return this._frameClient=this._frameClient??new e$(this.iframeURL),this._frameClient}call(e,t){return this.frameClient.call(e,[t])}oneTapStart=e=>this.call("oneTapStart",e);oneTapSubmit=e=>this.call("oneTapSubmit",e);parsedPhoneNumber=e=>this.call("parsedPhoneNumber",e);getExamplePhoneNumber=e=>this.call("getExamplePhoneNumber",e)}class e2{_publicToken;_subscriptionDataLayer;additionalTelemetryDataFn;eventLogger;baseURL;constructor(e,t,i,r,s){this._publicToken=e,this._subscriptionDataLayer=t,this.additionalTelemetryDataFn=s,this.baseURL=i,(e=>e.includes("public-token-test"))(e)&&(this.baseURL=r),this.eventLogger=new ek({maxBatchSize:15,intervalDurationMs:800,logEventURL:this.buildSDKUrl("/events")})}updateSessionToken=()=>null;logEvent({name:e,details:t,error:i={}}){this.eventLogger.logEvent(this.createTelemetryBlob(),{public_token:this._publicToken,event_name:e,details:t,error_code:i.error_code,error_description:i.error_description,http_status_code:i.http_status_code})}createTelemetryBlob(){return{event_id:`event-id-${eh()}`,app_session_id:`app-session-id-${eh()}`,persistent_id:`persistent-id-${eh()}`,client_sent_at:new Date().toISOString(),timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,...this.additionalTelemetryDataFn(),app:{identifier:window.location.hostname},sdk:{identifier:"Stytch.js Javascript SDK",version:"@stytch/vanilla-js@6.0.11"}}}async fetchSDK({url:e,body:t,method:i}){let r=this._subscriptionDataLayer.readSessionCookie().session_token,s="Basic "+window.btoa(this._publicToken+":"+(r||this._publicToken)),o=window.btoa(JSON.stringify(this.createTelemetryBlob())),n=window.location.origin;return eo({basicAuthHeader:s,body:t,finalURL:this.buildSDKUrl(e),method:i,xSDKClientHeader:o,xSDKParentHostHeader:n})}async submitFormSDK({url:e,body:t,method:i}){let r=this._subscriptionDataLayer.readSessionCookie().session_token,s="Basic "+window.btoa(this._publicToken+":"+(r||this._publicToken)),o=window.btoa(JSON.stringify(this.createTelemetryBlob())),n=window.location.origin;return en({basicAuthHeader:s,body:t,finalURL:this.buildSDKUrl(e),method:i,xSDKClientHeader:o,xSDKParentHostHeader:n})}async retriableFetchSDK({url:e,body:t,method:i,retryCallback:r}){let s=this._subscriptionDataLayer.readSessionCookie().session_token,o="Basic "+window.btoa(this._publicToken+":"+(s||this._publicToken)),n=window.btoa(JSON.stringify(this.createTelemetryBlob())),a=window.location.origin;return es({basicAuthHeader:o,body:t,finalURL:this.buildSDKUrl(e),method:i,xSDKClientHeader:n,xSDKParentHostHeader:a,retryCallback:r})}buildSDKUrl(e){return`${this.baseURL}/sdk/v1${e}`}}function e0(e){let t=e.toString(16);return 1===t.length&&(t="0"+t),t}class e1{_dataLayer;namespace;constructor(e,t){this._dataLayer=e,this.namespace=t}key(){return`PKCE_VERIFIER:${this.namespace}`}async startPKCETransaction(){let e=await e1.createProofkeyPair();return this._dataLayer.setItem(this.key(),JSON.stringify(e)),e}getPKPair(){let e=this._dataLayer.getItem(this.key());if(null!==e)try{return JSON.parse(e)}catch{ep("Found malformed Proof Key pair in localstorage.");return}}clearPKPair(){return this._dataLayer.removeItem(this.key())}static async createProofkeyPair(){var e;let t=new Uint32Array(16);window.crypto.getRandomValues(t);let i=Array.from(t).map(e0).join("");return{code_challenge:(e=await window.crypto.subtle.digest("SHA-256",new TextEncoder().encode(i)),btoa(String.fromCharCode.call(null,...new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")),code_verifier:i}}}function e6(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var r in i)"__proto__"!==r&&(e[r]=i[r])}return e}var e3=function e(t,i){function r(e,r,s){if("u">typeof document){"number"==typeof(s=e6({},i,s)).expires&&(s.expires=new Date(Date.now()+864e5*s.expires)),s.expires&&(s.expires=s.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var o="";for(var n in s)s[n]&&(o+="; "+n,!0!==s[n]&&(o+="="+s[n].split(";")[0]));return document.cookie=e+"="+t.write(r,e)+o}}return Object.create({set:r,get:function(e){if("u">typeof document&&(!arguments.length||e)){for(var i=document.cookie?document.cookie.split("; "):[],r={},s=0;s<i.length;s++){var o=i[s].split("="),n=o.slice(1).join("=");try{var a=decodeURIComponent(o[0]);if(a in r||(r[a]=t.read(n,a)),e===a)break}catch(e){}}return e?r[e]:r}},remove:function(e,t){r(e,"",e6({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,e6({},this.attributes,t))},withConverter:function(t){return e(e6({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(i)},converter:{value:Object.freeze(t)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});let e5=e=>(document.cookie?document.cookie.split("; "):[]).filter(t=>{let[i]=t.split("=");return e===i}).length>1,e4=(e,t)=>`stytch_sdk_state_${e}${t?`::${t}`:""}`;function e9(e){return null==e?{getItem:()=>null,removeItem(){},setItem(){}}:{getItem(t,i){let r=e4(t,i);try{return e.getItem(r)}catch{return null}},setItem(t,i,r){let s=e4(t,i);try{r&&e.setItem(s,r)}catch{}},removeItem(t,i){let r=e4(t,i);try{e.removeItem(r)}catch{}}}}let e8=e9(globalThis.localStorage),e7=e9(globalThis.sessionStorage);function te(e,t){return{getItem:i=>e.getItem(t,i),setItem(i,r){e.setItem(t,i,r)},removeItem(i){e.removeItem(t,i)}}}let tt="seen_domains";class ti{publicToken;state;_opaqueTokenCookieName=null;_jwtCookieName=null;_cookiePath=null;_domain=null;_cookieAvailableToSubdomains=!1;_istCookieName=null;subscriptions;_localStorage;browserSessionStorage;constructor(e,t){let i;this.publicToken=e,this.state=null,this.subscriptions={},this._localStorage=te(e8,e),this.browserSessionStorage=te(e7,e),t?.cookieOptions&&(this._opaqueTokenCookieName=t.cookieOptions.opaqueTokenCookieName||null,this._jwtCookieName=t.cookieOptions.jwtCookieName||null,this._cookiePath=t.cookieOptions.path||null,this._domain=t.cookieOptions.domain||null,this._cookieAvailableToSubdomains=t.cookieOptions.availableToSubdomains||!1,this._istCookieName=t.cookieOptions.istCookieName||null);const r=this._localStorage.getItem("");if(!r)return;try{i=JSON.parse(r)}catch{this.syncToLocalStorage();return}this.state=i}get opaqueTokenCookieName(){return this._opaqueTokenCookieName??"stytch_session"}get jwtCookieName(){return this._jwtCookieName??"stytch_session_jwt"}get istCookieName(){return this._istCookieName??"stytch_intermediate_session_token"}readSessionCookie(){return{session_token:e3.get(this.opaqueTokenCookieName),session_jwt:e3.get(this.jwtCookieName)}}readIntermediateSessionTokenCookie(){return e3.get(this.istCookieName)}writeSessionCookie(e){let{state:t,session_token:i,session_jwt:r}=e,s=ti.generateCookieOpts({expiresAt:t?.session?.expires_at??"",availableToSubdomains:this._cookieAvailableToSubdomains,path:this._cookiePath,domain:this._domain});s.domain&&this.addSeenDomain(s.domain),e3.set(this.opaqueTokenCookieName,i,s),e3.set(this.jwtCookieName,r,s);let o=ti.generateCookieOpts({expiresAt:t?.session?.expires_at??"",availableToSubdomains:!this._cookieAvailableToSubdomains,path:this._cookiePath,domain:this._domain});o.domain&&this.addSeenDomain(o.domain),e5(this.jwtCookieName)&&e3.remove(this.jwtCookieName,o),e5(this.opaqueTokenCookieName)&&e3.remove(this.opaqueTokenCookieName,o),e5(this.jwtCookieName)&&ep("Could not remove extraneous JWT cookie. This might happen if the cookie has been set using multiple `path` settings, and may produce unwanted behavior."),e5(this.opaqueTokenCookieName)&&ep("Could not remove extraneous opaque token cookie.")}writeIntermediateSessionTokenCookie(e){let t=new Date(Date.now()+6e5),i=ti.generateCookieOpts({expiresAt:t.toString(),availableToSubdomains:this._cookieAvailableToSubdomains,path:this._cookiePath,domain:this._domain});e3.set(this.istCookieName,e,i)}removeSessionCookie(){this.removeCookies([this.opaqueTokenCookieName,this.jwtCookieName])}removeISTCookie(){this.removeCookies([this.istCookieName])}removeCookies(e){let t=this.getSeenDomains(),i=[...new Set([this._domain,null,...t])];[!0,!1].forEach(t=>{[this._cookiePath,null].forEach(r=>{i.forEach(i=>{let s=ti.generateCookieOpts({expiresAt:new Date(0).toString(),availableToSubdomains:t,path:r,domain:i});e.forEach(e=>{e3.remove(e,s)})})})})}syncToLocalStorage(){this._localStorage.setItem("",JSON.stringify(this.state))}getItem(e){return this._localStorage.getItem(e)}setItem(e,t){this._localStorage.setItem(e,t)}removeItem(e){this._localStorage.removeItem(e)}getSeenDomains(){let e=this.getItem(tt);if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}addSeenDomain(e){if(!e)return;let t=this.getSeenDomains();t.includes(e)||(t.push(e),this.setItem(tt,JSON.stringify(t)))}static generateCookieOpts({path:e,domain:t,availableToSubdomains:i,expiresAt:r}){let s={expires:new Date(r),sameSite:"lax"};return e&&(s.path=e),"localhost"===window.location.hostname||"[::1]"===window.location.hostname||window.location.hostname.match(/^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)?s.secure=!1:(i&&(s.domain=t||window.location.host),s.secure=!0),s}}class tr extends ti{}let ts=Symbol.for("__stytch_b2b_DataLayer"),to=(e,t)=>{Object.values(e).forEach(e=>e(t))},tn=(({KEYS_TO_EXCLUDE:e=[]}={})=>{let t=(i,r)=>typeof i==typeof r&&(null===i||null===r?i===r:"object"==typeof i?!(Object.keys(i).length!==Object.keys(r).length||Object.keys(i).some(e=>!(e in r)))&&Object.entries(i).filter(([t])=>!e.includes(t)).every(([e,i])=>t(i,r[e])):i===r);return t})({KEYS_TO_EXCLUDE:["last_accessed_at"]});class ta{_publicToken;_datalayer;fromCache=!0;constructor(e,t,{usingCustomApiEndpoint:i}){if(this._publicToken=e,this._datalayer=t,window.addEventListener("storage",this._listen),!i){const{session_token:e}=this._datalayer.readSessionCookie();if(!e)return void this.destroySession()}}_listen=e=>{if(e.key!==e4(this._publicToken,""))return;let t=null===e.newValue||"null"===e.newValue?null:JSON.parse(e.newValue);this.updateState(t,!0)};getTokens(){let{session_token:e,session_jwt:t}=this._datalayer.readSessionCookie();return"string"!=typeof e||"string"!=typeof t?null:{session_token:e,session_jwt:t}}getIntermediateSessionToken(){return this._datalayer.readIntermediateSessionTokenCookie()||null}destroyState(){this.updateStateAndTokens({state:null,session_token:null,session_jwt:null,intermediate_session_token:null})}destroySession(){this._datalayer.removeSessionCookie(),this.updateState(null)}_updateStateAndTokensInternal(e,t){let i=this._datalayer.state,r=null===e.state?null:{...this._datalayer.state,...e.state};this._datalayer.state=r;let s=this.getFromCache();if(this.setCacheRefreshed(),s||!tn(i,r)){let e;e=null==r||t.fromCache?r:{...r,sessionDurationMinutes:t.sessionDurationMinutes},to(this._datalayer.subscriptions,e)}}updateStateAndTokens(e,t={fromCache:!1}){e.state?("string"==typeof e.session_token?this._datalayer.writeSessionCookie(e):this._datalayer.removeSessionCookie(),this._datalayer.removeISTCookie()):e.intermediate_session_token?("string"==typeof e.intermediate_session_token?this._datalayer.writeIntermediateSessionTokenCookie(e.intermediate_session_token):this._datalayer.removeISTCookie(),this._datalayer.removeSessionCookie()):(this._datalayer.removeSessionCookie(),this._datalayer.removeISTCookie()),this._updateStateAndTokensInternal(e,t),this._datalayer.syncToLocalStorage()}updateState(e,t=!1){let i=this._datalayer.state,r=null===e?null:{...this._datalayer.state,...e};this._datalayer.state=r;let s=this.getFromCache();this.setCacheRefreshed();let o=!tn(i,r);(s||o)&&(to(this._datalayer.subscriptions,r),o&&!t&&this._datalayer.syncToLocalStorage())}updateTokens(e){let{session_token:t,session_jwt:i}=e,r={...this._datalayer.readSessionCookie(),session_token:t,session_jwt:i};"string"==typeof t||"string"==typeof i?(this._datalayer.writeSessionCookie(r),this._datalayer.removeISTCookie()):this._datalayer.removeSessionCookie()}subscribeToState(e){var t;let i;return t=this._datalayer.subscriptions,t[i=Math.random().toString(36).slice(-10)]=e,()=>delete t[i]}getState(){return this._datalayer.state}destroy(){window.removeEventListener("storage",this._listen)}syncFromDeviceStorage(){return null}getFromCache(){return this.fromCache}setCacheRefreshed(){this.fromCache=!1}}class tc extends ta{updateMember=e=>this.updateState({member:e});getMember=()=>this.getState()?.member??null;updateOrganization=e=>this.updateState({organization:e});getOrganization=()=>this.getState()?.organization??null;getSession=()=>this.getState()?.session??null;updateSession=(e,t)=>{if("member_session"in e&&e.member_session){let i=e.session_token&&e.session_jwt?{session_token:e.session_token,session_jwt:e.session_jwt}:{session_token:!0,session_jwt:!0};this.updateStateAndTokens({state:{session:e.member_session,member:e.member,organization:e.organization},...i,intermediate_session_token:null},{fromCache:!1,sessionDurationMinutes:t?.sessionDurationMinutes})}else this.updateStateAndTokens({state:null,session_token:null,session_jwt:null,intermediate_session_token:e.intermediate_session_token||!0},{fromCache:!1,sessionDurationMinutes:t?.sessionDurationMinutes})};withUpdateSession=e=>async t=>{let i=await e(t);return this.updateSession(i,{sessionDurationMinutes:t?.session_duration_minutes}),i}}let tl=Symbol.for("stytch__internal_b2b");class td extends eD{_oneTap;constructor(e,t,i,r,s,o=ew(),n){super(e,t,i,r,s,o),this._oneTap=n}startOneTapDiscovery=async e=>{let t=await this._oneTap.createOneTapClient();if(!t.success)throw Error(`One Tap could not load: ${t.reason}`);let{client:i}=t,r=this._oneTap.createOnDiscoverySuccessHandler({discoveryRedirectUrl:e.discovery_redirect_url,onSuccess:this._oneTap.redirectOnSuccess});return i.render({style:{position:Y.floating},callback:r,cancelOnTapOutside:e.cancel_on_tap_outside})};startOneTap=async e=>{if(!e.organization_id)throw new n("stytch.oauth.googleOneTap.start","organization_id is a required argument");let t=await this._oneTap.createOneTapClient();if(!t.success)throw Error(`One Tap could not load: ${t.reason}`);let{client:i}=t,r=this._oneTap.createOnSuccessHandler({organizationId:e.organization_id,signupRedirectUrl:e.signup_redirect_url,loginRedirectUrl:e.login_redirect_url,onSuccess:this._oneTap.redirectOnSuccess});return i.render({style:{position:Y.floating},callback:r,cancelOnTapOutside:e.cancel_on_tap_outside})};googleOneTap={discovery:{start:this.startOneTapDiscovery},start:this.startOneTap}}let th="u">typeof window&&"IdentityCredential"in window,tu=e=>e===Y.forceLegacyEmbedded?"force":e===Y.embeddedOnly||e===Y.embedded||e===Y.floatingOrEmbedded;class t_{_googleClient;_clientId;constructor(e,t){this._googleClient=e,this._clientId=t}cancel(){this._googleClient.cancel()}async render({callback:e,onOneTapCancelled:t,style:i,cancelOnTapOutside:r=!0}){let s,o=tu(i.position),n="force"===(s=tu(i.position))||s&&!th,a={client_id:this._clientId,callback:e,auto_select:!1,context:"use",itp_support:!0,use_fedcm_for_prompt:"force"!==o,cancel_on_tap_outside:r};return n&&(a.prompt_parent_id="google-parent-prompt",a.cancel_on_tap_outside=!1),this._googleClient.initialize(a),new Promise(e=>{this._googleClient.prompt(i=>{if(i.isSkippedMoment()){let r=i.getSkippedReason?.()??"unknown_reason";return"user_cancel"===r&&t?.(),e({success:!1,reason:r})}return!i.isNotDisplayed&&n||i.isNotDisplayed?.()?e({success:!1,reason:i.getNotDisplayedReason?.()??"unknown_reason"}):i.isDismissedMoment()?void 0:(this.styleFrame(n),e({success:!0}))})})}styleFrame(e){e&&Array.from(document.getElementsByTagName("iframe")).forEach(e=>{e.src.includes(t)&&(e.style.width="100%")})}}let tp=Promise.resolve({pkceRequiredForOAuth:!1});class tm{_networkClient;_pkceManager;_config;googleClientID;constructor(e,t,i=tp){this._networkClient=e,this._pkceManager=t,this._config=i}async fetchGoogleStart(){if(this.googleClientID)return this.googleClientID;let e=await this._networkClient.fetchSDK({url:"/b2b/oauth/google/onetap/start",method:"GET"});return this.googleClientID=e.google_client_id,this.googleClientID}async submitGoogleOneTapTokenDiscovery({credential:e,discoveryRedirectUrl:t}){let i,{pkceRequiredForOAuth:r}=await this._config;return r?i=(await this._pkceManager.startPKCETransaction()).code_challenge:this._pkceManager.clearPKPair(),await this._networkClient.fetchSDK({url:"/b2b/oauth/google/onetap/discovery/submit",method:"POST",body:{id_token:e,discovery_redirect_url:t,pkce_code_challenge:i}})}async submitGoogleOneTapToken({credential:e,organizationId:t,signupRedirectUrl:i,loginRedirectUrl:r}){let s,{pkceRequiredForOAuth:o}=await this._config;return o?s=(await this._pkceManager.startPKCETransaction()).code_challenge:this._pkceManager.clearPKPair(),await this._networkClient.fetchSDK({url:"/b2b/oauth/google/onetap/submit",method:"POST",body:{id_token:e,organization_id:t,signup_redirect_url:i,login_redirect_url:r,pkce_code_challenge:s}})}async createOneTapClient(){let e;try{e=await this.fetchGoogleStart()}catch(e){return{success:!1,reason:_.from(e).error_type}}return""===e?{success:!1,reason:"oauth_config_not_found"}:{success:!0,client:new t_(await eb(i,()=>window.google.accounts.id),e)}}createOnDiscoverySuccessHandler=({discoveryRedirectUrl:e,onSuccess:t,onError:i})=>async r=>{let{credential:s}=r,o=this.submitGoogleOneTapTokenDiscovery({credential:s,discoveryRedirectUrl:e}).then(e=>t(e.redirect_url));i&&(o=o.catch(e=>i(e))),await o};createOnSuccessHandler=({organizationId:e,signupRedirectUrl:t,loginRedirectUrl:i,onSuccess:r,onError:s})=>async o=>{let{credential:n}=o,a=this.submitGoogleOneTapToken({credential:n,organizationId:e,signupRedirectUrl:t,loginRedirectUrl:i}).then(e=>r(e.redirect_url));s&&(a=a.catch(e=>s(e))),await a};redirectOnSuccess=e=>{window.location.href=e}}class tg{_subscriptionService;_sessionManager;_networkClient;_dataLayer;_stateChangeClient;magicLinks;session;member;self;organization;oauth;sso;discovery;passwords;otps;totp;recoveryCodes;rbac;scim;impersonation;idp;onStateChange;parseAuthenticateUrl;authenticateByUrl;constructor(e,t){if("u"<typeof window)throw Error("`new StytchB2BClient()` is not supported in server environments. If using @stytch/react or @stytch/nextjs, use `createStytchB2BClient()` instead.");(e=>{"string"!=typeof e?ep(`Public token is malformed. Expected a string, got ${typeof e}.${eg}`):""===e?ep(`Public token is malformed. Expected "public-token-...", got an empty string.${eg}`):e.startsWith("public-token-")||ep(`Public token is malformed. Expected "public-token-...", got ${e}.${eg}`)})(e);const i=e??"",r=((e,t={})=>{let{cookieOptions:i,keepSessionAlive:r}=t;return eC(e,t,{keepSessionAlive:"optionalBoolean"}),i&&eC(`${e}.cookieOptions`,i,{opaqueTokenCookieName:"optionalString",jwtCookieName:"optionalString",istCookieName:"optionalString",path:"optionalString",domain:"optionalString"}),{cookieOptions:i,keepSessionAlive:r,endpoints:{testAPIURL:(e=>{let t=e?.customBaseUrl??e?.endpointOptions?.testApiDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.customBaseUrl?"customBaseUrl":"testApiDomain";ep(`Unable to use custom API domain \`${t}\`. ${i} should be a valid domain.`)}}return e?.endpoints?.testAPIURL??"https://test.stytch.com"})(t),liveAPIURL:(e=>{let t=e?.customBaseUrl??e?.endpointOptions?.apiDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.customBaseUrl?"customBaseUrl":"apiDomain";ep(`Unable to use custom API domain \`${t}\`. ${i} should be a valid domain.`)}}return e?.endpoints?.liveAPIURL??"https://api.stytch.com"})(t),dfpBackendURL:(e=>{let t=e?.dfppaUrl??e?.endpointOptions?.dfppaDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.dfppaUrl?"dfppaUrl":"dfppaDomain";ep(`Unable to use custom DFPPA domain \`${t}\`. ${i} should be a valid domain.`)}}return e?.endpoints?.dfpBackendURL??"https://telemetry.stytch.com"})(t),dfpCdnURL:(e=>{let t=e?.dfpCdnUrl??e?.endpointOptions?.dfpCdnDomain;if(t){let i=eu(t);if(i)return i;{let i=e?.dfpCdnUrl?"dfpCdnUrl":"dfpCdnDomain";ep(`Unable to use custom DFP CDN domain \`${t}\`. ${i} should be a valid domain.`)}}return"https://elements.stytch.com"})(t),clientsideServicesIframeURL:t?.endpoints?.clientsideServicesIframeURL??"https://js.stytch.com/clientside-services/index.html"}}})(this.constructor.name,t),s=((e,t={})=>{let{customBaseUrl:i,endpointOptions:r}=t;return e.includes("public-token-test")?!!(i||r?.testApiDomain):!!(i||r?.apiDomain)})(i,t);this._dataLayer=((e,t)=>{let i,r=((i=window)[ts]||(i[ts]={}),i[ts]);return r[e]||(r[e]=new tr(e,t)),r[e]})(i,r),this._subscriptionService=new tc(i,this._dataLayer,{usingCustomApiEndpoint:s}),this._stateChangeClient=new eq(this._subscriptionService,{}),this.onStateChange=(...e)=>this._stateChangeClient.onStateChange(...e);const o=()=>({stytch_member_id:this._dataLayer.state?.member?.member_id,stytch_member_session_id:this._dataLayer.state?.session?.member_session_id}),n=new e1(this._dataLayer,"passwords"),a=new e2(i,this._dataLayer,r.endpoints.liveAPIURL,r.endpoints.testAPIURL,o);this._networkClient=a;const c=new eX(i,a,this._dataLayer),l=new eZ(c.getAsync()),d=new eS(i,r.endpoints.dfpBackendURL,r.endpoints.dfpCdnURL,c.getAsync(),l.executeRecaptcha),h=new eQ(r.endpoints.clientsideServicesIframeURL),u=new e1(this._dataLayer,"oauth"),_=new tm(a,u,c.getAsync());this.organization=new eO(a,a,this._subscriptionService),this.member=new eN(a,a,this._subscriptionService),this.self=new eN(a,a,this._subscriptionService),this.session=new eM(a,this._subscriptionService),this.magicLinks=new eE(a,this._subscriptionService,new e1(this._dataLayer,"magic_links"),n,c.getAsync(),d),this.oauth=new td(a,this._subscriptionService,u,c.getAsync(),{publicToken:i,testAPIURL:r.endpoints.testAPIURL,liveAPIURL:r.endpoints.liveAPIURL},d,_),this.sso=new ex(a,this._subscriptionService,new e1(this._dataLayer,"sso"),c.getAsync(),{publicToken:i,testAPIURL:r.endpoints.testAPIURL,liveAPIURL:r.endpoints.liveAPIURL},d),this.discovery=new ev(a,this._subscriptionService),this.passwords=new eR(a,this._subscriptionService,n,c.getAsync(),d),this.otps=new eI(a,this._subscriptionService,d),this.totp=new ez(a,this._subscriptionService,d),this.recoveryCodes=new eF(a,this._subscriptionService,d),this.rbac=new eK(c.getSync(),c.getAsync(),this._subscriptionService),this.scim=new eL(this._networkClient,this._subscriptionService),this.impersonation=new eT(this._networkClient,this._subscriptionService,d),this.idp=new eP(a),this._sessionManager=new eG(this._subscriptionService,this.session,i,{keepSessionAlive:r.keepSessionAlive});const p=new ej(a,d);(s||this._dataLayer.readSessionCookie().session_token)&&this._sessionManager.performBackgroundRefresh();const{authenticateByUrl:m,parseAuthenticateUrl:g}=(e=>{let t=Object.keys(e),i=(e=window.location.href)=>{let i=new URL(e),r=i.searchParams.get("stytch_token_type"),s=i.searchParams.get("token");return s&&r?t.includes(r)?{handled:!0,token:s,tokenType:r}:{handled:!1,token:s,tokenType:r}:null};return{authenticateByUrl:async({clearParams:t,...r},s=window.location.href)=>{let o,n,a,c=t??s===window.location.href,l=i(s);if(null==l)return null;if(!l.handled)return l;let{token:d,tokenType:h}=l,u=e[h];return c&&((n=(o=new URL(window.location.toString())).searchParams).delete("token"),n.delete("stytch_token_type"),a=o,window.history.replaceState(null,document.title,a)),{handled:!0,tokenType:h,data:await u(d,r)}},parseAuthenticateUrl:i}})({discovery:e=>this.magicLinks.discovery.authenticate({discovery_magic_links_token:e}),discovery_oauth:e=>this.oauth.discovery.authenticate({discovery_oauth_token:e}),oauth:(e,t)=>this.oauth.authenticate({oauth_token:e,...t}),sso:(e,t)=>this.sso.authenticate({sso_token:e,...t}),multi_tenant_magic_links:(e,t)=>this.magicLinks.authenticate({magic_links_token:e,...t}),multi_tenant_impersonation:e=>this.impersonation.authenticate({impersonation_token:e})});this.authenticateByUrl=m,this.parseAuthenticateUrl=g,a.logEvent({name:"b2b_sdk_instance_instantiated",details:{event_callback_registered:!1,error_callback_registered:!1,success_callback_registered:!1}}),c.getAsync().then(e=>{"CONSUMER"===e.vertical&&em("This application is using a Stytch client for B2B projects, but the public token is for a Stytch Consumer project. Use a Consumer Stytch client instead, or verify that the public token is correct.")}),((e,t)=>{Object.assign(e,{[tl]:t})})(this,{bootstrap:c,clientsideServices:h,publicToken:i,searchManager:p,dataLayer:this._dataLayer,networkClient:a,oneTap:_})}}let ty=["openid","email","profile"],tb=(...e)=>"u"<typeof window?eV("stytch"):new tg(...e);return e.AuthFlowType={Discovery:"Discovery",Organization:"Organization",PasswordReset:"PasswordReset"},e.B2BMFAProducts={smsOtp:"smsOtp",totp:"totp"},e.B2BOAuthProviders=s,e.BiometricRegistrationIdIsNullOrBlank=H,e.BiometricsAlreadyEnrolledError=class extends p{constructor(){super("BiometricsAlreadyEnrolledError","There is already a biometric factor enrolled on this device. Fully authenticate with all factors and remove the existing registration before attempting to register again.")}},e.BiometricsFailedError=U,e.BiometricsUnavailableError=b,e.ChallengeSigningFailedError=D,e.DFPNotConfigured=V,e.DeviceCredentialsNotAllowedError=v,e.FailedCodeChallengeError=I,e.FailedToDecryptDataError=R,e.IDPOAuthFlowMissingParamError=class extends p{constructor(e){super("IDPOAuthFlowMissingParamError",e)}},e.InternalError=g,e.InvalidAuthorizationCredentialError=T,e.InvalidCredentialTypeError=N,e.InvalidPrivateKeyLength=q,e.InvalidRedirectSchemeError=F,e.InvalidStartUrlError=K,e.JSONDataNotConvertibleToStringError=x,e.KeyInvalidatedError=S,e.KeystoreUnavailableError=w,e.MissingAttestationObjectError=M,e.MissingAuthorizationCredentialIDTokenError=P,e.MissingCipherIv=G,e.MissingGoogleClientIDError=class extends p{constructor(){super("MissingGoogleClientIDError","No Google client ID was found in the project.")}},e.MissingPKCEError=class extends p{constructor(){super("MissingPKCEError","Make sure this flow is completed on the same device on which it was started.")}},e.MissingPublicKeyError=E,e.MissingUrlError=L,e.NoBiometricsEnrolledError=f,e.NoBiometricsRegistrationError=y,e.NoCredentialsPresentError=A,e.NoCurrentSessionError=m,e.OAuthProviders={Google:"google",Microsoft:"microsoft",Apple:"apple",Github:"github",GitLab:"gitlab",Facebook:"facebook",Discord:"discord",Salesforce:"salesforce",Slack:"slack",Amazon:"amazon",Bitbucket:"bitbucket",LinkedIn:"linkedin",Coinbase:"coinbase",Twitch:"twitch",Twitter:"twitter",TikTok:"tiktok",Snapchat:"snapchat",Figma:"figma",Yahoo:"yahoo"},e.OTPMethods={SMS:"sms",WhatsApp:"whatsapp",Email:"email"},e.OneTapPositions=Y,e.PasskeysInvalidEncoding=$,e.PasskeysMisconfigured=j,e.PasskeysUnsupportedError=B,e.RNUIProducts=et,e.RandomNumberGenerationFailed=z,e.RedirectURLType={ResetPassword:"reset_password"},e.SDKAPIUnreachableError=o,e.SDKNotConfiguredError=O,e.SignInWithAppleMisconfigured=W,e.StytchAPIError=_,e.StytchAPISchemaError=u,e.StytchAPIUnreachableError=h,e.StytchB2BClient=tg,e.StytchB2BHeadlessClient=tg,e.StytchError=d,e.StytchEventType=ee,e.StytchSDKAPIError=c,e.StytchSDKError=p,e.StytchSDKSchemaError=a,e.StytchSDKUsageError=n,e.UNRECOVERABLE_ERROR_TYPES=l,e.UserCancellationError=k,e.UserLockedOutError=C,e.Wallets={Phantom:"Phantom",Metamask:"Metamask",Coinbase:"Coinbase",Binance:"Binance",GenericEthereumWallet:"GenericEthereumWallet",GenericSolanaWallet:"GenericSolanaWallet"},e.createStytchB2BClient=tb,e.createStytchB2BHeadlessClient=tb,e.errorToStytchError=function(e){if(e instanceof p)return e;switch(e.message){case"no_current_session":return new m;case"no_biometrics_registration":return new y;case"biometrics_unavailable":case"device_hardware_error":case"biometrics_not_available":return new b;case"key_invalidated":case"no_biometric_key":return new S;case"no_biometrics_enrolled":return new f;case"keystore_unavailable":return new w;case"device_credentials_not_allowed":return new v;case"user_cancellation":return new k;case"user_locked_out":return new C;case"google_onetap_missing_id_token":case"oauth_apple_missing_id_token":case"missing_authorization_credential_id_token":return new P;case"google_onetap_missing_member":case"oauth_apple_credential_invalid":case"invalid_authorization_credential":return new T;case"missing_public_key":return new E;case"challenge_signing_failed":return new D;case"no_credentials_present":return new A;case"sdk_not_configured":return new O;case"failed_code_challenge":return new I;case"passkeys_unsupported":return new B;case"failed_to_decrypt_data":return new R;case"biometrics_failed":return new U;case"invalid_start_url":return new K;case"invalid_redirect_scheme":return new F;case"missing_url":return new L;case"invalid_credential_type":return new N;case"missing_attestation_object":return new M;case"json_data_not_convertible_to_string":return new x;case"random_number_generation_failed":return new z;case"passkeys_invalid_encoding":return new $;case"passkeys_misconfigured":return new j;case"signinwithapple_misconfigured":return new W;case"missing_cipher_iv":return new G;case"invalid_private_key_length":return new q;case"biometric_registration_id_is_null_or_blank":return new H;case"dfp_not_configured":return new V;default:return new g(e)}},e.parseOAuthAuthorizeParams=e=>{let t={client_id:"",redirect_uri:"",response_type:"code",scopes:[...ty]};for(let i of["client_id","redirect_uri"]){let r=e.get(i);if(!r)return{error:`Required parameter is missing: ${i}. Please reach out to the application developer.`,result:t};t[i]=r}for(let i of["response_type","scope","code_challenge","state","nonce","prompt"]){let r=e.get(i);r&&("scope"===i?t.scopes=r.split(" ").filter(Boolean):t[i]=r)}return e.has("resource")&&(t.resources=e.getAll("resource")),{error:null,result:t}},e.parseOAuthLogoutParams=e=>{let t={client_id:"",post_logout_redirect_uri:""};for(let i of["client_id","post_logout_redirect_uri"]){let r=e.get(i);if(!r)return{error:`Required parameter is missing: ${i}. Please reach out to the application developer.`,result:t};t[i]=r}return t.id_token_hint=e.get("id_token_hint")||void 0,t.state=e.get("state")||void 0,{error:null,result:t}},e}({});
33
33
  //# sourceMappingURL=index.headless.js.map