import React from 'react' import { rawRecordDiagnosticEvent } from '../api/client' let installed = false export function installClientDiagnosticsCapture() { if (installed || typeof window === 'undefined') return installed = true window.addEventListener('error', (event) => { void reportClientError('client_window_error', event.message || 'Window error', { filename: event.filename, lineno: event.lineno, colno: event.colno, error: normalizeError(event.error), }) }) window.addEventListener('unhandledrejection', (event) => { void reportClientError('client_unhandled_rejection', summarizeUnknown(event.reason), { reason: normalizeError(event.reason), }) }) } export function reportReactError(error: unknown, errorInfo: React.ErrorInfo) { return reportClientError('client_react_error_boundary', summarizeUnknown(error), { error: normalizeError(error), componentStack: errorInfo.componentStack, }) } function reportClientError(type: string, summary: string, details: Record) { return rawRecordDiagnosticEvent({ type, severity: 'error', summary, details: { url: window.location.href, userAgent: navigator.userAgent, ...details, }, }) } function summarizeUnknown(value: unknown): string { if (value instanceof Error) return value.message || value.name if (typeof value === 'string') return value try { return JSON.stringify(value) } catch { return String(value) } } function normalizeError(value: unknown): unknown { if (value instanceof Error) { return { name: value.name, message: value.message, stack: value.stack, } } return value }