@@ -22,6 +22,12 @@ interface SystemInfo {
2222 timezone : string ;
2323 memory : string ;
2424 cores : number ;
25+ deviceType : string ;
26+ colorDepth : string ;
27+ pixelRatio : number ;
28+ online : boolean ;
29+ cookiesEnabled : boolean ;
30+ doNotTrack : boolean ;
2531}
2632
2733interface IProviderConfig {
@@ -62,14 +68,100 @@ function getSystemInfo(): SystemInfo {
6268 return parseFloat ( ( bytes / Math . pow ( k , i ) ) . toFixed ( 2 ) ) + ' ' + sizes [ i ] ;
6369 } ;
6470
71+ const getBrowserInfo = ( ) : string => {
72+ const ua = navigator . userAgent ;
73+ let browser = 'Unknown' ;
74+
75+ if ( ua . includes ( 'Firefox/' ) ) {
76+ browser = 'Firefox' ;
77+ } else if ( ua . includes ( 'Chrome/' ) ) {
78+ if ( ua . includes ( 'Edg/' ) ) {
79+ browser = 'Edge' ;
80+ } else if ( ua . includes ( 'OPR/' ) ) {
81+ browser = 'Opera' ;
82+ } else {
83+ browser = 'Chrome' ;
84+ }
85+ } else if ( ua . includes ( 'Safari/' ) ) {
86+ if ( ! ua . includes ( 'Chrome' ) ) {
87+ browser = 'Safari' ;
88+ }
89+ }
90+
91+ // Extract version number
92+ const match = ua . match ( new RegExp ( `${ browser } \\/([\\d.]+)` ) ) ;
93+ const version = match ? ` ${ match [ 1 ] } ` : '' ;
94+
95+ return `${ browser } ${ version } ` ;
96+ } ;
97+
98+ const getOperatingSystem = ( ) : string => {
99+ const ua = navigator . userAgent ;
100+ const platform = navigator . platform ;
101+
102+ if ( ua . includes ( 'Win' ) ) {
103+ return 'Windows' ;
104+ }
105+
106+ if ( ua . includes ( 'Mac' ) ) {
107+ if ( ua . includes ( 'iPhone' ) || ua . includes ( 'iPad' ) ) {
108+ return 'iOS' ;
109+ }
110+
111+ return 'macOS' ;
112+ }
113+
114+ if ( ua . includes ( 'Linux' ) ) {
115+ return 'Linux' ;
116+ }
117+
118+ if ( ua . includes ( 'Android' ) ) {
119+ return 'Android' ;
120+ }
121+
122+ return platform || 'Unknown' ;
123+ } ;
124+
125+ const getDeviceType = ( ) : string => {
126+ const ua = navigator . userAgent ;
127+
128+ if ( ua . includes ( 'Mobile' ) ) {
129+ return 'Mobile' ;
130+ }
131+
132+ if ( ua . includes ( 'Tablet' ) ) {
133+ return 'Tablet' ;
134+ }
135+
136+ return 'Desktop' ;
137+ } ;
138+
139+ // Get more detailed memory info if available
140+ const getMemoryInfo = ( ) : string => {
141+ if ( 'memory' in performance ) {
142+ const memory = ( performance as any ) . memory ;
143+ return `${ formatBytes ( memory . jsHeapSizeLimit ) } (Used: ${ formatBytes ( memory . usedJSHeapSize ) } )` ;
144+ }
145+
146+ return 'Not available' ;
147+ } ;
148+
65149 return {
66- os : navigator . platform ,
67- browser : navigator . userAgent . split ( ' ' ) . slice ( - 1 ) [ 0 ] ,
150+ os : getOperatingSystem ( ) ,
151+ browser : getBrowserInfo ( ) ,
68152 screen : `${ window . screen . width } x${ window . screen . height } ` ,
69153 language : navigator . language ,
70154 timezone : Intl . DateTimeFormat ( ) . resolvedOptions ( ) . timeZone ,
71- memory : formatBytes ( performance ?. memory ?. jsHeapSizeLimit || 0 ) ,
155+ memory : getMemoryInfo ( ) ,
72156 cores : navigator . hardwareConcurrency || 0 ,
157+ deviceType : getDeviceType ( ) ,
158+
159+ // Add new fields
160+ colorDepth : `${ window . screen . colorDepth } -bit` ,
161+ pixelRatio : window . devicePixelRatio ,
162+ online : navigator . onLine ,
163+ cookiesEnabled : navigator . cookieEnabled ,
164+ doNotTrack : navigator . doNotTrack === '1' ,
73165 } ;
74166}
75167
@@ -384,10 +476,31 @@ export default function DebugTab() {
384476 < p className = "text-xs text-bolt-elements-textSecondary" > Operating System</ p >
385477 < p className = "text-sm font-medium text-bolt-elements-textPrimary" > { systemInfo . os } </ p >
386478 </ div >
479+ < div >
480+ < p className = "text-xs text-bolt-elements-textSecondary" > Device Type</ p >
481+ < p className = "text-sm font-medium text-bolt-elements-textPrimary" > { systemInfo . deviceType } </ p >
482+ </ div >
387483 < div >
388484 < p className = "text-xs text-bolt-elements-textSecondary" > Browser</ p >
389485 < p className = "text-sm font-medium text-bolt-elements-textPrimary" > { systemInfo . browser } </ p >
390486 </ div >
487+ < div >
488+ < p className = "text-xs text-bolt-elements-textSecondary" > Display</ p >
489+ < p className = "text-sm font-medium text-bolt-elements-textPrimary" >
490+ { systemInfo . screen } ({ systemInfo . colorDepth } ) @{ systemInfo . pixelRatio } x
491+ </ p >
492+ </ div >
493+ < div >
494+ < p className = "text-xs text-bolt-elements-textSecondary" > Connection</ p >
495+ < p className = "text-sm font-medium flex items-center gap-2" >
496+ < span
497+ className = { `inline-block w-2 h-2 rounded-full ${ systemInfo . online ? 'bg-green-500' : 'bg-red-500' } ` }
498+ />
499+ < span className = { `${ systemInfo . online ? 'text-green-600' : 'text-red-600' } ` } >
500+ { systemInfo . online ? 'Online' : 'Offline' }
501+ </ span >
502+ </ p >
503+ </ div >
391504 < div >
392505 < p className = "text-xs text-bolt-elements-textSecondary" > Screen Resolution</ p >
393506 < p className = "text-sm font-medium text-bolt-elements-textPrimary" > { systemInfo . screen } </ p >
0 commit comments