{"version":3,"file":"PasskeyRegistrationStart.mjs","sources":["../../../../../../../../../../web/src/ui/b2c/screens/Passkey/PasskeyRegistrationStart.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, useState } from 'react';\n\nimport {\n  CHROME_CROSS_DEVICE_DUPLICATE_REG_ERROR_MESSAGE,\n  SAFARI_CROSS_DEVICE_DUPLICATE_REG_ERROR_MESSAGE,\n} from '../../../../utils/passkeys';\nimport Button from '../../../components/atoms/Button';\nimport Column from '../../../components/atoms/Column';\nimport ButtonColumn from '../../../components/molecules/ButtonColumn';\nimport ErrorText from '../../../components/molecules/ErrorText';\nimport { LoadingScreen } from '../../../components/molecules/Loading';\nimport TextColumn from '../../../components/molecules/TextColumn';\nimport {\n  AppScreens,\n  useConfig,\n  useErrorCallback,\n  useEventCallback,\n  useGlobalReducer,\n  useStytch,\n} from '../../GlobalContextProvider';\n\nexport const PasskeyRegistrationStart = () => {\n  const { t } = useLingui();\n  const stytchClient = useStytch();\n  const [userState, setUserState] = useState<'noUser' | 'hasUser' | 'loading'>(() =>\n    // We'll optimistically say if the user has a cached session then they are logged in, otherwise we try loading first\n    stytchClient.user.getSync() != null ? 'hasUser' : 'loading',\n  );\n  const [error, setError] = useState<string>();\n  const config = useConfig();\n\n  const onEvent = useEventCallback();\n  const onError = useErrorCallback();\n\n  useEffect(() => {\n    stytchClient.user\n      .get()\n      .then(() => {\n        setUserState('hasUser');\n      })\n      .catch((e: StytchAPIError) => {\n        setUserState('noUser');\n        onError(e);\n      });\n  }, [onError, stytchClient]);\n\n  const [, dispatch] = useGlobalReducer();\n\n  const onCreatePasskey = () => {\n    setError(undefined);\n\n    stytchClient.webauthn\n      .register({\n        domain: config.passkeyOptions?.domain,\n        is_passkey: true,\n        session_duration_minutes: config.sessionOptions?.sessionDurationMinutes ?? DEFAULT_SESSION_DURATION_MINUTES,\n      })\n      .then((data) => {\n        onEvent({ type: StytchEventType.PasskeyRegister, data });\n        dispatch({ type: 'transition', screen: AppScreens.PasskeyRegistrationSuccess });\n      })\n      .catch((e: StytchAPIError) => {\n        onError(e);\n\n        if (\n          e.message.includes(SAFARI_CROSS_DEVICE_DUPLICATE_REG_ERROR_MESSAGE) ||\n          e.message.includes(CHROME_CROSS_DEVICE_DUPLICATE_REG_ERROR_MESSAGE)\n        ) {\n          setError(\n            t({\n              id: 'error.duplicatePasskey',\n              message:\n                'The Passkey cannot be created as it seems to be already registered. It is possible this Passkey was registered on another device but has synced cross-device.',\n            }),\n          );\n          return;\n        } else {\n          setError(\n            t({\n              id: 'error.passkeyNotCreated',\n              message:\n                'Your Passkey was not created. Click “Create a Passkey” to try again or skip without adding a Passkey.',\n            }),\n          );\n        }\n      });\n  };\n\n  const onSkip = () => {\n    onEvent({ type: StytchEventType.PasskeySkip, data: {} });\n    dispatch({ type: 'transition', screen: AppScreens.PasskeyRegistrationSuccess });\n  };\n\n  if (userState === 'loading') {\n    return <LoadingScreen />;\n  }\n\n  if (userState === 'noUser') {\n    return (\n      <ErrorText>\n        {t({\n          id: 'passkey.registrationStart.error.noUser',\n          message: 'Error: Cannot use PasskeyRegistration component without active user authenticated.',\n        })}\n      </ErrorText>\n    );\n  }\n\n  return (\n    <Column gap={6}>\n      <TextColumn\n        header={t({\n          id: 'passkey.registrationStart.title',\n          message: 'Set up a new Passkey',\n        })}\n        body={t({\n          id: 'passkey.registrationStart.subtitle',\n          message: \"With Passkeys you don't need to remember complex passwords.\",\n        })}\n        helper={t({\n          id: 'passkey.registrationStart.description',\n          message:\n            'Passkeys are encrypted digital keys you create using your fingerprint, face, or screen lock. Creating a Passkey will allow you to easily and securely log in to your account.',\n        })}\n      />\n\n      <ButtonColumn>\n        <Button variant=\"primary\" onClick={() => onCreatePasskey()}>\n          {t({\n            id: 'button.createPasskey',\n            message: 'Create a Passkey',\n          })}\n        </Button>\n\n        {error && <ErrorText>{error}</ErrorText>}\n\n        <Button variant=\"ghost\" onClick={() => onSkip()}>\n          {t({\n            id: 'button.skip',\n            message: 'Skip',\n          })}\n        </Button>\n      </ButtonColumn>\n    </Column>\n  );\n};\n"],"names":["PasskeyRegistrationStart","useLingui","stytchClient","useStytch","userState","setUserState","useState","user","getSync","error","setError","config","useConfig","onEvent","useEventCallback","onError","useErrorCallback","useEffect","get","then","catch","e","dispatch","useGlobalReducer","onCreatePasskey","undefined","webauthn","register","domain","passkeyOptions","is_passkey","session_duration_minutes","sessionOptions","sessionDurationMinutes","DEFAULT_SESSION_DURATION_MINUTES","data","type","StytchEventType","PasskeyRegister","screen","AppScreens","PasskeyRegistrationSuccess","message","includes","SAFARI_CROSS_DEVICE_DUPLICATE_REG_ERROR_MESSAGE","CHROME_CROSS_DEVICE_DUPLICATE_REG_ERROR_MESSAGE","onSkip","PasskeySkip","React","LoadingScreen","ErrorText","Column","gap","TextColumn","header","body","helper","ButtonColumn","Button","variant","onClick"],"mappings":"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"}