({
trigger,
provider: providerProp,
onSuccessfulLogin,
}: UseLoginProps = {})
| 45 | } |
| 46 | |
| 47 | const useLogin = ({ |
| 48 | trigger, |
| 49 | provider: providerProp, |
| 50 | onSuccessfulLogin, |
| 51 | }: UseLoginProps = {}): UseLogin => { |
| 52 | const { onUpdateSignBack } = useSignBack(); |
| 53 | const { displayToast } = useToastNotification(); |
| 54 | const { logEvent } = useLogContext(); |
| 55 | const { refetchBoot } = useContext(AuthContext); |
| 56 | const hintState = useState<string | null>('Enter your password to login'); |
| 57 | const [, setHint] = hintState; |
| 58 | |
| 59 | const { |
| 60 | mutateAsync: onBetterAuthPasswordLogin, |
| 61 | isPending: isBetterAuthPasswordLoading, |
| 62 | } = useMutation({ |
| 63 | mutationFn: async (form: LoginFormParams) => { |
| 64 | logEvent({ |
| 65 | event_name: 'click', |
| 66 | target_type: AuthEventNames.LoginProvider, |
| 67 | target_id: 'email', |
| 68 | extra: JSON.stringify({ trigger }), |
| 69 | }); |
| 70 | return betterAuthSignIn({ |
| 71 | email: form.identifier, |
| 72 | password: form.password, |
| 73 | turnstileToken: form.turnstileToken, |
| 74 | }); |
| 75 | }, |
| 76 | onSuccess: async (res) => { |
| 77 | if (res.error) { |
| 78 | logEvent({ |
| 79 | event_name: AuthEventNames.LoginError, |
| 80 | extra: JSON.stringify({ |
| 81 | provider: 'password', |
| 82 | error: res.error, |
| 83 | displayedError: labels.auth.error.invalidEmailOrPassword, |
| 84 | origin: Origin.BetterAuthEmailLogin, |
| 85 | userAgent: navigator.userAgent, |
| 86 | }), |
| 87 | }); |
| 88 | setHint(labels.auth.error.invalidEmailOrPassword); |
| 89 | return; |
| 90 | } |
| 91 | |
| 92 | try { |
| 93 | const { data: boot } = await refetchBoot(); |
| 94 | |
| 95 | if (!boot.user) { |
| 96 | logEvent({ |
| 97 | event_name: AuthEventNames.LoginError, |
| 98 | extra: JSON.stringify({ |
| 99 | provider: 'password', |
| 100 | error: 'Missing user after Better Auth email login', |
| 101 | origin: Origin.BetterAuthEmailLoginBoot, |
| 102 | }), |
| 103 | }); |
| 104 | setHint(labels.auth.error.generic); |
no test coverage detected