import { useState } from 'react'; const API_URL = import.meta.env.VITE_API_URL ?? 'https://api.t4t-gateway.com'; export function meta() { return [{ title: 'Log in · t4t Gateway' }]; } export default function Login() { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(null); async function onSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); setSubmitting(true); try { const res = await fetch(`${API_URL}/auth/email/login`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }), }); const body = await res.json(); if (!res.ok) { throw new Error(body?.message ?? body?.error ?? `Login failed (${res.status})`); } localStorage.setItem('jwt', body.token); window.location.href = '/account'; } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error'); } finally { setSubmitting(false); } } return (

Log in

Welcome back.

setEmail(e.target.value)} className='mt-1 block w-full rounded-md border border-neutral-300 px-3 py-2 text-sm shadow-sm focus:border-neutral-900 focus:outline-none focus:ring-1 focus:ring-neutral-900' />
setPassword(e.target.value)} className='mt-1 block w-full rounded-md border border-neutral-300 px-3 py-2 text-sm shadow-sm focus:border-neutral-900 focus:outline-none focus:ring-1 focus:ring-neutral-900' />
{error && (

{error}

)}

No account?{' '} Sign up

); }