// Background service worker for WPlace AutoBOT Extension // Test resource loading on extension starto chrome.runtime.onStartup.addListener(async () => { console.log('š WPlace AutoBOT Extension started'); const resources = await loadExtensionResources(); console.log('š¦ Initial resource test:', resources); }); chrome.runtime.onInstalled.addListener(async () => { console.log('š§ WPlace AutoBOT Extension installed'); const resources = await loadExtensionResources(); console.log('š¦ Installation resource test:', resources); }); async function executeLocalScript(scriptName, tabId) { try { console.log(`Loading script: ${scriptName}`); // Check if we need to inject dependencies first for Auto-Image.js or Art-Extractor.js if (scriptName === 'Auto-Image.js' || scriptName === 'Art-Extractor.js') { console.log(`š ${scriptName} detected, ensuring dependencies are loaded first...`); try { // First inject token-manager.js const tokenManagerUrl = chrome.runtime.getURL('scripts/token-manager.js'); const tokenManagerResponse = await fetch(tokenManagerUrl); if (tokenManagerResponse.ok) { const tokenManagerCode = await tokenManagerResponse.text(); console.log('š Token manager loaded, injecting first...'); // Execute token manager first await chrome.scripting.executeScript({ target: { tabId: tabId }, world: "MAIN", func: (code) => { console.log('%cš Loading WPlace Token Manager...', 'color: #4ade80; font-weight: bold;'); const script = document.createElement('script'); script.textContent = code; document.head.appendChild(script); script.remove(); console.log('%cā Token Manager loaded successfully', 'color: #4ade80; font-weight: bold;'); }, args: [tokenManagerCode] }); console.log('ā Token manager injected successfully'); } else { console.warn('ā ļø Could not load token-manager.js, proceeding without it'); } // Then inject image-processor.js const imageProcessorUrl = chrome.runtime.getURL('scripts/image-processor.js'); const imageProcessorResponse = await fetch(imageProcessorUrl); if (imageProcessorResponse.ok) { const imageProcessorCode = await imageProcessorResponse.text(); console.log('š¼ļø Image processor loaded, injecting second...'); // Execute image processor second await chrome.scripting.executeScript({ target: { tabId: tabId }, world: "MAIN", func: (code) => { console.log('%cš¼ļø Loading WPlace Image Processor...', 'color: #3b82f6; font-weight: bold;'); const script = document.createElement('script'); script.textContent = code; document.head.appendChild(script); script.remove(); console.log('%cā Image Processor loaded successfully', 'color: #3b82f6; font-weight: bold;'); }, args: [imageProcessorCode] }); console.log('ā Image processor injected successfully'); } else { console.warn('ā ļø Could not load image-processor.js, proceeding without it'); } // Then inject overlay-manager.js const overlayManagerUrl = chrome.runtime.getURL('scripts/overlay-manager.js'); const overlayManagerResponse = await fetch(overlayManagerUrl); if (overlayManagerResponse.ok) { const overlayManagerCode = await overlayManagerResponse.text(); console.log('šØ Overlay manager loaded, injecting third...'); // Execute overlay manager thirds await chrome.scripting.executeScript({ target: { tabId: tabId }, world: "MAIN", func: (code) => { console.log('%cšØ Loading WPlace Overlay Manager...', 'color: #8b5cf6; font-weight: bold;'); const script = document.createElement('script'); script.textContent = code; document.head.appendChild(script); script.remove(); console.log('%cā Overlay Manager loaded successfully', 'color: #8b5cf6; font-weight: bold;'); }, args: [overlayManagerCode] }); console.log('ā Overlay manager injected successfully'); } else { console.warn('ā ļø Could not load overlay-manager.js, proceeding without it'); } // Finally inject utils-manager.js const utilsManagerUrl = chrome.runtime.getURL('scripts/utils-manager.js'); const utilsManagerResponse = await fetch(utilsManagerUrl); if (utilsManagerResponse.ok) { const utilsManagerCode = await utilsManagerResponse.text(); console.log('š ļø Utils manager loaded, injecting fourth...'); // Execute utils manager fourth await chrome.scripting.executeScript({ target: { tabId: tabId }, world: "MAIN", func: (code) => { console.log('%cš ļø Loading WPlace Utils Manager...', 'color: #f59e0b; font-weight: bold;'); const script = document.createElement('script'); script.textContent = code; document.head.appendChild(script); script.remove(); console.log('%cā Utils Manager loaded successfully', 'color: #f59e0b; font-weight: bold;'); }, args: [utilsManagerCode] }); console.log('ā Utils manager injected successfully'); } else { console.warn('ā ļø Could not load utils-manager.js, proceeding without it'); } // Small delay to ensure dependencies are fully initialized await new Promise(resolve => setTimeout(resolve, 200)); } catch (error) { console.warn('ā ļø Error loading dependencies:', error); } } // Determine script path - Script-manager files are in root, others in scripts/ let scriptUrl; if (scriptName === 'Script-manager.js' || scriptName === 'Script-manager-fixed.js') { scriptUrl = chrome.runtime.getURL(scriptName); } else { scriptUrl = chrome.runtime.getURL(`scripts/${scriptName}`); } const response = await fetch(scriptUrl); if (!response.ok) { throw new Error(`Failed to load script: ${response.status} ${response.statusText}`); } const scriptCode = await response.text(); console.log(`Script loaded: ${scriptCode.length} characters`); // Load theme and language resources const resources = await loadExtensionResources(); // Execute in MAIN world context (bypasses CSP) await chrome.scripting.executeScript({ target: { tabId: tabId }, world: "MAIN", // Key: executes in page context, not extension context func: (code, name, themeCSS, languages) => { console.log(`%cš Executing ${name}...`, 'color: #4ade80; font-weight: bold; font-size: 14px;'); // Create detailed resource report console.group(`%cš WPlace AutoBOT Resource Report for ${name}`, 'color: #3b82f6; font-weight: bold; font-size: 16px;'); // Debug: Log what resources we received console.log(`%cš¦ Raw Resources Received:`, 'color: #8b5cf6; font-weight: bold;'); console.log(` - Themes object:`, themeCSS); console.log(` - Languages object:`, languages); console.log(` - Theme count: ${Object.keys(themeCSS || {}).length}`); console.log(` - Language count: ${Object.keys(languages || {}).length}`); // Inject CSS themes if available if (themeCSS && Object.keys(themeCSS).length > 0) { console.group(`%cšØ Theme Processing`, 'color: #8b5cf6; font-weight: bold;'); console.log(`%cš Loading ${Object.keys(themeCSS).length} theme files from extension local storage...`, 'color: #8b5cf6;'); // Create a global themes object window.AUTOBOT_THEMES = themeCSS; // Log detailed theme information Object.entries(themeCSS).forEach(([filename, content]) => { console.log(`%cš Theme File: ${filename}`, 'color: #8b5cf6; font-weight: bold;'); console.log(` š Size: ${content.length.toLocaleString()} characters`); console.log(` š Source: Extension local file (chrome-extension://)`); console.log(` š Full path: themes/${filename}`); // Show first few lines as preview const preview = content.substring(0, 200).split('\\n').slice(0, 3).join('\\n'); console.log(` š Preview: ${preview}${content.length > 200 ? '...' : ''}`); console.log(` ā Status: Loaded successfully`); }); // Inject auto-image-styles.css if available if (themeCSS['auto-image-styles.css']) { const autoImageContent = themeCSS['auto-image-styles.css']; const styleElement = document.createElement('style'); styleElement.id = 'autobot-auto-image-styles'; styleElement.textContent = autoImageContent; document.head.appendChild(styleElement); console.log(`%c⨠AUTO-INJECTED: auto-image-styles.css`, 'color: #10b981; font-weight: bold;'); console.log(` š Injected size: ${autoImageContent.length.toLocaleString()} characters`); console.log(` š Source: Extension local file`); console.log(` šÆ Target:
as