mirror of
https://github.com/movie-web/extension.git
synced 2025-09-13 12:13:24 +00:00
First attempt at declaring rules from main site (not working)
This commit is contained in:
@@ -34,5 +34,10 @@
|
||||
"eslint-import-resolver-typescript": "^3.6.1",
|
||||
"eslint-plugin-import": "^2.29.1",
|
||||
"eslint-plugin-prettier": "^5.1.1"
|
||||
},
|
||||
"manifest": {
|
||||
"permissions": [
|
||||
"declarativeNetRequest"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
71
src/background/messages/declarative-net-request.ts
Normal file
71
src/background/messages/declarative-net-request.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import type { PlasmoMessaging } from '@plasmohq/messaging';
|
||||
|
||||
interface RequestBody {
|
||||
ruleId: number;
|
||||
domain: string;
|
||||
requestHeaders?: Record<string, string>;
|
||||
responseHeaders?: Record<string, string>;
|
||||
}
|
||||
|
||||
const mapHeadersToDeclarativeNetRequestHeaders = (
|
||||
headers: Record<string, string>,
|
||||
): chrome.declarativeNetRequest.ModifyHeaderInfo[] => {
|
||||
return Object.entries(headers).map(([name, value]) => ({
|
||||
header: name,
|
||||
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
||||
value,
|
||||
}));
|
||||
};
|
||||
|
||||
const handler: PlasmoMessaging.MessageHandler<RequestBody> = async (req, res) => {
|
||||
console.log('declarative-net-request: ', req.body);
|
||||
try {
|
||||
await chrome.declarativeNetRequest.updateDynamicRules({
|
||||
removeRuleIds: [req.body.ruleId],
|
||||
addRules: [
|
||||
{
|
||||
id: req.body.ruleId,
|
||||
condition: {
|
||||
initiatorDomains: [req.body.domain],
|
||||
},
|
||||
action: {
|
||||
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
||||
requestHeaders: mapHeadersToDeclarativeNetRequestHeaders(req.body.requestHeaders ?? {}),
|
||||
responseHeaders: [
|
||||
{
|
||||
header: 'Access-Control-Allow-Origin',
|
||||
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
||||
value: '*',
|
||||
},
|
||||
{
|
||||
header: 'Access-Control-Allow-Methods',
|
||||
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
||||
value: 'GET, POST, PUT, DELETE, PATCH, OPTIONS',
|
||||
},
|
||||
{
|
||||
header: 'Access-Control-Allow-Headers',
|
||||
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
||||
value: '*',
|
||||
},
|
||||
...mapHeadersToDeclarativeNetRequestHeaders(req.body.responseHeaders ?? {}),
|
||||
],
|
||||
},
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
if (chrome.runtime.lastError?.message) throw new Error(chrome.runtime.lastError.message);
|
||||
|
||||
res.send({
|
||||
success: true,
|
||||
body: req.body,
|
||||
});
|
||||
} catch (err) {
|
||||
res.send({
|
||||
success: false,
|
||||
error: err.message,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default handler;
|
@@ -7,5 +7,9 @@ export const config: PlasmoCSConfig = {
|
||||
};
|
||||
|
||||
relayMessage({
|
||||
name: 'proxy',
|
||||
name: 'proxy-request',
|
||||
});
|
||||
|
||||
relayMessage({
|
||||
name: 'declarative-net-request',
|
||||
});
|
||||
|
Reference in New Issue
Block a user