@filteringdev/tinyshield 3.4.3 → 3.5.1
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/dist/as-weakmap.js +28 -0
- package/dist/index.js +104 -0
- package/dist/interface.js +1 -122
- package/dist/tinyShield.user.js +73 -29
- package/dist/utils.js +14 -0
- package/package.json +4 -5
- package/dist/interface.js.map +0 -7
- /package/dist/{types/as-weakmap.d.ts → as-weakmap.d.ts} +0 -0
- /package/dist/{types/index.d.ts → index.d.ts} +0 -0
- /package/dist/{types/interface.d.ts → interface.d.ts} +0 -0
- /package/dist/{types/utils.d.ts → utils.d.ts} +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license MPL-2.0
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*
|
|
7
|
+
* Contributors:
|
|
8
|
+
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
9
|
+
*/
|
|
10
|
+
import * as Utils from './utils.js';
|
|
11
|
+
import { OriginalRegExpTest } from './index.js';
|
|
12
|
+
export function CheckDepthInASWeakMap(Args) {
|
|
13
|
+
if (typeof Args[0] !== 'object') {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (Utils.CountCommonStrings(['device', 'id', 'imp', 'regs', 'site', 'source'], Object.keys(Args[0])) < 5) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
let ASBannerFrameIdRegExp = /^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;
|
|
20
|
+
let ASBannerFrameKey = Object.keys(Args[0]).find(Arg => typeof Args[0][Arg] === 'object' && Array.isArray(Args[0][Arg]) &&
|
|
21
|
+
Args[0][Arg].filter(SubArg => typeof SubArg === 'object' && Object.keys(SubArg).filter(InnerArg => {
|
|
22
|
+
return typeof InnerArg === 'string' && OriginalRegExpTest.call(ASBannerFrameIdRegExp, InnerArg);
|
|
23
|
+
})).length >= 1);
|
|
24
|
+
if (typeof ASBannerFrameKey === 'undefined') {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license MPL-2.0
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*
|
|
7
|
+
* Contributors:
|
|
8
|
+
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
9
|
+
*/
|
|
10
|
+
const Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;
|
|
11
|
+
import { CheckDepthInASWeakMap } from './as-weakmap.js';
|
|
12
|
+
export const OriginalRegExpTest = Win.RegExp.prototype.test;
|
|
13
|
+
export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShield') {
|
|
14
|
+
const OriginalArrayToString = BrowserWindow.Array.prototype.toString;
|
|
15
|
+
const OriginalRegExpTest = BrowserWindow.RegExp.prototype.test;
|
|
16
|
+
const ProtectedFunctionStrings = ['toString', 'get', 'set'];
|
|
17
|
+
BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
19
|
+
apply(Target, ThisArg, Args) {
|
|
20
|
+
if (ProtectedFunctionStrings.includes(ThisArg.name)) {
|
|
21
|
+
return `function ${ThisArg.name}() { [native code] }`;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const ASInitPositiveRegExps = [[
|
|
29
|
+
/[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,
|
|
30
|
+
/===? *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+\( *[0-9a-z]+ *\) *\] *\) *return *[a-zA-Z0-9]+ *\( *{ *('|")?inventoryId('|")? *:/,
|
|
31
|
+
/{ *('|")?inventoryId('|")? *: *this *\[[a-zA-Z0-9]+ *\( *[0-9a-z]+ *\) *\] *, *\.\.\. *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+ *\( *[0-9a-z]+ * *\) *\] *} *\)/
|
|
32
|
+
]];
|
|
33
|
+
BrowserWindow.Map.prototype.get = new Proxy(BrowserWindow.Map.prototype.get, {
|
|
34
|
+
apply(Target, ThisArg, Args) {
|
|
35
|
+
if (Args.length > 0 && typeof Args[0] !== 'function') {
|
|
36
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
37
|
+
}
|
|
38
|
+
let ArgText = OriginalArrayToString.call(Args);
|
|
39
|
+
if (ASInitPositiveRegExps.filter(ASInitPositiveRegExp => ASInitPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 2).length === 1) {
|
|
40
|
+
console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args);
|
|
41
|
+
throw new Error();
|
|
42
|
+
}
|
|
43
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
const ASReinsertedAdvInvenPositiveRegExps = [[
|
|
47
|
+
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
48
|
+
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
49
|
+
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/
|
|
50
|
+
], [
|
|
51
|
+
/[a-z0-9A-Z]+\.setAttribute\( *('|")onload('|") *, *('|")! *async *function\( *\) *\{ *let */,
|
|
52
|
+
/confirm\( *[A-Za-z0-9]+ *\) *\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\.URL\(('|")https:\/\/report\.error-report\.com\//,
|
|
53
|
+
/\.forEach *\( *\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\.remove *\( *\) *\) *\) *\) *, *[0-9a-f]+ *\) *; *const *[A-Za-z0-9]+ *= *await *\( *await *fetch *\(/
|
|
54
|
+
]];
|
|
55
|
+
BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {
|
|
56
|
+
apply(Target, ThisArg, Args) {
|
|
57
|
+
let ArgText = '';
|
|
58
|
+
try {
|
|
59
|
+
ArgText = OriginalArrayToString.call(Args);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
console.warn(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
63
|
+
}
|
|
64
|
+
if (ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 3).length === 1) {
|
|
65
|
+
console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
66
|
+
throw new Error();
|
|
67
|
+
}
|
|
68
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
BrowserWindow.WeakMap.prototype.set = new Proxy(BrowserWindow.WeakMap.prototype.set, {
|
|
72
|
+
apply(Target, ThisArg, Args) {
|
|
73
|
+
if (CheckDepthInASWeakMap(Args)) {
|
|
74
|
+
console.debug(`[${UserscriptName}]: WeakMap.prototype.set:`, ThisArg, Args);
|
|
75
|
+
throw new Error();
|
|
76
|
+
}
|
|
77
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
let ASTimerRegExps = [[
|
|
81
|
+
/async *\( *\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\( *\)/,
|
|
82
|
+
/; *await *[A-Za-z0-9]+ *\( *\) *, *[A-Za-z0-9]+ *\( *! *1 *, *new *Error *\( *[A-Za-z0-9]+ *\( *[0-9a-f]+ *\) *\) *\) *}/,
|
|
83
|
+
/ *\) *\) *\) *}/
|
|
84
|
+
]];
|
|
85
|
+
BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {
|
|
86
|
+
apply(Target, ThisArg, Args) {
|
|
87
|
+
if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
88
|
+
console.debug(`[${UserscriptName}]: setTimeout:`, Args);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
BrowserWindow.setInterval = new Proxy(BrowserWindow.setInterval, {
|
|
95
|
+
apply(Target, ThisArg, Args) {
|
|
96
|
+
if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
97
|
+
console.debug(`[${UserscriptName}]: setInterval:`, Args);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
return Reflect.apply(Target, ThisArg, Args);
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
RunTinyShieldUserscript(Win);
|
package/dist/interface.js
CHANGED
|
@@ -1,124 +1,3 @@
|
|
|
1
|
-
// userscript/source/utils.ts
|
|
2
|
-
function CountCommonStrings(ArrayA, ArrayB) {
|
|
3
|
-
let SetB = new Set(ArrayB);
|
|
4
|
-
const Common = new Set(ArrayA.filter((Item) => SetB.has(Item)));
|
|
5
|
-
return Common.size;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
// userscript/source/as-weakmap.ts
|
|
9
|
-
function CheckDepthInASWeakMap(Args) {
|
|
10
|
-
if (typeof Args[0] !== "object") {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
if (CountCommonStrings(["device", "id", "imp", "regs", "site", "source"], Object.keys(Args[0])) < 5) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
let ASBannerFrameIdRegExp = /^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;
|
|
17
|
-
let ASBannerFrameKey = Object.keys(Args[0]).find((Arg) => typeof Args[0][Arg] === "object" && Array.isArray(Args[0][Arg]) && Args[0][Arg].filter((SubArg) => typeof SubArg === "object" && Object.keys(SubArg).filter((InnerArg) => {
|
|
18
|
-
return typeof InnerArg === "string" && OriginalRegExpTest.call(ASBannerFrameIdRegExp, InnerArg);
|
|
19
|
-
})).length >= 1);
|
|
20
|
-
if (typeof ASBannerFrameKey === "undefined") {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// userscript/source/index.ts
|
|
27
|
-
var Win = typeof unsafeWindow !== "undefined" ? unsafeWindow : window;
|
|
28
|
-
var OriginalRegExpTest = Win.RegExp.prototype.test;
|
|
29
|
-
function RunTinyShieldUserscript(BrowserWindow, UserscriptName = "tinyShield") {
|
|
30
|
-
const OriginalArrayToString = BrowserWindow.Array.prototype.toString;
|
|
31
|
-
const OriginalRegExpTest2 = BrowserWindow.RegExp.prototype.test;
|
|
32
|
-
const ProtectedFunctionStrings = ["toString", "get", "set"];
|
|
33
|
-
BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
35
|
-
apply(Target, ThisArg, Args) {
|
|
36
|
-
if (ProtectedFunctionStrings.includes(ThisArg.name)) {
|
|
37
|
-
return `function ${ThisArg.name}() { [native code] }`;
|
|
38
|
-
} else {
|
|
39
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
const ASInitPositiveRegExps = [[
|
|
44
|
-
/[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,
|
|
45
|
-
/===? *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+\( *[0-9a-z]+ *\) *\] *\) *return *[a-zA-Z0-9]+ *\( *{ *('|")?inventoryId('|")? *:/,
|
|
46
|
-
/{ *('|")?inventoryId('|")? *: *this *\[[a-zA-Z0-9]+ *\( *[0-9a-z]+ *\) *\] *, *\.\.\. *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+ *\( *[0-9a-z]+ * *\) *\] *} *\)/
|
|
47
|
-
]];
|
|
48
|
-
BrowserWindow.Map.prototype.get = new Proxy(BrowserWindow.Map.prototype.get, {
|
|
49
|
-
apply(Target, ThisArg, Args) {
|
|
50
|
-
if (Args.length > 0 && typeof Args[0] !== "function") {
|
|
51
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
52
|
-
}
|
|
53
|
-
let ArgText = OriginalArrayToString.call(Args);
|
|
54
|
-
if (ASInitPositiveRegExps.filter((ASInitPositiveRegExp) => ASInitPositiveRegExp.filter((Index) => OriginalRegExpTest2.call(Index, ArgText)).length >= 2).length === 1) {
|
|
55
|
-
console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args);
|
|
56
|
-
throw new Error();
|
|
57
|
-
}
|
|
58
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
const ASReinsertedAdvInvenPositiveRegExps = [[
|
|
62
|
-
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
63
|
-
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,
|
|
64
|
-
/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/
|
|
65
|
-
], [
|
|
66
|
-
/[a-z0-9A-Z]+\.setAttribute\( *('|")onload('|") *, *('|")! *async *function\( *\) *\{ *let */,
|
|
67
|
-
/confirm\( *[A-Za-z0-9]+ *\) *\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\.URL\(('|")https:\/\/report\.error-report\.com\//,
|
|
68
|
-
/\.forEach *\( *\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\.remove *\( *\) *\) *\) *\) *, *[0-9a-f]+ *\) *; *const *[A-Za-z0-9]+ *= *await *\( *await *fetch *\(/
|
|
69
|
-
]];
|
|
70
|
-
BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {
|
|
71
|
-
apply(Target, ThisArg, Args) {
|
|
72
|
-
let ArgText = "";
|
|
73
|
-
try {
|
|
74
|
-
ArgText = OriginalArrayToString.call(Args);
|
|
75
|
-
} catch {
|
|
76
|
-
console.warn(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
77
|
-
}
|
|
78
|
-
if (ASReinsertedAdvInvenPositiveRegExps.filter((ASReinsertedAdvInvenPositiveRegExp) => ASReinsertedAdvInvenPositiveRegExp.filter((Index) => OriginalRegExpTest2.call(Index, ArgText)).length >= 3).length === 1) {
|
|
79
|
-
console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
|
|
80
|
-
throw new Error();
|
|
81
|
-
}
|
|
82
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
BrowserWindow.WeakMap.prototype.set = new Proxy(BrowserWindow.WeakMap.prototype.set, {
|
|
86
|
-
apply(Target, ThisArg, Args) {
|
|
87
|
-
if (CheckDepthInASWeakMap(Args)) {
|
|
88
|
-
console.debug(`[${UserscriptName}]: WeakMap.prototype.set:`, ThisArg, Args);
|
|
89
|
-
throw new Error();
|
|
90
|
-
}
|
|
91
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
let ASTimerRegExps = [[
|
|
95
|
-
/async *\( *\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\( *\)/,
|
|
96
|
-
/; *await *[A-Za-z0-9]+ *\( *\) *, *[A-Za-z0-9]+ *\( *! *1 *, *new *Error *\( *[A-Za-z0-9]+ *\( *[0-9a-f]+ *\) *\) *\) *}/,
|
|
97
|
-
/ *\) *\) *\) *}/
|
|
98
|
-
]];
|
|
99
|
-
BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {
|
|
100
|
-
apply(Target, ThisArg, Args) {
|
|
101
|
-
if (ASTimerRegExps.filter((ASTimerRegExp) => ASTimerRegExp.filter((Index) => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
102
|
-
console.debug(`[${UserscriptName}]: setTimeout:`, Args);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
BrowserWindow.setInterval = new Proxy(BrowserWindow.setInterval, {
|
|
109
|
-
apply(Target, ThisArg, Args) {
|
|
110
|
-
if (ASTimerRegExps.filter((ASTimerRegExp) => ASTimerRegExp.filter((Index) => Index.test(Args[0].toString())).length >= 3).length === 1) {
|
|
111
|
-
console.debug(`[${UserscriptName}]: setInterval:`, Args);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
return Reflect.apply(Target, ThisArg, Args);
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
RunTinyShieldUserscript(Win);
|
|
119
|
-
export {
|
|
120
|
-
RunTinyShieldUserscript
|
|
121
|
-
};
|
|
122
1
|
/*!
|
|
123
2
|
* @license MPL-2.0
|
|
124
3
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
@@ -128,4 +7,4 @@ export {
|
|
|
128
7
|
* Contributors:
|
|
129
8
|
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
130
9
|
*/
|
|
131
|
-
|
|
10
|
+
export { RunTinyShieldUserscript } from './index.js';
|
package/dist/tinyShield.user.js
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// @downloadURL https://cdn.jsdelivr.net/npm/@filteringdev/tinyshield@latest/dist/tinyShield.user.js
|
|
9
9
|
// @license MPL-2.0
|
|
10
10
|
//
|
|
11
|
-
// @version 3.
|
|
11
|
+
// @version 3.5.1
|
|
12
12
|
// @author PiQuark6046 and contributors
|
|
13
13
|
//
|
|
14
14
|
// @grant unsafeWindow
|
|
@@ -3350,6 +3350,8 @@
|
|
|
3350
3350
|
// @match *://*.easyfamilyrecipes.com/*
|
|
3351
3351
|
// @match *://thenerdstash.com/*
|
|
3352
3352
|
// @match *://*.thenerdstash.com/*
|
|
3353
|
+
// @match *://aspicyperspective.com/*
|
|
3354
|
+
// @match *://*.aspicyperspective.com/*
|
|
3353
3355
|
// @match *://fictionhorizon.com/*
|
|
3354
3356
|
// @match *://*.fictionhorizon.com/*
|
|
3355
3357
|
// @match *://southernbite.com/*
|
|
@@ -3798,6 +3800,8 @@
|
|
|
3798
3800
|
// @match *://*.ihearteating.com/*
|
|
3799
3801
|
// @match *://foxyfolksy.com/*
|
|
3800
3802
|
// @match *://*.foxyfolksy.com/*
|
|
3803
|
+
// @match *://pressurecookrecipes.com/*
|
|
3804
|
+
// @match *://*.pressurecookrecipes.com/*
|
|
3801
3805
|
// @match *://techwiser.com/*
|
|
3802
3806
|
// @match *://*.techwiser.com/*
|
|
3803
3807
|
// @match *://asimplepalate.com/*
|
|
@@ -4312,6 +4316,8 @@
|
|
|
4312
4316
|
// @match *://*.deliciouslysprinkled.com/*
|
|
4313
4317
|
// @match *://madden-school.com/*
|
|
4314
4318
|
// @match *://*.madden-school.com/*
|
|
4319
|
+
// @match *://addictedtodates.com/*
|
|
4320
|
+
// @match *://*.addictedtodates.com/*
|
|
4315
4321
|
// @match *://simplyhomecooked.com/*
|
|
4316
4322
|
// @match *://*.simplyhomecooked.com/*
|
|
4317
4323
|
// @match *://loveyourcat.com/*
|
|
@@ -4576,6 +4582,8 @@
|
|
|
4576
4582
|
// @match *://*.forkknifeswoon.com/*
|
|
4577
4583
|
// @match *://healthylittlepeach.com/*
|
|
4578
4584
|
// @match *://*.healthylittlepeach.com/*
|
|
4585
|
+
// @match *://top40weekly.com/*
|
|
4586
|
+
// @match *://*.top40weekly.com/*
|
|
4579
4587
|
// @match *://growagoodlife.com/*
|
|
4580
4588
|
// @match *://*.growagoodlife.com/*
|
|
4581
4589
|
// @match *://supercars.net/*
|
|
@@ -4716,6 +4724,8 @@
|
|
|
4716
4724
|
// @match *://*.myeverydaytable.com/*
|
|
4717
4725
|
// @match *://mygorgeousrecipes.com/*
|
|
4718
4726
|
// @match *://*.mygorgeousrecipes.com/*
|
|
4727
|
+
// @match *://homesteadingfamily.com/*
|
|
4728
|
+
// @match *://*.homesteadingfamily.com/*
|
|
4719
4729
|
// @match *://pipandebby.com/*
|
|
4720
4730
|
// @match *://*.pipandebby.com/*
|
|
4721
4731
|
// @match *://sugarandcharm.com/*
|
|
@@ -7232,6 +7242,8 @@
|
|
|
7232
7242
|
// @match *://*.dailydishrecipes.com/*
|
|
7233
7243
|
// @match *://onepotrecipes.com/*
|
|
7234
7244
|
// @match *://*.onepotrecipes.com/*
|
|
7245
|
+
// @match *://birdwatchingdaily.com/*
|
|
7246
|
+
// @match *://*.birdwatchingdaily.com/*
|
|
7235
7247
|
// @match *://giftofcuriosity.com/*
|
|
7236
7248
|
// @match *://*.giftofcuriosity.com/*
|
|
7237
7249
|
// @match *://moralfibres.co.uk/*
|
|
@@ -11802,6 +11814,20 @@
|
|
|
11802
11814
|
// @match *://*.learnreligions.com/*
|
|
11803
11815
|
// @match *://verywellhealth.com/*
|
|
11804
11816
|
// @match *://*.verywellhealth.com/*
|
|
11817
|
+
// @match *://egolf.jp/*
|
|
11818
|
+
// @match *://*.egolf.jp/*
|
|
11819
|
+
// @match *://otonanswer.jp/*
|
|
11820
|
+
// @match *://*.otonanswer.jp/*
|
|
11821
|
+
// @match *://vague.style/*
|
|
11822
|
+
// @match *://*.vague.style/*
|
|
11823
|
+
// @match *://magmix.jp/*
|
|
11824
|
+
// @match *://*.magmix.jp/*
|
|
11825
|
+
// @match *://trafficnews.jp/*
|
|
11826
|
+
// @match *://*.trafficnews.jp/*
|
|
11827
|
+
// @match *://parents.com/*
|
|
11828
|
+
// @match *://*.parents.com/*
|
|
11829
|
+
// @match *://merinfo.se/*
|
|
11830
|
+
// @match *://*.merinfo.se/*
|
|
11805
11831
|
// @match *://petbook.de/*
|
|
11806
11832
|
// @match *://*.petbook.de/*
|
|
11807
11833
|
// @match *://egitim.net.tr/*
|
|
@@ -11876,8 +11902,6 @@
|
|
|
11876
11902
|
// @match *://*.autobild.de/*
|
|
11877
11903
|
// @match *://toyokeizai.net/*
|
|
11878
11904
|
// @match *://*.toyokeizai.net/*
|
|
11879
|
-
// @match *://newatlas.com/*
|
|
11880
|
-
// @match *://*.newatlas.com/*
|
|
11881
11905
|
// @match *://usaudiomart.com/*
|
|
11882
11906
|
// @match *://*.usaudiomart.com/*
|
|
11883
11907
|
// @match *://slideshare.net/*
|
|
@@ -11888,6 +11912,8 @@
|
|
|
11888
11912
|
// @match *://*.sportlerfrage.net/*
|
|
11889
11913
|
// @match *://reisefrage.net/*
|
|
11890
11914
|
// @match *://*.reisefrage.net/*
|
|
11915
|
+
// @match *://newatlas.com/*
|
|
11916
|
+
// @match *://*.newatlas.com/*
|
|
11891
11917
|
// @match *://fossbytes.com/*
|
|
11892
11918
|
// @match *://*.fossbytes.com/*
|
|
11893
11919
|
// @match *://perezhilton.com/*
|
|
@@ -11972,6 +11998,8 @@
|
|
|
11972
11998
|
// @match *://*.heraldm.com/*
|
|
11973
11999
|
// @match *://razzball.com/*
|
|
11974
12000
|
// @match *://*.razzball.com/*
|
|
12001
|
+
// @match *://freeconvert.com/*
|
|
12002
|
+
// @match *://*.freeconvert.com/*
|
|
11975
12003
|
// @match *://pcgamebenchmark.com/*
|
|
11976
12004
|
// @match *://*.pcgamebenchmark.com/*
|
|
11977
12005
|
// @match *://flagle.io/*
|
|
@@ -13032,6 +13060,46 @@
|
|
|
13032
13060
|
// @match *://*.prydwen.gg/*
|
|
13033
13061
|
// @match *://stardb.gg/*
|
|
13034
13062
|
// @match *://*.stardb.gg/*
|
|
13063
|
+
// @match *://ew.com/*
|
|
13064
|
+
// @match *://*.ew.com/*
|
|
13065
|
+
// @match *://peopleenespanol.com/*
|
|
13066
|
+
// @match *://*.peopleenespanol.com/*
|
|
13067
|
+
// @match *://tripsavvy.com/*
|
|
13068
|
+
// @match *://*.tripsavvy.com/*
|
|
13069
|
+
// @match *://shape.com/*
|
|
13070
|
+
// @match *://*.shape.com/*
|
|
13071
|
+
// @match *://instyle.com/*
|
|
13072
|
+
// @match *://*.instyle.com/*
|
|
13073
|
+
// @match *://brides.com/*
|
|
13074
|
+
// @match *://*.brides.com/*
|
|
13075
|
+
// @match *://byrdie.com/*
|
|
13076
|
+
// @match *://*.byrdie.com/*
|
|
13077
|
+
// @match *://thesprucepets.com/*
|
|
13078
|
+
// @match *://*.thesprucepets.com/*
|
|
13079
|
+
// @match *://thespruce.com/*
|
|
13080
|
+
// @match *://*.thespruce.com/*
|
|
13081
|
+
// @match *://southernliving.com/*
|
|
13082
|
+
// @match *://*.southernliving.com/*
|
|
13083
|
+
// @match *://realsimple.com/*
|
|
13084
|
+
// @match *://*.realsimple.com/*
|
|
13085
|
+
// @match *://mydomaine.com/*
|
|
13086
|
+
// @match *://*.mydomaine.com/*
|
|
13087
|
+
// @match *://dailypaws.com/*
|
|
13088
|
+
// @match *://*.dailypaws.com/*
|
|
13089
|
+
// @match *://bhg.com/*
|
|
13090
|
+
// @match *://*.bhg.com/*
|
|
13091
|
+
// @match *://allrecipes.com/*
|
|
13092
|
+
// @match *://*.allrecipes.com/*
|
|
13093
|
+
// @match *://thebalancemoney.com/*
|
|
13094
|
+
// @match *://*.thebalancemoney.com/*
|
|
13095
|
+
// @match *://health.com/*
|
|
13096
|
+
// @match *://*.health.com/*
|
|
13097
|
+
// @match *://verywellfit.com/*
|
|
13098
|
+
// @match *://*.verywellfit.com/*
|
|
13099
|
+
// @match *://verywellmind.com/*
|
|
13100
|
+
// @match *://*.verywellmind.com/*
|
|
13101
|
+
// @match *://investopedia.com/*
|
|
13102
|
+
// @match *://*.investopedia.com/*
|
|
13035
13103
|
// @match *://kurir.rs/*
|
|
13036
13104
|
// @match *://*.kurir.rs/*
|
|
13037
13105
|
// @match *://pics-view.com/*
|
|
@@ -13190,34 +13258,8 @@
|
|
|
13190
13258
|
// @match *://*.vancouversun.com/*
|
|
13191
13259
|
// @match *://imas-cg.net/*
|
|
13192
13260
|
// @match *://*.imas-cg.net/*
|
|
13193
|
-
// @match *://allrecipes.com/*
|
|
13194
|
-
// @match *://*.allrecipes.com/*
|
|
13195
|
-
// @match *://bhg.com/*
|
|
13196
|
-
// @match *://*.bhg.com/*
|
|
13197
|
-
// @match *://brides.com/*
|
|
13198
|
-
// @match *://*.brides.com/*
|
|
13199
|
-
// @match *://byrdie.com/*
|
|
13200
|
-
// @match *://*.byrdie.com/*
|
|
13201
|
-
// @match *://ew.com/*
|
|
13202
|
-
// @match *://*.ew.com/*
|
|
13203
|
-
// @match *://investopedia.com/*
|
|
13204
|
-
// @match *://*.investopedia.com/*
|
|
13205
|
-
// @match *://parents.com/*
|
|
13206
|
-
// @match *://*.parents.com/*
|
|
13207
13261
|
// @match *://people.com/*
|
|
13208
13262
|
// @match *://*.people.com/*
|
|
13209
|
-
// @match *://peopleenespanol.com/*
|
|
13210
|
-
// @match *://*.peopleenespanol.com/*
|
|
13211
|
-
// @match *://realsimple.com/*
|
|
13212
|
-
// @match *://*.realsimple.com/*
|
|
13213
|
-
// @match *://shape.com/*
|
|
13214
|
-
// @match *://*.shape.com/*
|
|
13215
|
-
// @match *://southernliving.com/*
|
|
13216
|
-
// @match *://*.southernliving.com/*
|
|
13217
|
-
// @match *://thespruce.com/*
|
|
13218
|
-
// @match *://*.thespruce.com/*
|
|
13219
|
-
// @match *://thesprucepets.com/*
|
|
13220
|
-
// @match *://*.thesprucepets.com/*
|
|
13221
13263
|
// @match *://woodmagazine.com/*
|
|
13222
13264
|
// @match *://*.woodmagazine.com/*
|
|
13223
13265
|
// @match *://woxikon.bg/*
|
|
@@ -13292,6 +13334,8 @@
|
|
|
13292
13334
|
// @match *://*.soxprospects.com/*
|
|
13293
13335
|
// @match *://kio.ac/*
|
|
13294
13336
|
// @match *://*.kio.ac/*
|
|
13337
|
+
// @match *://nicovideo.jp/*
|
|
13338
|
+
// @match *://*.nicovideo.jp/*
|
|
13295
13339
|
// @match *://notebookcheck.co/*
|
|
13296
13340
|
// @match *://*.notebookcheck.co/*
|
|
13297
13341
|
// @match *://notebookcheck.de/*
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @license MPL-2.0
|
|
3
|
+
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
6
|
+
*
|
|
7
|
+
* Contributors:
|
|
8
|
+
* - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.
|
|
9
|
+
*/
|
|
10
|
+
export function CountCommonStrings(ArrayA, ArrayB) {
|
|
11
|
+
let SetB = new Set(ArrayB);
|
|
12
|
+
const Common = new Set(ArrayA.filter(Item => SetB.has(Item)));
|
|
13
|
+
return Common.size;
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@filteringdev/tinyshield",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build:interface": "
|
|
7
|
+
"build:interface": "tsc -p userscript/tsconfig.json",
|
|
8
8
|
"build:userscript": "npm run build -w builder -- --minify true --use-cache false --build-type production --SubscriptionUrl https://cdn.jsdelivr.net/npm/@filteringdev/tinyshield@latest/dist/tinyShield.user.js",
|
|
9
9
|
"build": "npm run build:interface && npm run build:userscript",
|
|
10
10
|
"debug": "npm run debug -w builder",
|
|
@@ -18,11 +18,10 @@
|
|
|
18
18
|
],
|
|
19
19
|
"exports": {
|
|
20
20
|
".": {
|
|
21
|
-
"import": "./dist/
|
|
22
|
-
"types": "./dist/
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"types": "./dist/index.d.ts"
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
|
-
"types": "./dist/types/interface.d.ts",
|
|
26
25
|
"repository": {
|
|
27
26
|
"type": "git",
|
|
28
27
|
"url": "git+https://github.com/FilteringDev/tinyShield.git"
|
package/dist/interface.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../userscript/source/utils.ts", "../userscript/source/as-weakmap.ts", "../userscript/source/index.ts"],
|
|
4
|
-
"sourcesContent": ["/*!\n * @license MPL-2.0\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n *\n * Contributors:\n * - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.\n */\n\nexport function CountCommonStrings(ArrayA: string[], ArrayB: string[]): number {\n let SetB = new Set(ArrayB)\n const Common = new Set(ArrayA.filter(Item => SetB.has(Item)))\n return Common.size\n}", "/*!\n * @license MPL-2.0\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n *\n * Contributors:\n * - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.\n */\n\nimport * as Utils from './utils.js'\nimport { OriginalRegExpTest } from './index.js'\n\nexport function CheckDepthInASWeakMap(Args: [object, unknown]) {\n if (typeof Args[0] !== 'object') {\n return false\n }\n if (Utils.CountCommonStrings(['device', 'id', 'imp', 'regs', 'site', 'source'], Object.keys(Args[0])) < 5) {\n return false\n }\n\n let ASBannerFrameIdRegExp = /^[0-9]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+\\/[a-z0-9-\\(\\)]+\\/[a-zA-Z0-9_]+_slot[0-9]+_+/\n let ASBannerFrameKey: string = Object.keys(Args[0]).find(Arg => typeof Args[0][Arg] === 'object' && Array.isArray(Args[0][Arg]) &&\n Args[0][Arg].filter(SubArg => typeof SubArg === 'object' && Object.keys(SubArg).filter(InnerArg => {\n return typeof InnerArg === 'string' && OriginalRegExpTest.call(ASBannerFrameIdRegExp, InnerArg) as boolean\n })).length >= 1)\n if (typeof ASBannerFrameKey === 'undefined') {\n return false\n }\n\n return true\n}", "/*!\n * @license MPL-2.0\n * This Source Code Form is subject to the terms of the Mozilla Public\n * License, v. 2.0. If a copy of the MPL was not distributed with this\n * file, You can obtain one at https://mozilla.org/MPL/2.0/.\n *\n * Contributors:\n * - See Git history at https://github.com/FilteringDev/tinyShield for detailed authorship information.\n */\n\ntype unsafeWindow = typeof window\n// eslint-disable-next-line @typescript-eslint/naming-convention\ndeclare const unsafeWindow: unsafeWindow\n\nconst Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window\n\nimport { CheckDepthInASWeakMap } from './as-weakmap.js'\n\nexport const OriginalRegExpTest = Win.RegExp.prototype.test\n\nexport function RunTinyShieldUserscript(BrowserWindow: typeof window, UserscriptName: string = 'tinyShield'): void {\n const OriginalArrayToString = BrowserWindow.Array.prototype.toString\n const OriginalRegExpTest = BrowserWindow.RegExp.prototype.test\n\n const ProtectedFunctionStrings = ['toString', 'get', 'set']\n\n BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n apply(Target: () => string, ThisArg: Function, Args: null) {\n if (ProtectedFunctionStrings.includes(ThisArg.name)) {\n return `function ${ThisArg.name}() { [native code] }`\n } else {\n return Reflect.apply(Target, ThisArg, Args)\n }\n }\n })\n\n const ASInitPositiveRegExps: RegExp[][] = [[\n /[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,\n /===? *[a-zA-Z0-9]+ *\\[ *[a-zA-Z0-9]+\\( *[0-9a-z]+ *\\) *\\] *\\) *return *[a-zA-Z0-9]+ *\\( *{ *('|\")?inventoryId('|\")? *:/,\n /{ *('|\")?inventoryId('|\")? *: *this *\\[[a-zA-Z0-9]+ *\\( *[0-9a-z]+ *\\) *\\] *, *\\.\\.\\. *[a-zA-Z0-9]+ *\\[ *[a-zA-Z0-9]+ *\\( *[0-9a-z]+ * *\\) *\\] *} *\\)/\n ]]\n BrowserWindow.Map.prototype.get = new Proxy(BrowserWindow.Map.prototype.get, {\n apply(Target: (key: unknown) => unknown, ThisArg: Map<unknown, unknown>, Args: [unknown]) {\n if (Args.length > 0 && typeof Args[0] !== 'function') {\n return Reflect.apply(Target, ThisArg, Args)\n }\n\n let ArgText = OriginalArrayToString.call(Args) as string\n if (ASInitPositiveRegExps.filter(ASInitPositiveRegExp => ASInitPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText) as boolean).length >= 2).length === 1) {\n console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args)\n throw new Error()\n }\n\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n const ASReinsertedAdvInvenPositiveRegExps: RegExp[][] = [[\n /inventory_id,[a-zA-Z0-9-]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+/,\n /inventory_id,[a-zA-Z0-9-]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+/,\n /inventory_id,[a-zA-Z0-9-]+\\/[a-zA-Z0-9]+\\/[a-zA-Z0-9]+/\n ], [\n /[a-z0-9A-Z]+\\.setAttribute\\( *('|\")onload('|\") *, *('|\")! *async *function\\( *\\) *\\{ *let */,\n /confirm\\( *[A-Za-z0-9]+ *\\) *\\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\\.URL\\(('|\")https:\\/\\/report\\.error-report\\.com\\//,\n /\\.forEach *\\( *\\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\\.remove *\\( *\\) *\\) *\\) *\\) *, *[0-9a-f]+ *\\) *; *const *[A-Za-z0-9]+ *= *await *\\( *await *fetch *\\(/\n ]]\n BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {\n apply(Target: (key: unknown, value: unknown) => Map<unknown, unknown>, ThisArg: Map<unknown, unknown>, Args: [unknown, unknown]) {\n let ArgText = ''\n try {\n ArgText = OriginalArrayToString.call(Args) as string\n } catch {\n console.warn(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args)\n }\n if (ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText) as boolean).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args)\n throw new Error()\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n BrowserWindow.WeakMap.prototype.set = new Proxy(BrowserWindow.WeakMap.prototype.set, {\n apply(Target: (key: object, value: unknown) => WeakMap<object, unknown>, ThisArg: WeakMap<object, unknown>, Args: [object, unknown]) {\n if (CheckDepthInASWeakMap(Args)) {\n console.debug(`[${UserscriptName}]: WeakMap.prototype.set:`, ThisArg, Args)\n throw new Error()\n }\n\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n\n let ASTimerRegExps: RegExp[][] = [[\n /async *\\( *\\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\\( *\\)/,\n /; *await *[A-Za-z0-9]+ *\\( *\\) *, *[A-Za-z0-9]+ *\\( *! *1 *, *new *Error *\\( *[A-Za-z0-9]+ *\\( *[0-9a-f]+ *\\) *\\) *\\) *}/,\n / *\\) *\\) *\\) *}/\n ]]\n BrowserWindow.setTimeout = new Proxy(BrowserWindow.setTimeout, {\n apply(Target: typeof BrowserWindow.setTimeout, ThisArg: undefined, Args: Parameters<typeof setTimeout>) {\n if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: setTimeout:`, Args)\n return\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n BrowserWindow.setInterval = new Proxy(BrowserWindow.setInterval, {\n apply(Target: typeof BrowserWindow.setInterval, ThisArg: undefined, Args: Parameters<typeof setInterval>) {\n if (ASTimerRegExps.filter(ASTimerRegExp => ASTimerRegExp.filter(Index => Index.test(Args[0].toString())).length >= 3).length === 1) {\n console.debug(`[${UserscriptName}]: setInterval:`, Args)\n return\n }\n return Reflect.apply(Target, ThisArg, Args)\n }\n })\n}\n\nRunTinyShieldUserscript(Win)"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["OriginalRegExpTest"]
|
|
7
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|