/** * Chrome Browser API Implementation * * Mapuje Chrome chrome.* API na nasze ujednolicone BrowserAPI */ import type { BrowserAPI } from './types'; // Chrome używa globalnego obiektu `chrome` declare const chrome: any; export const chromeAPI: BrowserAPI = { // Tabs API - chrome.tabs.* → tabs.* tabs: { query: chrome.tabs.query, onUpdated: { addListener: chrome.tabs.onUpdated.addListener.bind(chrome.tabs.onUpdated), removeListener: chrome.tabs.onUpdated.removeListener.bind(chrome.tabs.onUpdated), }, onRemoved: chrome.tabs.onRemoved ? { addListener: chrome.tabs.onRemoved.addListener.bind(chrome.tabs.onRemoved), removeListener: chrome.tabs.onRemoved.removeListener.bind(chrome.tabs.onRemoved), } : undefined, }, // Badge API - Chrome używa action (nie browserAction jak Firefox) // Owinięte w try-catch aby obsłużyć zamknięte zakładki badge: { setBadgeText: (details: any) => { try { chrome.action.setBadgeText(details); } catch (e) { // Zakładka zamknięta - ignorujemy } }, setTitle: (details: any) => { try { chrome.action.setTitle(details); } catch (e) { // Zakładka zamknięta - ignorujemy } }, setBadgeBackgroundColor: (details: any) => { try { chrome.action.setBadgeBackgroundColor(details); } catch (e) { // Zakładka zamknięta - ignorujemy } }, }, // WebRequest API - chrome.webRequest.* → webRequest.* webRequest: { onBeforeRequest: { addListener: chrome.webRequest.onBeforeRequest.addListener.bind(chrome.webRequest.onBeforeRequest), }, onBeforeSendHeaders: { addListener: chrome.webRequest.onBeforeSendHeaders.addListener.bind(chrome.webRequest.onBeforeSendHeaders), }, }, // Cookies API - chrome.cookies.* → cookies.* cookies: { getAll: chrome.cookies.getAll.bind(chrome.cookies), remove: chrome.cookies.remove.bind(chrome.cookies), }, // Extension API - chrome.extension.* → extension.* extension: { getBackgroundPage: chrome.extension?.getBackgroundPage?.bind(chrome.extension) || (() => null), }, // Windows API - chrome.windows.* → windows.* windows: { WINDOW_ID_CURRENT: chrome.windows.WINDOW_ID_CURRENT, }, };