diff --git a/src/js/challenge.js b/src/js/challenge.js index 4f5335e..05768c2 100644 --- a/src/js/challenge.js +++ b/src/js/challenge.js @@ -210,7 +210,7 @@ const powFinished = new Promise((resolve) => { 0, Math.floor(requiredSec - elapsedSec), ); //dont show negative time - console.log(`${hps}H/s, ≈${remainingSec}s remaining`); + return console.log(`${hps}H/s, ≈${remainingSec}s remaining`); // return updateElem( // ".powstatus", // __('Working, ≈%ss remaining', remainingSec), @@ -218,9 +218,6 @@ const powFinished = new Promise((resolve) => { } if (finished) return; const [workerId, answer] = e.data; - if (!answer) { - return console.warn("Worker", workerId, "Returned with undefined answer"); - } console.log( "Worker", workerId, diff --git a/src/js/challenge.min.js b/src/js/challenge.min.js index d0e86bd..5a70dd3 100644 --- a/src/js/challenge.min.js +++ b/src/js/challenge.min.js @@ -1 +1 @@ -let TRANSLATIONS;function __(key){let replacement=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;const translation=TRANSLATIONS[key]||key;return replacement!==null?translation.replace('%s',replacement):translation}function updateElem(selector,text,color){const updateElem=document.querySelector(selector);if(updateElem){updateElem.innerText=text;if(color){updateElem.style.color=color}}}function insertError(str){const loader=document.querySelector("#loader");const captcha=document.querySelector("#captcha");(captcha||loader).insertAdjacentHTML("afterend",`

Error: ${ str }

`,);loader&&loader.remove();captcha&&captcha.remove();updateElem(".powstatus","")}function finishRedirect(){window.location=location.search.slice(1)+location.hash||"/"}function makeLoaderGreen(){const dots=document.querySelectorAll(".b");if(dots&&dots.length>0){dots.forEach((dot)=>dot.classList.add("green"))}}const wasmSupported=(()=>{try{if(typeof WebAssembly==="object"&&typeof WebAssembly.instantiate==="function"){const module=new WebAssembly.Module(Uint8Array.of(0x0,0x61,0x73,0x6d,0x01,0x00,0x00,0x00),);if(module instanceof WebAssembly.Module){return new WebAssembly.Instance(module)instanceof WebAssembly.Instance}}}catch(e){console.error(e)}return false})();function clearCookiesForDomains(domain){const parts=['www',...domain.split('.')];for(let i=0;i{const s=res.status;if(s>=400&&s<500){clearCookiesForDomains(location.hostname);return insertError(__("Server rejected your submission."))}else if(s>=500){return insertError(__("Server encountered an error."))}window.localStorage.setItem("_basedflare-redirect",Math.random());finishRedirect()}).catch(()=>{clearCookiesForDomains(location.hostname);insertError(__("Failed to send request to server."))})}const powFinished=new Promise((resolve)=>{let start=Date.now();const workers=[];let finished=false;const stopPow=()=>{finished=true;const hasCaptcha=document.getElementById("captcha");if(hasCaptcha){}else{makeLoaderGreen()}workers.forEach((w)=>w.terminate())};const submitPow=(answer)=>{window.localStorage.setItem("_basedflare-pow-response",answer);stopPow();const dummyTime=3500-(Date.now()-start);window.setTimeout(()=>{resolve({answer})},dummyTime)};window.addEventListener("DOMContentLoaded",async()=>{TRANSLATIONS=JSON.parse(document.head.dataset.langjson);const{time,kb,pow,diff,mode}=document.querySelector("[data-pow]").dataset;window.addEventListener("storage",(event)=>{if(event.key==="_basedflare-pow-response"&&!finished){console.log("Got answer",event.newValue,"from storage event");stopPow();resolve({answer:event.newValue,localStorage:true})}else if(event.key==="_basedflare-redirect"){console.log("Redirecting, solved in another tab");finishRedirect()}});if(mode==="argon2"&&!wasmSupported){return insertError(__("Browser does not support WebAssembly."))}const powOpts={time:time,mem:kb,hashLen:32,parallelism:1,type:argon2?argon2.ArgonType.Argon2id:null,mode:mode};console.log("Got pow",pow,"with difficulty",diff);const eHashes=Math.pow(16,Math.floor(diff/8))*(((diff%8)*2)||1);const diffString="0".repeat(Math.floor(diff/8));const[userkey,challenge]=pow.split("#");if(window.Worker){let cpuThreads;try{cpuThreads=window.navigator.hardwareConcurrency||2}catch(e){console.warn('navigator.hardwareConcurrency unavailable');cpuThreads=2}const isTor=location.hostname.endsWith(".onion");const workerThreads=(isTor||cpuThreads===2)?cpuThreads:Math.max(Math.ceil(cpuThreads/2),cpuThreads-1);const messageHandler=(e)=>{if(e.data.length===1){const totalHashes=e.data[0];const elapsedSec=Math.floor((Date.now()-start)/1000);const hps=Math.floor(totalHashes/elapsedSec);const requiredSec=Math.floor(eHashes/hps)*1.5;const remainingSec=Math.max(0,Math.floor(requiredSec-elapsedSec),);console.log(`${ hps }H/s, ≈${ remainingSec }s remaining`);}if(finished){return}const[workerId,answer]=e.data;if(!answer){return console.warn("Worker",workerId,"Returned with undefined answer")}console.log("Worker",workerId,"returned answer",answer,"in",Date.now()-start+"ms",);submitPow(`${ pow }#${ answer }`)};for(let i=0;isetTimeout(res,10));workers[i].postMessage([userkey,challenge,diff,diffString,powOpts,i,workerThreads])}}else{return insertError(__("Browser does not support Web Workers."))}})}).then((powResponse)=>{const hasCaptchaForm=document.getElementById("captcha");if(!hasCaptchaForm&&!powResponse.localStorage){postResponse(powResponse.answer)}return powResponse.answer}).catch((e)=>{console.error(e)});function onCaptchaSubmit(captchaResponse){const captchaElem=document.querySelector("[data-sitekey]");captchaElem.insertAdjacentHTML("afterend",`
`,);captchaElem.remove();powFinished.then((powResponse)=>{updateElem(".powstatus",__("Submitting..."),"#31cc31");makeLoaderGreen();postResponse(powResponse,captchaResponse)})} +let TRANSLATIONS;function __(key){let replacement=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;const translation=TRANSLATIONS[key]||key;return replacement!==null?translation.replace('%s',replacement):translation}function updateElem(selector,text,color){const updateElem=document.querySelector(selector);if(updateElem){updateElem.innerText=text;if(color){updateElem.style.color=color}}}function insertError(str){const loader=document.querySelector("#loader");const captcha=document.querySelector("#captcha");(captcha||loader).insertAdjacentHTML("afterend",`

Error: ${ str }

`,);loader&&loader.remove();captcha&&captcha.remove();updateElem(".powstatus","")}function finishRedirect(){window.location=location.search.slice(1)+location.hash||"/"}function makeLoaderGreen(){const dots=document.querySelectorAll(".b");if(dots&&dots.length>0){dots.forEach((dot)=>dot.classList.add("green"))}}const wasmSupported=(()=>{try{if(typeof WebAssembly==="object"&&typeof WebAssembly.instantiate==="function"){const module=new WebAssembly.Module(Uint8Array.of(0x0,0x61,0x73,0x6d,0x01,0x00,0x00,0x00),);if(module instanceof WebAssembly.Module){return new WebAssembly.Instance(module)instanceof WebAssembly.Instance}}}catch(e){console.error(e)}return false})();function clearCookiesForDomains(domain){const parts=['www',...domain.split('.')];for(let i=0;i{const s=res.status;if(s>=400&&s<500){clearCookiesForDomains(location.hostname);return insertError(__("Server rejected your submission."))}else if(s>=500){return insertError(__("Server encountered an error."))}window.localStorage.setItem("_basedflare-redirect",Math.random());finishRedirect()}).catch(()=>{clearCookiesForDomains(location.hostname);insertError(__("Failed to send request to server."))})}const powFinished=new Promise((resolve)=>{let start=Date.now();const workers=[];let finished=false;const stopPow=()=>{finished=true;const hasCaptcha=document.getElementById("captcha");if(hasCaptcha){}else{makeLoaderGreen()}workers.forEach((w)=>w.terminate())};const submitPow=(answer)=>{window.localStorage.setItem("_basedflare-pow-response",answer);stopPow();const dummyTime=3500-(Date.now()-start);window.setTimeout(()=>{resolve({answer})},dummyTime)};window.addEventListener("DOMContentLoaded",async()=>{TRANSLATIONS=JSON.parse(document.head.dataset.langjson);const{time,kb,pow,diff,mode}=document.querySelector("[data-pow]").dataset;window.addEventListener("storage",(event)=>{if(event.key==="_basedflare-pow-response"&&!finished){console.log("Got answer",event.newValue,"from storage event");stopPow();resolve({answer:event.newValue,localStorage:true})}else if(event.key==="_basedflare-redirect"){console.log("Redirecting, solved in another tab");finishRedirect()}});if(mode==="argon2"&&!wasmSupported){return insertError(__("Browser does not support WebAssembly."))}const powOpts={time:time,mem:kb,hashLen:32,parallelism:1,type:argon2?argon2.ArgonType.Argon2id:null,mode:mode};console.log("Got pow",pow,"with difficulty",diff);const eHashes=Math.pow(16,Math.floor(diff/8))*(((diff%8)*2)||1);const diffString="0".repeat(Math.floor(diff/8));const[userkey,challenge]=pow.split("#");if(window.Worker){let cpuThreads;try{cpuThreads=window.navigator.hardwareConcurrency||2}catch(e){console.warn('navigator.hardwareConcurrency unavailable');cpuThreads=2}const isTor=location.hostname.endsWith(".onion");const workerThreads=(isTor||cpuThreads===2)?cpuThreads:Math.max(Math.ceil(cpuThreads/2),cpuThreads-1);const messageHandler=(e)=>{if(e.data.length===1){const totalHashes=e.data[0];const elapsedSec=Math.floor((Date.now()-start)/1000);const hps=Math.floor(totalHashes/elapsedSec);const requiredSec=Math.floor(eHashes/hps)*1.5;const remainingSec=Math.max(0,Math.floor(requiredSec-elapsedSec),);return console.log(`${ hps }H/s, ≈${ remainingSec }s remaining`);}if(finished){return}const[workerId,answer]=e.data;console.log("Worker",workerId,"returned answer",answer,"in",Date.now()-start+"ms",);submitPow(`${ pow }#${ answer }`)};for(let i=0;isetTimeout(res,10));workers[i].postMessage([userkey,challenge,diff,diffString,powOpts,i,workerThreads])}}else{return insertError(__("Browser does not support Web Workers."))}})}).then((powResponse)=>{const hasCaptchaForm=document.getElementById("captcha");if(!hasCaptchaForm&&!powResponse.localStorage){postResponse(powResponse.answer)}return powResponse.answer}).catch((e)=>{console.error(e)});function onCaptchaSubmit(captchaResponse){const captchaElem=document.querySelector("[data-sitekey]");captchaElem.insertAdjacentHTML("afterend",`
`,);captchaElem.remove();powFinished.then((powResponse)=>{updateElem(".powstatus",__("Submitting..."),"#31cc31");makeLoaderGreen();postResponse(powResponse,captchaResponse)})}