@filteringdev/tinyshield 3.4.3 → 3.5.2

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,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
- //# sourceMappingURL=interface.js.map
10
+ export { RunTinyShieldUserscript } from './index.js';
@@ -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.4.3
11
+ // @version 3.5.2
12
12
  // @author PiQuark6046 and contributors
13
13
  //
14
14
  // @grant unsafeWindow
@@ -3110,6 +3110,8 @@
3110
3110
  // @match *://*.loveandlemons.com/*
3111
3111
  // @match *://islands.com/*
3112
3112
  // @match *://*.islands.com/*
3113
+ // @match *://bulbagarden.net/*
3114
+ // @match *://*.bulbagarden.net/*
3113
3115
  // @match *://brobible.com/*
3114
3116
  // @match *://*.brobible.com/*
3115
3117
  // @match *://britannica.com/*
@@ -3140,6 +3142,8 @@
3140
3142
  // @match *://*.celebritynetworth.com/*
3141
3143
  // @match *://sugarspunrun.com/*
3142
3144
  // @match *://*.sugarspunrun.com/*
3145
+ // @match *://mtgdecks.net/*
3146
+ // @match *://*.mtgdecks.net/*
3143
3147
  // @match *://preppykitchen.com/*
3144
3148
  // @match *://*.preppykitchen.com/*
3145
3149
  // @match *://profootballnetwork.com/*
@@ -3210,6 +3214,8 @@
3210
3214
  // @match *://*.soapcentral.com/*
3211
3215
  // @match *://yummytoddlerfood.com/*
3212
3216
  // @match *://*.yummytoddlerfood.com/*
3217
+ // @match *://porofessor.gg/*
3218
+ // @match *://*.porofessor.gg/*
3213
3219
  // @match *://littlespoonfarm.com/*
3214
3220
  // @match *://*.littlespoonfarm.com/*
3215
3221
  // @match *://dinneratthezoo.com/*
@@ -3236,6 +3242,8 @@
3236
3242
  // @match *://*.thesaltymarshmallow.com/*
3237
3243
  // @match *://homemaking.com/*
3238
3244
  // @match *://*.homemaking.com/*
3245
+ // @match *://mobafire.com/*
3246
+ // @match *://*.mobafire.com/*
3239
3247
  // @match *://littlesunnykitchen.com/*
3240
3248
  // @match *://*.littlesunnykitchen.com/*
3241
3249
  // @match *://bromabakery.com/*
@@ -3302,6 +3310,8 @@
3302
3310
  // @match *://*.pivotalweather.com/*
3303
3311
  // @match *://kirbiecravings.com/*
3304
3312
  // @match *://*.kirbiecravings.com/*
3313
+ // @match *://notateslaapp.com/*
3314
+ // @match *://*.notateslaapp.com/*
3305
3315
  // @match *://theclevercarrot.com/*
3306
3316
  // @match *://*.theclevercarrot.com/*
3307
3317
  // @match *://thedebrief.org/*
@@ -3350,6 +3360,8 @@
3350
3360
  // @match *://*.easyfamilyrecipes.com/*
3351
3361
  // @match *://thenerdstash.com/*
3352
3362
  // @match *://*.thenerdstash.com/*
3363
+ // @match *://aspicyperspective.com/*
3364
+ // @match *://*.aspicyperspective.com/*
3353
3365
  // @match *://fictionhorizon.com/*
3354
3366
  // @match *://*.fictionhorizon.com/*
3355
3367
  // @match *://southernbite.com/*
@@ -3526,12 +3538,16 @@
3526
3538
  // @match *://*.scam-detector.com/*
3527
3539
  // @match *://momsdish.com/*
3528
3540
  // @match *://*.momsdish.com/*
3541
+ // @match *://sporked.com/*
3542
+ // @match *://*.sporked.com/*
3529
3543
  // @match *://thenaturalnurturer.com/*
3530
3544
  // @match *://*.thenaturalnurturer.com/*
3531
3545
  // @match *://alphafoodie.com/*
3532
3546
  // @match *://*.alphafoodie.com/*
3533
3547
  // @match *://cookthestory.com/*
3534
3548
  // @match *://*.cookthestory.com/*
3549
+ // @match *://whatmollymade.com/*
3550
+ // @match *://*.whatmollymade.com/*
3535
3551
  // @match *://redhousespice.com/*
3536
3552
  // @match *://*.redhousespice.com/*
3537
3553
  // @match *://japanese-names.info/*
@@ -3798,6 +3814,8 @@
3798
3814
  // @match *://*.ihearteating.com/*
3799
3815
  // @match *://foxyfolksy.com/*
3800
3816
  // @match *://*.foxyfolksy.com/*
3817
+ // @match *://pressurecookrecipes.com/*
3818
+ // @match *://*.pressurecookrecipes.com/*
3801
3819
  // @match *://techwiser.com/*
3802
3820
  // @match *://*.techwiser.com/*
3803
3821
  // @match *://asimplepalate.com/*
@@ -3880,6 +3898,8 @@
3880
3898
  // @match *://*.feedingtinybellies.com/*
3881
3899
  // @match *://chewoutloud.com/*
3882
3900
  // @match *://*.chewoutloud.com/*
3901
+ // @match *://math-salamanders.com/*
3902
+ // @match *://*.math-salamanders.com/*
3883
3903
  // @match *://howtocook.recipes/*
3884
3904
  // @match *://*.howtocook.recipes/*
3885
3905
  // @match *://simpleeverydaymom.com/*
@@ -4312,6 +4332,8 @@
4312
4332
  // @match *://*.deliciouslysprinkled.com/*
4313
4333
  // @match *://madden-school.com/*
4314
4334
  // @match *://*.madden-school.com/*
4335
+ // @match *://addictedtodates.com/*
4336
+ // @match *://*.addictedtodates.com/*
4315
4337
  // @match *://simplyhomecooked.com/*
4316
4338
  // @match *://*.simplyhomecooked.com/*
4317
4339
  // @match *://loveyourcat.com/*
@@ -4484,6 +4506,8 @@
4484
4506
  // @match *://*.aprettylifeinthesuburbs.com/*
4485
4507
  // @match *://dashofsanity.com/*
4486
4508
  // @match *://*.dashofsanity.com/*
4509
+ // @match *://juliapacheco.com/*
4510
+ // @match *://*.juliapacheco.com/*
4487
4511
  // @match *://streetstylis.com/*
4488
4512
  // @match *://*.streetstylis.com/*
4489
4513
  // @match *://thecookingjar.com/*
@@ -4576,6 +4600,8 @@
4576
4600
  // @match *://*.forkknifeswoon.com/*
4577
4601
  // @match *://healthylittlepeach.com/*
4578
4602
  // @match *://*.healthylittlepeach.com/*
4603
+ // @match *://top40weekly.com/*
4604
+ // @match *://*.top40weekly.com/*
4579
4605
  // @match *://growagoodlife.com/*
4580
4606
  // @match *://*.growagoodlife.com/*
4581
4607
  // @match *://supercars.net/*
@@ -4716,6 +4742,8 @@
4716
4742
  // @match *://*.myeverydaytable.com/*
4717
4743
  // @match *://mygorgeousrecipes.com/*
4718
4744
  // @match *://*.mygorgeousrecipes.com/*
4745
+ // @match *://homesteadingfamily.com/*
4746
+ // @match *://*.homesteadingfamily.com/*
4719
4747
  // @match *://pipandebby.com/*
4720
4748
  // @match *://*.pipandebby.com/*
4721
4749
  // @match *://sugarandcharm.com/*
@@ -4930,6 +4958,8 @@
4930
4958
  // @match *://*.theblondcook.com/*
4931
4959
  // @match *://cakemehometonight.com/*
4932
4960
  // @match *://*.cakemehometonight.com/*
4961
+ // @match *://jayscentre.com/*
4962
+ // @match *://*.jayscentre.com/*
4933
4963
  // @match *://cheerfulcook.com/*
4934
4964
  // @match *://*.cheerfulcook.com/*
4935
4965
  // @match *://onsuttonplace.com/*
@@ -5298,6 +5328,8 @@
5298
5328
  // @match *://*.gabriellearruda.com/*
5299
5329
  // @match *://masalaherb.com/*
5300
5330
  // @match *://*.masalaherb.com/*
5331
+ // @match *://randymajors.org/*
5332
+ // @match *://*.randymajors.org/*
5301
5333
  // @match *://wichitabyeb.com/*
5302
5334
  // @match *://*.wichitabyeb.com/*
5303
5335
  // @match *://pumpkinnspice.com/*
@@ -7232,6 +7264,8 @@
7232
7264
  // @match *://*.dailydishrecipes.com/*
7233
7265
  // @match *://onepotrecipes.com/*
7234
7266
  // @match *://*.onepotrecipes.com/*
7267
+ // @match *://birdwatchingdaily.com/*
7268
+ // @match *://*.birdwatchingdaily.com/*
7235
7269
  // @match *://giftofcuriosity.com/*
7236
7270
  // @match *://*.giftofcuriosity.com/*
7237
7271
  // @match *://moralfibres.co.uk/*
@@ -11802,6 +11836,20 @@
11802
11836
  // @match *://*.learnreligions.com/*
11803
11837
  // @match *://verywellhealth.com/*
11804
11838
  // @match *://*.verywellhealth.com/*
11839
+ // @match *://egolf.jp/*
11840
+ // @match *://*.egolf.jp/*
11841
+ // @match *://otonanswer.jp/*
11842
+ // @match *://*.otonanswer.jp/*
11843
+ // @match *://vague.style/*
11844
+ // @match *://*.vague.style/*
11845
+ // @match *://magmix.jp/*
11846
+ // @match *://*.magmix.jp/*
11847
+ // @match *://trafficnews.jp/*
11848
+ // @match *://*.trafficnews.jp/*
11849
+ // @match *://parents.com/*
11850
+ // @match *://*.parents.com/*
11851
+ // @match *://merinfo.se/*
11852
+ // @match *://*.merinfo.se/*
11805
11853
  // @match *://petbook.de/*
11806
11854
  // @match *://*.petbook.de/*
11807
11855
  // @match *://egitim.net.tr/*
@@ -11876,8 +11924,6 @@
11876
11924
  // @match *://*.autobild.de/*
11877
11925
  // @match *://toyokeizai.net/*
11878
11926
  // @match *://*.toyokeizai.net/*
11879
- // @match *://newatlas.com/*
11880
- // @match *://*.newatlas.com/*
11881
11927
  // @match *://usaudiomart.com/*
11882
11928
  // @match *://*.usaudiomart.com/*
11883
11929
  // @match *://slideshare.net/*
@@ -11888,6 +11934,8 @@
11888
11934
  // @match *://*.sportlerfrage.net/*
11889
11935
  // @match *://reisefrage.net/*
11890
11936
  // @match *://*.reisefrage.net/*
11937
+ // @match *://newatlas.com/*
11938
+ // @match *://*.newatlas.com/*
11891
11939
  // @match *://fossbytes.com/*
11892
11940
  // @match *://*.fossbytes.com/*
11893
11941
  // @match *://perezhilton.com/*
@@ -11958,6 +12006,8 @@
11958
12006
  // @match *://*.auone.jp/*
11959
12007
  // @match *://emojipedia.org/*
11960
12008
  // @match *://*.emojipedia.org/*
12009
+ // @match *://nicovideo.jp/*
12010
+ // @match *://*.nicovideo.jp/*
11961
12011
  // @match *://cruciverba.it/*
11962
12012
  // @match *://*.cruciverba.it/*
11963
12013
  // @match *://palabr.as/*
@@ -11972,6 +12022,8 @@
11972
12022
  // @match *://*.heraldm.com/*
11973
12023
  // @match *://razzball.com/*
11974
12024
  // @match *://*.razzball.com/*
12025
+ // @match *://freeconvert.com/*
12026
+ // @match *://*.freeconvert.com/*
11975
12027
  // @match *://pcgamebenchmark.com/*
11976
12028
  // @match *://*.pcgamebenchmark.com/*
11977
12029
  // @match *://flagle.io/*
@@ -13032,6 +13084,46 @@
13032
13084
  // @match *://*.prydwen.gg/*
13033
13085
  // @match *://stardb.gg/*
13034
13086
  // @match *://*.stardb.gg/*
13087
+ // @match *://ew.com/*
13088
+ // @match *://*.ew.com/*
13089
+ // @match *://peopleenespanol.com/*
13090
+ // @match *://*.peopleenespanol.com/*
13091
+ // @match *://tripsavvy.com/*
13092
+ // @match *://*.tripsavvy.com/*
13093
+ // @match *://shape.com/*
13094
+ // @match *://*.shape.com/*
13095
+ // @match *://instyle.com/*
13096
+ // @match *://*.instyle.com/*
13097
+ // @match *://brides.com/*
13098
+ // @match *://*.brides.com/*
13099
+ // @match *://byrdie.com/*
13100
+ // @match *://*.byrdie.com/*
13101
+ // @match *://thesprucepets.com/*
13102
+ // @match *://*.thesprucepets.com/*
13103
+ // @match *://thespruce.com/*
13104
+ // @match *://*.thespruce.com/*
13105
+ // @match *://southernliving.com/*
13106
+ // @match *://*.southernliving.com/*
13107
+ // @match *://realsimple.com/*
13108
+ // @match *://*.realsimple.com/*
13109
+ // @match *://mydomaine.com/*
13110
+ // @match *://*.mydomaine.com/*
13111
+ // @match *://dailypaws.com/*
13112
+ // @match *://*.dailypaws.com/*
13113
+ // @match *://bhg.com/*
13114
+ // @match *://*.bhg.com/*
13115
+ // @match *://allrecipes.com/*
13116
+ // @match *://*.allrecipes.com/*
13117
+ // @match *://thebalancemoney.com/*
13118
+ // @match *://*.thebalancemoney.com/*
13119
+ // @match *://health.com/*
13120
+ // @match *://*.health.com/*
13121
+ // @match *://verywellfit.com/*
13122
+ // @match *://*.verywellfit.com/*
13123
+ // @match *://verywellmind.com/*
13124
+ // @match *://*.verywellmind.com/*
13125
+ // @match *://investopedia.com/*
13126
+ // @match *://*.investopedia.com/*
13035
13127
  // @match *://kurir.rs/*
13036
13128
  // @match *://*.kurir.rs/*
13037
13129
  // @match *://pics-view.com/*
@@ -13054,6 +13146,10 @@
13054
13146
  // @match *://*.alle-tests.nl/*
13055
13147
  // @match *://lovelive-petitsoku.com/*
13056
13148
  // @match *://*.lovelive-petitsoku.com/*
13149
+ // @match *://urldecoder.org/*
13150
+ // @match *://*.urldecoder.org/*
13151
+ // @match *://base64decode.org/*
13152
+ // @match *://*.base64decode.org/*
13057
13153
  // @match *://scribd.com/*
13058
13154
  // @match *://*.scribd.com/*
13059
13155
  // @match *://modhub.us/*
@@ -13190,34 +13286,8 @@
13190
13286
  // @match *://*.vancouversun.com/*
13191
13287
  // @match *://imas-cg.net/*
13192
13288
  // @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
13289
  // @match *://people.com/*
13208
13290
  // @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
13291
  // @match *://woodmagazine.com/*
13222
13292
  // @match *://*.woodmagazine.com/*
13223
13293
  // @match *://woxikon.bg/*
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.4.3",
3
+ "version": "3.5.2",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {
7
- "build:interface": "esbuild userscript/source/interface.ts --bundle --format=esm --splitting --sourcemap --target=es2024 --external:/node_modules --outdir=dist && tsc userscript/source/interface.ts --outDir dist/types --declaration --emitDeclarationOnly --skipLibCheck",
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/interface.js",
22
- "types": "./dist/types/interface.d.ts"
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"
@@ -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