@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.
- package/dist/interface.js +122 -0
- package/dist/interface.js.map +7 -0
- package/dist/tinyShield.user.js +2 -2
- package/dist/types/interface.d.ts +1 -0
- package/dist/types/src/as-weakmap.d.ts +1 -0
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/utils.d.ts +1 -0
- package/package.json +14 -4
|
@@ -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
|
+
}
|
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 MIT
|
|
10
10
|
//
|
|
11
|
-
// @version 2.0.
|
|
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,
|
|
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 @@
|
|
|
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.
|
|
3
|
+
"version": "2.0.7",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build": "esbuild sources/
|
|
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"
|