import { signIn, useSession, getSession } from 'next-auth/react'; import { useRouter } from 'next/router'; import { useState, useEffect } from 'react'; import { useNDKContext } from '@/context/NDKContext'; import GenericButton from '@/components/buttons/GenericButton'; import Image from 'next/image'; import { InputText } from 'primereact/inputtext'; export default function SignIn() { const [email, setEmail] = useState(''); const [nsec, setNsec] = useState(''); const [showEmailInput, setShowEmailInput] = useState(false); const [showRecoveryInput, setShowRecoveryInput] = useState(false); const { ndk, addSigner } = useNDKContext(); const { data: session, status } = useSession(); const router = useRouter(); const handleEmailSignIn = async e => { e.preventDefault(); await signIn('email', { email, callbackUrl: '/profile' }); }; const handleNostrSignIn = async e => { e.preventDefault(); if (!ndk.signer) { await addSigner(); } try { const user = await ndk.signer.user(); const pubkey = user?._pubkey; signIn('nostr', { pubkey, callbackUrl: '/profile' }); } catch (error) { console.error('Error signing Nostr event:', error); } }; const handleAnonymousSignIn = async e => { e.preventDefault(); // Check if we have keys in local storage const storedPubkey = localStorage.getItem('anonymousPubkey'); const storedPrivkey = localStorage.getItem('anonymousPrivkey'); try { const result = await signIn('anonymous', { pubkey: storedPubkey, privkey: storedPrivkey, redirect: false, callbackUrl: '/profile', }); if (result?.ok) { // Wait a moment for the session to be updated await new Promise(resolve => setTimeout(resolve, 1000)); // Fetch the session const session = await getSession(); if (session?.user?.pubkey && session?.user?.privkey) { localStorage.setItem('anonymousPubkey', session.user.pubkey); localStorage.setItem('anonymousPrivkey', session.user.privkey); router.push('/profile'); } else { console.error('Session data incomplete:', session); } } else { console.error('Anonymous login failed:', result?.error); } } catch (error) { console.error('Sign in error:', error); } }; const handleRecoverySignIn = async e => { e.preventDefault(); try { const result = await signIn('recovery', { nsec, redirect: false, callbackUrl: '/profile', }); if (result?.ok) { router.push('/profile'); } else { console.error('Recovery login failed:', result?.error); } } catch (error) { console.error('Recovery sign in error:', error); } }; useEffect(() => { // Redirect if already signed in if (session?.user) { router.push('/profile'); } }, [session, router]); return (

Sign In

} className="text-[#f8f8ff] w-[250px] my-4 mx-auto" rounded onClick={handleNostrSignIn} /> setShowEmailInput(!showEmailInput)} /> signIn('github')} /> {showEmailInput && (
setEmail(e.target.value)} placeholder="Enter your email" className="w-[250px] my-4" /> )} setShowRecoveryInput(!showRecoveryInput)} /> {showRecoveryInput && (

⚠️ Recovery Notice

🔑 This recovery option is only for accounts created through:

  • 📧 Email Login
  • 👤 Anonymous Login
  • 🐙 GitHub Login

⛔ Do NOT enter your personal Nostr nsec here! Only use the recovery key provided by PlebDevs (available on your profile page).

setNsec(e.target.value)} placeholder="Enter recovery key (nsec or hex)" className="w-[250px] my-4" /> )}
); }