mirror of
https://github.com/movie-web/extension.git
synced 2025-09-13 11:13:24 +00:00
mr feedback
This commit is contained in:
@@ -2,19 +2,11 @@ import type { PlasmoMessaging } from '@plasmohq/messaging';
|
|||||||
|
|
||||||
import type { BaseRequest } from '~types/request';
|
import type { BaseRequest } from '~types/request';
|
||||||
import type { BaseResponse } from '~types/response';
|
import type { BaseResponse } from '~types/response';
|
||||||
import { setDynamicRules } from '~utils/declarativeNetRequest';
|
import { removeDynamicRules, setDynamicRules } from '~utils/declarativeNetRequest';
|
||||||
import { makeFullUrl } from '~utils/fetcher';
|
import { makeFullUrl } from '~utils/fetcher';
|
||||||
import { assertDomainWhitelist } from '~utils/storage';
|
import { assertDomainWhitelist } from '~utils/storage';
|
||||||
|
|
||||||
type Body =
|
const MAKE_REQUEST_DYNAMIC_RULE = 23498;
|
||||||
| {
|
|
||||||
bodyType: 'string';
|
|
||||||
value: string;
|
|
||||||
}
|
|
||||||
| {
|
|
||||||
bodyType: 'FormData' | 'URLSearchParams' | 'object';
|
|
||||||
value: Record<string, string>;
|
|
||||||
};
|
|
||||||
|
|
||||||
export interface Request extends BaseRequest {
|
export interface Request extends BaseRequest {
|
||||||
baseUrl?: string;
|
baseUrl?: string;
|
||||||
@@ -23,7 +15,8 @@ export interface Request extends BaseRequest {
|
|||||||
query?: Record<string, string>;
|
query?: Record<string, string>;
|
||||||
readHeaders?: Record<string, string>;
|
readHeaders?: Record<string, string>;
|
||||||
url: string;
|
url: string;
|
||||||
body?: Body;
|
body?: any;
|
||||||
|
bodyType: 'string' | 'FormData' | 'URLSearchParams' | 'object';
|
||||||
}
|
}
|
||||||
|
|
||||||
type Response<T> = BaseResponse<{
|
type Response<T> = BaseResponse<{
|
||||||
@@ -35,26 +28,26 @@ type Response<T> = BaseResponse<{
|
|||||||
};
|
};
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
const mapBodyToFetchBody = (body: Request['body']): BodyInit => {
|
const mapBodyToFetchBody = (body: Request['body'], bodyType: Request['bodyType']): BodyInit => {
|
||||||
if (body?.bodyType === 'FormData') {
|
if (bodyType === 'FormData') {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
Object.entries(body.value).forEach(([key, value]) => {
|
Object.entries(body).forEach(([key, value]) => {
|
||||||
formData.append(key, value);
|
formData.append(key, value.toString());
|
||||||
});
|
});
|
||||||
return formData;
|
return formData;
|
||||||
}
|
}
|
||||||
if (body?.bodyType === 'URLSearchParams') {
|
if (bodyType === 'URLSearchParams') {
|
||||||
const searchParams = new URLSearchParams();
|
const searchParams = new URLSearchParams();
|
||||||
Object.entries(body.value).forEach(([key, value]) => {
|
Object.entries(body).forEach(([key, value]) => {
|
||||||
searchParams.set(key, value);
|
searchParams.set(key, value.toString());
|
||||||
});
|
});
|
||||||
return searchParams;
|
return searchParams;
|
||||||
}
|
}
|
||||||
if (body?.bodyType === 'object') {
|
if (bodyType === 'object') {
|
||||||
return JSON.stringify(body.value);
|
return JSON.stringify(body);
|
||||||
}
|
}
|
||||||
if (body?.bodyType === 'string') {
|
if (bodyType === 'string') {
|
||||||
return body.value;
|
return body;
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
};
|
};
|
||||||
@@ -65,7 +58,7 @@ const handler: PlasmoMessaging.MessageHandler<Request, Response<any>> = async (r
|
|||||||
|
|
||||||
if (req.body.headers['User-Agent']) {
|
if (req.body.headers['User-Agent']) {
|
||||||
await setDynamicRules({
|
await setDynamicRules({
|
||||||
ruleId: 23498,
|
ruleId: MAKE_REQUEST_DYNAMIC_RULE,
|
||||||
targetDomains: [new URL(req.body.url).hostname],
|
targetDomains: [new URL(req.body.url).hostname],
|
||||||
requestHeaders: {
|
requestHeaders: {
|
||||||
'User-Agent': req.body.headers['User-Agent'],
|
'User-Agent': req.body.headers['User-Agent'],
|
||||||
@@ -76,8 +69,9 @@ const handler: PlasmoMessaging.MessageHandler<Request, Response<any>> = async (r
|
|||||||
const response = await fetch(makeFullUrl(req.body.url, req.body), {
|
const response = await fetch(makeFullUrl(req.body.url, req.body), {
|
||||||
method: req.body.method,
|
method: req.body.method,
|
||||||
headers: req.body.headers,
|
headers: req.body.headers,
|
||||||
body: mapBodyToFetchBody(req.body.body),
|
body: mapBodyToFetchBody(req.body.body, req.body.bodyType),
|
||||||
});
|
});
|
||||||
|
await removeDynamicRules([MAKE_REQUEST_DYNAMIC_RULE]);
|
||||||
const contentType = response.headers.get('content-type');
|
const contentType = response.headers.get('content-type');
|
||||||
const body = contentType?.includes('application/json') ? await response.json() : await response.text();
|
const body = contentType?.includes('application/json') ? await response.json() : await response.text();
|
||||||
|
|
||||||
|
@@ -108,3 +108,10 @@ export const setDynamicRules = async (body: DynamicRule) => {
|
|||||||
if (browser.runtime.lastError?.message) throw new Error(browser.runtime.lastError.message);
|
if (browser.runtime.lastError?.message) throw new Error(browser.runtime.lastError.message);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const removeDynamicRules = async (ruleIds: number[]) => {
|
||||||
|
await (chrome || browser).declarativeNetRequest.updateDynamicRules({
|
||||||
|
removeRuleIds: ruleIds,
|
||||||
|
});
|
||||||
|
if ((chrome || browser).runtime.lastError?.message) throw new Error((chrome || browser).runtime.lastError.message);
|
||||||
|
};
|
||||||
|
Reference in New Issue
Block a user