{"version":3,"file":"EmailOTPEntryScreen.mjs","sources":["../../../../../../../../../web/src/ui/b2b/screens/EmailOTPEntryScreen.tsx"],"sourcesContent":["import { useLingui } from '@lingui/react/macro';\nimport {\n  AuthFlowType,\n  B2BDiscoveryOTPEmailAuthenticateResponse,\n  B2BOTPsEmailAuthenticateResponse,\n  StytchAPIError,\n} from '@stytch/core/public';\nimport React from 'react';\n\nimport { getTranslatedError } from '../../../utils/getTranslatedError';\nimport Button from '../../components/atoms/Button';\nimport Column from '../../components/atoms/Column';\nimport { useCountdown } from '../../components/atoms/Countdown';\nimport ButtonColumn from '../../components/molecules/ButtonColumn';\nimport { LoadingScreen } from '../../components/molecules/Loading';\nimport { ResendOTPButton } from '../../components/organisms/ResendOTPButton';\nimport { SentOTPEntry } from '../../components/organisms/SentOTPEntry';\nimport { useConfig, useGlobalReducer, useStytch } from '../GlobalContextProvider';\nimport { useEmailOtpDiscoverySend } from '../hooks/useEmailOtpDiscoverySend';\nimport { useEmailOtpLoginOrSignup } from '../hooks/useEmailOtpLoginOrSignup';\nimport { onAuthenticateSuccess, onDiscoveryAuthenticateSuccess, StytchMutationKey, useMutate } from '../utils';\n\nexport const EmailOTPEntryScreen = () => {\n  const stytchClient = useStytch();\n  const config = useConfig();\n  const { t } = useLingui();\n\n  const [state, dispatch] = useGlobalReducer();\n  const { codeExpiration } = state.formState.otpState;\n  const resendCountdown = useCountdown();\n  const { userSuppliedEmail } = state.formState.emailState;\n\n  const emailOtp = useEmailOtpLoginOrSignup({ throwOnError: true });\n  const emailOtpDiscovery = useEmailOtpDiscoverySend({ throwOnError: true });\n\n  const isSending = emailOtp.isMutating || emailOtpDiscovery.isMutating;\n  const sendError = emailOtp.error || emailOtpDiscovery.error;\n\n  const discoveryAuthenticate = useMutate<\n    B2BDiscoveryOTPEmailAuthenticateResponse,\n    unknown,\n    StytchMutationKey,\n    { otp: string; email: string }\n  >(\n    'stytch.otps.email.discovery.authenticate',\n    (_: string, { arg: { otp, email } }: { arg: { otp: string; email: string } }) =>\n      stytchClient.otps.email.discovery.authenticate({\n        code: otp,\n        email_address: email,\n      }),\n    {\n      onSuccess: (data) => {\n        onDiscoveryAuthenticateSuccess(data, dispatch);\n      },\n      throwOnError: true,\n    },\n  );\n\n  const authenticate = useMutate<\n    B2BOTPsEmailAuthenticateResponse,\n    unknown,\n    StytchMutationKey,\n    { otp: string; emailAddress: string; organizationId: string; sessionDurationMinutes: number }\n  >(\n    'stytch.otps.email.authenticate',\n    (\n      _: string,\n      {\n        arg: { otp, emailAddress, organizationId, sessionDurationMinutes },\n      }: { arg: { otp: string; emailAddress: string; organizationId: string; sessionDurationMinutes: number } },\n    ) =>\n      stytchClient.otps.email.authenticate({\n        code: otp,\n        email_address: emailAddress,\n        organization_id: organizationId,\n        session_duration_minutes: sessionDurationMinutes,\n      }),\n    {\n      onSuccess: (data) => {\n        onAuthenticateSuccess(data, dispatch, config);\n      },\n      throwOnError: true,\n    },\n  );\n\n  const isAuthenticatingAny = discoveryAuthenticate.isMutating || authenticate.isMutating;\n  const error = discoveryAuthenticate.error || authenticate.error || sendError;\n  const errorMessage = error ? getTranslatedError(error as StytchAPIError, t) : undefined;\n\n  const resetAll = () => {\n    for (const resp of [emailOtp, emailOtpDiscovery, authenticate, discoveryAuthenticate]) {\n      resp.reset();\n    }\n  };\n\n  const handleSubmit = async (otp: string) => {\n    resetAll();\n\n    try {\n      if (state.flowState.type === AuthFlowType.Discovery) {\n        await discoveryAuthenticate.trigger({\n          otp,\n          email: userSuppliedEmail,\n        });\n      } else if (\n        state.flowState.type === AuthFlowType.Organization &&\n        state.flowState.organization &&\n        state.formState.emailState.userSuppliedEmail\n      ) {\n        await authenticate.trigger({\n          otp,\n          emailAddress: state.formState.emailState.userSuppliedEmail,\n          organizationId: state.flowState.organization.organization_id,\n          sessionDurationMinutes: config.sessionOptions.sessionDurationMinutes,\n        });\n      }\n    } catch {\n      resendCountdown.clear();\n    }\n  };\n\n  const handleResendOTP = async () => {\n    resetAll();\n\n    if (isSending) return;\n\n    if (state.flowState.type === AuthFlowType.Discovery) {\n      await emailOtpDiscovery.trigger({ email: userSuppliedEmail });\n    } else if (state.flowState.type === AuthFlowType.Organization && state.flowState.organization) {\n      await emailOtp.trigger({\n        email: userSuppliedEmail,\n        organization_id: state.flowState.organization.organization_id,\n      });\n    }\n  };\n\n  const handleBack = () => {\n    dispatch({ type: 'navigate_back' });\n  };\n\n  return (\n    <Column gap={6}>\n      {codeExpiration !== null ? (\n        <SentOTPEntry\n          isSubmitting={isAuthenticatingAny}\n          onSubmit={handleSubmit}\n          errorMessage={errorMessage}\n          expiration={codeExpiration.getTime()}\n          formattedDestination={userSuppliedEmail}\n        />\n      ) : (\n        <LoadingScreen />\n      )}\n\n      <ButtonColumn>\n        <ResendOTPButton countdown={resendCountdown} resendOTP={handleResendOTP} isSubmitting={isAuthenticatingAny} />\n        <Button variant=\"ghost\" onClick={handleBack}>\n          {t({ id: 'button.goBack', message: 'Go back' })}\n        </Button>\n      </ButtonColumn>\n    </Column>\n  );\n};\n"],"names":["EmailOTPEntryScreen","stytchClient","useStytch","config","useConfig","useLingui","state","dispatch","useGlobalReducer","codeExpiration","formState","otpState","resendCountdown","useCountdown","userSuppliedEmail","emailState","emailOtp","useEmailOtpLoginOrSignup","throwOnError","emailOtpDiscovery","useEmailOtpDiscoverySend","isSending","isMutating","sendError","error","discoveryAuthenticate","useMutate","_","arg","otp","email","otps","discovery","authenticate","code","email_address","onSuccess","data","onDiscoveryAuthenticateSuccess","emailAddress","organizationId","sessionDurationMinutes","organization_id","session_duration_minutes","onAuthenticateSuccess","isAuthenticatingAny","errorMessage","getTranslatedError","undefined","resetAll","resp","reset","handleSubmit","flowState","type","AuthFlowType","Discovery","trigger","Organization","organization","sessionOptions","clear","handleResendOTP","handleBack","React","Column","gap","SentOTPEntry","isSubmitting","onSubmit","expiration","getTime","formattedDestination","LoadingScreen","ButtonColumn","ResendOTPButton","countdown","resendOTP","Button","variant","onClick"],"mappings":"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"}