"use client"; import { useState, useTransition } from "react"; import { useRouter } from "next/navigation"; import { adminCreateKey } from "@/app/actions/admin-keys"; import { maskFromHint } from "@/lib/keys/key-format"; /** * Manual mint form (admin override). Submits the numeric GitHub provider_id and * optional username to the server action; the raw key is never returned here, so * only a masked hint is shown on success. */ export function AdminCreateKeyForm() { const router = useRouter(); const [pending, startTransition] = useTransition(); const [result, setResult] = useState(/** @type {any} */ (null)); function onSubmit(e) { e.preventDefault(); const form = e.currentTarget; const githubUserId = form.githubUserId.value; const githubUsername = form.githubUsername.value; startTransition(async () => { const res = await adminCreateKey({ githubUserId, githubUsername }); setResult(res); if (res.status === "created" || res.status === "exists") { form.reset(); router.refresh(); } }); } return (

Manually mint a key

{result?.status === "created" && (

Created — masked: {maskFromHint(result.keyHint)}

)} {result?.status === "exists" &&

User already has a key.

} {result?.status === "error" &&

{result.message}

}
); }