@filteringdev/tinyshield 2.0.6 → 2.0.7

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,122 @@
1
+ // sources/src/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
+ // sources/src/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
+ // sources/src/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
+ //# sourceMappingURL=interface.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../sources/src/utils.ts", "../sources/src/as-weakmap.ts", "../sources/src/index.ts"],
4
+ "sourcesContent": ["export 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}", "import * 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}", "type 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
+ }
@@ -8,7 +8,7 @@
8
8
  // @downloadURL https://cdn.jsdelivr.net/npm/@filteringdev/tinyshield@latest/dist/tinyShield.user.js
9
9
  // @license MIT
10
10
  //
11
- // @version 2.0.6
11
+ // @version 2.0.7
12
12
  // @author PiQuark6046 and contributors
13
13
  //
14
14
  // @match *://ygosu.com/*
@@ -1550,4 +1550,4 @@
1550
1550
  // @grant unsafeWindow
1551
1551
  // @run-at document-start
1552
1552
  // ==/UserScript==
1553
- (()=>{function CountCommonStrings(ArrayA,ArrayB){let SetB=new Set(ArrayB);return new Set(ArrayA.filter(Item=>SetB.has(Item))).size}function CheckDepthInASWeakMap(Args){if(typeof Args[0]!="object"||CountCommonStrings(["device","id","imp","regs","site","source"],Object.keys(Args[0]))<5)return!1;let ASBannerFrameIdRegExp=/^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;return!(typeof 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=>typeof InnerArg=="string"&&OriginalRegExpTest.call(ASBannerFrameIdRegExp,InnerArg))).length>=1)>"u")}var Win=typeof unsafeWindow<"u"?unsafeWindow:window,OriginalArrayToString=Win.Array.prototype.toString,OriginalRegExpTest=Win.RegExp.prototype.test,ProtectedFunctionStrings=["toString","get","set"];Win.Function.prototype.toString=new Proxy(Win.Function.prototype.toString,{apply(Target,ThisArg,Args){return ProtectedFunctionStrings.includes(ThisArg.name)?`function ${ThisArg.name}() { [native code] }`:Reflect.apply(Target,ThisArg,Args)}});var ASInitPositiveRegExps=[[/[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,/===? *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+\( *[0-9a-z]+ *\) *\] *\) *return *[a-zA-Z0-9]+ *\( *{ *('|")?inventoryId('|")? *:/,/{ *('|")?inventoryId('|")? *: *this *\[[a-zA-Z0-9]+ *\( *[0-9a-z]+ *\) *\] *, *\.\.\. *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+ *\( *[0-9a-z]+ * *\) *\] *} *\)/]];Win.Map.prototype.get=new Proxy(Win.Map.prototype.get,{apply(Target,ThisArg,Args){if(Args.length>0&&typeof Args[0]!="function")return Reflect.apply(Target,ThisArg,Args);let ArgText=OriginalArrayToString.call(Args);if(ASInitPositiveRegExps.filter(ASInitPositiveRegExp=>ASInitPositiveRegExp.filter(Index=>OriginalRegExpTest.call(Index,ArgText)).length>=2).length===1)throw console.debug("[tinyShield]: Map.prototype.get:",ThisArg,Args),new Error;return Reflect.apply(Target,ThisArg,Args)}});var ASReinsertedAdvInvenPositiveRegExps=[[/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/],[/[a-z0-9A-Z]+\.setAttribute\( *('|")onload('|") *, *('|")! *async *function\( *\) *\{ *let */,/confirm\( *[A-Za-z0-9]+ *\) *\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\.URL\(('|")https:\/\/report\.error-report\.com\//,/\.forEach *\( *\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\.remove *\( *\) *\) *\) *\) *, *[0-9a-f]+ *\) *; *const *[A-Za-z0-9]+ *= *await *\( *await *fetch *\(/]];Win.Map.prototype.set=new Proxy(Win.Map.prototype.set,{apply(Target,ThisArg,Args){let ArgText="";try{ArgText=OriginalArrayToString.call(Args)}catch{console.warn("[tinyShield]: Map.prototype.set:",ThisArg,Args)}if(ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp=>ASReinsertedAdvInvenPositiveRegExp.filter(Index=>OriginalRegExpTest.call(Index,ArgText)).length>=3).length===1)throw console.debug("[tinyShield]: Map.prototype.set:",ThisArg,Args),new Error;return Reflect.apply(Target,ThisArg,Args)}});Win.WeakMap.prototype.set=new Proxy(Win.WeakMap.prototype.set,{apply(Target,ThisArg,Args){if(CheckDepthInASWeakMap(Args))throw console.debug("[tinyShield]: WeakMap.prototype.set:",ThisArg,Args),new Error;return Reflect.apply(Target,ThisArg,Args)}});var ASTimerRegExps=[[/async *\( *\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\( *\)/,/; *await *[A-Za-z0-9]+ *\( *\) *, *[A-Za-z0-9]+ *\( *! *1 *, *new *Error *\( *[A-Za-z0-9]+ *\( *[0-9a-f]+ *\) *\) *\) *}/,/ *\) *\) *\) *}/]];Win.setTimeout=new Proxy(Win.setTimeout,{apply(Target,ThisArg,Args){if(ASTimerRegExps.filter(ASTimerRegExp=>ASTimerRegExp.filter(Index=>Index.test(Args[0].toString())).length>=3).length===1){console.debug("[tinyShield]: setTimeout:",Args);return}return Reflect.apply(Target,ThisArg,Args)}});Win.setInterval=new Proxy(Win.setInterval,{apply(Target,ThisArg,Args){if(ASTimerRegExps.filter(ASTimerRegExp=>ASTimerRegExp.filter(Index=>Index.test(Args[0].toString())).length>=3).length===1){console.debug("[tinyShield]: setInterval:",Args);return}return Reflect.apply(Target,ThisArg,Args)}});})();
1553
+ (()=>{function CountCommonStrings(ArrayA,ArrayB){let SetB=new Set(ArrayB);return new Set(ArrayA.filter(Item=>SetB.has(Item))).size}function CheckDepthInASWeakMap(Args){if(typeof Args[0]!="object"||CountCommonStrings(["device","id","imp","regs","site","source"],Object.keys(Args[0]))<5)return!1;let ASBannerFrameIdRegExp=/^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;return!(typeof 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=>typeof InnerArg=="string"&&OriginalRegExpTest.call(ASBannerFrameIdRegExp,InnerArg))).length>=1)>"u")}var Win=typeof unsafeWindow<"u"?unsafeWindow:window,OriginalRegExpTest=Win.RegExp.prototype.test;function RunTinyShieldUserscript(BrowserWindow,UserscriptName="tinyShield"){let OriginalArrayToString=BrowserWindow.Array.prototype.toString,OriginalRegExpTest2=BrowserWindow.RegExp.prototype.test,ProtectedFunctionStrings=["toString","get","set"];BrowserWindow.Function.prototype.toString=new Proxy(BrowserWindow.Function.prototype.toString,{apply(Target,ThisArg,Args){return ProtectedFunctionStrings.includes(ThisArg.name)?`function ${ThisArg.name}() { [native code] }`:Reflect.apply(Target,ThisArg,Args)}});let ASInitPositiveRegExps=[[/[a-zA-Z0-9]+ *=> *{ *const *[a-zA-Z0-9]+ *= *[a-zA-Z0-9]+ *; *if/,/===? *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+\( *[0-9a-z]+ *\) *\] *\) *return *[a-zA-Z0-9]+ *\( *{ *('|")?inventoryId('|")? *:/,/{ *('|")?inventoryId('|")? *: *this *\[[a-zA-Z0-9]+ *\( *[0-9a-z]+ *\) *\] *, *\.\.\. *[a-zA-Z0-9]+ *\[ *[a-zA-Z0-9]+ *\( *[0-9a-z]+ * *\) *\] *} *\)/]];BrowserWindow.Map.prototype.get=new Proxy(BrowserWindow.Map.prototype.get,{apply(Target,ThisArg,Args){if(Args.length>0&&typeof Args[0]!="function")return Reflect.apply(Target,ThisArg,Args);let ArgText=OriginalArrayToString.call(Args);if(ASInitPositiveRegExps.filter(ASInitPositiveRegExp=>ASInitPositiveRegExp.filter(Index=>OriginalRegExpTest2.call(Index,ArgText)).length>=2).length===1)throw console.debug(`[${UserscriptName}]: Map.prototype.get:`,ThisArg,Args),new Error;return Reflect.apply(Target,ThisArg,Args)}});let ASReinsertedAdvInvenPositiveRegExps=[[/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/,/inventory_id,[a-zA-Z0-9-]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+/],[/[a-z0-9A-Z]+\.setAttribute\( *('|")onload('|") *, *('|")! *async *function\( *\) *\{ *let */,/confirm\( *[A-Za-z0-9]+ *\) *\) *{ *const *[A-Za-z0-9]+ *= *new *[A-Za-z0-9]+\.URL\(('|")https:\/\/report\.error-report\.com\//,/\.forEach *\( *\( *[A-Za-z0-9]+ *=> *[A-Za-z0-9]+\.remove *\( *\) *\) *\) *\) *, *[0-9a-f]+ *\) *; *const *[A-Za-z0-9]+ *= *await *\( *await *fetch *\(/]];BrowserWindow.Map.prototype.set=new Proxy(BrowserWindow.Map.prototype.set,{apply(Target,ThisArg,Args){let ArgText="";try{ArgText=OriginalArrayToString.call(Args)}catch{console.warn(`[${UserscriptName}]: Map.prototype.set:`,ThisArg,Args)}if(ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp=>ASReinsertedAdvInvenPositiveRegExp.filter(Index=>OriginalRegExpTest2.call(Index,ArgText)).length>=3).length===1)throw console.debug(`[${UserscriptName}]: Map.prototype.set:`,ThisArg,Args),new Error;return Reflect.apply(Target,ThisArg,Args)}}),BrowserWindow.WeakMap.prototype.set=new Proxy(BrowserWindow.WeakMap.prototype.set,{apply(Target,ThisArg,Args){if(CheckDepthInASWeakMap(Args))throw console.debug(`[${UserscriptName}]: WeakMap.prototype.set:`,ThisArg,Args),new Error;return Reflect.apply(Target,ThisArg,Args)}});let ASTimerRegExps=[[/async *\( *\) *=> *{ *const *[A-Za-z0-9]+ *= *[A-Za-z0-9]+ *; *await *[A-Za-z0-9]+ *\( *\)/,/; *await *[A-Za-z0-9]+ *\( *\) *, *[A-Za-z0-9]+ *\( *! *1 *, *new *Error *\( *[A-Za-z0-9]+ *\( *[0-9a-f]+ *\) *\) *\) *}/,/ *\) *\) *\) *}/]];BrowserWindow.setTimeout=new Proxy(BrowserWindow.setTimeout,{apply(Target,ThisArg,Args){if(ASTimerRegExps.filter(ASTimerRegExp=>ASTimerRegExp.filter(Index=>Index.test(Args[0].toString())).length>=3).length===1){console.debug(`[${UserscriptName}]: setTimeout:`,Args);return}return Reflect.apply(Target,ThisArg,Args)}}),BrowserWindow.setInterval=new Proxy(BrowserWindow.setInterval,{apply(Target,ThisArg,Args){if(ASTimerRegExps.filter(ASTimerRegExp=>ASTimerRegExp.filter(Index=>Index.test(Args[0].toString())).length>=3).length===1){console.debug(`[${UserscriptName}]: setInterval:`,Args);return}return Reflect.apply(Target,ThisArg,Args)}})}RunTinyShieldUserscript(Win);})();
@@ -0,0 +1 @@
1
+ export { RunTinyShieldUserscript } from './src/index.js';
@@ -0,0 +1 @@
1
+ export declare function CheckDepthInASWeakMap(Args: [object, unknown]): boolean;
@@ -0,0 +1,2 @@
1
+ export declare const OriginalRegExpTest: (string: string) => boolean;
2
+ export declare function RunTinyShieldUserscript(BrowserWindow: typeof window, UserscriptName?: string): void;
@@ -0,0 +1 @@
1
+ export declare function CountCommonStrings(ArrayA: string[], ArrayB: string[]): number;
package/package.json CHANGED
@@ -1,17 +1,27 @@
1
1
  {
2
2
  "name": "@filteringdev/tinyshield",
3
- "version": "2.0.6",
3
+ "version": "2.0.7",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {
7
- "build": "esbuild sources/src/index.ts --bundle --minify-whitespace --minify-syntax --define:global=window --inject:./sources/esbuild.inject.ts --banner:js=\"$(cat ./sources/banner.txt)\" --target=es2024,chrome119,safari17,firefox121 --outfile=./dist/tinyShield.user.js",
7
+ "build:interface": "esbuild sources/interface.ts --bundle --format=esm --splitting --sourcemap --target=es2024 --external:/node_modules --outdir=dist && tsc sources/interface.ts --outDir dist/types --declaration --emitDeclarationOnly",
8
+ "build:userscript": "esbuild sources/src/index.ts --bundle --minify-whitespace --minify-syntax --define:global=window --inject:./sources/esbuild.inject.ts --banner:js=\"$(cat ./sources/banner.txt)\" --target=es2024,chrome119,safari17,firefox121 --outfile=./dist/tinyShield.user.js",
9
+ "build": "npm run build:interface && npm run build:userscript",
8
10
  "debug": "esbuild sources/src/index.ts --bundle --define:global=window --inject:./sources/esbuild.inject.ts --banner:js=\"$(cat ./sources/banner.txt)\" --target=es2024,chrome119,safari17,firefox121 --outfile=./dist/tinyShield-debug.user.js",
9
11
  "lint": "tsc --noEmit && eslint sources/**/*.ts"
10
12
  },
11
- "keywords": [],
13
+ "keywords": [
14
+ "Ad-Shield"
15
+ ],
12
16
  "files": [
13
- "dist"
17
+ "dist/**/*"
14
18
  ],
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/interface.js",
22
+ "types": "./dist/types/interface.d.ts"
23
+ }
24
+ },
15
25
  "repository": {
16
26
  "type": "git",
17
27
  "url": "git+https://github.com/FilteringDev/tinyShield.git"