"use client"; import { Suspense, useState } from "react"; import Link from "next/link"; import { useRouter, useSearchParams } from "next/navigation"; import { toast } from "sonner"; import { api, AdminError } from "@/lib/api"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { AuthShell, Field } from "@/app/login/page"; export default function ResetPasswordPage() { return ( …}> ); } function ResetInner() { const router = useRouter(); const token = useSearchParams().get("token") ?? ""; const [password, setPassword] = useState(""); const [confirm, setConfirm] = useState(""); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); async function onSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); if (password.length < 8) { setError("Password must be at least 8 characters."); return; } if (password !== confirm) { setError("Passwords don't match."); return; } setBusy(true); try { await api.resetPassword(token, password); toast.success("Password updated — please sign in."); router.replace("/login"); } catch (err) { setError( err instanceof AdminError ? err.message : "Could not reset password.", ); } finally { setBusy(false); } } if (!token) { return (

This reset link is missing its token. Request a new one.

Request a reset link
); } return (
setPassword(e.target.value)} /> setConfirm(e.target.value)} /> {error ?

{error}

: null}
); }