'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 (
);
}
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
)}
);
}