@filteringdev/tinyshield 3.5.2 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -9,10 +9,13 @@
9
9
  */
10
10
  const Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;
11
11
  import { CheckDepthInASWeakMap } from './as-weakmap.js';
12
+ import { SafeArrayToString } from './safe-ArrayToString.js';
12
13
  export const OriginalRegExpTest = Win.RegExp.prototype.test;
13
14
  export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShield') {
14
- const OriginalArrayToString = BrowserWindow.Array.prototype.toString;
15
15
  const OriginalRegExpTest = BrowserWindow.RegExp.prototype.test;
16
+ const OriginalArrayMap = BrowserWindow.Array.prototype.map;
17
+ const OriginalString = BrowserWindow.String;
18
+ const OriginalArrayJoin = BrowserWindow.Array.prototype.join;
16
19
  const ProtectedFunctionStrings = ['toString', 'get', 'set'];
17
20
  BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {
18
21
  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
@@ -35,7 +38,7 @@ export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShi
35
38
  if (Args.length > 0 && typeof Args[0] !== 'function') {
36
39
  return Reflect.apply(Target, ThisArg, Args);
37
40
  }
38
- let ArgText = OriginalArrayToString.call(Args);
41
+ let ArgText = SafeArrayToString(Args, { OriginalArrayMap, OriginalString, OriginalArrayJoin });
39
42
  if (ASInitPositiveRegExps.filter(ASInitPositiveRegExp => ASInitPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 2).length === 1) {
40
43
  console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args);
41
44
  throw new Error();
@@ -55,12 +58,7 @@ export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShi
55
58
  BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {
56
59
  apply(Target, ThisArg, Args) {
57
60
  let ArgText = '';
58
- try {
59
- ArgText = OriginalArrayToString.call(Args);
60
- }
61
- catch {
62
- console.warn(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
63
- }
61
+ ArgText = SafeArrayToString(Args, { OriginalArrayMap, OriginalString, OriginalArrayJoin });
64
62
  if (ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 3).length === 1) {
65
63
  console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
66
64
  throw new Error();
@@ -0,0 +1,7 @@
1
+ type OriginalAPI = {
2
+ OriginalArrayMap: typeof Array.prototype.map;
3
+ OriginalString: typeof String;
4
+ OriginalArrayJoin: typeof Array.prototype.join;
5
+ };
6
+ export declare function SafeArrayToString(This: unknown[], OriginalAPI: OriginalAPI): string;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ export function SafeArrayToString(This, OriginalAPI) {
2
+ const Mapped = OriginalAPI.OriginalArrayMap.call(This, (Value) => OriginalAPI.OriginalString(Value));
3
+ return OriginalAPI.OriginalArrayJoin.call(Mapped);
4
+ }
@@ -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.5.2
11
+ // @version 3.6.1
12
12
  // @author PiQuark6046 and contributors
13
13
  //
14
14
  // @grant unsafeWindow
@@ -3142,6 +3142,8 @@
3142
3142
  // @match *://*.celebritynetworth.com/*
3143
3143
  // @match *://sugarspunrun.com/*
3144
3144
  // @match *://*.sugarspunrun.com/*
3145
+ // @match *://tcdb.com/*
3146
+ // @match *://*.tcdb.com/*
3145
3147
  // @match *://mtgdecks.net/*
3146
3148
  // @match *://*.mtgdecks.net/*
3147
3149
  // @match *://preppykitchen.com/*
@@ -3174,6 +3176,8 @@
3174
3176
  // @match *://*.justapinch.com/*
3175
3177
  // @match *://ladysavings.com/*
3176
3178
  // @match *://*.ladysavings.com/*
3179
+ // @match *://idrlabs.com/*
3180
+ // @match *://*.idrlabs.com/*
3177
3181
  // @match *://panlasangpinoy.com/*
3178
3182
  // @match *://*.panlasangpinoy.com/*
3179
3183
  // @match *://cookingclassy.com/*
@@ -3512,6 +3516,8 @@
3512
3516
  // @match *://*.ih8mud.com/*
3513
3517
  // @match *://calculator.academy/*
3514
3518
  // @match *://*.calculator.academy/*
3519
+ // @match *://keytomylime.com/*
3520
+ // @match *://*.keytomylime.com/*
3515
3521
  // @match *://butterbeready.com/*
3516
3522
  // @match *://*.butterbeready.com/*
3517
3523
  // @match *://snap.fan/*
@@ -4078,6 +4084,8 @@
4078
4084
  // @match *://*.evolvingtable.com/*
4079
4085
  // @match *://runtothefinish.com/*
4080
4086
  // @match *://*.runtothefinish.com/*
4087
+ // @match *://unboundwellness.com/*
4088
+ // @match *://*.unboundwellness.com/*
4081
4089
  // @match *://neighborfoodblog.com/*
4082
4090
  // @match *://*.neighborfoodblog.com/*
4083
4091
  // @match *://fortressofsolitude.co.za/*
@@ -4098,6 +4106,8 @@
4098
4106
  // @match *://*.intoindiegames.com/*
4099
4107
  // @match *://healthygffamily.com/*
4100
4108
  // @match *://*.healthygffamily.com/*
4109
+ // @match *://homesteadandchill.com/*
4110
+ // @match *://*.homesteadandchill.com/*
4101
4111
  // @match *://emilybites.com/*
4102
4112
  // @match *://*.emilybites.com/*
4103
4113
  // @match *://gamingsmart.com/*
@@ -4186,6 +4196,8 @@
4186
4196
  // @match *://*.navylookout.com/*
4187
4197
  // @match *://apetogentleman.com/*
4188
4198
  // @match *://*.apetogentleman.com/*
4199
+ // @match *://ffxnow.com/*
4200
+ // @match *://*.ffxnow.com/*
4189
4201
  // @match *://thecookiedoughdiaries.com/*
4190
4202
  // @match *://*.thecookiedoughdiaries.com/*
4191
4203
  // @match *://fashionbeans.com/*
@@ -4724,6 +4736,8 @@
4724
4736
  // @match *://*.whiteonricecouple.com/*
4725
4737
  // @match *://anoregoncottage.com/*
4726
4738
  // @match *://*.anoregoncottage.com/*
4739
+ // @match *://foodstruct.com/*
4740
+ // @match *://*.foodstruct.com/*
4727
4741
  // @match *://sweetsimplevegan.com/*
4728
4742
  // @match *://*.sweetsimplevegan.com/*
4729
4743
  // @match *://lynnswayoflife.com/*
@@ -4872,6 +4886,8 @@
4872
4886
  // @match *://*.ketocookingchristian.com/*
4873
4887
  // @match *://gardeninthekitchen.com/*
4874
4888
  // @match *://*.gardeninthekitchen.com/*
4889
+ // @match *://alxnow.com/*
4890
+ // @match *://*.alxnow.com/*
4875
4891
  // @match *://droidgamers.com/*
4876
4892
  // @match *://*.droidgamers.com/*
4877
4893
  // @match *://hanjancrochet.com/*
@@ -4908,6 +4924,8 @@
4908
4924
  // @match *://*.suebeehomemaker.com/*
4909
4925
  // @match *://attractionsmagazine.com/*
4910
4926
  // @match *://*.attractionsmagazine.com/*
4927
+ // @match *://travelawaits.com/*
4928
+ // @match *://*.travelawaits.com/*
4911
4929
  // @match *://wendypolisi.com/*
4912
4930
  // @match *://*.wendypolisi.com/*
4913
4931
  // @match *://onmykidsplate.com/*
@@ -10522,6 +10540,8 @@
10522
10540
  // @match *://*.gundamcard.gg/*
10523
10541
  // @match *://hermitcrabanswers.com/*
10524
10542
  // @match *://*.hermitcrabanswers.com/*
10543
+ // @match *://holistichealthherbalist.com/*
10544
+ // @match *://*.holistichealthherbalist.com/*
10525
10545
  // @match *://homeoomph.com/*
10526
10546
  // @match *://*.homeoomph.com/*
10527
10547
  // @match *://iteachtoo.com/*
@@ -12022,6 +12042,8 @@
12022
12042
  // @match *://*.heraldm.com/*
12023
12043
  // @match *://razzball.com/*
12024
12044
  // @match *://*.razzball.com/*
12045
+ // @match *://geo.fr/*
12046
+ // @match *://*.geo.fr/*
12025
12047
  // @match *://freeconvert.com/*
12026
12048
  // @match *://*.freeconvert.com/*
12027
12049
  // @match *://pcgamebenchmark.com/*
@@ -13132,6 +13154,8 @@
13132
13154
  // @match *://*.yahoo.com/*
13133
13155
  // @match *://quizlet.com/*
13134
13156
  // @match *://*.quizlet.com/*
13157
+ // @match *://apnews.com/*
13158
+ // @match *://*.apnews.com/*
13135
13159
  // @match *://neowin.net/*
13136
13160
  // @match *://*.neowin.net/*
13137
13161
  // @match *://cboard.net/*
@@ -13202,6 +13226,8 @@
13202
13226
  // @match *://*.references.be/*
13203
13227
  // @match *://roleplayer.me/*
13204
13228
  // @match *://*.roleplayer.me/*
13229
+ // @match *://rotowire.com/*
13230
+ // @match *://*.rotowire.com/*
13205
13231
  // @match *://statecollege.com/*
13206
13232
  // @match *://*.statecollege.com/*
13207
13233
  // @match *://szamoldki.hu/*
@@ -13653,7 +13679,7 @@
13653
13679
  // ==/UserScript==
13654
13680
 
13655
13681
 
13656
- (()=>{function s(t,a){let u=new Set(a);return new Set(t.filter(l=>u.has(l))).size}function z(t){if(typeof t[0]!="object"||s(["device","id","imp","regs","site","source"],Object.keys(t[0]))<5)return!1;let a=/^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;return!(typeof Object.keys(t[0]).find(r=>typeof t[0][r]=="object"&&Array.isArray(t[0][r])&&t[0][r].filter(l=>typeof l=="object"&&Object.keys(l).filter(y=>typeof y=="string"&&Z.call(a,y))).length>=1)>"u")}var k=typeof unsafeWindow<"u"?unsafeWindow:window,Z=k.RegExp.prototype.test;function m(t,a="tinyShield"){let u=t.Array.prototype.toString,r=t.RegExp.prototype.test,l=["toString","get","set"];t.Function.prototype.toString=new Proxy(t.Function.prototype.toString,{apply(o,n,e){return l.includes(n.name)?`function ${n.name}() { [native code] }`:Reflect.apply(o,n,e)}});let y=[[/[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]+ * *\) *\] *} *\)/]];t.Map.prototype.get=new Proxy(t.Map.prototype.get,{apply(o,n,e){if(e.length>0&&typeof e[0]!="function")return Reflect.apply(o,n,e);let p=u.call(e);if(y.filter(i=>i.filter(f=>r.call(f,p)).length>=2).length===1)throw console.debug(`[${a}]: Map.prototype.get:`,n,e),new Error;return Reflect.apply(o,n,e)}});let d=[[/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 *\(/]];t.Map.prototype.set=new Proxy(t.Map.prototype.set,{apply(o,n,e){let p="";try{p=u.call(e)}catch{console.warn(`[${a}]: Map.prototype.set:`,n,e)}if(d.filter(i=>i.filter(f=>r.call(f,p)).length>=3).length===1)throw console.debug(`[${a}]: Map.prototype.set:`,n,e),new Error;return Reflect.apply(o,n,e)}}),t.WeakMap.prototype.set=new Proxy(t.WeakMap.prototype.set,{apply(o,n,e){if(z(e))throw console.debug(`[${a}]: WeakMap.prototype.set:`,n,e),new Error;return Reflect.apply(o,n,e)}});let c=[[/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]+ *\) *\) *\) *}/,/ *\) *\) *\) *}/]];t.setTimeout=new Proxy(t.setTimeout,{apply(o,n,e){if(c.filter(p=>p.filter(i=>i.test(e[0].toString())).length>=3).length===1){console.debug(`[${a}]: setTimeout:`,e);return}return Reflect.apply(o,n,e)}}),t.setInterval=new Proxy(t.setInterval,{apply(o,n,e){if(c.filter(p=>p.filter(i=>i.test(e[0].toString())).length>=3).length===1){console.debug(`[${a}]: setInterval:`,e);return}return Reflect.apply(o,n,e)}})}m(k);})();
13682
+ (()=>{function g(t,o){let i=new Set(o);return new Set(t.filter(l=>i.has(l))).size}function z(t){if(typeof t[0]!="object"||g(["device","id","imp","regs","site","source"],Object.keys(t[0]))<5)return!1;let o=/^[0-9]+\/[a-zA-Z0-9]+\/[a-zA-Z0-9]+\/[a-z0-9-\(\)]+\/[a-zA-Z0-9_]+_slot[0-9]+_+/;return!(typeof Object.keys(t[0]).find(r=>typeof t[0][r]=="object"&&Array.isArray(t[0][r])&&t[0][r].filter(l=>typeof l=="object"&&Object.keys(l).filter(u=>typeof u=="string"&&k.call(o,u))).length>=1)>"u")}function c(t,o){let i=o.OriginalArrayMap.call(t,r=>o.OriginalString(r));return o.OriginalArrayJoin.call(i)}var Z=typeof unsafeWindow<"u"?unsafeWindow:window,k=Z.RegExp.prototype.test;function w(t,o="tinyShield"){let i=t.RegExp.prototype.test,r=t.Array.prototype.map,l=t.String,u=t.Array.prototype.join,m=["toString","get","set"];t.Function.prototype.toString=new Proxy(t.Function.prototype.toString,{apply(a,n,e){return m.includes(n.name)?`function ${n.name}() { [native code] }`:Reflect.apply(a,n,e)}});let A=[[/[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]+ * *\) *\] *} *\)/]];t.Map.prototype.get=new Proxy(t.Map.prototype.get,{apply(a,n,e){if(e.length>0&&typeof e[0]!="function")return Reflect.apply(a,n,e);let p=c(e,{OriginalArrayMap:r,OriginalString:l,OriginalArrayJoin:u});if(A.filter(y=>y.filter(f=>i.call(f,p)).length>=2).length===1)throw console.debug(`[${o}]: Map.prototype.get:`,n,e),new Error;return Reflect.apply(a,n,e)}});let S=[[/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 *\(/]];t.Map.prototype.set=new Proxy(t.Map.prototype.set,{apply(a,n,e){let p="";if(p=c(e,{OriginalArrayMap:r,OriginalString:l,OriginalArrayJoin:u}),S.filter(y=>y.filter(f=>i.call(f,p)).length>=3).length===1)throw console.debug(`[${o}]: Map.prototype.set:`,n,e),new Error;return Reflect.apply(a,n,e)}}),t.WeakMap.prototype.set=new Proxy(t.WeakMap.prototype.set,{apply(a,n,e){if(z(e))throw console.debug(`[${o}]: WeakMap.prototype.set:`,n,e),new Error;return Reflect.apply(a,n,e)}});let s=[[/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]+ *\) *\) *\) *}/,/ *\) *\) *\) *}/]];t.setTimeout=new Proxy(t.setTimeout,{apply(a,n,e){if(s.filter(p=>p.filter(y=>y.test(e[0].toString())).length>=3).length===1){console.debug(`[${o}]: setTimeout:`,e);return}return Reflect.apply(a,n,e)}}),t.setInterval=new Proxy(t.setInterval,{apply(a,n,e){if(s.filter(p=>p.filter(y=>y.test(e[0].toString())).length>=3).length===1){console.debug(`[${o}]: setInterval:`,e);return}return Reflect.apply(a,n,e)}})}w(Z);})();
13657
13683
  /*!
13658
13684
  * @license MPL-2.0
13659
13685
  * This Source Code Form is subject to the terms of the Mozilla Public
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@filteringdev/tinyshield",
3
- "version": "3.5.2",
3
+ "version": "3.6.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -27,9 +27,14 @@
27
27
  "url": "git+https://github.com/FilteringDev/tinyShield.git"
28
28
  },
29
29
  "license": "MPL-2.0",
30
- "packageManager": "npm@11.5.1+",
31
30
  "workspaces": [
32
31
  "userscript",
33
32
  "builder"
34
- ]
33
+ ],
34
+ "devDependencies": {
35
+ "@typescript-eslint/eslint-plugin": "^8.56.0",
36
+ "@typescript-eslint/parser": "^8.56.0",
37
+ "eslint": "10",
38
+ "typescript-eslint": "^8.56.0"
39
+ }
35
40
  }