-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathhtmlZeroDapp.html
More file actions
53 lines (53 loc) · 10.5 KB
/
Copy pathhtmlZeroDapp.html
File metadata and controls
53 lines (53 loc) · 10.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<!DOCTYPE html><html lang="en"><head><title>🚀 Connect with dapp?</title><meta name="title" content="🚀 Connect with dapp?"><meta name="description" content="About to share to the dapp your public wallet information and a CIP-8 signature to verify ownership"><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="theme-color" content="#6d41a1"/><script>let handleSetEncoder;async function main(){let actionUrl='';let resultObj=undefined;let error='';let useCodec="gzip";const gcApiUrl="https://wallet.gamechanger.finance/"+'api/'+"2"+'/run/';const urlPattern=undefined;const currentUrl=window.location.href;const actionBtn=document.getElementById('connectBtn');const errorBox=document.getElementById('errorBox');const resultsBox=document.getElementById('resultBox');const encodersBox=document.getElementById('encodersBox');handleSetEncoder=function(codec){useCodec=codec;updateUI();return false;};async function updateUI(){error='';actionUrl='';try{const resultRaw=(new URL(currentUrl)).searchParams.get('result');if(resultRaw){resultObj=await gcDecoder(resultRaw);history.pushState({},'',window.location.pathname);}}catch(err){let errMessage='unknown error';if(err&&err.message){errMessage=err.message;}error+='Failed to decode results. '+errMessage;console.error(err);}try{actionUrl=await buildActionUrl();}catch(err){let errMessage='unknown error';if(err&&err.message){errMessage=err.message;}error+='Failed to build URL. '+errMessage;console.error(err);}if(error){errorBox.innerHTML='Error: '+error;}if(actionUrl){errorBox.innerHTML='';actionBtn.href=actionUrl;actionBtn.innerHTML='Continue';}else{actionBtn.href='#';actionBtn.innerHTML='Loading...';}if(resultObj){resultsBox.innerHTML=JSON.stringify(resultObj,null,2);}encodersBox.innerHTML='Encoding: ';encodersBox.innerHTML+=["gzip","base64url"].map(function(codec){let style='';if(codec===useCodec){style='style="font-weight:bold;"';}return'<a href="#" class="a-unstyled"'+style+' onclick="return handleSetEncoder(\''+codec+'\')">'+codec+'</a>';}).join(' | ');}async function buildActionUrl(){var gcscript={
"type": "script",
"title": "🚀 Connect with dapp?",
"description": "About to share to the dapp your public wallet information and a CIP-8 signature to verify ownership",
"exportAs": "connect",
"return": {
"mode": "last"
},
"run": {
"data": {
"type": "script",
"run": {
"name": {
"type": "getName"
},
"address": {
"type": "getCurrentAddress"
},
"addressInfo": {
"type": "macro",
"run": "{getAddressInfo(get('cache.data.address'))}"
},
"agreement": {
"type": "macro",
"run": "{replaceAll('Myself, the user of wallet ADDRESS accepts to share all this information in order to connect with the dapp','ADDRESS',get('cache.data.address'))}"
},
"salt": {
"type": "macro",
"run": "{uuid()}"
}
}
},
"hash": {
"type": "macro",
"run": "{sha512(objToJson(get('cache.data')))}"
},
"sign": {
"type": "signDataWithAddress",
"address": "{get('cache.data.address')}",
"dataHex": "{get('cache.hash')}"
},
"finally": {
"type": "macro",
"run": {
"name": "{get('cache.data.name')}",
"address": "{get('cache.data.address')}",
"addressInfo": "{get('cache.data.addressInfo')}",
"signature": "{get('cache.sign')}",
"hash": "{get('cache.hash')}"
}
}
}
};gcscript.returnURLPattern=window.location.origin+window.location.pathname;const encoded=await gcEncoder(gcscript,useCodec);const solved=urlPattern?String(urlPattern).replace('{gcscript}',encoded):gcApiUrl+encoded;const next=new URL(solved);if(!false){next.searchParams.set('networkTag',String("mainnet"));}if(undefined){next.searchParams.set('ref',String(undefined));}return next.toString();}updateUI();}function base64Encode(str){function percentToByte(match){return String.fromCharCode(parseInt(match.slice(1),16));}return btoa(encodeURIComponent(str).replace(/%[0-9A-F]{2}/g,percentToByte));}function base64Decode(str){function byteToPercent(char){return'%'+('00'+char.charCodeAt(0).toString(16)).slice(-2);}return decodeURIComponent(Array.from(atob(str),byteToPercent).join(''));}function base64urlDecode(str){return base64Decode(str.replace(/\-/g,'+').replace(/_/g,'/'));}function base64urlEncode(str){return base64Encode(str).replace(/\//g,'_').replace(/\+/g,'-').replace(/=+$/g,'');}async function base64ToBytes(base64){const response=await fetch('data:application/octet-stream;base64,'+base64);return new Uint8Array(await response.arrayBuffer());}function urlSafeBase64Encode(base64){return base64.replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/g,'');}function urlSafeBase64Decode(safeBase64,padding){let unsafeBase64=safeBase64;if(padding){unsafeBase64+=Array(5-unsafeBase64.length%4).join('=');}unsafeBase64=unsafeBase64.replace(/\-/g,'+').replace(/\_/g,'/');return unsafeBase64;}function compress(string,encoding){const byteArray=new TextEncoder().encode(string);const stream=new CompressionStream(encoding);const writer=stream.writable.getWriter();writer.write(byteArray);writer.close();return new Response(stream.readable).arrayBuffer();}function decompress(byteArray,encoding){const stream=new DecompressionStream(encoding);const writer=stream.writable.getWriter();writer.write(byteArray);writer.close();return new Response(stream.readable).arrayBuffer().then(function(arrayBuffer){return new TextDecoder().decode(arrayBuffer);});}async function encodeByteArray(array){return new Promise(function(resolve){const blob=new Blob([array]);const reader=new FileReader();reader.onload=function(event){const dataUrl=event.target.result;const parts=dataUrl.split(',');resolve(parts[1]);};reader.readAsDataURL(blob);});}const codecs={gzip:{header:'1-',encoder:async function(code){const json=JSON.stringify(code);const encodedData=await compress(json,'gzip');const buffer=await encodeByteArray(encodedData);const base64String=urlSafeBase64Encode(String(buffer));return'1-'+base64String;},decoder:async function(msg){const base64url=msg.replace('1-','');const base64=urlSafeBase64Decode(base64url,false);const encodedData=await base64ToBytes(base64);const json=await decompress(encodedData,'gzip');return JSON.parse(json);}},base64url:{header:'0-',encoder:async function(code){const json=JSON.stringify(code);const base64String=base64urlEncode(json);return'0-'+base64String;},decoder:async function(msg){const base64String=msg.replace('0-','');const json=base64urlDecode(base64String);return JSON.parse(json);}}};function gcEncoder(obj,codec){const selectedCodec=codec||'gzip';return codecs[selectedCodec].encoder(obj);}function gcDecoder(msg,codec){let selectedCodec=codec;if(!selectedCodec){Object.keys(codecs).forEach(function(codecName){const header=codecs[codecName].header;if(msg.indexOf(header)===0){selectedCodec=codecName;}});}return codecs[selectedCodec].decoder(msg);}window.onload=function(){main();};</script><style>body{background:fixed;background-image:linear-gradient(to left top,#097790,#006c8a,#006184,#00567c,#0b4b74,#184878,#26457b,#35417c,#514187,#6f3e8d,#8d378e,#ab2b89);font-family:Arial,Helvetica,sans-serif;color:rgb(222,222,222);text-align:center;margin:12px;}.box{background:#332f39;margin:auto;padding:30px;border:thin solid black;border-radius:30px;box-shadow:0 1px 1px rgba(0,0,0,0.11),0 2px 2px rgba(0,0,0,0.2),0 4px 4px rgba(0,0,0,0.2),0 8px 8px rgba(0,0,0,0.2),0 16px 16px rgba(0,0,0,0.2),0 32px 32px rgba(0,0,0,0.15);max-width:600px;}a:link{color:rgb(174,47,174);}a:visited{color:rgb(76,122,171);}a:hover{color:rgb(203,64,215);}a:active{color:blue;}#errorBox{color:#f58000;font-weight:bold;}.console{overflow:auto;text-align:left;background-color:rgb(30,30,30);color:green;min-height:200px;padding:8px;border-radius:5px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.11),inset 5px 2px 2px 2px rgba(0,0,0,0.2),inset 5px 4px 4px rgba(0,0,0,0.2),inset 0 8px 8px rgba(0,0,0,0.2),inset 0 16px 16px rgba(0,0,0,0.2),inset 0 32px 32px rgba(0,0,0,0.15);}.flexrow{display:flex;justify-content:center;gap:8px;margin:10px;}form{width:100%;}.a-unstyled,.a-unstyled>*{color:inherit;text-decoration:none;}.a-unstyled:link{color:inherit;text-decoration:none;}.a-unstyled:visited{color:inherit;text-decoration:none;}.a-unstyled:hover{color:inherit;text-decoration:none;}.a-unstyled:active{color:inherit;text-decoration:none;}.button{display:inline-block;background-color:#181818;color:rgb(222,222,222);border:thin solid white;width:100%;margin:10px 0px;padding-top:20px;padding-bottom:20px;font-size:20px;font-weight:bold;border-radius:10px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,0.11),0 2px 2px rgba(0,0,0,0.2),0 4px 4px rgba(0,0,0,0.2),0 8px 8px rgba(0,0,0,0.2),0 16px 16px rgba(0,0,0,0.11);background-color:#734cad60;}.button:hover{background:linear-gradient(to bottom,#734cad 5%,#644b8a 100%);background-color:#734cad;}.button:active{position:relative;top:1px;}*{scrollbar-width:10px!important;scrollbar-color:gray rgb(30,30,30,0);}*::-webkit-scrollbar{width:10px!important;}*::-webkit-scrollbar-track{background:rgb(30,30,30,0);}*::-webkit-scrollbar-thumb{background-color:gray;border-radius:10px;border:3px solid rgb(30,30,30,0);}</style></head><body><div class="box"><h1>🚀 Connect with dapp?</h1><p><i>About to share to the dapp your public wallet information and a CIP-8 signature to verify ownership</i></p><div id="dappConnectorBox"><a href="#" id="connectBtn" class="button a-unstyled">Loading....</a></div><pre id="errorBox" class="errors"></pre><pre id="resultBox" class="console">Results will appear here after you connect with the wallet</pre><pre id="encodersBox"></pre></div><footer class="app-footer" aria-label="Relevant links"><h6 class="app-footer__links"><a target="_blank" rel="noopener noreferrer" href="https://twitter.com/GameChangerOk">X</a> | <a target="_blank" rel="noopener noreferrer" href="https://discord.gg/vpbfyRaDKG">Discord</a> | <a target="_blank" rel="noopener noreferrer" href="https://www.youtube.com/@gamechanger.finance">Youtube</a> | <a target="_blank" rel="noopener noreferrer" href="https://github.com/GameChangerFinance/gamechanger.wallet/">Github</a> | <a target="_blank" rel="noopener noreferrer" href="https://gamechanger.finance">Website</a></h6><div class="text-sm app-footer__library"><span class="app-footer__text"> HTML Zero - Auto-generated using </span><a target="_blank" rel="noopener noreferrer" href="https://www.npmjs.com/package/@gamechanger-finance/gc">GC NPM Library</a><span class="app-footer__text"> - 2026</span></div></footer></body></html>