import React, { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import axios from 'axios'; import { API_BASE_URL } from '../config'; export const Login: React.FC = () => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const [showCookieMethod, setShowCookieMethod] = useState(false); const [cookies, setCookies] = useState(''); const navigate = useNavigate(); const handleLogin = async (e: React.FormEvent) => { e.preventDefault(); if (!username.trim() || !password.trim()) return; setError(''); setIsLoading(true); try { const res = await axios.post(`${API_BASE_URL}/auth/login`, { username: username.trim(), password: password.trim() }); if (res.data.status === 'success') { navigate('/'); } else { setError(res.data.message || 'Login failed. Please check your credentials.'); } } catch (err: any) { const message = err.response?.data?.detail || err.response?.data?.message || 'Login failed. Please try again.'; setError(message); } finally { setIsLoading(false); } }; const handleCookieLogin = async () => { if (!cookies.trim()) return; setError(''); setIsLoading(true); try { // Try to parse as JSON let jsonCreds; try { jsonCreds = JSON.parse(cookies); } catch { // If not JSON, wrap it as simple session format jsonCreds = { http: { cookies: { sessionid: cookies.trim() } } }; } const res = await axios.post(`${API_BASE_URL}/auth/credentials`, { credentials: jsonCreds }); if (res.data.status === 'success') { navigate('/'); } else { setError(res.data.message || 'Failed to save cookies.'); } } catch (err: any) { setError(err.response?.data?.detail || 'Invalid cookie format.'); } finally { setIsLoading(false); } }; return (
{/* Header */}

PureStream

Ad-free TikTok viewing

{/* Scrollable Content */}
{error && (
{error}
)} {/* Simple Login Form */}
setUsername(e.target.value)} placeholder="Enter your TikTok email" className="w-full bg-black/60 border-2 border-white/10 rounded-xl p-3.5 text-white text-sm focus:outline-none focus:border-cyan-500/50 placeholder:text-gray-600" disabled={isLoading} />
setPassword(e.target.value)} placeholder="Enter your password" className="w-full bg-black/60 border-2 border-white/10 rounded-xl p-3.5 text-white text-sm focus:outline-none focus:border-cyan-500/50 placeholder:text-gray-600" disabled={isLoading} />
{/* Info */}

Your credentials are used only to log into TikTok on the server. They are not stored.

{/* Cookie Method - Alternative */}
{showCookieMethod && (

If login doesn't work, you can paste TikTok cookies directly.