mr feedback

This commit is contained in:
Jorrin
2024-01-25 19:25:44 +01:00
parent a2647a58d6
commit 65ff4ab91a
2 changed files with 25 additions and 24 deletions

View File

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

View File

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