1
1
import browser from 'webextension-polyfill' ;
2
2
import transform from './transform.js' ;
3
3
4
- function jsHandler ( event ) {
5
- let filter = browser . webRequest . filterResponseData ( event . requestId ) ;
6
-
7
- let buf = '' ;
8
- let decoder = new TextDecoder ( 'utf-8' ) ;
9
- const encoder = new TextEncoder ( ) ;
10
-
11
- filter . ondata = event => {
12
- buf += decoder . decode ( event . data , { stream : true } ) ;
13
- } ;
14
-
15
- filter . onstop = ( ) => {
16
- const script = transform ( buf ) ;
17
- filter . write ( encoder . encode ( script ) ) ;
18
- filter . disconnect ( ) ;
19
- } ;
20
-
21
- return { } ;
4
+ function jsHandler ( ) {
5
+ return { cancel : true } ;
22
6
}
23
7
24
8
function requestCacheHandler ( event ) {
@@ -27,11 +11,25 @@ function requestCacheHandler(event) {
27
11
} ;
28
12
}
29
13
30
- const filter = {
31
- urls : [ 'https://d35iw2jmbg6ut8.cloudfront.net/static/js/main.*.chunk.js' ]
32
- } ;
14
+ async function transformRequestHandler ( mainScriptFilename ) {
15
+ const mainScriptUrl = `https://d35iw2jmbg6ut8.cloudfront.net/static/js/${ mainScriptFilename } ` ;
33
16
34
- browser . webRequest . onBeforeRequest . addListener ( jsHandler , filter , [ 'blocking' ] ) ;
35
- browser . webRequest . onBeforeSendHeaders . addListener ( requestCacheHandler , filter , [ 'blocking' , 'requestHeaders' ] ) ;
17
+ const req = await fetch ( mainScriptUrl ) ;
18
+ const origScript = await req . text ( ) ;
19
+
20
+ const transformedScript = transform ( origScript ) ;
21
+
22
+ return transformedScript ;
23
+ }
24
+
25
+ const urls = [ 'https://d35iw2jmbg6ut8.cloudfront.net/static/js/main.*.chunk.js' ]
26
+
27
+ browser . webRequest . onBeforeRequest . addListener ( jsHandler , {
28
+ urls,
29
+ types : [ 'script' ]
30
+ } , [ 'blocking' ] ) ;
31
+ browser . webRequest . onBeforeSendHeaders . addListener ( requestCacheHandler , { urls } , [ 'blocking' , 'requestHeaders' ] ) ;
36
32
37
33
browser . webRequest . handlerBehaviorChanged ( ) ;
34
+
35
+ browser . runtime . onMessage . addListener ( transformRequestHandler ) ;
0 commit comments