@bobfrankston/msger 0.1.74 → 0.1.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/KNOWN-BUGS.md +121 -0
  2. package/MSGER-API-SUMMARY.md +162 -0
  3. package/MSGER-API.md +376 -0
  4. package/README.md +93 -0
  5. package/SESSION-2025-11-06.md +191 -0
  6. package/SESSION-NOTES.md +678 -0
  7. package/clihandler.d.ts.map +1 -1
  8. package/clihandler.js +62 -2
  9. package/clihandler.js.map +1 -1
  10. package/clihandler.ts +60 -2
  11. package/icon.png +0 -0
  12. package/icon1.png +0 -0
  13. package/msger-native/Cargo.toml +1 -0
  14. package/msger-native/bin/msgernative.exe +0 -0
  15. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Breadcrumbs +12 -118
  16. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/BrowserMetrics/{BrowserMetrics-690552AF-DCD4.pma → BrowserMetrics-690B9AD3-657C.pma} +0 -0
  17. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/BrowserMetrics/{BrowserMetrics-69055373-F88C.pma → BrowserMetrics-690BA05A-501C.pma} +0 -0
  18. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Crashpad/settings.dat +0 -0
  19. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/BrowsingTopicsState +1 -1
  20. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/data_0 +0 -0
  21. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/data_1 +0 -0
  22. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/{BrowserMetrics/BrowserMetrics-69055587-A65C.pma → Default/Cache/Cache_Data/data_2} +0 -0
  23. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/data_3 +0 -0
  24. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/f_000001 +383 -0
  25. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/f_000002 +1091 -0
  26. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/f_000003 +2153 -0
  27. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/f_000004 +0 -0
  28. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/f_000005 +626 -0
  29. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/f_000006 +393 -0
  30. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Cache/Cache_Data/index +0 -0
  31. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/01241693cfdc32b9_0 +0 -0
  32. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/0ba1eea781f3552c_0 +0 -0
  33. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/323aa210eebefe2c_0 +0 -0
  34. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/4608446ac118e77a_0 +0 -0
  35. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/6938205dc2f77841_0 +0 -0
  36. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/6de12299dc89e5f3_0 +0 -0
  37. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/8f403c112eaa455b_0 +0 -0
  38. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/9a3aceb491137f07_0 +0 -0
  39. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/aedb266cbaf9c28f_0 +0 -0
  40. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/ca526fdda86d0b9d_0 +0 -0
  41. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/f5d11d783c9fdf69_0 +0 -0
  42. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Code Cache/js/index-dir/the-real-index +0 -0
  43. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Collections/collectionsSQLite +0 -0
  44. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Collections/collectionsSQLite-journal +0 -0
  45. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/DIPS +0 -0
  46. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/DawnGraphiteCache/data_1 +0 -0
  47. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/DawnGraphiteCache/index +0 -0
  48. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/DawnWebGPUCache/data_1 +0 -0
  49. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/DawnWebGPUCache/index +0 -0
  50. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Extension State/LOG +3 -3
  51. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Extension State/LOG.old +3 -3
  52. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Favicons +0 -0
  53. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/GPUCache/data_0 +0 -0
  54. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/GPUCache/data_1 +0 -0
  55. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/GPUCache/data_2 +0 -0
  56. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/GPUCache/index +0 -0
  57. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/History +0 -0
  58. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Local Storage/leveldb/000003.log +0 -0
  59. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Local Storage/leveldb/LOG +3 -3
  60. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Local Storage/leveldb/LOG.old +3 -3
  61. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/MediaDeviceSalts +0 -0
  62. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/MediaDeviceSalts-journal +0 -0
  63. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Network/Network Persistent State +1 -1
  64. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Network/TransportSecurity +1 -0
  65. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Preferences +1 -1
  66. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/CacheStorage/14e849fa8522d406112ea607cf7fd6342b71b987/249ee9af-c3df-4a86-89a8-2c51f3370ee0/index +0 -0
  67. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/CacheStorage/14e849fa8522d406112ea607cf7fd6342b71b987/249ee9af-c3df-4a86-89a8-2c51f3370ee0/index-dir/the-real-index +0 -0
  68. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/CacheStorage/14e849fa8522d406112ea607cf7fd6342b71b987/index.txt +0 -0
  69. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/Database/000003.log +0 -0
  70. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/Database/CURRENT +1 -0
  71. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/Database/LOCK +0 -0
  72. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/Database/LOG +3 -0
  73. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/Database/LOG.old +3 -0
  74. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/Database/MANIFEST-000001 +0 -0
  75. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/ScriptCache/2cc80dabc69f58b6_0 +0 -0
  76. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/ScriptCache/2cc80dabc69f58b6_1 +0 -0
  77. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/ScriptCache/index +0 -0
  78. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Service Worker/ScriptCache/index-dir/the-real-index +0 -0
  79. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Session Storage/000003.log +0 -0
  80. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Session Storage/LOG +3 -3
  81. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Session Storage/LOG.old +3 -3
  82. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Site Characteristics Database/000003.log +0 -0
  83. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Site Characteristics Database/LOG +3 -3
  84. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Site Characteristics Database/LOG.old +3 -3
  85. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Sync Data/LevelDB/LOG +3 -3
  86. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/Sync Data/LevelDB/LOG.old +3 -3
  87. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/WebStorage/QuotaManager +0 -0
  88. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/WebStorage/QuotaManager-journal +0 -0
  89. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/favorites_diagnostic.log +27 -0
  90. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/shared_proto_db/000003.log +0 -0
  91. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/shared_proto_db/LOG +3 -3
  92. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/shared_proto_db/LOG.old +3 -3
  93. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/shared_proto_db/metadata/000003.log +0 -0
  94. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/shared_proto_db/metadata/LOG +3 -3
  95. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Default/shared_proto_db/metadata/LOG.old +3 -3
  96. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GrShaderCache/data_0 +0 -0
  97. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GrShaderCache/data_1 +0 -0
  98. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GrShaderCache/data_3 +0 -0
  99. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GrShaderCache/f_000003 +0 -0
  100. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GrShaderCache/f_000004 +0 -0
  101. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GrShaderCache/index +0 -0
  102. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GraphiteDawnCache/data_1 +0 -0
  103. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/GraphiteDawnCache/index +0 -0
  104. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/Local State +1 -1
  105. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/RevisitationBloomfilter +0 -0
  106. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/ShaderCache/data_1 +0 -0
  107. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/ShaderCache/index +0 -0
  108. package/msger-native/src/main.rs +343 -37
  109. package/msger-native/src/template.html +103 -28
  110. package/msger-storage-demo.html +290 -0
  111. package/msger.code-workspace +3 -0
  112. package/msgerdefs/README.md +122 -0
  113. package/msgerdefs/msgerdefs.d.ts +322 -0
  114. package/msgerdefs/msgerdefs.d.ts.map +1 -0
  115. package/msgerdefs/msgerdefs.js +110 -0
  116. package/msgerdefs/msgerdefs.js.map +1 -0
  117. package/msgerdefs/msgerdefs.ts +427 -0
  118. package/msgerdefs/package.json +38 -0
  119. package/msgerdefs/samples.html +431 -0
  120. package/msgerdefs/test1.cmd +1 -0
  121. package/msgerdefs/tsconfig.json +17 -0
  122. package/msgernative-linux-x64 +0 -0
  123. package/package.json +5 -1
  124. package/shower.d.ts +2 -0
  125. package/shower.d.ts.map +1 -1
  126. package/shower.js +17 -0
  127. package/shower.js.map +1 -1
  128. package/shower.ts +24 -0
  129. package/test-data-persistence.html +315 -0
  130. package/test-htmlfrom.html +29 -0
  131. package/test-ipc-reach.html +113 -0
  132. package/test-msger-api.html +120 -0
  133. package/test-msger-functions.html +325 -0
  134. package/msger-native/bin/msgernative.exe.WebView2/EBWebView/BrowserMetrics/BrowserMetrics-69055419-C8A0.pma +0 -0
@@ -0,0 +1,393 @@
1
+ // Weather module - handles weather API integration and temperature display
2
+ import { addToDebugLog, addToDebugWarn, addToDebugErr, addToDebugPriority } from './logging.js';
3
+ import { getOpenWeatherApiKey, getIpstackApiKey, loadApiKeys } from './keys.js';
4
+ // Weather configuration
5
+ const WEATHER_UPDATE_INTERVAL = 60 * 60 * 1000; // Update every hour (in milliseconds)
6
+ const WEATHER_CACHE_KEY = 'wallclock-weather-cache';
7
+ const WEATHER_CACHE_DURATION = 60 * 60 * 1000; // Cache for 1 hour
8
+ const LOCATION_CACHE_KEY = 'wallclock-location-cache';
9
+ // Newton MA coordinates (fallback until Nov 2nd, 2025)
10
+ const NEWTON_MA_LAT = 42.3370;
11
+ const NEWTON_MA_LON = -71.2092;
12
+ // Weather state
13
+ let weatherUpdateInterval;
14
+ let weatherRetryTimeout = null;
15
+ let currentTemperature = null;
16
+ let currentFeelsLike = null;
17
+ let currentHumidity = null;
18
+ let currentWeatherCondition = null; // "Rain", "Snow", "Clear", etc.
19
+ let lastWeatherUpdate = 0;
20
+ let lastWeatherError = 0;
21
+ let weatherRetryDelay = 0;
22
+ // Initialize weather system
23
+ export async function initializeWeather() {
24
+ // Load API keys first
25
+ await loadApiKeys();
26
+ createWeatherDisplay();
27
+ loadCachedWeather();
28
+ updateWeather(); // Initial update
29
+ // Set up hourly updates
30
+ weatherUpdateInterval = window.setInterval(updateWeather, WEATHER_UPDATE_INTERVAL);
31
+ addToDebugLog('[WEATHER] Weather system initialized');
32
+ }
33
+ // Create temperature display element in upper right
34
+ function createWeatherDisplay() {
35
+ const weatherDisplay = document.createElement('div');
36
+ weatherDisplay.id = 'weather-display';
37
+ weatherDisplay.classList.add('weather-temperature');
38
+ weatherDisplay.textContent = '--°F'; // Placeholder
39
+ document.body.appendChild(weatherDisplay);
40
+ addToDebugLog('[WEATHER] Temperature display created');
41
+ }
42
+ // Load cached weather data if still valid
43
+ function loadCachedWeather() {
44
+ try {
45
+ const cached = localStorage.getItem(WEATHER_CACHE_KEY);
46
+ if (cached) {
47
+ const weatherData = JSON.parse(cached);
48
+ const now = Date.now();
49
+ // Check if cache is still valid (less than 1 hour old)
50
+ if (now - weatherData.timestamp < WEATHER_CACHE_DURATION) {
51
+ currentTemperature = weatherData.temperature;
52
+ currentFeelsLike = weatherData.feelsLike;
53
+ currentHumidity = weatherData.humidity;
54
+ currentWeatherCondition = weatherData.condition;
55
+ lastWeatherUpdate = weatherData.timestamp;
56
+ updateTemperatureDisplay();
57
+ addToDebugLog(`[WEATHER] Loaded cached temperature: ${currentTemperature}°F (feels like ${currentFeelsLike}°F, ${currentHumidity}% humidity)`);
58
+ return true;
59
+ }
60
+ else {
61
+ // Cache expired, remove it
62
+ localStorage.removeItem(WEATHER_CACHE_KEY);
63
+ addToDebugLog('[WEATHER] Weather cache expired, will fetch fresh data');
64
+ }
65
+ }
66
+ }
67
+ catch (error) {
68
+ addToDebugErr(`[WEATHER] Error loading cached weather: ${error.message}`);
69
+ }
70
+ return false;
71
+ }
72
+ // Get user's location using browser geolocation API with IP-based fallback
73
+ async function getUserLocation() {
74
+ // First try browser geolocation API with shorter timeout on Linux
75
+ if (navigator.geolocation) {
76
+ addToDebugLog('[WEATHER] Requesting geolocation permission...');
77
+ // Detect if we're on Linux for different timeout handling
78
+ const isLinux = navigator.userAgent.toLowerCase().includes('linux');
79
+ const geolocationTimeout = isLinux ? 5000 : 10000; // Shorter timeout on Linux
80
+ addToDebugLog(`[WEATHER] Using ${geolocationTimeout}ms timeout (Linux: ${isLinux})`);
81
+ const location = await new Promise((resolve) => {
82
+ const timeoutId = setTimeout(() => {
83
+ addToDebugPriority(`[WEATHER] Geolocation timed out after ${geolocationTimeout}ms, trying IP fallback`, '#885304ff');
84
+ resolve(null);
85
+ }, geolocationTimeout);
86
+ navigator.geolocation.getCurrentPosition((position) => {
87
+ clearTimeout(timeoutId);
88
+ const lat = position.coords.latitude;
89
+ const lon = position.coords.longitude;
90
+ addToDebugPriority(`[WEATHER] Location obtained from GPS: ${lat.toFixed(4)}, ${lon.toFixed(4)}`);
91
+ resolve({ lat, lon });
92
+ }, (error) => {
93
+ clearTimeout(timeoutId);
94
+ addToDebugPriority(`[WEATHER] Geolocation error: ${error.code} - ${error.message}`, '#d32f2f');
95
+ addToDebugPriority(`[WEATHER] Error details: PERMISSION_DENIED=${error.PERMISSION_DENIED}, POSITION_UNAVAILABLE=${error.POSITION_UNAVAILABLE}, TIMEOUT=${error.TIMEOUT}`, '#d32f2f');
96
+ resolve(null);
97
+ }, {
98
+ timeout: geolocationTimeout,
99
+ enableHighAccuracy: false, // Don't need precise GPS
100
+ maximumAge: 300000 // Cache location for 5 minutes
101
+ });
102
+ });
103
+ // If geolocation succeeded, return it
104
+ if (location) {
105
+ return location;
106
+ }
107
+ }
108
+ else {
109
+ addToDebugWarn('[WEATHER] Geolocation not supported, trying IP location fallback');
110
+ }
111
+ // Fallback to IP-based location (with caching to prevent quota exhaustion)
112
+ try {
113
+ addToDebugLog('[WEATHER] Attempting to get location from IP address...');
114
+ // Try multiple IP detection services for better reliability
115
+ let ipAddress = null;
116
+ const ipServices = [
117
+ 'https://ipinfo.io/ip',
118
+ 'https://api.ipify.org',
119
+ 'https://icanhazip.com'
120
+ ];
121
+ for (const service of ipServices) {
122
+ try {
123
+ addToDebugLog(`[WEATHER] Trying IP service: ${service}`);
124
+ const ipResponse = await fetch(service, {
125
+ headers: {
126
+ 'Accept': 'text/plain,application/json,*/*'
127
+ }
128
+ });
129
+ if (ipResponse.ok) {
130
+ ipAddress = (await ipResponse.text()).trim();
131
+ addToDebugLog(`[WEATHER] External IP address: ${ipAddress} (from ${service})`);
132
+ break;
133
+ }
134
+ }
135
+ catch (ipError) {
136
+ addToDebugWarn(`[WEATHER] IP service ${service} failed: ${ipError.message}`);
137
+ }
138
+ }
139
+ if (!ipAddress) {
140
+ throw new Error('All IP detection services failed');
141
+ }
142
+ // Check if we have a cached location for this IP address
143
+ const cachedLocation = getCachedLocation(ipAddress);
144
+ if (cachedLocation) {
145
+ addToDebugLog(`[WEATHER] Using cached location for IP ${ipAddress}: ${cachedLocation.lat.toFixed(4)}, ${cachedLocation.lon.toFixed(4)}`);
146
+ return { lat: cachedLocation.lat, lon: cachedLocation.lon };
147
+ }
148
+ // Check if we're before Nov 2nd, 2025 - use Newton MA as fallback
149
+ const now = new Date();
150
+ const cutoffDate = new Date('2025-11-02T00:00:00');
151
+ if (now < cutoffDate) {
152
+ addToDebugPriority(`[WEATHER] Using Newton MA fallback (until Nov 2nd): ${NEWTON_MA_LAT.toFixed(4)}, ${NEWTON_MA_LON.toFixed(4)}`, '#FF9800');
153
+ // Cache this location with the IP
154
+ cacheLocation(ipAddress, NEWTON_MA_LAT, NEWTON_MA_LON);
155
+ return { lat: NEWTON_MA_LAT, lon: NEWTON_MA_LON };
156
+ }
157
+ // After Nov 2nd, call IPStack to get actual location
158
+ const IPSTACK_API_KEY = getIpstackApiKey();
159
+ if (!IPSTACK_API_KEY) {
160
+ throw new Error('IPStack API key not configured');
161
+ }
162
+ addToDebugPriority(`[WEATHER] IP changed - calling IPStack API for: ${ipAddress}`, '#9C27B0');
163
+ const locationResponse = await fetch(`https://api.ipstack.com/${ipAddress}?access_key=${IPSTACK_API_KEY}`, {
164
+ headers: {
165
+ 'Accept': 'application/json'
166
+ }
167
+ });
168
+ if (!locationResponse.ok) {
169
+ const errorText = await locationResponse.text();
170
+ throw new Error(`IPStack API error: ${locationResponse.status} ${locationResponse.statusText} - ${errorText}`);
171
+ }
172
+ const data = await locationResponse.json();
173
+ addToDebugLog(`[WEATHER] IPStack response: ${JSON.stringify(data)}`);
174
+ if (data.error) {
175
+ throw new Error(`IPStack API error: ${data.error.info || data.error.type}`);
176
+ }
177
+ if (data.latitude && data.longitude) {
178
+ const lat = parseFloat(data.latitude);
179
+ const lon = parseFloat(data.longitude);
180
+ addToDebugPriority(`[WEATHER] Location obtained from IPStack: ${lat.toFixed(4)}, ${lon.toFixed(4)} (${data.city || 'Unknown'}, ${data.region_name || data.country_name || 'Unknown'})`, '#4CAF50');
181
+ // Cache this location with the IP
182
+ cacheLocation(ipAddress, lat, lon);
183
+ return { lat, lon };
184
+ }
185
+ else {
186
+ throw new Error(`IPStack returned invalid data: lat=${data.latitude}, lon=${data.longitude}`);
187
+ }
188
+ }
189
+ catch (error) {
190
+ addToDebugErr(`[WEATHER] IP location fallback failed: ${error.message}`);
191
+ addToDebugWarn('[WEATHER] No location available from any source, no weather data will be displayed');
192
+ // Log network debugging information
193
+ if (error.name === 'TypeError' && error.message.includes('Failed to fetch')) {
194
+ addToDebugErr('[WEATHER] Network fetch failed - check internet connection and CORS policy');
195
+ addToDebugErr('[WEATHER] On Linux/Ubuntu: may need to check system proxy settings or DNS resolution');
196
+ }
197
+ // Set retry delay to prevent rapid network error spam
198
+ lastWeatherError = Date.now();
199
+ weatherRetryDelay = 30000; // 30 seconds delay after location failure
200
+ addToDebugWarn('[WEATHER] Network location failure - delaying weather updates for 30 seconds');
201
+ return null;
202
+ }
203
+ }
204
+ // Get cached location for a specific IP address
205
+ function getCachedLocation(ipAddress) {
206
+ try {
207
+ const cached = localStorage.getItem(LOCATION_CACHE_KEY);
208
+ if (cached) {
209
+ const locationCache = JSON.parse(cached);
210
+ // Check if the IP matches
211
+ if (locationCache.ipAddress === ipAddress) {
212
+ addToDebugLog(`[WEATHER] Found cached location for IP ${ipAddress}`);
213
+ return { lat: locationCache.lat, lon: locationCache.lon };
214
+ }
215
+ else {
216
+ addToDebugPriority(`[WEATHER] IP changed from ${locationCache.ipAddress} to ${ipAddress}`, '#2196F3');
217
+ return null;
218
+ }
219
+ }
220
+ }
221
+ catch (error) {
222
+ addToDebugErr(`[WEATHER] Error loading cached location: ${error.message}`);
223
+ }
224
+ return null;
225
+ }
226
+ // Cache location with IP address
227
+ function cacheLocation(ipAddress, lat, lon) {
228
+ try {
229
+ const locationCache = {
230
+ ipAddress: ipAddress,
231
+ lat: lat,
232
+ lon: lon,
233
+ timestamp: Date.now()
234
+ };
235
+ localStorage.setItem(LOCATION_CACHE_KEY, JSON.stringify(locationCache));
236
+ addToDebugLog(`[WEATHER] Cached location for IP ${ipAddress}: ${lat.toFixed(4)}, ${lon.toFixed(4)}`);
237
+ }
238
+ catch (error) {
239
+ addToDebugErr(`[WEATHER] Error caching location: ${error.message}`);
240
+ }
241
+ }
242
+ // Cache weather data
243
+ function cacheWeatherData(temperature, feelsLike, humidity, condition, description) {
244
+ try {
245
+ const weatherData = {
246
+ temperature: temperature,
247
+ feelsLike: feelsLike,
248
+ humidity: humidity,
249
+ condition: condition,
250
+ description: description,
251
+ timestamp: Date.now()
252
+ };
253
+ localStorage.setItem(WEATHER_CACHE_KEY, JSON.stringify(weatherData));
254
+ addToDebugLog('[WEATHER] Weather data cached');
255
+ }
256
+ catch (error) {
257
+ addToDebugErr(`[WEATHER] Error caching weather data: ${error.message}`);
258
+ }
259
+ }
260
+ // Update weather data from API
261
+ async function updateWeather() {
262
+ const now = Date.now();
263
+ // Check if we're in a retry delay period
264
+ if (weatherRetryDelay > 0 && (now - lastWeatherError) < weatherRetryDelay) {
265
+ const remainingDelay = Math.ceil((weatherRetryDelay - (now - lastWeatherError)) / 1000);
266
+ addToDebugLog(`[WEATHER] Skipping update - retry delay active (${remainingDelay}s remaining)`);
267
+ return;
268
+ }
269
+ const WEATHER_API_KEY = getOpenWeatherApiKey();
270
+ // Skip if no API key configured (fallback to mock data)
271
+ if (!WEATHER_API_KEY || WEATHER_API_KEY.length < 10) {
272
+ addToDebugWarn('[WEATHER] No valid API key configured, using mock temperature');
273
+ // Use mock temperature for development
274
+ currentTemperature = Math.round(65 + Math.random() * 30); // Random temp between 65-95°F
275
+ updateTemperatureDisplay();
276
+ return;
277
+ }
278
+ try {
279
+ addToDebugLog('[WEATHER] Fetching weather data...');
280
+ // Get user's location
281
+ const location = await getUserLocation();
282
+ if (!location) {
283
+ addToDebugLog('[WEATHER] No location available, skipping weather update');
284
+ currentTemperature = null;
285
+ updateTemperatureDisplay();
286
+ return;
287
+ }
288
+ const lat = location.lat;
289
+ const lon = location.lon;
290
+ // Fetch weather data from OpenWeatherMap API
291
+ const response = await fetch(`https://api.openweathermap.org/data/2.5/weather?lat=${lat}&lon=${lon}&appid=${WEATHER_API_KEY}&units=imperial`);
292
+ if (!response.ok) {
293
+ throw new Error(`Weather API error: ${response.status} ${response.statusText}`);
294
+ }
295
+ const data = await response.json();
296
+ // Extract weather data (temperature in Fahrenheit due to units=imperial)
297
+ currentTemperature = Math.round(data.main.temp);
298
+ currentFeelsLike = Math.round(data.main.feels_like);
299
+ currentHumidity = data.main.humidity; // Percentage
300
+ currentWeatherCondition = data.weather[0].main; // "Rain", "Snow", "Clear", "Clouds", etc.
301
+ const description = data.weather[0].description;
302
+ // Update display
303
+ updateTemperatureDisplay();
304
+ // Cache the data
305
+ cacheWeatherData(currentTemperature, currentFeelsLike, currentHumidity, currentWeatherCondition, description);
306
+ lastWeatherUpdate = Date.now();
307
+ weatherRetryDelay = 0; // Clear any retry delay on success
308
+ if (weatherRetryTimeout) {
309
+ clearTimeout(weatherRetryTimeout);
310
+ weatherRetryTimeout = null;
311
+ }
312
+ addToDebugLog(`[WEATHER] Updated: ${currentTemperature}°F (feels ${currentFeelsLike}°F, ${currentHumidity}% humidity, ${currentWeatherCondition})`);
313
+ }
314
+ catch (error) {
315
+ addToDebugErr(`[WEATHER] Error fetching weather: ${error.message}`);
316
+ // Set retry delay based on error type
317
+ lastWeatherError = Date.now();
318
+ const retryDelayMs = 60000; // Always retry after 1 minute on failure
319
+ addToDebugWarn(`[WEATHER] Weather fetch failed - will retry in 1 minute`);
320
+ // Schedule retry after 1 minute
321
+ if (weatherRetryTimeout) {
322
+ clearTimeout(weatherRetryTimeout);
323
+ }
324
+ weatherRetryTimeout = window.setTimeout(() => {
325
+ addToDebugLog('[WEATHER] Retrying weather update after failure...');
326
+ updateWeather();
327
+ }, retryDelayMs);
328
+ // On error, show cached data or placeholder
329
+ if (currentTemperature === null) {
330
+ currentTemperature = null; // Keep null to show placeholder
331
+ currentFeelsLike = null;
332
+ currentHumidity = null;
333
+ currentWeatherCondition = null;
334
+ updateTemperatureDisplay();
335
+ }
336
+ }
337
+ }
338
+ // Update temperature display element
339
+ function updateTemperatureDisplay() {
340
+ const weatherDisplay = document.getElementById('weather-display');
341
+ if (weatherDisplay) {
342
+ if (currentTemperature !== null) {
343
+ // Create display with main temp, feels like, humidity, and condition
344
+ const mainTemp = `${currentTemperature}°F`;
345
+ const feelsLikeText = currentFeelsLike !== null ? `${currentFeelsLike}°` : '';
346
+ const humidityText = currentHumidity !== null ? `${currentHumidity}%` : '';
347
+ // Show rain/snow condition if applicable
348
+ const conditionText = (currentWeatherCondition === 'Rain' || currentWeatherCondition === 'Drizzle') ? 'Rain' :
349
+ (currentWeatherCondition === 'Snow') ? 'Snow' : '';
350
+ weatherDisplay.innerHTML = `
351
+ <div class="weather-main">${mainTemp}</div>
352
+ ${feelsLikeText ? `<div class="weather-feels-like">${feelsLikeText}</div>` : ''}
353
+ ${humidityText ? `<div class="weather-humidity">${humidityText}</div>` : ''}
354
+ ${conditionText ? `<div class="weather-condition">${conditionText}</div>` : ''}
355
+ `;
356
+ weatherDisplay.classList.remove('weather-error');
357
+ }
358
+ else {
359
+ weatherDisplay.innerHTML = '<div class="weather-main">--°F</div>';
360
+ weatherDisplay.classList.add('weather-error');
361
+ }
362
+ }
363
+ }
364
+ // Get current temperature (for voice responses)
365
+ export function getCurrentTemperature() {
366
+ if (currentTemperature !== null) {
367
+ return `${currentTemperature} degrees Fahrenheit`;
368
+ }
369
+ else {
370
+ return 'Location not available, cannot get weather data';
371
+ }
372
+ }
373
+ // Force weather update (for voice commands)
374
+ export function forceWeatherUpdate() {
375
+ addToDebugLog('[WEATHER] Force updating weather data...');
376
+ updateWeather();
377
+ }
378
+ // Clean up weather system
379
+ export function cleanupWeather() {
380
+ if (weatherUpdateInterval) {
381
+ clearInterval(weatherUpdateInterval);
382
+ weatherUpdateInterval = null;
383
+ }
384
+ addToDebugLog('[WEATHER] Weather system cleaned up');
385
+ }
386
+ // Export weather state getters
387
+ export function getLastWeatherUpdate() {
388
+ return lastWeatherUpdate;
389
+ }
390
+ export function hasValidWeatherData() {
391
+ return currentTemperature !== null;
392
+ }
393
+ //# sourceMappingURL=weather.js.map
@@ -1,3 +1,3 @@
1
- 2025/11/01-00:03:32.786 a490 Reusing MANIFEST Y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2
- 2025/11/01-00:03:32.788 a490 Recovering log #3
3
- 2025/11/01-00:03:32.788 a490 Reusing old log Y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/000003.log
1
+ 2025/11/05-14:07:07.350 74d0 Reusing MANIFEST y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2
+ 2025/11/05-14:07:07.350 74d0 Recovering log #3
3
+ 2025/11/05-14:07:07.351 74d0 Reusing old log y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/000003.log
@@ -1,3 +1,3 @@
1
- 2025/11/01-00:03:10.308 d870 Reusing MANIFEST y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2
- 2025/11/01-00:03:10.310 d870 Recovering log #3
3
- 2025/11/01-00:03:10.311 d870 Reusing old log y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/000003.log
1
+ 2025/11/05-13:43:32.121 6e08 Reusing MANIFEST y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/MANIFEST-000001
2
+ 2025/11/05-13:43:32.122 6e08 Recovering log #3
3
+ 2025/11/05-13:43:32.122 6e08 Reusing old log y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Extension State/000003.log
@@ -1,3 +1,3 @@
1
- 2025/11/01-00:03:32.761 11738 Reusing MANIFEST Y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2
- 2025/11/01-00:03:32.788 11738 Recovering log #3
3
- 2025/11/01-00:03:32.796 11738 Reusing old log Y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
1
+ 2025/11/05-14:07:07.079 bbfc Reusing MANIFEST y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2
+ 2025/11/05-14:07:07.112 bbfc Recovering log #3
3
+ 2025/11/05-14:07:07.124 bbfc Reusing old log y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
@@ -1,3 +1,3 @@
1
- 2025/11/01-00:03:09.861 fe2c Reusing MANIFEST y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2
- 2025/11/01-00:03:09.921 fe2c Recovering log #3
3
- 2025/11/01-00:03:09.928 fe2c Reusing old log y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
1
+ 2025/11/05-13:43:32.041 c6e8 Reusing MANIFEST y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
2
+ 2025/11/05-13:43:32.071 c6e8 Recovering log #3
3
+ 2025/11/05-13:43:32.081 c6e8 Reusing old log y:\dev\utils\msger\msger-native\bin\msgernative.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
@@ -1 +1 @@
1
- {"net":{"http_server_properties":{"servers":[],"version":5},"network_qualities":{"CAESABiAgICA+P////8B":"4G"}}}
1
+ {"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13406873937100798","port":443,"protocol_str":"quic"}],"anonymization":["FAAAAA4AAABodHRwczovL2Fhei5sdAAA",false,0],"server":"https://cdn.jsdelivr.net","supports_spdy":true},{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13409379548284914","port":443,"protocol_str":"quic"}],"anonymization":["FAAAAA4AAABodHRwczovL2Fhei5sdAAA",false,0],"server":"https://ipinfo.io","supports_spdy":true},{"anonymization":["HAAAABUAAABodHRwczovL21pY3Jvc29mdC5jb20AAAA=",false,0],"server":"https://eastus-edge.tts.speech.microsoft.com","supports_spdy":true}],"version":5},"network_qualities":{"CAESABiAgICA+P////8B":"4G"}}}
@@ -0,0 +1 @@
1
+ {"sts":[{"expiry":1793850090.833311,"host":"DYiU5qcwZCf/JAH1tpyXFebkF3eDGAWNtHRiv/XGKK4=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1762314090.83332},{"expiry":1764905948.286127,"host":"iJIPK9TXZkQbXwvyR8eB+9rfOfMaA0bSymddd61JR+k=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1762313948.286134},{"expiry":1793849937.104667,"host":"qaDeFdT1UTirY0OQe+c5LKw+zjx6vF/+3vFh7CgrAOY=","mode":"force-https","sts_include_subdomains":true,"sts_observed":1762313937.104675}],"version":2}
@@ -1 +1 @@
1
- {"aadc_info":{"age_group":0},"accessibility":{"captions":{"headless_caption_enabled":false}},"account_tracker_service_last_update":"13406423851925676","alternate_error_pages":{"backup":true},"autocomplete":{"retention_policy_last_version":141},"autofill":{"edge_autofill_purge_low_quality_profiles_by_timeline":false,"last_version_deduped":141},"bookmark":{"storage_computation_last_update":"13406423851924148"},"browser":{"available_dark_theme_options":"All","recent_theme_color_list":[4293914607.0,4293914607.0,4293914607.0,4293914607.0,4293914607.0],"user_level_features_context":{}},"browser_content_container_height":400,"browser_content_container_width":600,"browser_content_container_x":0,"browser_content_container_y":0,"commerce_daily_metrics_last_update_time":"13406423851926157","countryid_at_install":21843,"credentials_enable_service":false,"devtools":{"preferences":{"EdgeDevToolsLayoutInfo":{"current_dock_state":0,"horizontal_size":300,"showEmulationMode":false,"vertical_size":555}}},"domain_diversity":{"last_reporting_timestamp":"13406443249852147"},"edge":{"bookmarks":{"last_dup_info_record_time":"13406424523767682"},"msa_sso_info":{"allow_for_non_msa_profile":true},"profile_sso_info":{"is_msa_first_profile":true,"msa_sso_algo_state":1},"services":{"signin_scoped_device_id":"2857beaa-33f3-4648-a971-936781a4c1fd"}},"edge_journeys":{"latest_journeys_count":0},"edge_rewards":{"cache_data":"CAA=","coachmark_promotions":{},"hva_promotions":[],"hva_webui_action_status_dict":{},"refresh_status_muted_until":"13406941871555797"},"edge_ux_config":{"assignmentcontext":"","dataversion":"0","experimentvariables":{},"flights":{}},"edge_vpn":{"available":true},"edge_wallet":{"passwords":{"password_lost_report_date":"13406427032261253"}},"enterprise_profile_guid":"9c0bf8a9-6a1d-47a2-bc3d-1044eeceac6a","extension":{"installed_extension_count":2},"extensions":{"alerts":{"initialized":true},"chrome_url_overrides":{},"last_chrome_version":"141.0.3537.99","pdf_upsell_triggered":false,"pinned_extension_migration":true,"pinned_extensions":[],"settings":{"dgiklkfkllikcanfonkcabmbdfmgleag":{"account_extension_type":0,"active_permissions":{"api":[],"explicit_host":[],"manifest_permissions":[],"scriptable_host":[]},"commands":{},"content_settings":[],"creation_flags":1,"disable_reasons":[],"events":[],"first_install_time":"13405633918991803","from_webstore":false,"incognito_content_settings":[],"incognito_preferences":{},"last_update_time":"13405633918991803","location":5,"manifest":{"content_capabilities":{"include_globs":["https://*excel.officeapps.live.com/*","https://*onenote.officeapps.live.com/*","https://*powerpoint.officeapps.live.com/*","https://*word-edit.officeapps.live.com/*","https://*excel.officeapps.live.com.mcas.ms/*","https://*onenote.officeapps.live.com.mcas.ms/*","https://*word-edit.officeapps.live.com.mcas.ms/*","https://*excel.partner.officewebapps.cn/*","https://*onenote.partner.officewebapps.cn/*","https://*powerpoint.partner.officewebapps.cn/*","https://*word-edit.partner.officewebapps.cn/*","https://*excel.gov.online.office365.us/*","https://*onenote.gov.online.office365.us/*","https://*powerpoint.gov.online.office365.us/*","https://*word-edit.gov.online.office365.us/*","https://*excel.dod.online.office365.us/*","https://*onenote.dod.online.office365.us/*","https://*powerpoint.dod.online.office365.us/*","https://*word-edit.dod.online.office365.us/*","https://*visio.partner.officewebapps.cn/*","https://*visio.gov.online.office365.us/*","https://*visio.dod.online.office365.us/*"],"matches":["https://*.officeapps.live.com/*","https://*.officeapps.live.com.mcas.ms/*","https://*.partner.officewebapps.cn/*","https://*.gov.online.office365.us/*","https://*.dod.online.office365.us/*","https://*.app.whiteboard.microsoft.com/*","https://*.whiteboard.office.com/*","https://*.app.int.whiteboard.microsoft.com/*","https://*.whiteboard.office365.us/*","https://*.dev.whiteboard.microsoft.com/*"],"permissions":["clipboardRead","clipboardWrite"]},"default_locale":"en","description":"This extension grants Microsoft web sites permission to read and write from the clipboard.","key":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCz4t/X7GeuP6GBpjmxndrjtzF//4CWeHlC68rkoV7hP3h5Ka6eX7ZMNlYJkSjmB5iRmPHO5kR1y7rGY8JXnRPDQh/CQNLVA7OsKeV6w+UO+vx8KGI+TrTAhzH8YGcMIsxsUjxtC4cBmprja+xDr0zVp2EMgqHu+GBKgwSRHTkDuwIDAQAB","manifest_version":2,"minimum_chrome_version":"77","name":"Microsoft Clipboard Extension","version":"1.0"},"path":"C:\\Program Files (x86)\\Microsoft\\EdgeWebView\\Application\\141.0.3537.92\\resources\\edge_clipboard","preferences":{},"regular_only_preferences":{},"was_installed_by_default":false,"was_installed_by_oem":false},"mhjfbmdgcfjbbpaeojofohoefgiehjai":{"account_extension_type":0,"active_permissions":{"api":["contentSettings","fileSystem","fileSystem.write","metricsPrivate","tabs","resourcesPrivate","pdfViewerPrivate","fileSystem.readFullPath","errorReporting","edgeLearningToolsPrivate","fileSystem.getCurrentEntry","edgePdfPrivate","edgeCertVerifierPrivate"],"explicit_host":["edge://resources/*","edge://webui-test/*"],"manifest_permissions":[],"scriptable_host":[]},"commands":{},"content_settings":[],"creation_flags":1,"disable_reasons":[],"events":[],"first_install_time":"13405633918990755","from_webstore":false,"incognito_content_settings":[],"incognito_preferences":{},"last_update_time":"13405633918990755","location":5,"manifest":{"content_security_policy":"script-src 'self' 'wasm-eval' blob: filesystem: chrome://resources chrome://webui-test; object-src * blob: externalfile: file: filesystem: data:; trusted-types edge-internal fast-html pdf-url edge-pdf-static-policy;","description":"","incognito":"split","key":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN6hM0rsDYGbzQPQfOygqlRtQgKUXMfnSjhIBL7LnReAVBEd7ZmKtyN2qmSasMl4HZpMhVe2rPWVVwBDl6iyNE/Kok6E6v6V3vCLGsOpQAuuNVye/3QxzIldzG/jQAdWZiyXReRVapOhZtLjGfywCvlWq7Sl/e3sbc0vWybSDI2QIDAQAB","manifest_version":2,"mime_types":["application/pdf"],"mime_types_handler":"edge_pdf/index.html","name":"Microsoft Edge PDF Viewer","offline_enabled":true,"permissions":["errorReporting","chrome://resources/","chrome://webui-test/","contentSettings","metricsPrivate","edgeCertVerifierPrivate","edgeLearningToolsPrivate","edgePdfPrivate","pdfViewerPrivate","resourcesPrivate","tabs",{"fileSystem":["write","readFullPath","getCurrentEntry"]}],"version":"1"},"path":"C:\\Program Files (x86)\\Microsoft\\EdgeWebView\\Application\\141.0.3537.92\\resources\\edge_pdf","preferences":{},"regular_only_preferences":{},"was_installed_by_default":false,"was_installed_by_oem":false}}},"fsd":{"retention_policy_last_version":141},"gaia_cookie":{"periodic_report_time_2":"13406423851803395"},"intl":{"selected_languages":"en-US,en"},"media":{"engagement":{"schema_version":5}},"muid":{"last_sync":"13406423851924976","values_seen":[]},"optimization_guide":{"hintsfetcher":{"hosts_successfully_fetched":{}},"previously_registered_optimization_types":{"ABOUT_THIS_SITE":true,"GLIC_ACTION_PAGE_BLOCK":true,"HISTORY_CLUSTERS":true,"LOADING_PREDICTOR":true,"MERCHANT_TRUST_SIGNALS_V2":true,"PAGE_ENTITIES":true,"PRICE_INSIGHTS":true,"PRICE_TRACKING":true,"SALIENT_IMAGE":true,"SHOPPING_DISCOUNTS":true,"SHOPPING_PAGE_TYPES":true,"V8_COMPILE_HINTS":true}},"password_manager":{"account_store_backup_password_cleaning_last_timestamp":"13406349535826337","account_store_migrated_to_os_crypt_async":true,"profile_store_backup_password_cleaning_last_timestamp":"13406349535827351","profile_store_migrated_to_os_crypt_async":true},"personalization_data_consent":{"personalization_in_context_consent_can_prompt":true,"personalization_in_context_count":0},"privacy_sandbox":{"first_party_sets_data_access_allowed_initialized":true},"profile":{"avatar_index":20,"content_settings":{"exceptions":{"3pcd_heuristics_grants":{},"3pcd_support":{},"abusive_notification_permissions":{},"access_to_get_all_screens_media_in_session":{},"anti_abuse":{},"app_banner":{},"ar":{},"are_suspicious_notifications_allowlisted_by_user":{},"auto_picture_in_picture":{},"auto_select_certificate":{},"automatic_downloads":{},"automatic_fullscreen":{},"autoplay":{},"background_sync":{},"bluetooth_chooser_data":{},"bluetooth_guard":{},"bluetooth_scanning":{},"camera_pan_tilt_zoom":{},"captured_surface_control":{},"clear_browsing_data_cookies_exceptions":{},"client_hints":{},"clipboard":{},"controlled_frame":{},"cookie_controls_metadata":{},"cookies":{},"direct_sockets":{},"direct_sockets_private_network_access":{},"display_media_system_audio":{},"disruptive_notification_permissions":{},"durable_storage":{},"edge_ad_targeting":{},"edge_ad_targeting_data":{},"edge_browser_action":{},"edge_sdsm":{},"edge_split_screen":{},"edge_tech_scam_detection":{},"edge_u2f_api_request":{},"edge_user_agent_token":{},"fedcm_idp_registration":{},"fedcm_idp_signin":{},"fedcm_share":{},"file_system_access_chooser_data":{},"file_system_access_extended_permission":{},"file_system_access_restore_permission":{},"file_system_last_picked_directory":{},"file_system_read_guard":{},"file_system_write_guard":{},"formfill_metadata":{},"geolocation":{},"geolocation_with_options":{},"hand_tracking":{},"hid_chooser_data":{},"hid_guard":{},"http_allowed":{},"https_enforced":{},"idle_detection":{},"images":{},"important_site_info":{},"initialized_translations":{},"intent_picker_auto_display":{},"javascript":{},"javascript_jit":{},"javascript_optimizer":{},"keyboard_lock":{},"legacy_cookie_access":{},"legacy_cookie_scope":{},"local_fonts":{},"local_network_access":{},"media_engagement":{},"media_stream_camera":{},"media_stream_mic":{},"midi_sysex":{},"mixed_script":{},"nfc_devices":{},"notification_interactions":{},"notification_permission_review":{},"notifications":{},"ondevice_languages_downloaded":{},"password_protection":{},"payment_handler":{},"permission_autoblocking_data":{},"permission_autorevocation_data":{},"pointer_lock":{},"popups":{},"protected_media_identifier":{},"protocol_handler":{},"reduced_accept_language":{},"safe_browsing_url_check_data":{},"secure_network":{},"secure_network_sites":{},"sensors":{},"serial_chooser_data":{},"serial_guard":{},"site_engagement":{},"sleeping_tabs":{},"sound":{},"speaker_selection":{},"ssl_cert_decisions":{},"storage_access":{},"storage_access_header_origin_trial":{},"subresource_filter":{},"subresource_filter_data":{},"suspicious_notification_ids":{},"third_party_storage_partitioning":{},"top_level_3pcd_origin_trial":{},"top_level_3pcd_support":{},"top_level_storage_access":{},"trackers":{},"trackers_data":{},"tracking_org_exceptions":{},"tracking_org_relationships":{},"tracking_protection":{},"unused_site_permissions":{},"usb_chooser_data":{},"usb_guard":{},"vr":{},"web_app_installation":{},"webid_api":{},"webid_auto_reauthn":{},"window_placement":{}},"pref_version":1},"created_by_version":"141.0.3537.92","creation_time":"13405633918888904","edge_password_is_using_new_login_db_path":false,"edge_password_login_db_path_flip_flop_count":0,"edge_profile_id":"527b2764-117b-4077-ae65-077c5c11a460","exit_type":"Normal","has_seen_signin_fre":false,"is_relative_to_aad":true,"last_time_obsolete_http_credentials_removed":1761875935.826714,"last_time_password_store_metrics_reported":1761953432.260137,"managed_user_id":"","name":"Profile 1","network_pbs":{},"observed_session_time":{"feedback_rating_in_product_help_observed_session_time_key_141.0.3537.92":6.0,"feedback_rating_in_product_help_observed_session_time_key_141.0.3537.99":446.0},"password_hash_data_list":[],"signin_fre_seen_time":"13405633918946336","were_old_google_logins_removed":true},"protection":{"macs":{"browser":{"show_home_button":"2A6F649F6787376B184B5DF9CDB9C06C82BD06AA2307E47BE768051C1B4A0627"},"default_search_provider_data":{"template_url_data":"B21CB6840E240F1C8A5863FF816893BF5C6C54A379B5AA5A697436F5319BA5CB"},"edge":{"services":{"account_id":"2FF6115A736DF35839A007CF992BE676B2090D9F05FFDB583E7A43FA1AF20A87","last_username":"091FC5425CC825A57E05E2071F698D486DAF76254EFDCB1E3B15F290EDC0F321"}},"enterprise_signin":{"policy_recovery_token":"ED3353D8829461E78C867774EBE939621F7B6D0967D174719A6CAA60E76B7467"},"extensions":{"install":{"initiallist":"FB1B46AAE8F6E94CA75262B4427520E2EFE78B05B6657898790C70B7197307A6"},"settings":{"dgiklkfkllikcanfonkcabmbdfmgleag":"9006F519031806C79617EBDF0B58C033F915B887068C2D0DB6EEA0FABF4FC52A","mhjfbmdgcfjbbpaeojofohoefgiehjai":"0882722781AC8B1446BE076FE06B986D5F1BBCE045C4104166F769F82D64CEB5"},"ui":{"developer_mode":"CD3F9EB12B3FAE383E76201F354508F7C4ADE21AE1A98F0BE432393C71E827EB"}},"google":{"services":{"last_signed_in_username":"1B01014EDBE0CC47CE3D24741D0309DA4ECF0DC81F5E43D4B21689E8927429C8"}},"homepage":"D11C12528151C024D640374ADF2605B2F63A51091AF26B3832973FAC76BE68F8","homepage_is_newtabpage":"C66A8A1D90BC573CFDAC54BB65F041F49E2C52F94318CF1CC234A5A677B80964","media":{"cdm":{"origin_data":"7AA02AC5C4BF3C38636B8772873A7E73DB32E8870E2306DE06F1EA24F7D57D67"},"storage_id_salt":"C907A55B4508B6A2A456FE6D29DD09A03190F94CCBFFC83960000BA01099250D"},"pinned_tabs":"C6D8FE523947107D4D304A2BB0CD69EE885A7DC535D34A2D744175037D0AEF11","prefs":{"preference_reset_time":"907D3B7B9E0A0F02D767043F1BC2BCC3CEC725FE2504C1F0E1B2729E6E511E3B"},"safebrowsing":{"incidents_sent":"3805F282BCCE90B17D9896C4047105EE47D3C28772466B95758A74CA4903ABDC"},"schedule_to_flush_to_disk":"1DED5E8F110DB75248E951DF924FFED034D7A2AD03A807D7BA7CCD668D7F85EB","search_provider_overrides":"CFA5DEDB8E664E6382F0939AD3A2117FD6C20056432756646850FA6F99726D9C","session":{"restore_on_startup":"920BF7C9B2069853D511763697DE0452040BDF509ABC5CB5D49B5BD4B4F88594","startup_urls":"507D8D0F536510D01AE775E88008AC8AF27775F57F094ED5D1308E7BE1DE5700"}}},"reset_prepopulated_engines":false,"safety_hub":{"unused_site_permissions_revocation":{"migration_completed":true}},"sessions":{"event_log":[{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406442934950729","type":2,"window_count":0},{"crashed":false,"time":"13406443031435588","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443040573374","type":2,"window_count":0},{"crashed":false,"time":"13406443089214585","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443102887407","type":2,"window_count":0},{"crashed":false,"time":"13406443167547274","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443176658131","type":2,"window_count":0},{"crashed":false,"time":"13406443249694202","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443258727430","type":2,"window_count":0},{"crashed":false,"time":"13406443278941961","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443287349454","type":2,"window_count":0},{"crashed":false,"time":"13406443297612109","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443301077328","type":2,"window_count":0},{"crashed":false,"time":"13406443340369897","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443350648146","type":2,"window_count":0},{"crashed":false,"time":"13406443389376115","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443398031254","type":2,"window_count":0},{"crashed":false,"time":"13406443411756828","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406443425747121","type":2,"window_count":0}],"session_data_status":3},"signin":{"allowed":true,"cookie_clear_on_exit_migration_notice_complete":true},"spellcheck":{"dictionaries":["en-US"]},"syncing_theme_prefs_migrated_to_non_syncing":true,"total_passwords_available_for_account":0,"total_passwords_available_for_profile":0,"translate_site_blacklist":[],"translate_site_blocklist_with_time":{},"user_experience_metrics":{"personalization_data_consent_enabled_last_known_value":false}}
1
+ {"aadc_info":{"age_group":0},"accessibility":{"captions":{"headless_caption_enabled":false}},"account_tracker_service_last_update":"13406784944506831","alternate_error_pages":{"backup":true},"autocomplete":{"retention_policy_last_version":141},"autofill":{"edge_autofill_purge_low_quality_profiles_by_timeline":false,"last_version_deduped":141},"bookmark":{"storage_computation_last_update":"13406784944506385"},"browser":{"available_dark_theme_options":"All","recent_theme_color_list":[4293914607.0,4293914607.0,4293914607.0,4293914607.0,4293914607.0],"user_level_features_context":{}},"browser_content_container_height":1728,"browser_content_container_width":3072,"browser_content_container_x":0,"browser_content_container_y":0,"collections":{"prism_collections":{"policy":{"cached":0}}},"commerce_daily_metrics_last_update_time":"13406784944507759","countryid_at_install":21843,"credentials_enable_service":false,"devtools":{"preferences":{"EdgeDevToolsLayoutInfo":{"current_dock_state":0,"horizontal_size":300,"showEmulationMode":false,"vertical_size":555}}},"domain_diversity":{"last_reporting_timestamp":"13406793392031553"},"edge":{"bookmarks":{"last_dup_info_record_time":"13406787545670740"},"msa_sso_info":{"allow_for_non_msa_profile":true},"profile_sso_info":{"is_msa_first_profile":true,"msa_sso_algo_state":1},"services":{"signin_scoped_device_id":"5209b07a-59dc-406c-8abf-63bf54595eca"}},"edge_journeys":{"latest_journeys_count":0},"edge_rewards":{"cache_data":"CAA=","coachmark_promotions":{},"hva_promotions":[],"hva_webui_action_status_dict":{},"refresh_status_muted_until":"13406941871555797"},"edge_ux_config":{"assignmentcontext":"","dataversion":"0","experimentvariables":{},"flights":{}},"edge_vpn":{"available":true},"edge_wallet":{"passwords":{"password_lost_report_date":"13406787565519473"}},"enterprise_profile_guid":"9c0bf8a9-6a1d-47a2-bc3d-1044eeceac6a","extension":{"installed_extension_count":2},"extensions":{"alerts":{"initialized":true},"chrome_url_overrides":{},"last_chrome_version":"141.0.3537.99","pdf_upsell_triggered":false,"pinned_extension_migration":true,"pinned_extensions":[],"settings":{"dgiklkfkllikcanfonkcabmbdfmgleag":{"account_extension_type":0,"active_permissions":{"api":[],"explicit_host":[],"manifest_permissions":[],"scriptable_host":[]},"commands":{},"content_settings":[],"creation_flags":1,"disable_reasons":[],"events":[],"first_install_time":"13405633918991803","from_webstore":false,"incognito_content_settings":[],"incognito_preferences":{},"last_update_time":"13405633918991803","location":5,"manifest":{"content_capabilities":{"include_globs":["https://*excel.officeapps.live.com/*","https://*onenote.officeapps.live.com/*","https://*powerpoint.officeapps.live.com/*","https://*word-edit.officeapps.live.com/*","https://*excel.officeapps.live.com.mcas.ms/*","https://*onenote.officeapps.live.com.mcas.ms/*","https://*word-edit.officeapps.live.com.mcas.ms/*","https://*excel.partner.officewebapps.cn/*","https://*onenote.partner.officewebapps.cn/*","https://*powerpoint.partner.officewebapps.cn/*","https://*word-edit.partner.officewebapps.cn/*","https://*excel.gov.online.office365.us/*","https://*onenote.gov.online.office365.us/*","https://*powerpoint.gov.online.office365.us/*","https://*word-edit.gov.online.office365.us/*","https://*excel.dod.online.office365.us/*","https://*onenote.dod.online.office365.us/*","https://*powerpoint.dod.online.office365.us/*","https://*word-edit.dod.online.office365.us/*","https://*visio.partner.officewebapps.cn/*","https://*visio.gov.online.office365.us/*","https://*visio.dod.online.office365.us/*"],"matches":["https://*.officeapps.live.com/*","https://*.officeapps.live.com.mcas.ms/*","https://*.partner.officewebapps.cn/*","https://*.gov.online.office365.us/*","https://*.dod.online.office365.us/*","https://*.app.whiteboard.microsoft.com/*","https://*.whiteboard.office.com/*","https://*.app.int.whiteboard.microsoft.com/*","https://*.whiteboard.office365.us/*","https://*.dev.whiteboard.microsoft.com/*"],"permissions":["clipboardRead","clipboardWrite"]},"default_locale":"en","description":"This extension grants Microsoft web sites permission to read and write from the clipboard.","key":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCz4t/X7GeuP6GBpjmxndrjtzF//4CWeHlC68rkoV7hP3h5Ka6eX7ZMNlYJkSjmB5iRmPHO5kR1y7rGY8JXnRPDQh/CQNLVA7OsKeV6w+UO+vx8KGI+TrTAhzH8YGcMIsxsUjxtC4cBmprja+xDr0zVp2EMgqHu+GBKgwSRHTkDuwIDAQAB","manifest_version":2,"minimum_chrome_version":"77","name":"Microsoft Clipboard Extension","version":"1.0"},"path":"C:\\Program Files (x86)\\Microsoft\\EdgeWebView\\Application\\141.0.3537.92\\resources\\edge_clipboard","preferences":{},"regular_only_preferences":{},"was_installed_by_default":false,"was_installed_by_oem":false},"mhjfbmdgcfjbbpaeojofohoefgiehjai":{"account_extension_type":0,"active_permissions":{"api":["contentSettings","fileSystem","fileSystem.write","metricsPrivate","tabs","resourcesPrivate","pdfViewerPrivate","fileSystem.readFullPath","errorReporting","edgeLearningToolsPrivate","fileSystem.getCurrentEntry","edgePdfPrivate","edgeCertVerifierPrivate"],"explicit_host":["edge://resources/*","edge://webui-test/*"],"manifest_permissions":[],"scriptable_host":[]},"commands":{},"content_settings":[],"creation_flags":1,"disable_reasons":[],"events":[],"first_install_time":"13405633918990755","from_webstore":false,"incognito_content_settings":[],"incognito_preferences":{},"last_update_time":"13405633918990755","location":5,"manifest":{"content_security_policy":"script-src 'self' 'wasm-eval' blob: filesystem: chrome://resources chrome://webui-test; object-src * blob: externalfile: file: filesystem: data:; trusted-types edge-internal fast-html pdf-url edge-pdf-static-policy;","description":"","incognito":"split","key":"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDN6hM0rsDYGbzQPQfOygqlRtQgKUXMfnSjhIBL7LnReAVBEd7ZmKtyN2qmSasMl4HZpMhVe2rPWVVwBDl6iyNE/Kok6E6v6V3vCLGsOpQAuuNVye/3QxzIldzG/jQAdWZiyXReRVapOhZtLjGfywCvlWq7Sl/e3sbc0vWybSDI2QIDAQAB","manifest_version":2,"mime_types":["application/pdf"],"mime_types_handler":"edge_pdf/index.html","name":"Microsoft Edge PDF Viewer","offline_enabled":true,"permissions":["errorReporting","chrome://resources/","chrome://webui-test/","contentSettings","metricsPrivate","edgeCertVerifierPrivate","edgeLearningToolsPrivate","edgePdfPrivate","pdfViewerPrivate","resourcesPrivate","tabs",{"fileSystem":["write","readFullPath","getCurrentEntry"]}],"version":"1"},"path":"C:\\Program Files (x86)\\Microsoft\\EdgeWebView\\Application\\141.0.3537.92\\resources\\edge_pdf","preferences":{},"regular_only_preferences":{},"was_installed_by_default":false,"was_installed_by_oem":false}}},"fsd":{"retention_policy_last_version":141},"gaia_cookie":{"periodic_report_time_2":"13406784944314331"},"intl":{"selected_languages":"en-US,en"},"language_dwell_time_average":{"en":30.862068965517242},"language_model_counters":{"en":29},"language_usage_count":{"en":29},"media":{"device_id_salt":"4494F98AD078624E4D63749260D8496E","engagement":{"schema_version":5}},"muid":{"last_sync":"13406784944507425","values_seen":[]},"optimization_guide":{"hintsfetcher":{"hosts_successfully_fetched":{}},"previously_registered_optimization_types":{"ABOUT_THIS_SITE":true,"GLIC_ACTION_PAGE_BLOCK":true,"HISTORY_CLUSTERS":true,"LOADING_PREDICTOR":true,"MERCHANT_TRUST_SIGNALS_V2":true,"PAGE_ENTITIES":true,"PRICE_INSIGHTS":true,"PRICE_TRACKING":true,"SALIENT_IMAGE":true,"SHOPPING_DISCOUNTS":true,"SHOPPING_PAGE_TYPES":true,"V8_COMPILE_HINTS":true}},"password_manager":{"account_store_backup_password_cleaning_last_timestamp":"13406349535826337","account_store_migrated_to_os_crypt_async":true,"profile_store_backup_password_cleaning_last_timestamp":"13406349535827351","profile_store_migrated_to_os_crypt_async":true},"personalization_data_consent":{"personalization_in_context_consent_can_prompt":true,"personalization_in_context_count":0},"privacy_sandbox":{"first_party_sets_data_access_allowed_initialized":true},"profile":{"avatar_index":20,"content_settings":{"exceptions":{"3pcd_heuristics_grants":{},"3pcd_support":{},"abusive_notification_permissions":{},"access_to_get_all_screens_media_in_session":{},"anti_abuse":{},"app_banner":{},"ar":{},"are_suspicious_notifications_allowlisted_by_user":{},"auto_picture_in_picture":{},"auto_select_certificate":{},"automatic_downloads":{},"automatic_fullscreen":{},"autoplay":{},"background_sync":{},"bluetooth_chooser_data":{},"bluetooth_guard":{},"bluetooth_scanning":{},"camera_pan_tilt_zoom":{},"captured_surface_control":{},"clear_browsing_data_cookies_exceptions":{},"client_hints":{},"clipboard":{},"controlled_frame":{},"cookie_controls_metadata":{"file:///*,*":{"last_modified":"13406843227656285","setting":{}},"https://[*.]aaz.lt,*":{"last_modified":"13406787536688501","setting":{}}},"cookies":{},"direct_sockets":{},"direct_sockets_private_network_access":{},"display_media_system_audio":{},"disruptive_notification_permissions":{},"durable_storage":{},"edge_ad_targeting":{},"edge_ad_targeting_data":{},"edge_browser_action":{},"edge_sdsm":{},"edge_split_screen":{},"edge_tech_scam_detection":{},"edge_u2f_api_request":{},"edge_user_agent_token":{},"fedcm_idp_registration":{},"fedcm_idp_signin":{},"fedcm_share":{},"file_system_access_chooser_data":{},"file_system_access_extended_permission":{},"file_system_access_restore_permission":{},"file_system_last_picked_directory":{},"file_system_read_guard":{},"file_system_write_guard":{},"formfill_metadata":{},"geolocation":{"https://rmf39.aaz.lt:443,*":{"last_modified":"13406787686410813","last_visit":"13406601600000000","setting":1}},"geolocation_with_options":{},"hand_tracking":{},"hid_chooser_data":{},"hid_guard":{},"http_allowed":{},"https_enforced":{},"idle_detection":{},"images":{},"important_site_info":{},"initialized_translations":{},"intent_picker_auto_display":{},"javascript":{},"javascript_jit":{},"javascript_optimizer":{},"keyboard_lock":{},"legacy_cookie_access":{},"legacy_cookie_scope":{},"local_fonts":{},"local_network_access":{},"media_engagement":{"https://rmf39.aaz.lt:443,*":{"expiration":"13414564140511155","last_modified":"13406788140511169","lifetime":"7776000000000","setting":{"hasHighScore":false,"lastMediaPlaybackTime":0.0,"mediaPlaybacks":0,"visits":1}}},"media_stream_camera":{},"media_stream_mic":{"https://rmf39.aaz.lt:443,*":{"last_modified":"13406787689075998","last_used":"13406788140513143","last_visit":"13406601600000000","setting":1}},"midi_sysex":{},"mixed_script":{},"nfc_devices":{},"notification_interactions":{},"notification_permission_review":{},"notifications":{},"ondevice_languages_downloaded":{},"password_protection":{},"payment_handler":{},"permission_autoblocking_data":{},"permission_autorevocation_data":{},"pointer_lock":{},"popups":{},"protected_media_identifier":{},"protocol_handler":{},"reduced_accept_language":{},"safe_browsing_url_check_data":{},"secure_network":{},"secure_network_sites":{},"sensors":{},"serial_chooser_data":{},"serial_guard":{},"site_engagement":{"https://rmf39.aaz.lt:443,*":{"last_modified":"13406840801827314","setting":{"lastEngagementTime":1.3406812001827256e+16,"lastShortcutLaunchTime":0.0,"pointsAddedToday":0.0,"rawScore":3.0}}},"sleeping_tabs":{},"sound":{},"speaker_selection":{},"ssl_cert_decisions":{},"storage_access":{},"storage_access_header_origin_trial":{},"subresource_filter":{},"subresource_filter_data":{},"suspicious_notification_ids":{},"third_party_storage_partitioning":{},"top_level_3pcd_origin_trial":{},"top_level_3pcd_support":{},"top_level_storage_access":{},"trackers":{},"trackers_data":{"https://cdn.jsdelivr.net:443,*":{"last_modified":"13406787536709870","setting":{"allowed_tracker_count":1}}},"tracking_org_exceptions":{},"tracking_org_relationships":{},"tracking_protection":{},"unused_site_permissions":{},"usb_chooser_data":{},"usb_guard":{},"vr":{},"web_app_installation":{},"webid_api":{},"webid_auto_reauthn":{},"window_placement":{}},"permission_actions":{"geolocation":[{"action":0,"prompt_disposition":1,"time":"13406787686416624"}],"mic_stream":[{"action":0,"prompt_disposition":1,"time":"13406787689080024"}]},"pref_version":1},"created_by_version":"141.0.3537.92","creation_time":"13405633918888904","edge_password_is_using_new_login_db_path":false,"edge_password_login_db_path_flip_flop_count":0,"edge_profile_id":"527b2764-117b-4077-ae65-077c5c11a460","exit_type":"Normal","has_seen_signin_fre":false,"is_relative_to_aad":true,"last_engagement_time":"13406812001827256","last_time_obsolete_http_credentials_removed":1761875935.826714,"last_time_password_store_metrics_reported":1762313965.516101,"managed_user_id":"","name":"Profile 1","network_pbs":{},"observed_session_time":{"feedback_rating_in_product_help_observed_session_time_key_141.0.3537.92":6.0,"feedback_rating_in_product_help_observed_session_time_key_141.0.3537.99":1562.0},"one_time_permission_prompts_decided_count":2,"password_hash_data_list":[],"signin_fre_seen_time":"13405633918946336","were_old_google_logins_removed":true},"protection":{"macs":{"browser":{"show_home_button":"2A6F649F6787376B184B5DF9CDB9C06C82BD06AA2307E47BE768051C1B4A0627"},"default_search_provider_data":{"template_url_data":"B21CB6840E240F1C8A5863FF816893BF5C6C54A379B5AA5A697436F5319BA5CB"},"edge":{"services":{"account_id":"2FF6115A736DF35839A007CF992BE676B2090D9F05FFDB583E7A43FA1AF20A87","last_username":"091FC5425CC825A57E05E2071F698D486DAF76254EFDCB1E3B15F290EDC0F321"}},"enterprise_signin":{"policy_recovery_token":"ED3353D8829461E78C867774EBE939621F7B6D0967D174719A6CAA60E76B7467"},"extensions":{"install":{"initiallist":"FB1B46AAE8F6E94CA75262B4427520E2EFE78B05B6657898790C70B7197307A6"},"settings":{"dgiklkfkllikcanfonkcabmbdfmgleag":"9006F519031806C79617EBDF0B58C033F915B887068C2D0DB6EEA0FABF4FC52A","mhjfbmdgcfjbbpaeojofohoefgiehjai":"0882722781AC8B1446BE076FE06B986D5F1BBCE045C4104166F769F82D64CEB5"},"ui":{"developer_mode":"CD3F9EB12B3FAE383E76201F354508F7C4ADE21AE1A98F0BE432393C71E827EB"}},"google":{"services":{"last_signed_in_username":"1B01014EDBE0CC47CE3D24741D0309DA4ECF0DC81F5E43D4B21689E8927429C8"}},"homepage":"D11C12528151C024D640374ADF2605B2F63A51091AF26B3832973FAC76BE68F8","homepage_is_newtabpage":"C66A8A1D90BC573CFDAC54BB65F041F49E2C52F94318CF1CC234A5A677B80964","media":{"cdm":{"origin_data":"7AA02AC5C4BF3C38636B8772873A7E73DB32E8870E2306DE06F1EA24F7D57D67"},"storage_id_salt":"C907A55B4508B6A2A456FE6D29DD09A03190F94CCBFFC83960000BA01099250D"},"pinned_tabs":"C6D8FE523947107D4D304A2BB0CD69EE885A7DC535D34A2D744175037D0AEF11","prefs":{"preference_reset_time":"907D3B7B9E0A0F02D767043F1BC2BCC3CEC725FE2504C1F0E1B2729E6E511E3B"},"safebrowsing":{"incidents_sent":"3805F282BCCE90B17D9896C4047105EE47D3C28772466B95758A74CA4903ABDC"},"schedule_to_flush_to_disk":"1DED5E8F110DB75248E951DF924FFED034D7A2AD03A807D7BA7CCD668D7F85EB","search_provider_overrides":"CFA5DEDB8E664E6382F0939AD3A2117FD6C20056432756646850FA6F99726D9C","session":{"restore_on_startup":"920BF7C9B2069853D511763697DE0452040BDF509ABC5CB5D49B5BD4B4F88594","startup_urls":"507D8D0F536510D01AE775E88008AC8AF27775F57F094ED5D1308E7BE1DE5700"}}},"reset_prepopulated_engines":false,"safety_hub":{"unused_site_permissions_revocation":{"migration_completed":true}},"sessions":{"event_log":[{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406837950566067","type":2,"window_count":0},{"crashed":false,"time":"13406838128948454","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":1,"time":"13406838214600163","type":2,"window_count":1},{"crashed":false,"time":"13406840801424135","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406840837751336","type":2,"window_count":0},{"crashed":false,"time":"13406840914849144","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406840923122394","type":2,"window_count":0},{"crashed":false,"time":"13406841033387176","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406841046499276","type":2,"window_count":0},{"crashed":false,"time":"13406841157093045","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406841530771462","type":2,"window_count":0},{"crashed":false,"time":"13406841535903357","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406841569212259","type":2,"window_count":0},{"crashed":false,"time":"13406841577099663","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406841583982437","type":2,"window_count":0},{"crashed":false,"time":"13406841811770919","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406842271009562","type":2,"window_count":0},{"crashed":false,"time":"13406843226800364","type":0},{"did_schedule_command":false,"first_session_service":true,"tab_count":0,"time":"13406843237029985","type":2,"window_count":0}],"session_data_status":3},"signin":{"allowed":true,"cookie_clear_on_exit_migration_notice_complete":true},"spellcheck":{"dictionaries":["en-US"],"dictionary":""},"syncing_theme_prefs_migrated_to_non_syncing":true,"total_passwords_available_for_account":0,"total_passwords_available_for_profile":0,"translate_site_blacklist":[],"translate_site_blocklist_with_time":{},"user_experience_metrics":{"personalization_data_consent_enabled_last_known_value":false}}