@@ -43,6 +43,26 @@ function refreshBuildEnabled() {
4343 $ ( "build" ) . disabled = ! ( decrypted && store . worker ) ;
4444}
4545
46+ function renderCommand ( ) {
47+ const ua = store . ua || "Happ/1.0" ;
48+ const hwid = store . hwid || "<your-hwid>" ;
49+ const sub = decrypted && / ^ h t t p s ? : \/ \/ / i. test ( decrypted . value . trim ( ) )
50+ ? decrypted . value . trim ( )
51+ : "<decrypt a happ:// link first>" ;
52+
53+ const el = $ ( "cmd" ) ;
54+ el . innerHTML = "" ;
55+ const span = ( cls , txt ) => { const s = document . createElement ( "span" ) ; s . className = cls ; s . textContent = txt ; return s ; } ;
56+ const line = ( ...nodes ) => { const d = document . createElement ( "div" ) ; d . className = "cline" ; nodes . forEach ( ( n ) => d . append ( n ) ) ; el . append ( d ) ; } ;
57+
58+ line ( span ( "c-prompt" , "$ " ) , span ( "c-cmd" , "curl -fsSL" ) , span ( "c-cont" , " \\" ) ) ;
59+ line ( span ( "c-flag" , " -H " ) , span ( "c-str" , `"User-Agent: ${ ua } "` ) , span ( "c-cont" , " \\" ) ) ;
60+ line ( span ( "c-flag" , " -H " ) , span ( "c-str" , `"X-HWID: ${ hwid } "` ) , span ( "c-cont" , " \\" ) ) ;
61+ line ( span ( "c-url" , ` "${ sub } "` ) , span ( "c-pipe" , " | " ) , span ( "c-cmd" , "base64 -d" ) ) ;
62+
63+ el . dataset . copy = `curl -fsSL -H "User-Agent: ${ ua } " -H "X-HWID: ${ hwid } " "${ sub } " | base64 -d` ;
64+ }
65+
4666function schemeOf ( uri ) {
4767 const i = uri . indexOf ( "://" ) ;
4868 return i > 0 ? uri . slice ( 0 , i ) : uri . split ( ":" ) [ 0 ] ;
@@ -61,7 +81,8 @@ async function onDecrypt() {
6181 decrypted = decryptLink ( link , await keys ( ) ) ;
6282 stage ( "st-decrypt" , "done" ) ;
6383 $ ( "decoded" ) . hidden = false ;
64- $ ( "decoded" ) . textContent = `mode: ${ decrypted . mode } \n${ decrypted . value } ` ;
84+ $ ( "decoded-value" ) . textContent = decrypted . value ;
85+ renderCommand ( ) ;
6586 setStatus (
6687 store . worker ? "Decrypted. Ready to forge." : "Decrypted. Add a Worker URL in settings to forge a subscription." ,
6788 true
@@ -136,14 +157,17 @@ function initSettings() {
136157 $ ( "ua" ) . value = store . ua ;
137158 $ ( "hwid" ) . value = store . hwid ;
138159 $ ( "worker" ) . value = store . worker ;
139- $ ( "ua" ) . oninput = ( e ) => { store . ua = e . target . value ; } ;
140- $ ( "hwid" ) . oninput = ( e ) => { store . hwid = e . target . value ; } ;
160+ $ ( "ua" ) . oninput = ( e ) => { store . ua = e . target . value ; renderCommand ( ) ; } ;
161+ $ ( "hwid" ) . oninput = ( e ) => { store . hwid = e . target . value ; renderCommand ( ) ; } ;
141162 $ ( "worker" ) . oninput = ( e ) => { store . worker = e . target . value ; refreshBuildEnabled ( ) ; } ;
142163 $ ( "settings-toggle" ) . onclick = ( ) => { $ ( "settings" ) . hidden = ! $ ( "settings" ) . hidden ; } ;
143164}
144165
145166$ ( "decrypt" ) . onclick = onDecrypt ;
146167$ ( "build" ) . onclick = onBuild ;
147168$ ( "copy-sub" ) . onclick = ( ) => navigator . clipboard . writeText ( $ ( "sub-url" ) . textContent ) ;
169+ $ ( "copy-decoded" ) . onclick = ( ) => navigator . clipboard . writeText ( $ ( "decoded-value" ) . textContent ) ;
170+ $ ( "copy-cmd" ) . onclick = ( ) => navigator . clipboard . writeText ( $ ( "cmd" ) . dataset . copy || "" ) ;
148171initSettings ( ) ;
149172refreshBuildEnabled ( ) ;
173+ renderCommand ( ) ;
0 commit comments