import { useEffect, useState, type ReactNode } from 'react'; import { getStoredAuth, setStoredAuth } from '../api/auth'; export default function SessionGate({ children }: { children: ReactNode }) { const [ready, setReady] = useState(false); const [authed, setAuthed] = useState(!!getStoredAuth()); const [user, setUser] = useState(''); const [pass, setPass] = useState(''); const [err, setErr] = useState(''); useEffect(() => { const token = getStoredAuth(); if (!token) { setAuthed(false); setReady(true); return; } fetch('/api/v1/config', { headers: { Authorization: `Basic ${token}` } }) .then((r) => { setAuthed(r.ok); setReady(true); }) .catch(() => { setAuthed(false); setReady(true); }); }, []); const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); setErr(''); const token = btoa(`${user}:${pass}`); try { const res = await fetch('/api/v1/config', { headers: { Authorization: `Basic ${token}` } }); if (!res.ok) { setErr('Login failed — check username and password.'); return; } setStoredAuth(user, pass); setAuthed(true); } catch { setErr('Cannot reach server — check that miner-server is running.'); } }; if (!ready) { return (
Starting AetherForge…