'use client'; import { useState } from 'react'; import { ChevronDown, ChevronRight, User, Globe, Monitor, Cpu, Shield, Check, X, AlertTriangle } from 'lucide-react'; export interface SessionFingerprint { user_agent: string; platform: string; language: string; languages: string[]; timezone: string; screen: { width: number; height: number; colorDepth: number }; viewport: { width: number; height: number }; webgl_vendor: string; webgl_renderer: string; canvas_fingerprint: string; hardware_concurrency: number; device_memory: number; bot_detection_tests: { webdriver_hidden: boolean; chrome_runtime: boolean; permissions_query: boolean; }; captured_at: string; } interface SessionPanelProps { fingerprint: SessionFingerprint; } function BotTestIndicator({ passed, label }: { passed: boolean | null | undefined; label: string }) { if (passed === null || passed === undefined) { return (
{label} UNKNOWN
); } if (passed) { return (
{label} PASSED
); } return (
{label} FAILED
); } function SectionHeader({ icon: Icon, title }: { icon: React.ElementType; title: string }) { return (

{title}

); } function DataRow({ label, value, mono = true }: { label: string; value: string | number; mono?: boolean }) { return (
{label} {value}
); } export default function SessionPanel({ fingerprint }: SessionPanelProps) { const [isExpanded, setIsExpanded] = useState(false); // Calculate overall bot detection status const tests = fingerprint.bot_detection_tests; const testResults = [tests.webdriver_hidden, tests.chrome_runtime, tests.permissions_query]; const passedCount = testResults.filter(t => t === true).length; const failedCount = testResults.filter(t => t === false).length; const unknownCount = testResults.filter(t => t === null || t === undefined).length; const overallStatus = failedCount > 0 ? 'warning' : unknownCount > 0 ? 'partial' : 'success'; const statusColors = { success: 'bg-green-900/30 border-green-700/50 text-green-400', partial: 'bg-yellow-900/30 border-yellow-700/50 text-yellow-400', warning: 'bg-red-900/30 border-red-700/50 text-red-400', }; return (
{/* Collapsible Header */} {/* Collapsible Content */} {isExpanded && (
{/* Identity Section */}
{/* Geolocation Section */}
{/* Display Section */}
{/* Hardware Section */}
{/* Bot Detection Section - Full Width */}

Green checkmark = Test passed (bot detection evaded)

Red X = Test failed (may have been detected as a bot)

Yellow warning = Test result unknown

)}
); }