import { useState } from "react";
import { sendCode, loginWithOTP } from "./inprocess";
type Step = "email" | "code" | "authenticated";
export const useInProcessAuth = () => {
const [step, setStep] = useState<Step>("email");
const [email, setEmail] = useState("");
const [token, setToken] = useState<string | null>(null);
const [error, setError] = useState<string | null>(null);
const [loading, setLoading] = useState(false);
const handleSendCode = async () => {
setError(null);
setLoading(true);
try {
await sendCode(email);
setStep("code");
} catch (err) {
setError(err instanceof Error ? err.message : "Failed to send code");
} finally {
setLoading(false);
}
};
const handleLogin = async (code: string) => {
setError(null);
setLoading(true);
try {
const jwt = await loginWithOTP(email, code);
setToken(jwt);
setStep("authenticated");
} catch (err) {
setError(err instanceof Error ? err.message : "Invalid code");
} finally {
setLoading(false);
}
};
const reset = () => {
setStep("email");
setEmail("");
setToken(null);
setError(null);
};
return { step, email, setEmail, token, error, loading, handleSendCode, handleLogin, reset };
};