From d0c1c59e1f9ba3528b8fbfcb98c3230e73f22b0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Oct 2026 08:56:15 +0000 Subject: [PATCH 1/2] build(deps-dev): bump @types/chrome from 0.0.260 to 0.3.5 Bumps [@types/chrome](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chrome) from 0.0.260 to 0.3.5. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chrome) --- updated-dependencies: - dependency-name: "@types/chrome" dependency-version: 0.3.5 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- bridge-browser/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bridge-browser/package.json b/bridge-browser/package.json index 8bef36f..125f093 100644 --- a/bridge-browser/package.json +++ b/bridge-browser/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@crxjs/vite-plugin": "2.4.0", - "@types/chrome": "^0.0.260", + "@types/chrome": "^0.3.5", "@types/node": "^20.19.43", "typescript": "^5.3.0", "vite": "^5.0.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23d4114..6f0ac16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,8 +43,8 @@ importers: specifier: 2.4.0 version: 2.4.0(vite@5.4.21(@types/node@20.19.43)(terser@5.51.2)) '@types/chrome': - specifier: ^0.0.260 - version: 0.0.260 + specifier: ^0.3.5 + version: 0.3.5 '@types/node': specifier: ^20.19.43 version: 20.19.43 @@ -702,8 +702,8 @@ packages: '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - '@types/chrome@0.0.260': - resolution: {integrity: sha512-lX6QpgfsZRTDpNcCJ+3vzfFnFXq9bScFRTlfhbK5oecSAjamsno+ejFTCbNtc5O/TPnVK9Tja/PyecvWQe0F2w==} + '@types/chrome@0.3.5': + resolution: {integrity: sha512-7HYsK7xalNxzLwGrP9lkCQPAA6V56VtPpOmv2CQnBnMzX5/Hpr+Iv5fqaIOIY/H/Q6ZBksLmurWh7zXPcZ4B7Q==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} @@ -3756,7 +3756,7 @@ snapshots: '@types/connect': 3.4.38 '@types/node': 20.19.43 - '@types/chrome@0.0.260': + '@types/chrome@0.3.5': dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 From 6c88fe30ab8e676a5eaeca3c4d9943a147cbeeb8 Mon Sep 17 00:00:00 2001 From: juice094 <160722440+juice094@users.noreply.github.com> Date: Fri, 23 Oct 2026 20:00:09 +0800 Subject: [PATCH 2/2] fix(deps): migrate to @types/chrome 0.3.5 tab types - TabChangeInfo was renamed to OnUpdatedInfo; update the onUpdated handler signature. - tabs.update resolves to undefined when the tab is gone, so guard the window focus step. - Drop the storage assertions the narrower types made redundant. --- bridge-browser/src/background/connection.ts | 2 +- bridge-browser/src/background/defaults.ts | 2 +- bridge-browser/src/background/discovery.ts | 2 +- bridge-browser/src/background/notifications.ts | 4 +++- bridge-browser/src/background/presets.ts | 2 +- bridge-browser/src/background/sessions.ts | 6 +++--- bridge-browser/src/background/tab_lifecycle.ts | 2 +- bridge-browser/src/content/main.ts | 2 +- 8 files changed, 12 insertions(+), 10 deletions(-) diff --git a/bridge-browser/src/background/connection.ts b/bridge-browser/src/background/connection.ts index 74923d2..7fababb 100644 --- a/bridge-browser/src/background/connection.ts +++ b/bridge-browser/src/background/connection.ts @@ -215,7 +215,7 @@ async function redeemBridgeCode( } async function findConflictTabId(port: number, tabId: number): Promise { - const all = await chrome.storage.local.get(null) as Record; + const all = await chrome.storage.local.get(null); for (const [key, val] of Object.entries(all)) { if (isConflictingSession(key, val, port, tabId)) { return key.replace("session_", ""); diff --git a/bridge-browser/src/background/defaults.ts b/bridge-browser/src/background/defaults.ts index 9ba9749..360c54a 100644 --- a/bridge-browser/src/background/defaults.ts +++ b/bridge-browser/src/background/defaults.ts @@ -7,7 +7,7 @@ export async function handleInstalled(details?: chrome.runtime.InstalledDetails) } async function clearStoredSessions(): Promise { - const localItems = await chrome.storage.local.get(null) as Record; + const localItems = await chrome.storage.local.get(null); const sessionKeys = Object.keys(localItems).filter( (key) => key.startsWith('session_') || key.startsWith('disconnect_') ); diff --git a/bridge-browser/src/background/discovery.ts b/bridge-browser/src/background/discovery.ts index 586045d..62c112e 100644 --- a/bridge-browser/src/background/discovery.ts +++ b/bridge-browser/src/background/discovery.ts @@ -70,7 +70,7 @@ export async function discoverGateways(): Promise { } async function readPreferredPort(): Promise { - const stored = await chrome.storage.local.get([LAST_GATEWAY_PORT_KEY]) as Record; + const stored = await chrome.storage.local.get([LAST_GATEWAY_PORT_KEY]); const value = stored[LAST_GATEWAY_PORT_KEY]; return typeof value === "number" && Number.isInteger(value) ? value : null; } diff --git a/bridge-browser/src/background/notifications.ts b/bridge-browser/src/background/notifications.ts index 10a7cc0..5be326e 100644 --- a/bridge-browser/src/background/notifications.ts +++ b/bridge-browser/src/background/notifications.ts @@ -122,9 +122,11 @@ export async function focusNotificationSourceTab(notificationId: string): Promis const tabId = getNotificationSourceTabId(notificationId); if (tabId === null) {return;} + // `tabs.update` resolves to undefined when the tab no longer exists, so the + // window focus step is skipped instead of dereferencing a missing tab. const tab = await chrome.tabs.update(tabId, { active: true }); - if (typeof tab.windowId === "number" && tab.windowId !== chrome.windows.WINDOW_ID_NONE) { + if (tab && typeof tab.windowId === "number" && tab.windowId !== chrome.windows.WINDOW_ID_NONE) { await focusWindow(tab.windowId); } } catch (error) { diff --git a/bridge-browser/src/background/presets.ts b/bridge-browser/src/background/presets.ts index ee3b61b..656a44e 100644 --- a/bridge-browser/src/background/presets.ts +++ b/bridge-browser/src/background/presets.ts @@ -11,7 +11,7 @@ const DEFAULT_SESSION_PRESET_SETTINGS: SessionPresetSettings = { }; export async function getSessionPresetSettings(): Promise { - const result = await chrome.storage.local.get([SESSION_PRESET_SETTINGS_KEY]) as Record; + const result = await chrome.storage.local.get([SESSION_PRESET_SETTINGS_KEY]); return normalizeSessionPresetSettings(result[SESSION_PRESET_SETTINGS_KEY]); } diff --git a/bridge-browser/src/background/sessions.ts b/bridge-browser/src/background/sessions.ts index 8d84823..be023a2 100644 --- a/bridge-browser/src/background/sessions.ts +++ b/bridge-browser/src/background/sessions.ts @@ -16,12 +16,12 @@ export type ActiveProtocolSessionResult = export async function getSession(tabId: number): Promise { const key = `session_${tabId}`; - const result = await chrome.storage.local.get([key]) as Record; + const result = await chrome.storage.local.get([key]); return normalizeSession(result[key]) ?? undefined; } export async function getStoredSessionTabIds(): Promise { - const result = await chrome.storage.local.get(null) as Record; + const result = await chrome.storage.local.get(null); return Object.keys(result) .map(getSessionTabIdFromKey) .filter((tabId): tabId is number => typeof tabId === "number"); @@ -31,7 +31,7 @@ export async function getSessionDisconnectReason( tabId: number ): Promise { const key = getDisconnectReasonKey(tabId); - const result = await chrome.storage.local.get([key]) as Record; + const result = await chrome.storage.local.get([key]); return normalizeDisconnectReason(result[key]); } diff --git a/bridge-browser/src/background/tab_lifecycle.ts b/bridge-browser/src/background/tab_lifecycle.ts index a68198f..4684e17 100644 --- a/bridge-browser/src/background/tab_lifecycle.ts +++ b/bridge-browser/src/background/tab_lifecycle.ts @@ -7,7 +7,7 @@ import { checkUrlSafety, isBridgePageUrl } from './url_safety'; export async function handleTabUpdated( tabId: number, - changeInfo: chrome.tabs.TabChangeInfo, + changeInfo: chrome.tabs.OnUpdatedInfo, tab: chrome.tabs.Tab ) { // Use URL from changeInfo if available, otherwise fallback to tab.url diff --git a/bridge-browser/src/content/main.ts b/bridge-browser/src/content/main.ts index 465c2e9..279bf17 100644 --- a/bridge-browser/src/content/main.ts +++ b/bridge-browser/src/content/main.ts @@ -221,7 +221,7 @@ chrome.storage.onChanged.addListener((changes, namespace) => { if (namespace === "local") { const approvalStorageKey = `allowed_tools_${currentWorkspaceId}`; if (changes[approvalStorageKey]) { - approvalState = parseStoredApprovalEntries(changes[approvalStorageKey].newValue as unknown); + approvalState = parseStoredApprovalEntries(changes[approvalStorageKey].newValue); Logger.log(`Allowed tools updated (Workspace: ${currentWorkspaceId})`, "action"); } if (changes.syncedAiSites) {