diff --git a/src/background/messages/hello.ts b/src/background/messages/hello.ts new file mode 100644 index 0000000..4489421 --- /dev/null +++ b/src/background/messages/hello.ts @@ -0,0 +1,24 @@ +import type { PlasmoMessaging } from '@plasmohq/messaging'; + +import type { BaseRequestBody } from '~types/request'; +import { validateDomainWhiteList } from '~utils/storage'; + +const handler: PlasmoMessaging.MessageHandler = async (req, res) => { + try { + await validateDomainWhiteList(req.body.requestDomain); + + const version = chrome.runtime.getManifest().version; + + res.send({ + success: true, + version, + }); + } catch (err) { + res.send({ + success: false, + error: err.message, + }); + } +}; + +export default handler; diff --git a/src/background/messages/makeRequest.ts b/src/background/messages/makeRequest.ts new file mode 100644 index 0000000..b9996aa --- /dev/null +++ b/src/background/messages/makeRequest.ts @@ -0,0 +1,40 @@ +import type { PlasmoMessaging } from '@plasmohq/messaging'; + +import type { BaseRequestBody } from '~types/request'; +import { validateDomainWhiteList } from '~utils/storage'; + +interface RequestBody extends BaseRequestBody { + url: string; + method: string; + headers?: Record; + body?: string | FormData | URLSearchParams; +} + +const handler: PlasmoMessaging.MessageHandler = async (req, res) => { + try { + await validateDomainWhiteList(req.body.requestDomain); + + const response = await fetch(req.body.url, { + method: req.body.method, + headers: req.body.headers, + body: req.body.body, + }); + const contentType = response.headers.get('content-type'); + const data = contentType?.includes('application/json') ? await response.json() : await response.text(); + + res.send({ + success: true, + status: response.status, + requestHeaders: req.body.headers, + responseHeaders: Object.fromEntries(response.headers.entries()), + data, + }); + } catch (err) { + res.send({ + success: false, + error: err.message, + }); + } +}; + +export default handler; diff --git a/src/background/messages/declarative-net-request.ts b/src/background/messages/prepareStream.ts similarity index 92% rename from src/background/messages/declarative-net-request.ts rename to src/background/messages/prepareStream.ts index 055bd0d..e3f2933 100644 --- a/src/background/messages/declarative-net-request.ts +++ b/src/background/messages/prepareStream.ts @@ -4,8 +4,8 @@ import { validateDomainWhiteList } from '~utils/storage'; interface RequestBody { ruleId: number; - requestDomain: string; - domain: string; + hostDomain: string; + targetDomains: [string, ...string[]]; requestHeaders?: Record; responseHeaders?: Record; } @@ -22,7 +22,7 @@ const mapHeadersToDeclarativeNetRequestHeaders = ( const handler: PlasmoMessaging.MessageHandler = async (req, res) => { try { - await validateDomainWhiteList(req.body.requestDomain); + await validateDomainWhiteList(req.body.hostDomain); await chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [req.body.ruleId], @@ -30,7 +30,7 @@ const handler: PlasmoMessaging.MessageHandler = async (req, res) => { id: req.body.ruleId, condition: { - requestDomains: [req.body.domain], + requestDomains: req.body.targetDomains, }, action: { type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS, @@ -64,7 +64,6 @@ const handler: PlasmoMessaging.MessageHandler = async (req, res) => res.send({ success: true, - body: req.body, }); } catch (err) { res.send({ diff --git a/src/background/messages/proxy-request.ts b/src/background/messages/proxy-request.ts deleted file mode 100644 index d08182c..0000000 --- a/src/background/messages/proxy-request.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { PlasmoMessaging } from '@plasmohq/messaging'; - -import { validateDomainWhiteList } from '~utils/storage'; - -const handler: PlasmoMessaging.MessageHandler = async (req, res) => { - try { - await validateDomainWhiteList(req.body.requestDomain); - - const response = await fetch(req.body.url, { - headers: req.body.headers, - }); - const body = await response.text(); - - res.send({ - status: response.status, - statusText: response.statusText, - requestHeaders: req.body.headers, - responseHeaders: Object.fromEntries(response.headers.entries()), - body, - }); - } catch (err) { - res.send({ - error: err.message, - }); - } -}; - -export default handler; diff --git a/src/contents/movie-web.ts b/src/contents/movie-web.ts index 70d7bab..051db48 100644 --- a/src/contents/movie-web.ts +++ b/src/contents/movie-web.ts @@ -6,9 +6,13 @@ export const config: PlasmoCSConfig = { }; relayMessage({ - name: 'proxy-request', + name: 'hello', }); relayMessage({ - name: 'declarative-net-request', + name: 'makeRequest', +}); + +relayMessage({ + name: 'prepareStream', }); diff --git a/src/types/request.ts b/src/types/request.ts new file mode 100644 index 0000000..c4f4e1c --- /dev/null +++ b/src/types/request.ts @@ -0,0 +1,3 @@ +export interface BaseRequestBody { + requestDomain: string; +}