First attempt at declaring rules from main site (not working)

This commit is contained in:
Jorrin
2024-01-07 20:38:05 +01:00
parent 9dc8681ad2
commit 9283dd7498
4 changed files with 81 additions and 1 deletions

View File

@@ -34,5 +34,10 @@
"eslint-import-resolver-typescript": "^3.6.1", "eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.29.1", "eslint-plugin-import": "^2.29.1",
"eslint-plugin-prettier": "^5.1.1" "eslint-plugin-prettier": "^5.1.1"
},
"manifest": {
"permissions": [
"declarativeNetRequest"
]
} }
} }

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

View File

@@ -7,5 +7,9 @@ export const config: PlasmoCSConfig = {
}; };
relayMessage({ relayMessage({
name: 'proxy', name: 'proxy-request',
});
relayMessage({
name: 'declarative-net-request',
}); });