"use client";
import { Suspense, useEffect, useState } from "react";
import { signIn } from "next-auth/react";
import { useSearchParams, useRouter } from "next/navigation";
export default function PartnerSignIn() {
const searchParams = useSearchParams();
const router = useRouter();
const [status, setStatus] = useState<"loading" | "signing-in" | "error">(
"loading",
);
const token = searchParams.get("token");
const email = searchParams.get("email");
useEffect(() => {
if (!token || !email) {
queueMicrotask(() => {
setStatus("error");
});
router.push("/login?error=invalid-partner-link");
return;
}
fetch("/api/auth/verify-partner-token", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ token, email }),
})
.then((response) => response.json())
.then(async (data) => {
if (data.valid) {
queueMicrotask(() => {
setStatus("signing-in");
});
// Sign in using email provider with pre-verified email
const result = await signIn("email", {
email: email,
redirect: false,
callbackUrl: data.redirectUrl || "/app?welcome=partner",
});
if (result?.url) {
// Instead of email verification, go directly to the app
router.push(data.redirectUrl || "/app?welcome=partner");
} else {
queueMicrotask(() => {
setStatus("error");
});
router.push("/login?error=signin-failed");
}
} else {
queueMicrotask(() => {
setStatus("error");
});
router.push("/login?error=invalid-token");
}
})
.catch(() => {
queueMicrotask(() => {
setStatus("error");
});
router.push("/login?error=system-error");
});
}, [token, email, router]);
return ... ;
}