'use client'; import { useEffect, useState, useCallback } from 'react'; import { initTelemetry, track } from '@/lib/telemetry'; import { markSessionStartedOnce } from '@/lib/telemetry/session-guard'; import { configManager } from '@/lib/config/storage'; import { TelemetryDisclosure } from '@/components/telemetry-disclosure'; /** * Initializes telemetry and shows the first-run disclosure. Mounted by both * the browser-mode SPA (StudioApp) and the server-mode PageWrapper so every * deployment mode reports. The v2 key re-shows the updated disclosure once to * users who saw the old one; users who opted out are never re-prompted. */ const DISCLOSED_KEY = 'osw-telemetry-disclosed-v2'; export function TelemetryBootstrap() { const [showDisclosure, setShowDisclosure] = useState(false); useEffect(() => { initTelemetry(); // Once per page load, even though PageWrapper remounts on every server-mode // route navigation. if (markSessionStartedOnce()) { track('session_start'); } try { const optedOut = configManager.getSettings().telemetryOptIn === false; if (!optedOut && !localStorage.getItem(DISCLOSED_KEY)) setShowDisclosure(true); } catch { /* never block the app on telemetry */ } }, []); const dismiss = useCallback(() => { localStorage.setItem(DISCLOSED_KEY, 'true'); setShowDisclosure(false); }, []); return ; }