import { useState } from "react" import { useNavigate, useSearchParams } from "react-router" import { TwoFactorChallengeForm } from "@crema/arcadia-auth-ui" import { pageTitle } from "~/lib/page-meta" import { persistFromArcadiaLogin } from "~/lib/session" import { AuthBrand, AuthShell } from "~/components/auth/auth-shell" export const meta = () => pageTitle("Two-factor verification") export default function TwoFactorRoute() { const [params] = useSearchParams() const navigate = useNavigate() const challenge = params.get("challenge") ?? "" const next = params.get("next") || "/" const [mode, setMode] = useState<"totp" | "recovery">("totp") if (!challenge) { return (

Challenge missing

This page is only reachable after a sign-in attempt. Start over.

) } return ( } challenge={challenge} mode={mode} onUseRecoveryCode={mode === "totp" ? () => setMode("recovery") : undefined} onBack={ mode === "recovery" ? () => setMode("totp") : () => navigate("/login") } onSuccess={({ tokens, user }) => { persistFromArcadiaLogin(tokens, user) navigate(next, { replace: true }) }} /> ) }