@@ -6,99 +6,105 @@ const Win = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window
6
6
7
7
import { CheckDepthInASWeakMap } from './as-weakmap.js'
8
8
9
- const OriginalArrayToString = Win . Array . prototype . toString
10
9
export const OriginalRegExpTest = Win . RegExp . prototype . test
11
10
12
- const ProtectedFunctionStrings = [ 'toString' , 'get' , 'set' ]
11
+ export function RunTinyShieldUserscript ( BrowserWindow : typeof window , UserscriptName : string = 'tinyShield' ) : void {
12
+ const OriginalArrayToString = BrowserWindow . Array . prototype . toString
13
+ const OriginalRegExpTest = BrowserWindow . RegExp . prototype . test
13
14
14
- Win . Function . prototype . toString = new Proxy ( Win . Function . prototype . toString , {
15
- // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
16
- apply ( Target : ( ) => string , ThisArg : Function , Args : null ) {
17
- if ( ProtectedFunctionStrings . includes ( ThisArg . name ) ) {
18
- return `function ${ ThisArg . name } () { [native code] }`
19
- } else {
20
- return Reflect . apply ( Target , ThisArg , Args )
21
- }
22
- }
23
- } )
15
+ const ProtectedFunctionStrings = [ 'toString' , 'get' , 'set' ]
24
16
25
- const ASInitPositiveRegExps : RegExp [ ] [ ] = [ [
26
- / [ a - z A - Z 0 - 9 ] + * = > * { * c o n s t * [ a - z A - Z 0 - 9 ] + * = * [ a - z A - Z 0 - 9 ] + * ; * i f / ,
27
- / = = = ? * [ a - z A - Z 0 - 9 ] + * \[ * [ a - z A - Z 0 - 9 ] + \( * [ 0 - 9 a - z ] + * \) * \] * \) * r e t u r n * [ a - z A - Z 0 - 9 ] + * \( * { * ( ' | " ) ? i n v e n t o r y I d ( ' | " ) ? * : / ,
28
- / { * ( ' | " ) ? i n v e n t o r y I d ( ' | " ) ? * : * t h i s * \[ [ a - z A - Z 0 - 9 ] + * \( * [ 0 - 9 a - z ] + * \) * \] * , * \. \. \. * [ a - z A - Z 0 - 9 ] + * \[ * [ a - z A - Z 0 - 9 ] + * \( * [ 0 - 9 a - z ] + * * \) * \] * } * \) /
29
- ] ]
30
- Win . Map . prototype . get = new Proxy ( Win . Map . prototype . get , {
31
- apply ( Target : ( key : unknown ) => unknown , ThisArg : Map < unknown , unknown > , Args : [ unknown ] ) {
32
- if ( Args . length > 0 && typeof Args [ 0 ] !== 'function' ) {
33
- return Reflect . apply ( Target , ThisArg , Args )
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 : ( ) => string , ThisArg : Function , Args : null ) {
20
+ if ( ProtectedFunctionStrings . includes ( ThisArg . name ) ) {
21
+ return `function ${ ThisArg . name } () { [native code] }`
22
+ } else {
23
+ return Reflect . apply ( Target , ThisArg , Args )
24
+ }
34
25
}
26
+ } )
35
27
36
- let ArgText = OriginalArrayToString . call ( Args ) as string
37
- if ( ASInitPositiveRegExps . filter ( ASInitPositiveRegExp => ASInitPositiveRegExp . filter ( Index => OriginalRegExpTest . call ( Index , ArgText ) as boolean ) . length >= 2 ) . length === 1 ) {
38
- console . debug ( '[tinyShield]: Map.prototype.get:' , ThisArg , Args )
39
- throw new Error ( )
40
- }
28
+ const ASInitPositiveRegExps : RegExp [ ] [ ] = [ [
29
+ / [ a - z A - Z 0 - 9 ] + * = > * { * c o n s t * [ a - z A - Z 0 - 9 ] + * = * [ a - z A - Z 0 - 9 ] + * ; * i f / ,
30
+ / = = = ? * [ a - z A - Z 0 - 9 ] + * \[ * [ a - z A - Z 0 - 9 ] + \( * [ 0 - 9 a - z ] + * \) * \] * \) * r e t u r n * [ a - z A - Z 0 - 9 ] + * \( * { * ( ' | " ) ? i n v e n t o r y I d ( ' | " ) ? * : / ,
31
+ / { * ( ' | " ) ? i n v e n t o r y I d ( ' | " ) ? * : * t h i s * \[ [ a - z A - Z 0 - 9 ] + * \( * [ 0 - 9 a - z ] + * \) * \] * , * \. \. \. * [ a - z A - Z 0 - 9 ] + * \[ * [ a - z A - Z 0 - 9 ] + * \( * [ 0 - 9 a - z ] + * * \) * \] * } * \) /
32
+ ] ]
33
+ BrowserWindow . Map . prototype . get = new Proxy ( BrowserWindow . Map . prototype . get , {
34
+ apply ( Target : ( key : unknown ) => unknown , ThisArg : Map < unknown , unknown > , Args : [ unknown ] ) {
35
+ if ( Args . length > 0 && typeof Args [ 0 ] !== 'function' ) {
36
+ return Reflect . apply ( Target , ThisArg , Args )
37
+ }
41
38
42
- return Reflect . apply ( Target , ThisArg , Args )
43
- }
44
- } )
39
+ let ArgText = OriginalArrayToString . call ( Args ) as string
40
+ if ( ASInitPositiveRegExps . filter ( ASInitPositiveRegExp => ASInitPositiveRegExp . filter ( Index => OriginalRegExpTest . call ( Index , ArgText ) as boolean ) . length >= 2 ) . length === 1 ) {
41
+ console . debug ( `[${ UserscriptName } ]: Map.prototype.get:` , ThisArg , Args )
42
+ throw new Error ( )
43
+ }
45
44
46
- const ASReinsertedAdvInvenPositiveRegExps : RegExp [ ] [ ] = [ [
47
- / i n v e n t o r y _ i d , [ a - z A - Z 0 - 9 - ] + \/ [ a - z A - Z 0 - 9 ] + \/ [ a - z A - Z 0 - 9 ] + / ,
48
- / i n v e n t o r y _ i d , [ a - z A - Z 0 - 9 - ] + \/ [ a - z A - Z 0 - 9 ] + \/ [ a - z A - Z 0 - 9 ] + / ,
49
- / i n v e n t o r y _ i d , [ a - z A - Z 0 - 9 - ] + \/ [ a - z A - Z 0 - 9 ] + \/ [ a - z A - Z 0 - 9 ] + /
50
- ] , [
51
- / [ a - z 0 - 9 A - Z ] + \. s e t A t t r i b u t e \( * ( ' | " ) o n l o a d ( ' | " ) * , * ( ' | " ) ! * a s y n c * f u n c t i o n \( * \) * \{ * l e t * / ,
52
- / c o n f i r m \( * [ A - Z a - z 0 - 9 ] + * \) * \) * { * c o n s t * [ A - Z a - z 0 - 9 ] + * = * n e w * [ A - Z a - z 0 - 9 ] + \. U R L \( ( ' | " ) h t t p s : \/ \/ r e p o r t \. e r r o r - r e p o r t \. c o m \/ / ,
53
- / \. f o r E a c h * \( * \( * [ A - Z a - z 0 - 9 ] + * = > * [ A - Z a - z 0 - 9 ] + \. r e m o v e * \( * \) * \) * \) * \) * , * [ 0 - 9 a - f ] + * \) * ; * c o n s t * [ A - Z a - z 0 - 9 ] + * = * a w a i t * \( * a w a i t * f e t c h * \( /
54
- ] ]
55
- Win . Map . prototype . set = new Proxy ( Win . Map . prototype . set , {
56
- apply ( Target : ( key : unknown , value : unknown ) => Map < unknown , unknown > , ThisArg : Map < unknown , unknown > , Args : [ unknown , unknown ] ) {
57
- let ArgText = ''
58
- try {
59
- ArgText = OriginalArrayToString . call ( Args ) as string
60
- } catch {
61
- console . warn ( '[tinyShield]: Map.prototype.set:' , ThisArg , Args )
62
- }
63
- if ( ASReinsertedAdvInvenPositiveRegExps . filter ( ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp . filter ( Index => OriginalRegExpTest . call ( Index , ArgText ) as boolean ) . length >= 3 ) . length === 1 ) {
64
- console . debug ( '[tinyShield]: Map.prototype.set:' , ThisArg , Args )
65
- throw new Error ( )
45
+ return Reflect . apply ( Target , ThisArg , Args )
66
46
}
67
- return Reflect . apply ( Target , ThisArg , Args )
68
- }
69
- } )
47
+ } )
70
48
71
- Win . WeakMap . prototype . set = new Proxy ( Win . WeakMap . prototype . set , {
72
- apply ( Target : ( key : object , value : unknown ) => WeakMap < object , unknown > , ThisArg : WeakMap < object , unknown > , Args : [ object , unknown ] ) {
73
- if ( CheckDepthInASWeakMap ( Args ) ) {
74
- console . debug ( '[tinyShield]: WeakMap.prototype.set:' , ThisArg , Args )
75
- throw new Error ( )
49
+ const ASReinsertedAdvInvenPositiveRegExps : RegExp [ ] [ ] = [ [
50
+ / i n v e n t o r y _ i d , [ a - z A - Z 0 - 9 - ] + \/ [ a - z A - Z 0 - 9 ] + \/ [ a - z A - Z 0 - 9 ] + / ,
51
+ / i n v e n t o r y _ i d , [ a - z A - Z 0 - 9 - ] + \/ [ a - z A - Z 0 - 9 ] + \/ [ a - z A - Z 0 - 9 ] + / ,
52
+ / i n v e n t o r y _ i d , [ a - z A - Z 0 - 9 - ] + \/ [ a - z A - Z 0 - 9 ] + \/ [ a - z A - Z 0 - 9 ] + /
53
+ ] , [
54
+ / [ a - z 0 - 9 A - Z ] + \. s e t A t t r i b u t e \( * ( ' | " ) o n l o a d ( ' | " ) * , * ( ' | " ) ! * a s y n c * f u n c t i o n \( * \) * \{ * l e t * / ,
55
+ / c o n f i r m \( * [ A - Z a - z 0 - 9 ] + * \) * \) * { * c o n s t * [ A - Z a - z 0 - 9 ] + * = * n e w * [ A - Z a - z 0 - 9 ] + \. U R L \( ( ' | " ) h t t p s : \/ \/ r e p o r t \. e r r o r - r e p o r t \. c o m \/ / ,
56
+ / \. f o r E a c h * \( * \( * [ A - Z a - z 0 - 9 ] + * = > * [ A - Z a - z 0 - 9 ] + \. r e m o v e * \( * \) * \) * \) * \) * , * [ 0 - 9 a - f ] + * \) * ; * c o n s t * [ A - Z a - z 0 - 9 ] + * = * a w a i t * \( * a w a i t * f e t c h * \( /
57
+ ] ]
58
+ BrowserWindow . Map . prototype . set = new Proxy ( BrowserWindow . Map . prototype . set , {
59
+ apply ( Target : ( key : unknown , value : unknown ) => Map < unknown , unknown > , ThisArg : Map < unknown , unknown > , Args : [ unknown , unknown ] ) {
60
+ let ArgText = ''
61
+ try {
62
+ ArgText = OriginalArrayToString . call ( Args ) as string
63
+ } catch {
64
+ console . warn ( `[${ UserscriptName } ]: Map.prototype.set:` , ThisArg , Args )
65
+ }
66
+ if ( ASReinsertedAdvInvenPositiveRegExps . filter ( ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp . filter ( Index => OriginalRegExpTest . call ( Index , ArgText ) as boolean ) . length >= 3 ) . length === 1 ) {
67
+ console . debug ( `[${ UserscriptName } ]: Map.prototype.set:` , ThisArg , Args )
68
+ throw new Error ( )
69
+ }
70
+ return Reflect . apply ( Target , ThisArg , Args )
76
71
}
72
+ } )
77
73
78
- return Reflect . apply ( Target , ThisArg , Args )
79
- }
80
- } )
74
+ BrowserWindow . WeakMap . prototype . set = new Proxy ( BrowserWindow . WeakMap . prototype . set , {
75
+ apply ( Target : ( key : object , value : unknown ) => WeakMap < object , unknown > , ThisArg : WeakMap < object , unknown > , Args : [ object , unknown ] ) {
76
+ if ( CheckDepthInASWeakMap ( Args ) ) {
77
+ console . debug ( `[${ UserscriptName } ]: WeakMap.prototype.set:` , ThisArg , Args )
78
+ throw new Error ( )
79
+ }
81
80
82
- let ASTimerRegExps : RegExp [ ] [ ] = [ [
83
- / a s y n c * \( * \) * = > * { * c o n s t * [ A - Z a - z 0 - 9 ] + * = * [ A - Z a - z 0 - 9 ] + * ; * a w a i t * [ A - Z a - z 0 - 9 ] + * \( * \) / ,
84
- / ; * a w a i t * [ A - Z a - z 0 - 9 ] + * \( * \) * , * [ A - Z a - z 0 - 9 ] + * \( * ! * 1 * , * n e w * E r r o r * \( * [ A - Z a - z 0 - 9 ] + * \( * [ 0 - 9 a - f ] + * \) * \) * \) * } / ,
85
- / * \) * \) * \) * } /
86
- ] ]
87
- Win . setTimeout = new Proxy ( Win . setTimeout , {
88
- apply ( Target : typeof Win . setTimeout , ThisArg : undefined , Args : Parameters < typeof setTimeout > ) {
89
- if ( ASTimerRegExps . filter ( ASTimerRegExp => ASTimerRegExp . filter ( Index => Index . test ( Args [ 0 ] . toString ( ) ) ) . length >= 3 ) . length === 1 ) {
90
- console . debug ( '[tinyShield]: setTimeout:' , Args )
91
- return
81
+ return Reflect . apply ( Target , ThisArg , Args )
82
+ }
83
+ } )
84
+
85
+ let ASTimerRegExps : RegExp [ ] [ ] = [ [
86
+ / a s y n c * \( * \) * = > * { * c o n s t * [ A - Z a - z 0 - 9 ] + * = * [ A - Z a - z 0 - 9 ] + * ; * a w a i t * [ A - Z a - z 0 - 9 ] + * \( * \) / ,
87
+ / ; * a w a i t * [ A - Z a - z 0 - 9 ] + * \( * \) * , * [ A - Z a - z 0 - 9 ] + * \( * ! * 1 * , * n e w * E r r o r * \( * [ A - Z a - z 0 - 9 ] + * \( * [ 0 - 9 a - f ] + * \) * \) * \) * } / ,
88
+ / * \) * \) * \) * } /
89
+ ] ]
90
+ BrowserWindow . setTimeout = new Proxy ( BrowserWindow . setTimeout , {
91
+ apply ( Target : typeof BrowserWindow . setTimeout , ThisArg : undefined , Args : Parameters < typeof setTimeout > ) {
92
+ if ( ASTimerRegExps . filter ( ASTimerRegExp => ASTimerRegExp . filter ( Index => Index . test ( Args [ 0 ] . toString ( ) ) ) . length >= 3 ) . length === 1 ) {
93
+ console . debug ( `[${ UserscriptName } ]: setTimeout:` , Args )
94
+ return
95
+ }
96
+ return Reflect . apply ( Target , ThisArg , Args )
92
97
}
93
- return Reflect . apply ( Target , ThisArg , Args )
94
- }
95
- } )
96
- Win . setInterval = new Proxy ( Win . setInterval , {
97
- apply ( Target : typeof Win . setInterval , ThisArg : undefined , Args : Parameters < typeof setInterval > ) {
98
- if ( ASTimerRegExps . filter ( ASTimerRegExp => ASTimerRegExp . filter ( Index => Index . test ( Args [ 0 ] . toString ( ) ) ) . length >= 3 ) . length === 1 ) {
99
- console . debug ( '[tinyShield]: setInterval:' , Args )
100
- return
98
+ } )
99
+ BrowserWindow . setInterval = new Proxy ( BrowserWindow . setInterval , {
100
+ apply ( Target : typeof BrowserWindow . setInterval , ThisArg : undefined , Args : Parameters < typeof setInterval > ) {
101
+ if ( ASTimerRegExps . filter ( ASTimerRegExp => ASTimerRegExp . filter ( Index => Index . test ( Args [ 0 ] . toString ( ) ) ) . length >= 3 ) . length === 1 ) {
102
+ console . debug ( `[ ${ UserscriptName } ]: setInterval:` , Args )
103
+ return
104
+ }
105
+ return Reflect . apply ( Target , ThisArg , Args )
101
106
}
102
- return Reflect . apply ( Target , ThisArg , Args )
103
- }
104
- } )
107
+ } )
108
+ }
109
+
110
+ RunTinyShieldUserscript ( Win )
0 commit comments