const patterns = ["https://www.msn.com/*/news/*", "https://www.msn.com/*/tv/*","https://www.msn.com/*/movies/*" , "https://www.msn.com/*/sports/*", "https://www.msn.com/*/health/*", "https://www.msn.com/*/channel/*", "https://www.msn.com/*/travel/*", "https://www.msn.com/*/health/*", "https://www.msn.com/*/lifestyle/*"]; var found = 0; var redirectUrl = ""; //Finds original article URL from DuckDuckGo dork. async function findOrigUrl(title, site) { var siteUrl = await ddGet("https://duckduckgo.com/html/?q=" + site); console.log("Site Url: " + siteUrl); var articleUrl = await ddGet("https://duckduckgo.com/html/?q=title:" + title + " site:" + siteUrl); return articleUrl; } async function ddGet(url){ var results = await fetch(url) .then(res => res.text()); var resultParse = results.split(""); var findUrl = resultParse[1].split('href="//duckduckgo.com/l/?uddg='); var extractUrl = findUrl[1].split('>'); var trimUrl = extractUrl[0].split("&"); var url = decodeURIComponent(trimUrl[0]); return url; } //Redirects the URL async function redirect(requestDetails){ if(requestDetails.method === "POST" && requestDetails.requestBody && found != 1){ var rawData = requestDetails.requestBody.raw[0].bytes; const decoder = new TextDecoder("utf-8"); var dataString = decoder.decode(rawData); var data = JSON.parse(dataString); var targetURL = ""; if(data.data.page.content.brand){ var brand = data.data.page.content.brand; var title = data.data.page.content.title; console.log(brand); targetUrl = await findOrigUrl(title, brand); console.log(targetUrl); redirectUrl = targetUrl; found = 1; } } } //Listener for any URL in the patterns list. browser.webRequest.onBeforeRequest.addListener( redirect, { urls: [ "https://browser.events.data.msn.com/*" ], }, ["blocking", "requestBody"] ); browser.webRequest.onBeforeRequest.addListener( function (requestDetails){ found = 0; }, { urls: patterns }, ["blocking"] ); browser.browserAction.onClicked.addListener( function (){ if(redirectUrl != ""){ let creating = browser.tabs.create({ url: redirectUrl, }); redirectUrl = ""; creating.then(onCreated, onError); } });