/** * Firefox Browser API Implementation * * Mapuje Firefox browser.* API na nasze ujednolicone BrowserAPI */ import type { BrowserAPI } from './types'; // Bezpieczny dostęp do globalnego obiektu browser - sprawdzamy czy istnieje w runtime function getBrowser() { // @ts-ignore - dostęp do potencjalnie niezdefiniowanego globalnego obiektu if (typeof globalThis.browser !== 'undefined') { // @ts-ignore return globalThis.browser; } return null; } export const firefoxAPI: BrowserAPI = { // Tabs API - leniwy dostęp z odpowiednimi typami zwracanymi tabs: { query: (queryInfo: any) => { const b = getBrowser(); if (b) { return b.tabs.query(queryInfo); } return Promise.resolve([]); }, onUpdated: { addListener: (listener: any) => { getBrowser()?.tabs.onUpdated.addListener(listener); }, removeListener: (listener: any) => { getBrowser()?.tabs.onUpdated.removeListener(listener); }, }, onRemoved: { addListener: (listener: any) => { getBrowser()?.tabs.onRemoved?.addListener(listener); }, removeListener: (listener: any) => { getBrowser()?.tabs.onRemoved?.removeListener(listener); }, }, }, // Badge API - Firefox używa browserAction (nie action jak Chrome) badge: { setBadgeText: (details: any) => { getBrowser()?.browserAction.setBadgeText(details); }, setTitle: (details: any) => { getBrowser()?.browserAction.setTitle(details); }, setBadgeBackgroundColor: (details: any) => { getBrowser()?.browserAction.setBadgeBackgroundColor(details); }, }, // WebRequest API - leniwy dostęp webRequest: { onBeforeRequest: { addListener: (listener: any, filter: any, extraInfoSpec?: any) => { getBrowser()?.webRequest.onBeforeRequest.addListener(listener, filter, extraInfoSpec); }, }, onBeforeSendHeaders: { addListener: (listener: any, filter: any, extraInfoSpec?: any) => { getBrowser()?.webRequest.onBeforeSendHeaders.addListener(listener, filter, extraInfoSpec); }, }, }, // Cookies API - leniwy dostęp z odpowiednimi typami zwracanymi cookies: { getAll: (details: any) => { const b = getBrowser(); if (b) { return b.cookies.getAll(details); } return Promise.resolve([]); }, remove: (details: any) => { const b = getBrowser(); if (b) { return b.cookies.remove(details); } return Promise.resolve(null); }, }, // Extension API - leniwy dostęp extension: { getBackgroundPage: () => { const b = getBrowser(); return b ? b.extension.getBackgroundPage() : null; }, }, // Windows API - leniwy dostęp windows: { get WINDOW_ID_CURRENT() { const b = getBrowser(); return b ? b.windows.WINDOW_ID_CURRENT : -2; }, }, };