mirror of
https://github.com/movie-web/extension.git
synced 2025-09-13 13:33:25 +00:00
basic messages (hello, makeRequest, prepareStream)
This commit is contained in:
24
src/background/messages/hello.ts
Normal file
24
src/background/messages/hello.ts
Normal file
@@ -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<BaseRequestBody> = 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;
|
40
src/background/messages/makeRequest.ts
Normal file
40
src/background/messages/makeRequest.ts
Normal file
@@ -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<string, string>;
|
||||||
|
body?: string | FormData | URLSearchParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
const handler: PlasmoMessaging.MessageHandler<RequestBody> = 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;
|
@@ -4,8 +4,8 @@ import { validateDomainWhiteList } from '~utils/storage';
|
|||||||
|
|
||||||
interface RequestBody {
|
interface RequestBody {
|
||||||
ruleId: number;
|
ruleId: number;
|
||||||
requestDomain: string;
|
hostDomain: string;
|
||||||
domain: string;
|
targetDomains: [string, ...string[]];
|
||||||
requestHeaders?: Record<string, string>;
|
requestHeaders?: Record<string, string>;
|
||||||
responseHeaders?: Record<string, string>;
|
responseHeaders?: Record<string, string>;
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@ const mapHeadersToDeclarativeNetRequestHeaders = (
|
|||||||
|
|
||||||
const handler: PlasmoMessaging.MessageHandler<RequestBody> = async (req, res) => {
|
const handler: PlasmoMessaging.MessageHandler<RequestBody> = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
await validateDomainWhiteList(req.body.requestDomain);
|
await validateDomainWhiteList(req.body.hostDomain);
|
||||||
|
|
||||||
await chrome.declarativeNetRequest.updateDynamicRules({
|
await chrome.declarativeNetRequest.updateDynamicRules({
|
||||||
removeRuleIds: [req.body.ruleId],
|
removeRuleIds: [req.body.ruleId],
|
||||||
@@ -30,7 +30,7 @@ const handler: PlasmoMessaging.MessageHandler<RequestBody> = async (req, res) =>
|
|||||||
{
|
{
|
||||||
id: req.body.ruleId,
|
id: req.body.ruleId,
|
||||||
condition: {
|
condition: {
|
||||||
requestDomains: [req.body.domain],
|
requestDomains: req.body.targetDomains,
|
||||||
},
|
},
|
||||||
action: {
|
action: {
|
||||||
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
||||||
@@ -64,7 +64,6 @@ const handler: PlasmoMessaging.MessageHandler<RequestBody> = async (req, res) =>
|
|||||||
|
|
||||||
res.send({
|
res.send({
|
||||||
success: true,
|
success: true,
|
||||||
body: req.body,
|
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
res.send({
|
res.send({
|
@@ -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;
|
|
@@ -6,9 +6,13 @@ export const config: PlasmoCSConfig = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
relayMessage({
|
relayMessage({
|
||||||
name: 'proxy-request',
|
name: 'hello',
|
||||||
});
|
});
|
||||||
|
|
||||||
relayMessage({
|
relayMessage({
|
||||||
name: 'declarative-net-request',
|
name: 'makeRequest',
|
||||||
|
});
|
||||||
|
|
||||||
|
relayMessage({
|
||||||
|
name: 'prepareStream',
|
||||||
});
|
});
|
||||||
|
3
src/types/request.ts
Normal file
3
src/types/request.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export interface BaseRequestBody {
|
||||||
|
requestDomain: string;
|
||||||
|
}
|
Reference in New Issue
Block a user