mirror of
https://github.com/movie-web/extension.git
synced 2025-09-13 16:33:25 +00:00
serialize body
This commit is contained in:
@@ -2,9 +2,20 @@ import type { PlasmoMessaging } from '@plasmohq/messaging';
|
||||
|
||||
import type { BaseRequest } from '~types/request';
|
||||
import type { BaseResponse } from '~types/response';
|
||||
import { setDynamicRules } from '~utils/declarativeNetRequest';
|
||||
import { makeFullUrl } from '~utils/fetcher';
|
||||
import { assertDomainWhitelist } from '~utils/storage';
|
||||
|
||||
type Body =
|
||||
| {
|
||||
bodyType: 'string';
|
||||
value: string;
|
||||
}
|
||||
| {
|
||||
bodyType: 'FormData' | 'URLSearchParams' | 'Object';
|
||||
value: Record<string, string>;
|
||||
};
|
||||
|
||||
export interface Request extends BaseRequest {
|
||||
baseUrl?: string;
|
||||
headers?: Record<string, string>;
|
||||
@@ -12,7 +23,7 @@ export interface Request extends BaseRequest {
|
||||
query?: Record<string, string>;
|
||||
readHeaders?: Record<string, string>;
|
||||
url: string;
|
||||
body?: string | FormData | URLSearchParams;
|
||||
body?: Body;
|
||||
}
|
||||
|
||||
type Response<T> = BaseResponse<{
|
||||
@@ -24,14 +35,52 @@ type Response<T> = BaseResponse<{
|
||||
};
|
||||
}>;
|
||||
|
||||
const mapBodyToFetchBody = (body: Request['body']): BodyInit => {
|
||||
if (body?.bodyType === 'FormData') {
|
||||
const formData = new FormData();
|
||||
Object.entries(body.value).forEach(([key, value]) => {
|
||||
formData.append(key, value);
|
||||
});
|
||||
return formData;
|
||||
}
|
||||
if (body?.bodyType === 'URLSearchParams') {
|
||||
const searchParams = new URLSearchParams();
|
||||
Object.entries(body.value).forEach(([key, value]) => {
|
||||
searchParams.set(key, value);
|
||||
});
|
||||
return searchParams;
|
||||
}
|
||||
if (body?.bodyType === 'Object') {
|
||||
return JSON.stringify(body.value);
|
||||
}
|
||||
if (body?.bodyType === 'string') {
|
||||
return body.value;
|
||||
}
|
||||
return undefined;
|
||||
};
|
||||
|
||||
const handler: PlasmoMessaging.MessageHandler<Request, Response<any>> = async (req, res) => {
|
||||
try {
|
||||
await assertDomainWhitelist(req.sender.tab.url);
|
||||
|
||||
console.log(req.body.headers['User-Agent']);
|
||||
if (req.body.headers['User-Agent']) {
|
||||
console.log('preparing stream');
|
||||
await setDynamicRules({
|
||||
ruleId: 23498,
|
||||
targetDomains: [req.body.url],
|
||||
requestHeaders: {
|
||||
'User-Agent': req.body.headers['User-Agent'],
|
||||
},
|
||||
});
|
||||
const rules = await chrome.declarativeNetRequest.getDynamicRules();
|
||||
console.log(rules);
|
||||
}
|
||||
|
||||
const response = await fetch(makeFullUrl(req.body.url, req.body), {
|
||||
method: req.body.method,
|
||||
headers: req.body.headers,
|
||||
body: req.body.body,
|
||||
body: mapBodyToFetchBody(req.body.body),
|
||||
});
|
||||
const contentType = response.headers.get('content-type');
|
||||
const body = contentType?.includes('application/json') ? await response.json() : await response.text();
|
||||
@@ -46,6 +95,8 @@ const handler: PlasmoMessaging.MessageHandler<Request, Response<any>> = async (r
|
||||
},
|
||||
});
|
||||
} catch (err) {
|
||||
console.log('error');
|
||||
console.log(err);
|
||||
res.send({
|
||||
success: false,
|
||||
error: err.message,
|
||||
|
Reference in New Issue
Block a user