momentic 0.0.24 → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/extension/background.js +104 -0
- package/assets/extension/manifest.json +18 -0
- package/bin/cli.js +19 -19
- package/dist/index.js +16 -16
- package/package.json +4 -2
- package/static/assets/{index-WgifKSm3.js → index-AlOIPh0d.js} +78 -78
- package/static/assets/{index-DIeAPgo_.css → index-UT1zE9ry.css} +1 -1
- package/static/index.html +2 -2
- package/extension/background.js +0 -27
- package/extension/manifest.json +0 -19
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
async function updateRules() {
|
|
2
|
+
// First, remove any existing rules
|
|
3
|
+
await chrome.declarativeNetRequest.updateDynamicRules({ removeRuleIds: [1] });
|
|
4
|
+
|
|
5
|
+
const headersToFilter = [
|
|
6
|
+
"x-frame-options",
|
|
7
|
+
"content-security-policy",
|
|
8
|
+
"content-security-policy-report-only",
|
|
9
|
+
];
|
|
10
|
+
|
|
11
|
+
// Define a new rule to remove specific headers
|
|
12
|
+
const rule = {
|
|
13
|
+
id: 1,
|
|
14
|
+
priority: 1,
|
|
15
|
+
action: {
|
|
16
|
+
type: "modifyHeaders",
|
|
17
|
+
responseHeaders: headersToFilter.map((header) => ({
|
|
18
|
+
operation: chrome.declarativeNetRequest.HeaderOperation.REMOVE,
|
|
19
|
+
header,
|
|
20
|
+
})),
|
|
21
|
+
},
|
|
22
|
+
condition: {
|
|
23
|
+
urlFilter: "|*|",
|
|
24
|
+
resourceTypes: ["sub_frame"],
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// Add the new rule
|
|
29
|
+
await chrome.declarativeNetRequest.updateDynamicRules({ addRules: [rule] });
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Call updateRules to initialize the rule setup
|
|
33
|
+
updateRules();
|
|
34
|
+
|
|
35
|
+
function parseSetCookieString(setCookieString, requestDomain) {
|
|
36
|
+
let cookieParts = setCookieString.split(";").map((part) => part.trim());
|
|
37
|
+
let [name, value] = cookieParts[0].split("=");
|
|
38
|
+
let cookieAttributes = {
|
|
39
|
+
name: name,
|
|
40
|
+
value: value,
|
|
41
|
+
domain: requestDomain,
|
|
42
|
+
path: "/",
|
|
43
|
+
httpOnly: false,
|
|
44
|
+
secure: false,
|
|
45
|
+
sameSite: "lax",
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// Parse each attribute
|
|
49
|
+
cookieParts.slice(1).forEach((part) => {
|
|
50
|
+
let [key, val] = part.split("=");
|
|
51
|
+
switch (key.toLowerCase()) {
|
|
52
|
+
case "domain":
|
|
53
|
+
cookieAttributes.domain = val;
|
|
54
|
+
break;
|
|
55
|
+
case "path":
|
|
56
|
+
cookieAttributes.path = val;
|
|
57
|
+
break;
|
|
58
|
+
case "expires":
|
|
59
|
+
let expiresTime = new Date(val).getTime() / 1000;
|
|
60
|
+
cookieAttributes.expirationDate = expiresTime;
|
|
61
|
+
break;
|
|
62
|
+
case "max-age":
|
|
63
|
+
let maxAge = parseInt(val, 10);
|
|
64
|
+
cookieAttributes.expirationDate = new Date().getTime() / 1000 + maxAge;
|
|
65
|
+
break;
|
|
66
|
+
case "secure":
|
|
67
|
+
cookieAttributes.secure = true;
|
|
68
|
+
break;
|
|
69
|
+
case "httponly":
|
|
70
|
+
cookieAttributes.httpOnly = true;
|
|
71
|
+
break;
|
|
72
|
+
case "samesite":
|
|
73
|
+
cookieAttributes.sameSite = val.replace("-", "_").toLowerCase();
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return cookieAttributes;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
chrome.webRequest.onHeadersReceived.addListener(
|
|
82
|
+
function (details) {
|
|
83
|
+
const url = new URL(details.initiator);
|
|
84
|
+
const cookies = details.responseHeaders.filter((header) => {
|
|
85
|
+
return header.name.toLowerCase() === "set-cookie";
|
|
86
|
+
});
|
|
87
|
+
cookies.forEach(({ value }) => {
|
|
88
|
+
console.log(`Overriding cookie on '${details.initiator}'`, value);
|
|
89
|
+
const attributes = parseSetCookieString(value, url.host);
|
|
90
|
+
if (attributes.secure && attributes.sameSite === "none") {
|
|
91
|
+
// already okay
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
chrome.cookies.set({
|
|
95
|
+
...attributes,
|
|
96
|
+
url: details.initiator,
|
|
97
|
+
secure: true,
|
|
98
|
+
sameSite: "no_restriction",
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
},
|
|
102
|
+
{ urls: ["<all_urls>"] },
|
|
103
|
+
["responseHeaders", "extraHeaders"],
|
|
104
|
+
);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": 3,
|
|
3
|
+
"name": "Header Filter Extension",
|
|
4
|
+
"version": "1.0",
|
|
5
|
+
"permissions": [
|
|
6
|
+
"cookies",
|
|
7
|
+
"activeTab",
|
|
8
|
+
"scripting",
|
|
9
|
+
"webNavigation",
|
|
10
|
+
"webRequest",
|
|
11
|
+
"declarativeNetRequest",
|
|
12
|
+
"declarativeNetRequestWithHostAccess"
|
|
13
|
+
],
|
|
14
|
+
"host_permissions": ["*://*/*"],
|
|
15
|
+
"background": {
|
|
16
|
+
"service_worker": "background.js"
|
|
17
|
+
}
|
|
18
|
+
}
|