@@ -4,13 +4,11 @@ UfsGlobal.Extension = {
44 // use basic customEvent technique - only communicate within the same document or window context
55 sendToContentScript ( event , data ) {
66 return new Promise ( ( resolve , reject ) => {
7- let listenerKey = "ufs-contentscript-sendto-pagescript" ;
87 let uuid = Math . random ( ) . toString ( 36 ) ;
8+ let listenerKey = "ufs-contentscript-sendto-pagescript" + uuid ;
99 let listener = ( evt ) => {
10- if ( evt . detail . event === event && evt . detail . uuid === uuid ) {
11- resolve ( evt . detail . data ) ;
12- window . removeEventListener ( listenerKey , listener ) ;
13- }
10+ resolve ( evt . detail . data ) ;
11+ window . removeEventListener ( listenerKey , listener ) ;
1412 } ;
1513 window . addEventListener ( listenerKey , listener ) ;
1614 window . dispatchEvent (
@@ -33,22 +31,21 @@ UfsGlobal.Extension = {
3331 params,
3432 } ) ;
3533 } ,
36- fetchByPassOrigin ( url , options = { } ) {
37- return new Promise ( ( resolve , reject ) => {
34+ async fetchByPassOrigin ( url , options = { } ) {
35+ try {
36+ let _url = url ;
3837 let urlObject = new URL ( url ) ;
3938 // https://stackoverflow.com/a/9375786/23648002
4039 if ( location . hostname == urlObject ?. hostname ) {
41- url = urlObject . pathname ;
40+ _url = urlObject . pathname ;
4241 }
43- fetch ( url , options )
44- . then ( resolve )
45- . catch ( ( e ) => {
46- console . log ( "NORMAL FETCH FAIL: " , e ) ;
47- UfsGlobal . Extension . runInBackground ( "fetch" , [ url , options ] )
48- . then ( resolve )
49- . catch ( reject ) ;
50- } ) ;
51- } ) ;
42+ let res = await fetch ( _url , options ) ;
43+ return res ;
44+ } catch ( e ) {
45+ console . log ( "NORMAL FETCH FAIL: " , e ) ;
46+ }
47+ let res = await UfsGlobal . Extension . runInBackground ( "fetch" , [ url ] ) ;
48+ return res ;
5249 } ,
5350 getURL ( filePath ) {
5451 return UfsGlobal . Extension . runInContentScript ( "chrome.runtime.getURL" , [
@@ -70,6 +67,18 @@ UfsGlobal.Extension = {
7067 } ,
7168} ;
7269UfsGlobal . DOM = {
70+ closest ( element , selector ) {
71+ let el = element ;
72+ while ( el !== null ) {
73+ if ( el . matches ( selector ) ) return el ;
74+
75+ let found = el . querySelector ( selector ) ;
76+ if ( found ) return found ;
77+
78+ el = el . parentElement ;
79+ }
80+ return el ;
81+ } ,
7382 addLoadingAnimationAtPos (
7483 x ,
7584 y ,
@@ -554,6 +563,39 @@ UfsGlobal.DOM = {
554563 } ,
555564} ;
556565UfsGlobal . Utils = {
566+ async json2xml ( json ) {
567+ if ( ! window . json2xml ) {
568+ let url = await UfsGlobal . Extension . getURL (
569+ "/scripts/libs/xml-json/json2xml.js"
570+ ) ;
571+ await UfsGlobal . DOM . injectScriptSrcAsync ( url ) ;
572+ }
573+ return window . json2xml ( json ) ;
574+ } ,
575+ async xml2json ( xml ) {
576+ if ( ! window . xml2json ) {
577+ let url = await UfsGlobal . Extension . getURL (
578+ "/scripts/libs/xml-json/xml2json.js"
579+ ) ;
580+ await UfsGlobal . DOM . injectScriptSrcAsync ( url ) ;
581+ }
582+ return window . xml2json ( xml ) ;
583+ } ,
584+ getLargestSrcset ( srcset ) {
585+ var srcs = srcset . split ( / [ x w ] , / i) ,
586+ largeSize = - 1 ,
587+ largeSrc = null ;
588+ if ( ! srcs . length ) return null ;
589+ srcs . forEach ( ( srci ) => {
590+ let srcInfo = srci . trim ( ) . split ( / ( \s + | % 2 0 ) / ) ,
591+ curSize = parseInt ( srcInfo [ 2 ] || 0 ) ;
592+ if ( srcInfo [ 0 ] && curSize > largeSize ) {
593+ largeSize = curSize ;
594+ largeSrc = srcInfo [ 0 ] ;
595+ }
596+ } ) ;
597+ return largeSrc ;
598+ } ,
557599 svgBase64ToUrl ( sgvBase64 ) {
558600 try {
559601 if ( ! / ^ d a t a : i m a g e \/ s v g / . test ( sgvBase64 ) ) throw new Error ( "Invalid SVG" ) ;
@@ -1903,8 +1945,11 @@ UfsGlobal.Tiktok = {
19031945 const params = Object . keys ( parameters )
19041946 . map ( ( key ) => `&${ key } =${ parameters [ key ] } ` )
19051947 . join ( "" ) ;
1906- let data = await fetch ( api + videoId + "&" + params ) ;
1907- let json = await data . json ( ) ;
1948+ let data = await UfsGlobal . Extension . runInBackground ( "fetch" , [
1949+ api + videoId + "&" + params ,
1950+ ] ) ;
1951+ console . log ( data ) ;
1952+ let json = JSON . parse ( data . body ) ;
19081953 console . log ( json ) ;
19091954 let item = json . aweme_list . find ( ( a ) => a . aweme_id == videoId ) ;
19101955 if ( ! item ) throw Error ( "Không tìm thấy video" ) ;
@@ -1921,35 +1966,60 @@ UfsGlobal.Tiktok = {
19211966 CACHE : {
19221967 snapTikToken : null ,
19231968 } ,
1924- downloadTiktokVideoFromUrl : async function ( url ) {
1969+ downloadTiktokVideoFromUrl : async function ( url , background = false ) {
19251970 try {
19261971 let token = UfsGlobal . Tiktok . CACHE . snapTikToken ;
19271972 if ( ! token ) {
1928- let token = await UfsGlobal . SnapTik . getToken ( ) ;
1973+ let token = await UfsGlobal . SnapTik . getToken ( background ) ;
19291974 if ( ! token ) throw Error ( "Không tìm thấy token snaptik" ) ;
19301975 UfsGlobal . Tiktok . CACHE . snapTikToken = token ;
19311976 }
19321977
1933- let data = new FormData ( ) ;
1934- data . append ( "url" , url ) ;
1935- data . append ( "token" , token ) ;
1936-
1937- let res = await fetch ( "https://snaptik.app/abc2.php" , {
1938- method : "POST" ,
1939- body : data ,
1940- } ) ;
1941- let text = await res . text ( ) ;
1978+ let form = new FormData ( ) ;
1979+ form . append ( "url" , url ) ;
1980+ form . append ( "token" , token ) ;
1981+
1982+ let text ;
1983+ if ( background ) {
1984+ let res = await UfsGlobal . Extension . runInBackground ( "fetch" , [
1985+ "https://snaptik.app/abc2.php" ,
1986+ {
1987+ method : "POST" ,
1988+ body :
1989+ "ufs-formData:" +
1990+ JSON . stringify ( {
1991+ url : url ,
1992+ token : token ,
1993+ } ) ,
1994+ } ,
1995+ ] ) ;
1996+ text = res . body ;
1997+ } else {
1998+ let res = await fetch ( "https://snaptik.app/abc2.php" , {
1999+ method : "POST" ,
2000+ body : form ,
2001+ } ) ;
2002+ text = await res . text ( ) ;
2003+ }
19422004 let result = UfsGlobal . SnapTik . decode ( text ) ;
19432005 return result ;
19442006 } catch ( e ) {
1945- console . log ( "ERROR: " + e ) ;
2007+ console . log ( "ERROR: " , e ) ;
19462008 }
19472009 } ,
19482010} ;
19492011UfsGlobal . SnapTik = {
1950- getToken : async ( ) => {
1951- let res = await fetch ( "https://snaptik.app/" ) ;
1952- let text = await res . text ( ) ;
2012+ getToken : async ( background = false ) => {
2013+ let text ;
2014+ if ( background ) {
2015+ let res = await UfsGlobal . Extension . runInBackground ( "fetch" , [
2016+ "https://snaptik.app/" ,
2017+ ] ) ;
2018+ text = res . body ;
2019+ } else {
2020+ let res = await fetch ( "https://snaptik.app/" ) ;
2021+ text = await res . text ( ) ;
2022+ }
19532023 let token = text . match ( / n a m e = " t o k e n " v a l u e = " ( .+ ?) " / ) ?. [ 1 ] ;
19542024 return token ;
19552025 } ,
@@ -1998,6 +2068,7 @@ UfsGlobal.SnapTik = {
19982068
19992069 let result = c ( ...params ) ;
20002070 let jwt = result . match ( / d \? t o k e n = ( .* ?) \& d l = 1 / ) ?. [ 1 ] ;
2071+ if ( ! jwt ) return null ;
20012072 let payload = UfsGlobal . Utils . parseJwt ( jwt ) ;
20022073 return payload ?. url ;
20032074 } ,
@@ -2731,11 +2802,27 @@ UfsGlobal.largeImgSiteRules = [
27312802 } ,
27322803] ;
27332804
2734- if ( window ) window . UfsGlobal = UfsGlobal ;
2735-
27362805// export if posible
2737- if ( typeof module !== "undefined" && typeof module . exports !== "undefined" ) {
2738- module . exports = UfsGlobal ;
2739- }
2806+ ( function ( f ) {
2807+ if ( typeof exports === "object" && typeof module !== "undefined" ) {
2808+ module . exports = f ( ) ;
2809+ } else if ( typeof define === "function" && define . amd ) {
2810+ define ( [ ] , f ) ;
2811+ } else {
2812+ var g ;
2813+ if ( typeof window !== "undefined" ) {
2814+ g = window ;
2815+ } else if ( typeof global !== "undefined" ) {
2816+ g = global ;
2817+ } else if ( typeof self !== "undefined" ) {
2818+ g = self ;
2819+ } else {
2820+ g = this ;
2821+ }
2822+ g . UfsGlobal = f ( ) ;
2823+ }
2824+ } ) ( function ( ) {
2825+ return UfsGlobal ;
2826+ } ) ;
27402827
27412828console . log ( "UfsGlobal loaded" ) ;
0 commit comments