AutoMouser/content.js
Octo Ghost aac0e05770 minor
2025-11-30 20:29:21 -08:00

102 lines
4.3 KiB
JavaScript

// InverseUI Content Script - Modular event tracking system
console.log('🚀 InverseUI content script LOADED');
(function() {
'use strict';
console.log('🔥 InverseUI content script starting...');
// Check if we're in an extension context before using Chrome APIs
if (typeof chrome === 'undefined' || !chrome.runtime) {
console.warn('❌ Chrome extension API not available in this context');
return;
}
console.log('✅ Chrome APIs available, continuing initialization...');
// Import modules
async function initializeContentScript() {
try {
console.log('Step 1: Importing xpath_utils...');
const { getXpaths } = await import(chrome.runtime.getURL('util/xpath_utils.js'));
console.log('Step 1: SUCCESS');
console.log('Step 2: Importing communication_utils...');
const { initPageCommunication, initBackgroundCommunication, notifyContentScriptReady } = await import(chrome.runtime.getURL('util/communication_utils.js'));
console.log('Step 2: SUCCESS');
console.log('Step 3: Importing api_injection...');
const { initAPIInjection } = await import(chrome.runtime.getURL('inject/api_injection.js'));
console.log('Step 3: SUCCESS');
console.log('Step 4: Importing action tracking...');
const { initializeActionTracking } = await import(chrome.runtime.getURL('modules/action/index.js'));
console.log('Step 4: SUCCESS');
console.log('Step 5: Getting safeSendMessage...');
const { safeSendMessage } = await import(chrome.runtime.getURL('util/communication_utils.js'));
console.log('Step 5: SUCCESS');
// Initialize API injection for Selenium communication
initAPIInjection();
// Initialize communication channels
initPageCommunication();
initBackgroundCommunication((recording) => {
// Just log recording state changes
// Enhanced handlers in click.js/input.js already check recState internally
// No need for extra listeners from startRecording()
console.log('Recording state changed:', recording);
});
// Initialize comprehensive action tracking system
await initializeActionTracking(safeSendMessage, getXpaths);
// Send ready message to background
notifyContentScriptReady();
console.log('InverseUI: Content script fully initialized');
} catch (error) {
console.error('Failed to initialize content script modules:', error);
console.error('Error message:', error.message);
console.error('Error stack:', error.stack);
console.error('Error name:', error.name);
console.error('Full error object:', error);
// Fallback to inline implementation
await initializeFallbackTracking();
}
}
// Fallback to inline implementation if modules fail
async function initializeFallbackTracking() {
try {
console.log('InverseUI: Falling back to inline tracking implementation');
// Import required modules for fallback
const { getXpaths } = await import(chrome.runtime.getURL('util/xpath_utils.js'));
const { initializeRecording } = await import(chrome.runtime.getURL('modules/recording.js'));
// Initialize inline tracking
initializeRecording(getXpaths);
console.log('InverseUI: Fallback inline tracking initialized');
} catch (error) {
console.error('Failed to initialize fallback tracking:', error);
console.error('Fallback error message:', error.message);
console.error('Fallback error stack:', error.stack);
console.error('InverseUI: Content script initialization failed completely');
}
}
// Initialize on DOM ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initializeContentScript);
} else {
initializeContentScript();
}
})();