diff --git a/src/background/messages/prepareStream.ts b/src/background/messages/prepareStream.ts index 73b070c..903cef5 100644 --- a/src/background/messages/prepareStream.ts +++ b/src/background/messages/prepareStream.ts @@ -2,6 +2,7 @@ import type { PlasmoMessaging } from '@plasmohq/messaging'; import type { BaseRequest } from '~types/request'; import type { BaseResponse } from '~types/response'; +import { isChrome } from '~utils/extension'; import { assertDomainWhitelist } from '~utils/storage'; interface Request extends BaseRequest { @@ -25,19 +26,21 @@ const mapHeadersToDeclarativeNetRequestHeaders = ( const handler: PlasmoMessaging.MessageHandler = async (req, res) => { try { await assertDomainWhitelist(req.sender.tab.url); - - if (chrome) { + console.log(req.body); + let rules: any; + if (isChrome()) { await chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [req.body.ruleId], addRules: [ { id: req.body.ruleId, condition: { - requestDomains: req.body.targetDomains, + // TODO: Fix this idk why it doesn't work from fetcher requests + // requestDomains: req.body.targetDomains, }, action: { type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS, - ...(req.body.requestHeaders + ...(req.body.requestHeaders && Object.keys(req.body.requestHeaders).length > 0 ? { requestHeaders: mapHeadersToDeclarativeNetRequestHeaders( req.body.requestHeaders, @@ -70,19 +73,20 @@ const handler: PlasmoMessaging.MessageHandler = async (re }, ], }); + rules = await chrome.declarativeNetRequest.getDynamicRules(); if (chrome.runtime.lastError?.message) throw new Error(chrome.runtime.lastError.message); } else { - browser.declarativeNetRequest.updateDynamicRules({ + await browser.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [req.body.ruleId], addRules: [ { id: req.body.ruleId, condition: { - requestDomains: req.body.targetDomains, + // requestDomains: req.body.targetDomains, }, action: { type: 'modifyHeaders', - ...(req.body.requestHeaders + ...(req.body.requestHeaders && Object.keys(req.body.requestHeaders).length > 0 ? { requestHeaders: mapHeadersToDeclarativeNetRequestHeaders(req.body.requestHeaders, 'set'), } @@ -109,11 +113,15 @@ const handler: PlasmoMessaging.MessageHandler = async (re }, ], }); + rules = await browser.declarativeNetRequest.getDynamicRules(); if (browser.runtime.lastError?.message) throw new Error(browser.runtime.lastError.message); } res.send({ success: true, + // @ts-expect-error TODO: remove this when debugging is done :D + body: req.body, + rules, }); } catch (err) { res.send({ diff --git a/src/utils/extension.ts b/src/utils/extension.ts new file mode 100644 index 0000000..3a338fc --- /dev/null +++ b/src/utils/extension.ts @@ -0,0 +1,3 @@ +export const isChrome = () => { + return chrome.runtime.getURL('').startsWith('chrome-extension://'); +}; diff --git a/src/utils/tabs.ts b/src/utils/tabs.ts index 0e95cb4..00b538f 100644 --- a/src/utils/tabs.ts +++ b/src/utils/tabs.ts @@ -1,3 +1,5 @@ +import { isChrome } from './extension'; + export function queryCurrentDomain(cb: (domain: string | null) => void) { const handle = (tabUrl: string | null) => { if (!tabUrl) cb(null); @@ -5,12 +7,12 @@ export function queryCurrentDomain(cb: (domain: string | null) => void) { }; const ops = { active: true, currentWindow: true } as const; - if (chrome) chrome.tabs.query(ops).then((tabs) => handle(tabs[0]?.url)); + if (isChrome()) chrome.tabs.query(ops).then((tabs) => handle(tabs[0]?.url)); else browser.tabs.query(ops).then((tabs) => handle(tabs[0]?.url)); } export function listenToTabChanges(cb: () => void) { - if (chrome) { + if (isChrome()) { chrome.tabs.onActivated.addListener(cb); chrome.tabs.onUpdated.addListener(cb); } else if (browser) { @@ -20,7 +22,7 @@ export function listenToTabChanges(cb: () => void) { } export function stopListenToTabChanges(cb: () => void) { - if (chrome) { + if (isChrome()) { chrome.tabs.onActivated.removeListener(cb); chrome.tabs.onUpdated.removeListener(cb); } else if (browser) {