import React, { useEffect, useState } from "react"; import ReactDOM from "react-dom"; import memory from "./memory"; import { RequestCluster, Sources } from "./request-cluster"; import { getshorthost, useEmitter } from "./util"; async function getCurrentTab() { const [tab] = await browser.tabs.query({ active: true, windowId: browser.windows.WINDOW_ID_CURRENT, }); return tab; } const TabDropdown = ({ setPickedTab, pickedTab, }: { setPickedTab: (tab_id: number) => void; pickedTab: number; }) => { const [tabs, setTabs] = useState([]); useEffect(() => { browser.tabs.query({ currentWindow: true }).then(setTabs); }, []); return ( { setPickedTab(parseInt(e.target.value)); }} > {tabs.map((tab) => ( {tab.title} ))} ); }; const StolenDataRow = ({ origin, shorthost, minValueLength, cookiesOnly, }: { origin: string; shorthost: string; refreshToken: number; minValueLength: number; cookiesOnly: boolean; }) => { const cluster = memory.getClustersForOrigin(origin)[shorthost]; const icons: Record = { cookie: "🍪", pathname: "🛣", queryparams: "🅿", header: "H", }; return ( {cluster.id} {cluster.hasCookies() ? "🍪" : ""} x {cluster.requests.length}{" "} cluster.removeAllCookies()} > Wyczyść cookiesy {cluster .getStolenData({ minValueLength, cookiesOnly }) .map((entry) => ( {entry.getNames().join(",")} {entry.getSources().map((source) => icons[source])} {entry.getValues()[0]} ))} ); }; const StolenData = ({ origin, minValueLength, refreshToken, cookiesOnly, }: { origin: string; refreshToken: number; minValueLength: number; cookiesOnly: boolean; }) => { if (!origin) { return ; } const clusters = Object.values(memory.getClustersForOrigin(origin)).sort( RequestCluster.sortCompare ); return ( {" "} {origin} memory.removeCookiesFor( origin, getshorthost(new URL(origin).host) ) } > Wyczyść cookiesy 1st party memory.removeRequestsFor(origin)} > Wyczyść pamięć {clusters .filter((cluster) => !cookiesOnly || cluster.hasCookies()) .map((cluster) => { return ( ); })} ); }; const Options = ({ minValueLength, setMinValueLength, cookiesOnly, setCookiesOnly, }) => { return ( Zaawansowane ustawienia Pokazuj tylko wartości o długości co najmniej{" "} setMinValueLength(parseInt(e.target.value))} /> setCookiesOnly(e.target.checked)} /> Pokazuj tylko dane z cookiesów ); }; const Sidebar = () => { const [origin, setOrigin] = useState(null); const [minValueLength, setMinValueLength] = useState(7); const [cookiesOnly, setCookiesOnly] = useState(false); const counter = useEmitter(memory); useEffect(() => { const listener = async (data) => { console.log("tab change!"); const tab = await getCurrentTab(); const url = new URL(tab.url); console.log( "NEW ORIGIN", url.origin, url.origin.startsWith("moz-extension") ); if (url.origin.startsWith("moz-extension")) { return; } setOrigin(url.origin); }; browser.tabs.onUpdated.addListener(listener); return () => { browser.tabs.onUpdated.removeListener(listener); }; }); return ( <> {/* setPickedTab(await getCurrentTab())} > Wybierz aktywną kartę{" "} */} > ); }; ReactDOM.render(, document.getElementById("app"));