From f2efb12dabac92d731192a55e4b7413844454ad4 Mon Sep 17 00:00:00 2001 From: "Tommy D. Rossi" Date: Sat, 22 Nov 2025 11:43:38 +0100 Subject: [PATCH] add more globals in background.ts toggleExtensionForActiveTab --- extension/src/background.ts | 48 ++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/extension/src/background.ts b/extension/src/background.ts index 64b47cd..90b385f 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -1,5 +1,5 @@ import { RelayConnection, debugLog } from './relayConnection' -import { create } from 'zustand' +import { createStore } from 'zustand/vanilla' // Relay URL - fixed port for MCP bridge const RELAY_URL = 'ws://localhost:19988/extension' @@ -21,7 +21,7 @@ interface ExtensionState { errorText: string | undefined } -const useExtensionStore = create(() => ({ +const useExtensionStore = createStore((set) => ({ connection: undefined, connectedTabs: new Map(), connectionState: 'disconnected', @@ -29,8 +29,50 @@ const useExtensionStore = create(() => ({ errorText: undefined, })) + // @ts-ignore -globalThis.state = useExtensionStore +globalThis.toggleExtensionForActiveTab = toggleExtensionForActiveTab + +async function toggleExtensionForActiveTab(): Promise<{ isConnected: boolean; state: ExtensionState }> { + const tabs = await chrome.tabs.query({ active: true, currentWindow: true }) + const tab = tabs[0] + if (!tab?.id) throw new Error('No active tab found') + + await onActionClicked(tab) + + // Wait for state to settle + await new Promise((resolve) => { + const check = () => { + const state = useExtensionStore.getState() + const tabInfo = state.connectedTabs.get(tab.id!) + + // If we are connecting, wait + if (tabInfo?.state === 'connecting') { + setTimeout(check, 100) + return + } + + // Also wait if global connection is reconnecting + if (state.connectionState === 'reconnecting') { + setTimeout(check, 100) + return + } + + resolve() + } + check() + }) + + const state = useExtensionStore.getState() + const isConnected = state.connectedTabs.has(tab.id) && state.connectedTabs.get(tab.id)?.state === 'connected' + + return { isConnected, state } +} + +declare global { + var state: typeof useExtensionStore + var toggleExtensionForActiveTab: () => Promise<{ isConnected: boolean; state: ExtensionState }> +} async function resetDebugger() { let targets = await chrome.debugger.getTargets()