Fix v1.1.0: Analytics, Sessions, and Error Handling Improvements

This commit is contained in:
nate@necloud.us committed 2025-08-13 19:02:55 -04:00
1 parent 7d8470df84
commit 545cf4c8dc
200 files changed
+91013 -18521

No files matched your search

+102
View File
@@ -0,0 +1,102 @@
// Add this script in the head element of index.html for temporary debugging
(() => {
// Store the original fetch method to monitor all network requests
const originalFetch = window.fetch;
// Override fetch to log all requests and responses
window.fetch = async function(url, options) {
console.log(`🔍 DEBUG: Fetch request to ${url}`, options);
try {
const response = await originalFetch(url, options);
// Clone the response to leave the original intact
const clone = response.clone();
// Log the response
console.log(`🔍 DEBUG: Fetch response from ${url}`, {
status: clone.status,
statusText: clone.statusText,
headers: Object.fromEntries([...clone.headers.entries()])
});
// If it's a JSON response, log the data
if (clone.headers.get('content-type')?.includes('application/json')) {
try {
const data = await clone.json();
console.log(`🔍 DEBUG: JSON response from ${url}`, data);
} catch (e) {
console.error(`🔍 DEBUG: Error parsing JSON from ${url}`, e);
}
}
return response;
} catch (error) {
console.error(`🔍 DEBUG: Fetch error for ${url}`, error);
throw error;
}
};
// Monitor all select elements for changes
const observeSelects = () => {
const selects = document.querySelectorAll('select');
console.log(`🔍 DEBUG: Found ${selects.length} select elements`);
selects.forEach((select, index) => {
console.log(`🔍 DEBUG: Select #${index}:`, {
id: select.id,
name: select.name,
optionCount: select.options.length,
options: Array.from(select.options).map(opt => ({
value: opt.value,
text: opt.text,
disabled: opt.disabled
}))
});
// Watch for changes in the options
const observer = new MutationObserver(mutations => {
console.log(`🔍 DEBUG: Select #${index} (${select.id}) changed:`, {
optionCount: select.options.length,
options: Array.from(select.options).map(opt => ({
value: opt.value,
text: opt.text,
disabled: opt.disabled
}))
});
});
observer.observe(select, { childList: true });
});
};
// Run once DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
console.log('🔍 DEBUG: DOM loaded, monitoring select elements');
setTimeout(observeSelects, 1000);
// Add click handler for analytics tab
const analyticsTab = document.querySelector('button[data-tab="tabAnalytics"]');
if (analyticsTab) {
const originalClick = analyticsTab.onclick;
analyticsTab.addEventListener('click', () => {
console.log('🔍 DEBUG: Analytics tab clicked');
setTimeout(() => {
const userSelect = document.getElementById('analyticsUserSelect');
if (userSelect) {
console.log('🔍 DEBUG: Analytics user select status:', {
optionCount: userSelect.options.length,
options: Array.from(userSelect.options).map(opt => ({
value: opt.value,
text: opt.text
}))
});
} else {
console.log('🔍 DEBUG: Analytics user select not found');
}
}, 500);
});
}
});
})();