mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 07:51:13 -05:00
65 lines
1.7 KiB
TypeScript
65 lines
1.7 KiB
TypeScript
/**
|
|
* Environment Context Capture
|
|
* Captures browser/device information for error reports
|
|
*/
|
|
|
|
export interface EnvironmentContext {
|
|
viewport: { width: number; height: number };
|
|
screen: { width: number; height: number };
|
|
memory?: { usedJSHeapSize?: number; totalJSHeapSize?: number };
|
|
connection?: string;
|
|
timezone: string;
|
|
language: string;
|
|
platform: string;
|
|
cookiesEnabled: boolean;
|
|
localStorage: boolean;
|
|
sessionStorage: boolean;
|
|
}
|
|
|
|
export function captureEnvironmentContext(): EnvironmentContext {
|
|
const context: EnvironmentContext = {
|
|
viewport: {
|
|
width: window.innerWidth,
|
|
height: window.innerHeight,
|
|
},
|
|
screen: {
|
|
width: window.screen.width,
|
|
height: window.screen.height,
|
|
},
|
|
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
language: navigator.language,
|
|
platform: navigator.platform,
|
|
cookiesEnabled: navigator.cookieEnabled,
|
|
localStorage: isStorageAvailable('localStorage'),
|
|
sessionStorage: isStorageAvailable('sessionStorage'),
|
|
};
|
|
|
|
// Memory info (Chrome only)
|
|
if ('memory' in performance && (performance as any).memory) {
|
|
const memory = (performance as any).memory;
|
|
context.memory = {
|
|
usedJSHeapSize: memory.usedJSHeapSize,
|
|
totalJSHeapSize: memory.totalJSHeapSize,
|
|
};
|
|
}
|
|
|
|
// Connection info
|
|
if ('connection' in navigator) {
|
|
context.connection = (navigator as any).connection?.effectiveType;
|
|
}
|
|
|
|
return context;
|
|
}
|
|
|
|
function isStorageAvailable(type: 'localStorage' | 'sessionStorage'): boolean {
|
|
try {
|
|
const storage = window[type];
|
|
const test = '__storage_test__';
|
|
storage.setItem(test, test);
|
|
storage.removeItem(test);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
}
|