add direct success callback

This commit is contained in:
overflowerror 2024-08-16 23:14:58 +02:00
parent c32124b3fc
commit 7c5a5e494c
2 changed files with 8 additions and 7 deletions

View file

@ -5,6 +5,6 @@
<link href="bundle.css" rel="stylesheet"> <link href="bundle.css" rel="stylesheet">
</head> </head>
<body> <body>
<div class="captcha" data-challenge-url="/challenge.json"></div> <div class="captcha" data-challenge-url="/challenge.json" data-success-callback="console.log"></div>
</body> </body>
</html> </html>

View file

@ -37,14 +37,11 @@ const toggleChecked = (checkbox: Element) =>
const toggleLoading = (checkbox: Element) => const toggleLoading = (checkbox: Element) =>
checkbox.classList.toggle(CLASS_LOADING); checkbox.classList.toggle(CLASS_LOADING);
function prepareChallengeExecution(challenge: Challenge): () => Promise<void> { function prepareChallengeExecution(challenge: Challenge, callback: (response: string) => void): () => Promise<void> {
return async function() { return async function() {
console.log("Calculating...");
toggleLoading(this); toggleLoading(this);
const response = await findHashWithPrefix(challenge.algo, challenge.prefixBits, challenge.input); callback(await findHashWithPrefix(challenge.algo, challenge.prefixBits, challenge.input));
console.log("Challenge Response: " + response);
toggleLoading(this); toggleLoading(this);
toggleChecked(this); toggleChecked(this);
@ -57,6 +54,8 @@ const prepareCaptcha = async (captcha: Element) => {
throw "No challenge URL found."; throw "No challenge URL found.";
} }
let successCallback = captcha.getAttribute("data-success-callback");
const checkbox = initCaptchaContentAndGetCheckbox(captcha); const checkbox = initCaptchaContentAndGetCheckbox(captcha);
const challengeResponse = await fetch(challengeUrl); const challengeResponse = await fetch(challengeUrl);
@ -68,7 +67,9 @@ const prepareCaptcha = async (captcha: Element) => {
toggleLoading(checkbox); toggleLoading(checkbox);
checkbox.addEventListener("click", prepareChallengeExecution(challenge)); checkbox.addEventListener("click", prepareChallengeExecution(challenge, response => {
if (successCallback) eval(successCallback)(response);
}));
} }
window.addEventListener("load", () => window.addEventListener("load", () =>