import React, { useState, useEffect } from "react"; interface BetaPasswordProtectionProps { children: React.ReactNode; } const BetaPasswordProtection: React.FC = ({ children, }) => { const [isAuthenticated, setIsAuthenticated] = useState(false); const [password, setPassword] = useState(""); const [error, setError] = useState(""); const [loading, setLoading] = useState(true); useEffect(() => { // Check if user already has valid beta access const betaToken = localStorage.getItem("betaAccess"); if (betaToken) { // Verify the stored token is still valid verifyBetaAccess(betaToken); } else { setLoading(false); } }, []); const verifyBetaAccess = async (token: string) => { try { const response = await fetch( `${process.env.REACT_APP_API_URL}/beta/verify`, { headers: { "X-Beta-Password": token, }, } ); if (response.ok) { setIsAuthenticated(true); } else { localStorage.removeItem("betaAccess"); } } catch (error) { localStorage.removeItem("betaAccess"); } finally { setLoading(false); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(""); if (!password) { setError("Please enter a password"); return; } try { const response = await fetch( `${process.env.REACT_APP_API_URL}/beta/verify`, { headers: { "X-Beta-Password": password, }, } ); if (response.ok) { localStorage.setItem("betaAccess", password); setIsAuthenticated(true); } else { setError("Invalid beta password"); } } catch (error) { setError("Failed to verify beta password"); } }; if (loading) { return (
Loading...
); } if (!isAuthenticated) { return (

Beta Access Required

This site is currently in beta testing. Please enter the beta password to continue.

setPassword(e.target.value)} placeholder="Enter beta password" autoFocus />
{error && (
{error}
)}
); } return <>{children}; }; export default BetaPasswordProtection;