{"version":3,"file":"PasswordResetForm.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/PasswordResetForm.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport { DEFAULT_SESSION_DURATION_MINUTES } from '@stytch/core';\nimport { StytchAPIError, StytchEventType } from '@stytch/core/public';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { B2BSubscriptionDataLayer } from '../../../SubscriptionService';\nimport { debounce, noop } from '../../../utils';\nimport { clearStytchTokenParams } from '../../../utils/createAuthUrlHandler';\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport { readB2BInternals } from '../../../utils/internal';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport Typography from '../../components/atoms/Typography';\nimport EmailInput from '../../components/molecules/EmailInput';\nimport { getNewPasswordProps, PasswordError, PasswordErrorProps } from '../../components/molecules/PasswordError';\nimport { PasswordInput } from '../../components/molecules/PasswordInput';\nimport { useConfig, useErrorCallback, useEventCallback, useGlobalReducer, useStytch } from '../GlobalContextProvider';\nimport { AppScreens } from '../types/AppScreens';\nimport { onAuthenticateSuccess, useBootstrap as useB2BBootstrap } from '../utils';\n\nexport const PasswordResetForm = () => {\n  const stytchClient = useStytch();\n  const config = useConfig();\n  const [, dispatch] = useGlobalReducer();\n  const bootstrap = useB2BBootstrap();\n  const { t } = useLingui();\n\n  const onEvent = useEventCallback();\n  const onError = useErrorCallback();\n\n  const [resetToken, resetTokenType] = useMemo(() => {\n    const parsed = stytchClient.parseAuthenticateUrl();\n    if (!parsed) return ['', ''];\n    return [parsed.token, parsed.tokenType];\n  }, [stytchClient]);\n\n  const dataLayer = readB2BInternals(stytchClient).dataLayer as B2BSubscriptionDataLayer;\n  const email = dataLayer.getItem('reset-email-value');\n  const [password, setPassword] = useState('');\n  const [errorMessage, setErrorMessage] = useState('');\n  const [passwordError, setPasswordError] = useState<PasswordErrorProps>({ policy: 'notLoaded' });\n  const [isSubmitting, setIsSubmitting] = useState(false);\n\n  const updateStrengthCheck = useMemo(\n    () =>\n      debounce((password: string) => {\n        setErrorMessage('');\n        return stytchClient.passwords\n          .strengthCheck({ password })\n          .then(({ score, valid_password, zxcvbn_feedback, luds_feedback, strength_policy, breached_password }) => {\n            const common = {\n              passwordInvalid: !valid_password,\n              isPasswordBreached: breached_password,\n            };\n\n            if (strength_policy === 'zxcvbn') {\n              setPasswordError({\n                policy: strength_policy,\n                ...common,\n                passwordScore: score,\n                passwordWarning: zxcvbn_feedback.warning,\n                passwordSuggestions: zxcvbn_feedback.suggestions,\n              });\n            } else if (strength_policy === 'luds') {\n              setPasswordError({\n                policy: strength_policy,\n                ...common,\n                missingCharacters: luds_feedback.missing_characters,\n                missingComplexity: luds_feedback.missing_complexity,\n              });\n            }\n          })\n          .catch((e: StytchAPIError) => {\n            setErrorMessage(getTranslatedError(e, t));\n          });\n      }),\n    [stytchClient.passwords, t],\n  );\n\n  useEffect(() => {\n    if (resetTokenType === 'multi_tenant_magic_links') {\n      stytchClient.magicLinks\n        .authenticate({\n          magic_links_token: resetToken,\n          session_duration_minutes: config.sessionOptions?.sessionDurationMinutes ?? DEFAULT_SESSION_DURATION_MINUTES,\n          locale: config.emailMagicLinksOptions?.locale,\n        })\n        .then((data) => {\n          clearStytchTokenParams();\n          dispatch({\n            type: 'primary_authenticate_success',\n            response: data,\n            includedMfaMethods: config.mfaProductInclude,\n            resetTokenType,\n          });\n        })\n        .catch((e: StytchAPIError) => {\n          setErrorMessage(getTranslatedError(e, t));\n          onError(e);\n        });\n      return;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps -- SDK-1354\n  }, [resetTokenType]);\n\n  const onPasswordChange = (password: string) => {\n    setPassword(password);\n    updateStrengthCheck(password);\n  };\n\n  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n    e.preventDefault();\n    setErrorMessage('');\n    setIsSubmitting(true);\n\n    if (resetTokenType == 'multi_tenant_passwords') {\n      stytchClient.passwords\n        .resetByEmail({\n          password_reset_token: resetToken,\n          password,\n          session_duration_minutes: config.sessionOptions?.sessionDurationMinutes ?? DEFAULT_SESSION_DURATION_MINUTES,\n          locale: config.passwordOptions?.locale,\n        })\n        .then((data) => {\n          setIsSubmitting(false);\n          onEvent({ type: StytchEventType.B2BPasswordResetByEmail, data });\n          onAuthenticateSuccess(data, dispatch, config);\n        })\n        .catch((e: StytchAPIError) => {\n          onError(e);\n          setErrorMessage(getTranslatedError(e, t));\n          setIsSubmitting(false);\n        });\n    } else if (resetTokenType == 'discovery') {\n      stytchClient.passwords.discovery\n        .resetByEmail({\n          password_reset_token: resetToken,\n          password,\n        })\n        .then((data) => {\n          setIsSubmitting(false);\n          onEvent({ type: StytchEventType.B2BDiscoveryPasswordReset, data });\n          dispatch({\n            type: 'set_discovery_state',\n            email: data.email_address,\n            discoveredOrganizations: data.discovered_organizations,\n          });\n          dispatch({ type: 'transition', screen: AppScreens.Discovery });\n        })\n        .catch((e: StytchAPIError) => {\n          onError(e);\n          setErrorMessage(getTranslatedError(e, t));\n          setIsSubmitting(false);\n        });\n    } else {\n      stytchClient.passwords\n        .resetBySession({ password })\n        .then((data) => {\n          setIsSubmitting(false);\n          onEvent({ type: StytchEventType.B2BPasswordResetBySession, data });\n          dispatch({ type: 'transition', screen: AppScreens.LoggedIn });\n        })\n        .catch((e: StytchAPIError) => {\n          onError(e);\n          setErrorMessage(getTranslatedError(e, t));\n          setIsSubmitting(false);\n        });\n    }\n  };\n\n  const passwordInputProps = getNewPasswordProps(bootstrap, passwordError.policy);\n\n  return (\n    <Column gap={6} as=\"form\" onSubmit={handleSubmit}>\n      <Typography variant=\"header\">{t({ id: 'password.setNew.title', message: 'Set a new password' })}</Typography>\n\n      <Column gap={2}>\n        {email ? <EmailInput email={email} setEmail={noop} disabled /> : null}\n\n        <PasswordInput\n          password={password}\n          setPassword={onPasswordChange}\n          error={errorMessage}\n          {...passwordInputProps}\n        />\n\n        <PasswordError bootstrap={bootstrap} {...passwordError} />\n\n        <Button\n          variant=\"primary\"\n          loading={isSubmitting}\n          type=\"submit\"\n          disabled={passwordError.policy === 'notLoaded' || passwordError.passwordInvalid}\n        >\n          {t({ id: 'button.continue', message: 'Continue' })}\n        </Button>\n      </Column>\n    </Column>\n  );\n};\n"],"names":["PasswordResetForm","stytchClient","useStytch","config","useConfig","dispatch","useGlobalReducer","bootstrap","useB2BBootstrap","useLingui","onEvent","useEventCallback","onError","useErrorCallback","resetToken","resetTokenType","useMemo","parsed","parseAuthenticateUrl","token","tokenType","dataLayer","readB2BInternals","email","getItem","password","setPassword","useState","errorMessage","setErrorMessage","passwordError","setPasswordError","policy","isSubmitting","setIsSubmitting","updateStrengthCheck","debounce","passwords","strengthCheck","then","score","valid_password","zxcvbn_feedback","luds_feedback","strength_policy","breached_password","common","passwordInvalid","isPasswordBreached","passwordScore","passwordWarning","warning","passwordSuggestions","suggestions","missingCharacters","missing_characters","missingComplexity","missing_complexity","catch","e","getTranslatedError","useEffect","magicLinks","authenticate","magic_links_token","session_duration_minutes","sessionOptions","sessionDurationMinutes","DEFAULT_SESSION_DURATION_MINUTES","locale","emailMagicLinksOptions","data","clearStytchTokenParams","type","response","includedMfaMethods","mfaProductInclude","onPasswordChange","handleSubmit","preventDefault","resetByEmail","password_reset_token","passwordOptions","StytchEventType","B2BPasswordResetByEmail","onAuthenticateSuccess","discovery","B2BDiscoveryPasswordReset","email_address","discoveredOrganizations","discovered_organizations","screen","AppScreens","Discovery","resetBySession","B2BPasswordResetBySession","LoggedIn","passwordInputProps","getNewPasswordProps","React","Column","gap","as","onSubmit","Typography","variant","EmailInput","setEmail","noop","disabled","PasswordInput","error","PasswordError","Button","loading"],"mappings":"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"}