basic messages (hello, makeRequest, prepareStream)

This commit is contained in:
Jorrin
2024-01-09 22:33:27 +01:00
parent fb6a0dd0dc
commit dce0799213
6 changed files with 77 additions and 35 deletions

View 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;

View 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;

View File

@@ -4,8 +4,8 @@ import { validateDomainWhiteList } from '~utils/storage';
interface RequestBody {
ruleId: number;
requestDomain: string;
domain: string;
hostDomain: string;
targetDomains: [string, ...string[]];
requestHeaders?: Record<string, string>;
responseHeaders?: Record<string, string>;
}
@@ -22,7 +22,7 @@ const mapHeadersToDeclarativeNetRequestHeaders = (
const handler: PlasmoMessaging.MessageHandler<RequestBody> = 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<RequestBody> = 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<RequestBody> = async (req, res) =>
res.send({
success: true,
body: req.body,
});
} catch (err) {
res.send({

View File

@@ -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;

View File

@@ -6,9 +6,13 @@ export const config: PlasmoCSConfig = {
};
relayMessage({
name: 'proxy-request',
name: 'hello',
});
relayMessage({
name: 'declarative-net-request',
name: 'makeRequest',
});
relayMessage({
name: 'prepareStream',
});

3
src/types/request.ts Normal file
View File

@@ -0,0 +1,3 @@
export interface BaseRequestBody {
requestDomain: string;
}