@filteringdev/tinyshield 2.0.5 → 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 +18 -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/*
|
|
@@ -1526,6 +1526,22 @@
|
|
|
1526
1526
|
// @match *://*.hvac-talk.com/*
|
|
1527
1527
|
// @match *://thecelticblog.com/*
|
|
1528
1528
|
// @match *://*.thecelticblog.com/*
|
|
1529
|
+
// @match *://alfa.lt/*
|
|
1530
|
+
// @match *://*.alfa.lt/*
|
|
1531
|
+
// @match *://bilis.lt/*
|
|
1532
|
+
// @match *://*.bilis.lt/*
|
|
1533
|
+
// @match *://etaplius.lt/*
|
|
1534
|
+
// @match *://*.etaplius.lt/*
|
|
1535
|
+
// @match *://new.mmm.lt/*
|
|
1536
|
+
// @match *://*.new.mmm.lt/*
|
|
1537
|
+
// @match *://raskakcija.lt/*
|
|
1538
|
+
// @match *://*.raskakcija.lt/*
|
|
1539
|
+
// @match *://sudokutable.com/*
|
|
1540
|
+
// @match *://*.sudokutable.com/*
|
|
1541
|
+
// @match *://superhonda.com/*
|
|
1542
|
+
// @match *://*.superhonda.com/*
|
|
1543
|
+
// @match *://thefirearmblog.com/*
|
|
1544
|
+
// @match *://*.thefirearmblog.com/*"
|
|
1529
1545
|
//
|
|
1530
1546
|
// @description tinyShield allows AdGuard, uBlock Origin, Brave and ABP to resist against Ad-Shield quickly.
|
|
1531
1547
|
// @description:ko tinyShield는 AdGuard, uBlock Origin, Brave 와 ABP가 애드쉴드에 빠르게 저항할 수 있도록 합니다.
|
|
@@ -1534,4 +1550,4 @@
|
|
|
1534
1550
|
// @grant unsafeWindow
|
|
1535
1551
|
// @run-at document-start
|
|
1536
1552
|
// ==/UserScript==
|
|
1537
|
-
(()=>{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"
|