# `useEmailAuthOtp`

Handles OTP-based email authentication for passwordless login flows. Users receive a one-time password via email to authenticate.

## Usage

```tsx
import { useEmailAuthOtp } from '@openfort/react-native';

function OtpLoginForm() {
  const { requestEmailOtp, signInEmailOtp, isLoading, isSuccess, error } = useEmailAuthOtp({
    onSuccess: ({ user }) => console.log('OTP auth successful:', user?.id),
    onError: (error) => console.error('OTP auth failed:', error?.message),
  });

  const [email, setEmail] = useState('');
  const [otp, setOtp] = useState('');
  const [otpSent, setOtpSent] = useState(false);

  const handleRequestOtp = async () => {
    await requestEmailOtp({ email });
    setOtpSent(true);
  };

  const handleSignIn = async () => {
    await signInEmailOtp({ email, otp });
  };

  if (!otpSent) {
    return <Button title="Send OTP" onPress={handleRequestOtp} disabled={isLoading} />;
  }

  return <Button title="Sign In" onPress={handleSignIn} disabled={isLoading} />;
}
```

## Hook options

Pass these options when initializing the hook:

```ts
type UseEmailOtpHookOptions = {
  onSuccess?: (data: EmailOtpAuthResult) => void
  onError?: (error: OpenfortError) => void
  throwOnError?: boolean
}
```

## Return type

The hook returns the following:

```ts
type UseEmailAuthOtpReturn = {
  requestEmailOtp(options: RequestEmailOtpOptions): Promise<EmailOtpAuthResult>
  signInEmailOtp(options: LoginWithEmailOtpOptions): Promise<EmailOtpAuthResult>
  reset(): void
  isLoading: boolean
  isError: boolean
  isSuccess: boolean
  error: OpenfortError | null
}

type EmailOtpAuthResult = {
  user?: User
  error?: OpenfortError
}
```

## Parameters

### `requestEmailOtp`

Sends an OTP to the specified email address.

```ts
type RequestEmailOtpOptions = {
  email: string
  onSuccess?: (data: EmailOtpAuthResult) => void
  onError?: (error: OpenfortError) => void
  throwOnError?: boolean
}
```

### `signInEmailOtp`

Signs in the user using the email and OTP code.

```ts
type LoginWithEmailOtpOptions = {
  email: string
  otp: string
  onSuccess?: (data: EmailOtpAuthResult) => void
  onError?: (error: OpenfortError) => void
  throwOnError?: boolean
}
```
