import { handlePageControlMessage } from '@/agent/RemotePageController.background' import { handleTabControlMessage, setupTabEventsPort } from '@/agent/TabsController.background' export default defineBackground(() => { console.log('[Background] Service Worker started') // tab change events setupTabEventsPort() // generate user auth token chrome.storage.local.get('PageAgentExtUserAuthToken').then((result) => { if (result.PageAgentExtUserAuthToken) return const userAuthToken = crypto.randomUUID() chrome.storage.local.set({ PageAgentExtUserAuthToken: userAuthToken }) }) // message proxy chrome.runtime.onMessage.addListener((message, sender, sendResponse): true | undefined => { if (message.type === 'TAB_CONTROL') { return handleTabControlMessage(message, sender, sendResponse) } else if (message.type === 'PAGE_CONTROL') { return handlePageControlMessage(message, sender, sendResponse) } else { sendResponse({ error: 'Unknown message type' }) return } }) // external messages (from localhost launcher page via externally_connectable) chrome.runtime.onMessageExternal.addListener((message, sender, sendResponse) => { if (message.type === 'OPEN_HUB') { openOrFocusHubTab(message.wsPort).then(() => { if (sender.tab?.id) chrome.tabs.remove(sender.tab.id) sendResponse({ ok: true }) }) return true } }) // setup chrome.sidePanel.setPanelBehavior({ openPanelOnActionClick: true }).catch(() => {}) }) async function openOrFocusHubTab(wsPort: number) { const hubUrl = chrome.runtime.getURL('hub.html') const existing = await chrome.tabs.query({ url: `${hubUrl}*` }) if (existing.length > 0 && existing[0].id) { await chrome.tabs.update(existing[0].id, { active: true, url: `${hubUrl}?ws=${wsPort}`, }) return } await chrome.tabs.create({ url: `${hubUrl}?ws=${wsPort}`, pinned: true }) }