momentic 0.0.23 → 0.0.25

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.
@@ -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
+ }