remove unused NopeCHA extension

This commit is contained in:
Ralf Vogler 2023-02-14 10:49:06 +01:00
parent c65f153090
commit ec2d31ed79
18 changed files with 5 additions and 452 deletions

View file

@ -14,7 +14,7 @@ const db = await jsonDb('epic-games.json');
db.data ||= {}; db.data ||= {};
// https://www.nopecha.com extension source from https://github.com/NopeCHA/NopeCHA/releases/tag/0.1.16 // https://www.nopecha.com extension source from https://github.com/NopeCHA/NopeCHA/releases/tag/0.1.16
const ext = path.resolve('nopecha'); // used in Chromium, currently not needed in Firefox // const ext = path.resolve('nopecha'); // used in Chromium, currently not needed in Firefox
// https://playwright.dev/docs/auth#multi-factor-authentication // https://playwright.dev/docs/auth#multi-factor-authentication
const context = await firefox.launchPersistentContext(dirs.browser, { const context = await firefox.launchPersistentContext(dirs.browser, {
@ -153,7 +153,8 @@ try {
const captcha = iframe.locator('#h_captcha_challenge_checkout_free_prod iframe'); const captcha = iframe.locator('#h_captcha_challenge_checkout_free_prod iframe');
captcha.waitFor().then(async () => { // don't await, since element may not be shown captcha.waitFor().then(async () => { // don't await, since element may not be shown
console.info(' Got hcaptcha challenge! NopeCHA extension will likely solve it.') // console.info(' Got hcaptcha challenge! NopeCHA extension will likely solve it.')
console.error(' Got hcaptcha challenge! Lost trust due to too many login attempts? You can solve the captcha in the browser or get a new IP address.')
// await page.waitForTimeout(2000); // await page.waitForTimeout(2000);
// const p = path.resolve(dirs.screenshots, 'epic-games', 'captcha', `${filenamify(datetime())}.png`); // const p = path.resolve(dirs.screenshots, 'epic-games', 'captcha', `${filenamify(datetime())}.png`);
// await captcha.screenshot({ path: p }); // await captcha.screenshot({ path: p });
@ -167,7 +168,8 @@ try {
context.setDefaultTimeout(cfg.timeout); context.setDefaultTimeout(cfg.timeout);
} catch (e) { } catch (e) {
console.log(e); console.log(e);
console.error(' Failed to claim! Try again if NopeCHA timed out. Click the extension to see if you ran out of credits (refill after 24h). To avoid captchas try to get a new IP or set a cookie from https://www.hcaptcha.com/accessibility'); // console.error(' Failed to claim! Try again if NopeCHA timed out. Click the extension to see if you ran out of credits (refill after 24h). To avoid captchas try to get a new IP or set a cookie from https://www.hcaptcha.com/accessibility');
console.error(' Failed to claim! To avoid captchas try to get a new IP address.');
const p = path.resolve(dirs.screenshots, 'epic-games', 'failed', `${game_id}_${filenamify(datetime())}.png`); const p = path.resolve(dirs.screenshots, 'epic-games', 'failed', `${game_id}_${filenamify(datetime())}.png`);
await page.screenshot({ path: p, fullPage: true }); await page.screenshot({ path: p, fullPage: true });
db.data[user][game_id].status = 'failed'; db.data[user][game_id].status = 'failed';

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
(async()=>{class d{static time(){return Date.now||(Date.now=()=>(new Date).getTime()),Date.now()}static sleep(t=1e3){return new Promise(e=>setTimeout(e,t))}static async random_sleep(e,t){t=Math.floor(Math.random()*(t-e)+e);return d.sleep(t)}static pad(e){var t=2-String(e).length+1;return 0<t?""+new Array(t).join("0")+e:""+e}static date(){return new Date}static string(e=null){return e=e||d.date(),d.pad(e.getMonth()+1)+`/${d.pad(e.getDate())}/${e.getFullYear()} ${d.pad(e.getHours()%12)}:${d.pad(e.getMinutes())}:${d.pad(e.getSeconds())} `+(12<=e.getHours()?"PM":"AM")}}class p{static exec(e,a){return new Promise(t=>{try{chrome.runtime.sendMessage({method:e,data:a},t)}catch(e){t()}})}}class h{static async fetch(e,t){return p.exec("fetch",{url:e,options:t})}}class g{static INFERENCE_URL="https://api.nopecha.com";static MAX_WAIT_POST=60;static MAX_WAIT_GET=60;static ERRORS={UNKNOWN:9,INVALID_REQUEST:10,RATE_LIIMTED:11,BANNED_USER:12,NO_JOB:13,INCOMPLETE_JOB:14,INVALID_KEY:15,NO_CREDIT:16,UPDATE_REQUIRED:17};static async post({captcha_type:e,task:t,image_urls:a,grid:r,key:n}){for(var i=Date.now(),c=await p.exec("info_tab");!(Date.now()-i>1e3*g.MAX_WAIT_POST);){const u={type:e,task:t,image_urls:a,v:chrome.runtime.getManifest().version,key:n,url:c.url};r&&(u.grid=r);var o=await h.fetch(g.INFERENCE_URL,{method:"POST",body:JSON.stringify(u),headers:{"Content-Type":"application/json"}});try{var s=JSON.parse(o);if("error"in s){if(s.error===g.ERRORS.RATE_LIMITED){await d.sleep(2e3);continue}if(s.error===g.ERRORS.INVALID_KEY)break;if(s.error===g.ERRORS.NO_CREDIT)break;break}var l="id"in s?s.id:s.data;return await g.get({job_id:l,key:n})}catch(e){break}}return{job_id:null,clicks:null}}static async get({key:e,job_id:t}){for(var a=Date.now();!(Date.now()-a>1e3*g.MAX_WAIT_GET);){await d.sleep(500);var r=await h.fetch(g.INFERENCE_URL+`?id=${t}&key=`+e);try{var n=JSON.parse(r);if("error"in n){if(n.error!==g.ERRORS.INCOMPLETE_JOB)return{job_id:t,clicks:null};continue}return{job_id:t,clicks:n.data}}catch(e){break}}return{job_id:t,clicks:null}}}function u(e){const t=e?.style.background?.trim()?.match(/(?!^)".*?"/g);return t&&0!==t.length?t[0].replaceAll('"',""):null}async function y(){let e=document.querySelector("h2.prompt-text")?.innerText?.replace(/\s+/g," ")?.trim();if(!e)return null;var t={"0430":"a","0441":"c","0501":"d","0435":"e","04bb":"h","0456":"i","0458":"j","04cf":"l","03bf":"o","043e":"o","0440":"p","0455":"s","0445":"x","0443":"y","0065":"e","0069":"i","30fc":"一","571f":"士"};const a=[];for(const i of e){var r=function(e,t,a){for(;(""+e).length<a;)e=""+t+e;return e}(i.charCodeAt(0).toString(16),"0",4);r in t?a.push(t[r]):a.push(i)}e=a.join("");var n=function(){let e=document.querySelector(".display-language .text").innerText||window.navigator.userLanguage||window.navigator.language;return e?e=(e=e.toLowerCase()).split("-")[0]:null}();return e=n&&"en"!==n?await p.exec("translate",{from:n,to:"en",text:e}):e}let f=null;async function e(e){if("block"===document.querySelector("div.check")?.style.display)return a=a||!0,void(e.debug&&window.location.reload());a=!1,await d.sleep(e.hcaptcha_open_delay),document.querySelector("#checkbox")?.click()}async function t(e){o=!(o||!function(){const e=document.querySelector(".display-error");return"true"!==e?.getAttribute("aria-hidden")}());n=100;const{task:t,cells:a,urls:r}=await new Promise(o=>{let s=!1;const l=setInterval(async()=>{if(!s){s=!0;var e=await y();if(e){var t=document.querySelector(".challenge-example > .image > .image"),t=u(t);if(t&&""!==t){var a=document.querySelectorAll(".task-image");if(9!==a.length)s=!1;else{const n=[],i=[];for(const c of a){var r=c.querySelector("div.image");if(!r)return void(s=!1);r=u(r);if(!r||""===r)return void(s=!1);n.push(c),i.push(r)}a=JSON.stringify(i);if(f!==a)return f=a,clearInterval(l),s=!1,o({task:e,task_url:t,cells:n,urls:i});s=!1}}else s=!1}else s=!1}},n)});var n,i=d.time(),c=(await g.post({captcha_type:"hcaptcha",task:t,image_urls:r,key:e.key}))["clicks"];if(c){e=e.hcaptcha_solve_delay-(d.time()-i);0<e&&await d.sleep(e);for(let e=0;e<c.length;e++)!1!==c[e]&&"true"!==a[e].getAttribute("aria-pressed")&&a[e].click();await d.sleep(200);try{document.querySelector(".button-submit").click()}catch(e){}}}let a=!1,o=!1;for(;;){await d.sleep(1e3);var r=await p.exec("get_settings");r&&(r.hcaptcha_auto_open&&null!==document.querySelector("div.check")?await e(r):r.hcaptcha_auto_solve&&null!==document.querySelector("h2.prompt-text")&&await t(r))}})();

View file

@ -1 +0,0 @@
(async()=>{let a=null,t=!1,r=!1;function n(e,t,r=!1){e&&(r||a!==e)&&(!0===t&&"false"===e.getAttribute("aria-pressed")||!1===t&&"true"===e.getAttribute("aria-pressed"))&&e.click()}document.addEventListener("mousedown",e=>{"false"===e?.target?.parentNode?.getAttribute("aria-pressed")?(t=!0,r=!0):"true"===e?.target?.parentNode?.getAttribute("aria-pressed")&&(t=!0,r=!1),a=e?.target?.parentNode}),document.addEventListener("mouseup",e=>{t=!1,a=null}),document.addEventListener("mousemove",e=>{t&&(a!==e?.target?.parentNode&&null!==a&&n(a,r,!0),n(e?.target?.parentNode,r))})})();

View file

@ -1 +0,0 @@
(()=>{let e;function t(){var e=navigator.language.split("-")[0];for(const t of document.querySelectorAll('script[src*=".hcaptcha.com/1/api.js"]')){const r=new URL(t.src);"en"!==(r.searchParams.get("hl")||e)&&(r.searchParams.set("hl","en"),t.src=r.toString())}}e=new MutationObserver(t),setTimeout(()=>{t(),e.observe(document.head,{childList:!0})},0)})();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -1 +0,0 @@
{"name": "NopeCHA: ReCAPTCHA & hCAPTCHA Solver", "action": {"default_title": "NopeCHA: ReCAPTCHA & hCAPTCHA Solver", "default_icon": "icon/16.png", "default_popup": "popup.html"}, "manifest_version": 3, "version": "0.1.16", "description": "Automatically solve CAPTCHAs using AI.", "permissions": ["declarativeNetRequest", "storage", "scripting"], "background": {"service_worker": "background.js"}, "content_scripts": [{"matches": ["*://*.hcaptcha.com/captcha/*"], "js": ["hcaptcha.js"], "all_frames": true, "run_at": "document_end"}, {"matches": ["*://*.hcaptcha.com/captcha/*"], "js": ["hcaptcha_fast.js"], "all_frames": true, "run_at": "document_start"}, {"matches": ["<all_urls>"], "js": ["recaptcha.js", "recaptcha_voice.js"], "all_frames": true, "run_at": "document_end"}, {"matches": ["<all_urls>"], "js": ["hcaptcha_language.js"], "all_frames": true, "run_at": "document_end"}, {"matches": ["*://*.google.com/recaptcha/*", "*://*.recaptcha.net/recaptcha/*", "*://recaptcha.net/recaptcha/*"], "js": ["recaptcha_fast.js"], "all_frames": true, "run_at": "document_start"}, {"matches": ["*://nopecha.com/setup"], "js": ["setup.js"], "all_frames": true, "run_at": "document_end"}], "host_permissions": ["<all_urls>"], "icons": {"16": "icon/16.png", "32": "icon/32.png", "48": "icon/48.png", "128": "icon/128.png"}}

View file

@ -1,289 +0,0 @@
:root {
--input_scale_x: 1;
--input_scale_y: 0.8;
}
html * {
font-family: monospace, monospaSFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
font-size: 12px;
}
html, body {
margin: 0;
padding: 0;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.hidden {
display: none !important;
opacity: 0;
}
.light {
font-size: 0.9em;
opacity: 0.5;
}
.green {
/* color: #8cd47e; */
color: #1a73e8;
}
.red {
color: #ff6961;
}
.yellow {
color: #ca1;
}
.clickable {
cursor: pointer;
transition: 250ms all;
}
.clickable:hover {
opacity: 0.8;
}
#main {
padding: 8px 16px;
}
#footer {
margin-top: 8px;
width: 100%;
text-align: center;
color: #999;
height: 20px;
}
#manage {
width: 100%;
text-align: center;
background-color: #1a73e8;
color: #fff;
height: 20px;
line-height: 20px;
border-radius: 4px;
border: 1px solid #1a73e8;
padding: 8px;
font-size: 1.2em;
transition: 200ms all;
}
#manage:hover {
color: #1a73e8;
background-color: transparent;
}
.vspace {
min-height: 8px;
}
.settings_group {
width: 280px;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
padding: 6px 4px;
}
.settings_group.vertical {
flex-direction: column;
}
.settings_group > .label {
flex-grow: 1;
font-size: 1.2em;
line-height: calc(34px * var(--input_scale_y));
padding-right: 16px;
}
.settings_group > .value {
font-size: 1.2em;
line-height: calc(34px * var(--input_scale_y));
}
.settings_group > input {
border-radius: 0;
}
.settings_group > input[type="text"],
.settings_group > input[type="button"],
.settings_group > select {
font-size: 0.9em;
outline: none;
border: 1px solid #999;
width: calc(60px * var(--input_scale_x));
height: calc(34px * var(--input_scale_y));
}
.settings_group > input[type="button"] {
background-color: #f0f0f0;
cursor: pointer;
transition: 200ms all;
}
.settings_group > input[type="button"]:hover {
background-color: #fff;
}
.switch {
position: relative;
display: inline-block;
width: calc(60px * var(--input_scale_x));
height: calc(34px * var(--input_scale_y));
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: calc(26px * var(--input_scale_y));
width: calc(26px * var(--input_scale_x));
left: calc(4px * var(--input_scale_x));
bottom: calc(4px * var(--input_scale_y));
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #2196F3;
}
input:focus + .slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked + .slider:before {
-webkit-transform: translateX(calc(26px * var(--input_scale_x)));
-ms-transform: translateX(calc(26px * var(--input_scale_x)));
transform: translateX(calc(26px * var(--input_scale_x)));
}
#key {
padding: 4px;
border-radius: 2px;
}
.loading {
display: inline-block;
position: relative;
width: 40px;
height: 100%;
}
.loading div {
position: absolute;
top: 8px;
width: 6px;
height: 6px;
border-radius: 50%;
background: #777;
animation-timing-function: cubic-bezier(0, 1, 1, 0);
}
.loading div:nth-child(1) {
left: 4px;
animation: loading1 0.6s infinite;
}
.loading div:nth-child(2) {
left: 4px;
animation: loading2 0.6s infinite;
}
.loading div:nth-child(3) {
left: 16px;
animation: loading2 0.6s infinite;
}
.loading div:nth-child(4) {
left: 28px;
animation: loading3 0.6s infinite;
}
@keyframes loading1 {
0% {
transform: scale(0);
}
100% {
transform: scale(1);
}
}
@keyframes loading3 {
0% {
transform: scale(1);
}
100% {
transform: scale(0);
}
}
@keyframes loading2 {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(12px, 0);
}
}
.tab_btn_row {
background-color: #efefef;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
}
.tab_btn_row .tab_btn {
flex-grow: 1;
padding: 4px 8px;
border-top: 1px solid transparent;
border-left: 1px solid transparent;
border-right: 1px solid transparent;
border-bottom: 1px solid #ccc;
border-radius: 4px 4px 0 0;
text-align: center;
font-size: 1.2em;
transition: 200ms all;
}
.tab_btn:not(.active):hover {
background-color: #fafafa;
}
.tab_btn.active {
background-color: #fff;
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
border-bottom: 1px solid transparent;
}
.content {
margin: 6px 0;
padding: 4px 8px 0 8px;
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}
.tab_content.bordered {
padding: 16px 8px 8px 8px;
border-top: 1px solid transparent;
border-left: 1px solid #ccc;
border-right: 1px solid #ccc;
border-bottom: 1px solid #ccc;
border-radius: 0 0 4px 4px;
}
.footer_group {
width: 296px;
}
.warning_box {
border-color: #FCD62E;
border-radius: 0.25rem;
border-width: 0.125rem;
padding: 0 0.5rem;
margin: 0 4px;
background-color: #FEF9C3;
border-style: solid;
}

View file

@ -1,149 +0,0 @@
<html>
<head>
<link rel="stylesheet" href="popup.css">
</head>
<body>
<!-- <div id="template" class="hidden">
<div class="loading"><div></div><div></div><div></div><div></div></div>
</div> -->
<div id="main">
<!-- <div class="settings_group">
<div class="label">Server Status</div>
<div id="server_status" class="value green">
<div class="loading"><div></div><div></div><div></div><div></div></div>
</div>
</div> -->
<div class="content">
<div class="settings_group">
<div id="manage" class="clickable">Manage Subscription</div>
</div>
<div class="settings_group vertical">
<input id="key" type="text" placeholder="Subscription Key" style="width: 280px;">
<div id="incorrect_key" class="red hidden">Incorrect Key</div>
</div>
<div id="ipbanned_warning" class="warning_box hidden">
<p>
Your IP has been flagged and is therefore illegible for free credits.
</p>
<p>
<a href="https://nopecha.com/pricing" target="_blank">Paid subscriptions</a> are not affected by this.
</p>
</div>
<div class="settings_group">
<div class="label">Subscription</div>
<div id="plan" class="value green">
<div class="loading"><div></div><div></div><div></div><div></div></div>
</div>
</div>
<div class="settings_group">
<div class="label">Credits</div>
<div id="credit" class="value">
<div class="loading"><div></div><div></div><div></div><div></div></div>
</div>
</div>
<div class="settings_group">
<div class="label">Refills</div>
<div id="refills" class="value green">
<div class="loading"><div></div><div></div><div></div><div></div></div>
</div>
</div>
</div>
<div class="vspace"></div>
<div class="tab_btn_row">
<div class="tab_btn active" data-target="#hcaptcha_tab">hCaptcha</div>
<div class="tab_btn" data-target="#recaptcha_tab">reCAPTCHA</div>
</div>
<div class="tab_content bordered">
<div id="hcaptcha_tab" class="tab">
<div class="settings_group">
<div class="label">Auto Solve</div>
<label class="switch">
<input id="hcaptcha_auto_solve" type="checkbox" data-disables="hcaptcha_solve_delay">
<span class="slider"></span>
</label>
</div>
<div class="settings_group">
<div class="label">Solve Delay <span class="light">(ms)</span></div>
<input id="hcaptcha_solve_delay" type="text" class="number">
</div>
<div class="settings_group">
<div class="label">Auto Open</div>
<label class="switch">
<input id="hcaptcha_auto_open" type="checkbox" data-disables="hcaptcha_open_delay">
<span class="slider"></span>
</label>
</div>
<div class="settings_group">
<div class="label">Open Delay <span class="light">(ms)</span></div>
<input id="hcaptcha_open_delay" type="text" class="number">
</div>
</div>
<div id="recaptcha_tab" class="tab hidden">
<div class="settings_group">
<div class="label">Auto Solve</div>
<label class="switch">
<input id="recaptcha_auto_solve" type="checkbox" data-disables="recaptcha_solve_delay,recaptcha_solve_method">
<span class="slider"></span>
</label>
</div>
<div class="settings_group">
<div class="label">Solve Delay <span class="light">(ms)</span></div>
<input id="recaptcha_solve_delay" type="text" class="number">
</div>
<div class="settings_group">
<div class="label">Auto Open</div>
<label class="switch">
<input id="recaptcha_auto_open" type="checkbox" data-disables="recaptcha_open_delay">
<span class="slider"></span>
</label>
</div>
<div class="settings_group">
<div class="label">Open Delay <span class="light">(ms)</span></div>
<input id="recaptcha_open_delay" type="text" class="number">
</div>
<div class="settings_group">
<div class="label">ReCAPTCHA Method</div>
<select id="recaptcha_solve_method">
<option value="image" selected>Image</option>
<option value="voice">Voice</option>
</select>
</div>
</div>
</div>
<!-- <div class="settings_group footer_group">
<div class="label">Debug</div>
<label class="switch">
<input id="debug" type="checkbox">
<span class="slider"></span>
</label>
</div> -->
<div class="settings_group footer_group">
<div id="footer" class="clickable">Join us on Discord</div>
</div>
</div>
<script src="popup.js"></script>
</body>
</html>

View file

@ -1 +0,0 @@
Date.now||(Date.now=function(){return(new Date).getTime()});class BG{static exec(t,n){return new Promise(e=>{try{chrome.runtime.sendMessage({method:t,data:n},e)}catch{e()}})}}class Util{static sleep(t){return new Promise(e=>setTimeout(e,t))}static pad_left(e,t,n){for(;(""+e).length<n;)e=""+t+e;return e}static time_to_hms(e){e=Math.max(0,e);var t=Math.floor(e/3600),n=(e%=3600,Math.floor(e/60)),e=Math.floor(e%60);return`${Util.pad_left(t,"0",2)}:${Util.pad_left(n,"0",2)}:`+Util.pad_left(e,"0",2)}static capitalize(e){return e.charAt(0).toUpperCase()+e.slice(1)}}let plan=null,checking_server_plan=!1,rendering_server_plan=!1;async function check_plan(){var e=await BG.exec("get_settings");e&&!checking_server_plan&&(checking_server_plan=!0,(plan=await BG.exec("get_server_plan",{key:e.key})).error&&(plan={plan:plan.message,credit:0,quota:0,duration:null,lastreset:null}),checking_server_plan=!1)}async function initialize_ui(){var e=await BG.exec("get_settings");async function t(e,t){const n=document.querySelector(`input#${e}[type="checkbox"]`);if(n){var a=n.dataset?.disables?.split(",");if(a)for(const i of a){const r=document.querySelector("#"+i);r.disabled=!t}n.checked=t,await BG.exec("set_settings",{id:e,value:t})}}async function n(e,t){const n=document.querySelector(`input#${e}[type="text"]`);if(n){try{t=t.trim()}catch{}if(n.classList.contains("number")){try{t=parseInt(t)}catch{t=0}999999<(t=(t=isNaN(t)?0:t)<0?0:t)&&(t=999999)}n.value=t,await BG.exec("set_settings",{id:e,value:t})}}async function a(e,t){const n=document.querySelector("select#"+e);n&&(n.value=t,await BG.exec("set_settings",{id:e,value:t}))}for(const r in e)try{await t(r,e[r]),await n(r,e[r]),await a(r,e[r])}catch{}for(const s of document.querySelectorAll('.settings_group input[type="checkbox"]'))s.addEventListener("change",()=>t(s.id,s.checked));for(const c of document.querySelectorAll('.settings_group input[type="text"]'))c.addEventListener("input",()=>n(c.id,c.value));for(const l of document.querySelectorAll(".settings_group select"))l.addEventListener("change",()=>a(l.id,l.value));document.querySelector("#manage").addEventListener("click",async()=>{await BG.exec("open_tab",{url:"https://nopecha.com/manage"})}),document.querySelector("#footer").addEventListener("click",async()=>{await BG.exec("open_tab",{url:"https://nopecha.com/discord"})});let i=null;document.querySelector("#key").addEventListener("input",()=>{clearTimeout(i),i=setTimeout(check_plan,500)});for(const d of document.querySelectorAll(".tab_btn")){d.dataset.target;d.addEventListener("click",()=>{for(const e of document.querySelectorAll(".tab"))e.classList.add("hidden");for(const t of document.querySelectorAll(".tab_btn"))t.classList.remove("active");d.classList.add("active"),document.querySelector(d.dataset.target).classList.remove("hidden")})}}async function render_plan(){var t=await BG.exec("get_settings");if(t&&plan&&!rendering_server_plan){rendering_server_plan=!0;const a=document.querySelector("#plan"),i=document.querySelector("#credit"),r=document.querySelector("#refills"),s=document.querySelector("#incorrect_key"),c=document.querySelector("#ipbanned_warning");var n=Date.now()/1e3;let e=null;plan.lastreset&&plan.duration&&(e=Math.floor(Math.max(0,plan.duration-(n-plan.lastreset)))),a.innerHTML=plan.plan,"free"===plan.plan?(""!==t.key?s.classList.remove("hidden"):s.classList.add("hidden"),a.classList.remove("green"),a.classList.add("red")):(s.classList.add("hidden"),a.classList.remove("red"),a.classList.add("green")),plan.plan.includes("Banned")?c.classList.remove("hidden"):c.classList.add("hidden"),0===e?(i.classList.remove("green"),i.classList.remove("red"),i.innerHTML='<div class="loading"><div></div><div></div><div></div><div></div></div>'):(i.innerHTML=plan.credit+" / "+plan.quota,0===plan.credit?(i.classList.remove("green"),i.classList.add("red")):(i.classList.remove("red"),i.classList.add("green"))),e?(n=Util.time_to_hms(e),r.innerHTML=""+n):r.innerHTML='<div class="loading"><div></div><div></div><div></div><div></div></div>',0!==plan.duration&&0===e&&await check_plan(),rendering_server_plan=!1}}async function main(){await initialize_ui(),await check_plan(),await render_plan(),setInterval(render_plan,250)}document.addEventListener("DOMContentLoaded",main);

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
(async()=>{let i=null,n=!1,s=!1;function a(e){let t=e;for(;t&&!t.classList?.contains("rc-imageselect-tile");)t=t.parentNode;return t}function t(e,t,n=!1){!e||!n&&i===e||(!0===t&&e.classList.contains("rc-imageselect-tileselected")||!1===t&&!e.classList.contains("rc-imageselect-tileselected"))&&e.click()}document.addEventListener("mousedown",e=>{const t=a(e?.target);t&&(s=t.classList.contains("rc-imageselect-tileselected")?n=!0:!(n=!0),i=t)}),document.addEventListener("mouseup",e=>{n=!1,i=null}),document.addEventListener("mousemove",e=>{e=a(e?.target);n&&(i!==e&&null!==i&&t(i,s,!0),t(e,s))});window.addEventListener("load",function(e){const t=document.body.appendChild(document.createElement("style")).sheet;t.insertRule(".rc-imageselect-table-33, .rc-imageselect-table-42, .rc-imageselect-table-44 {transition-duration: 0.5s !important}",0),t.insertRule(".rc-imageselect-tile {transition-duration: 2s !important}",1),t.insertRule(".rc-imageselect-dynamic-selected {transition-duration: 1s !important}",2),t.insertRule(".rc-imageselect-progress {transition-duration: 0.5s !important}",3),t.insertRule(".rc-image-tile-overlay {transition-duration: 0.5s !important}",4),t.insertRule("#rc-imageselect img {pointer-events: none !important}",5)})})();

View file

@ -1 +0,0 @@
(async()=>{class r{static time(){return Date.now||(Date.now=()=>(new Date).getTime()),Date.now()}static sleep(t=1e3){return new Promise(e=>setTimeout(e,t))}static async random_sleep(e,t){t=Math.floor(Math.random()*(t-e)+e);return r.sleep(t)}static pad(e){var t=2-String(e).length+1;return 0<t?""+new Array(t).join("0")+e:""+e}static date(){return new Date}static string(e=null){return e=e||r.date(),r.pad(e.getMonth()+1)+`/${r.pad(e.getDate())}/${e.getFullYear()} ${r.pad(e.getHours()%12)}:${r.pad(e.getMinutes())}:${r.pad(e.getSeconds())} `+(12<=e.getHours()?"PM":"AM")}}class n{static exec(e,a){return new Promise(t=>{try{chrome.runtime.sendMessage({method:e,data:a},t)}catch(e){t()}})}}class o{static async fetch(e,t){return n.exec("fetch",{url:e,options:t})}}function i(){var e,t;if(!l())return e="true"===document.querySelector(".recaptcha-checkbox")?.getAttribute("aria-checked"),t=document.querySelector("#recaptcha-verify-button")?.disabled,e||t}function l(){return"Try again later"===document.querySelector(".rc-doscaptcha-header")?.innerText}async function e(e){i()||(await r.sleep(e.recaptcha_open_delay),document.querySelector("#recaptcha-anchor")?.click())}async function t(t){var a=await n.exec("get_cache",{name:"recaptcha_visible",tab_specific:!0});if(!0===a&&!i())if(l())await n.exec("reset_recaptcha");else{a=document.querySelector(".rc-audiochallenge-tdownload-link")?.href,a=(fetch(a),document.querySelector("#audio-source")?.src?.replace("recaptcha.net","google.com"));let e=document.querySelector("html")?.getAttribute("lang")?.trim();e&&0!==e.length||(e="en");var c=r.time(),a=await o.fetch("https://engageub.pythonanywhere.com",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:"input="+encodeURIComponent(a)+"&lang="+e}),a=(document.querySelector("#audio-response").value=a,t.recaptcha_solve_delay-(r.time()-c));0<a&&await r.sleep(a),document.querySelector("#recaptcha-verify-button")?.click()}}for(;;){await r.sleep(1e3);var a=await n.exec("get_settings");a&&"voice"===a.recaptcha_solve_method&&(async function(){var t=document.querySelectorAll('iframe[src*="/recaptcha/api2/bframe"]');if(0<t.length){let e=!1;for(const a of t)if(e="visible"===window.getComputedStyle(a).visibility)break;e?await n.exec("set_cache",{name:"recaptcha_visible",value:!0,tab_specific:!0}):await n.exec("set_cache",{name:"recaptcha_visible",value:!1,tab_specific:!0})}}(),a.recaptcha_auto_open&&null!==document.querySelector(".recaptcha-checkbox")?await e(a):a.recaptcha_auto_solve&&null!==document.querySelector(".rc-imageselect-instructions")?(c=a,await(!0===await n.exec("get_cache",{name:"recaptcha_visible",tab_specific:!0})&&!i()&&(await r.sleep(c.recaptcha_open_delay),!document.querySelector("#recaptcha-audio-button")?.click()))):!a.recaptcha_auto_solve||null===document.querySelector("#audio-instructions")&&null===document.querySelector(".rc-doscaptcha-header")||await t(a))}var c})();

View file

@ -1 +0,0 @@
const url=new URL(document.location);class BG{static exec(e,n){return new Promise(t=>{try{chrome.runtime.sendMessage({method:e,data:n},t)}catch(e){t()}})}}document.location.hash?(document.body.innerText="Loading...",BG.exec("set_settings",{id:"key",value:document.location.hash.substring(1)}).then(()=>document.body.innerText="Key set!")):document.body.innerText="Missing key. Please set the hash and reload the page.\nExample: https://nopecha.com/setup#sub_testkey1234";

View file

@ -1 +0,0 @@
"use strict";class Type{static _string_constructor="string".constructor;static _array_constructor=[].constructor;static _object_constructor={}.constructor;static of(e){return null===e?"null":void 0===e?"undefined":e.constructor===Type._string_constructor?"string":e.constructor===Type._array_constructor?"array":e.constructor===Type._object_constructor?"object":""}}class Logger{static debug=!0;static log(e=0){const t=new Array(...arguments).map(e=>["array","object"].includes(Type.of(e))?JSON.stringify(e,null,4):""+e);t.join(" ")}}class Time{static time(){return Date.now||(Date.now=()=>(new Date).getTime()),Date.now()}static sleep(t=1e3){return new Promise(e=>setTimeout(e,t))}static async random_sleep(e,t){t=Math.floor(Math.random()*(t-e)+e);return Time.sleep(t)}static pad(e){var t=2-String(e).length+1;return 0<t?""+new Array(t).join("0")+e:""+e}static date(){return new Date}static string(e=null){return e=e||Time.date(),Time.pad(e.getMonth()+1)+`/${Time.pad(e.getDate())}/${e.getFullYear()} ${Time.pad(e.getHours()%12)}:${Time.pad(e.getMinutes())}:${Time.pad(e.getSeconds())} `+(12<=e.getHours()?"PM":"AM")}}class BG{static exec(e,r){return new Promise(t=>{try{chrome.runtime.sendMessage({method:e,data:r},t)}catch(e){t()}})}}class Net{static async fetch(e,t){return BG.exec("fetch",{url:e,options:t})}}class Image{static encode(t){return new Promise(r=>{if(null===t)return r(null);const e=new XMLHttpRequest;e.onload=()=>{const t=new FileReader;t.onloadend=()=>{let e=t.result;if(e.startsWith("data:text/html;base64,"))return r(null);e=e.replace("data:image/jpeg;base64,",""),r(e)},t.readAsDataURL(e.response)},e.onerror=()=>{r(null)},e.onreadystatechange=()=>{4==this.readyState&&200!=this.status&&r(null)},e.open("GET",t),e.responseType="blob",e.send()})}}class NopeCHA{static INFERENCE_URL="https://api.nopecha.com";static MAX_WAIT_POST=60;static MAX_WAIT_GET=60;static ERRORS={UNKNOWN:9,INVALID_REQUEST:10,RATE_LIIMTED:11,BANNED_USER:12,NO_JOB:13,INCOMPLETE_JOB:14,INVALID_KEY:15,NO_CREDIT:16,UPDATE_REQUIRED:17};static async post({captcha_type:e,task:t,image_urls:r,grid:a,key:n}){for(var o=Date.now(),s=await BG.exec("info_tab");!(Date.now()-o>1e3*NopeCHA.MAX_WAIT_POST);){const u={type:e,task:t,image_urls:r,v:chrome.runtime.getManifest().version,key:n,url:s.url};a&&(u.grid=a);var i=await Net.fetch(NopeCHA.INFERENCE_URL,{method:"POST",body:JSON.stringify(u),headers:{"Content-Type":"application/json"}});try{var c=JSON.parse(i);if("error"in c){if(c.error===NopeCHA.ERRORS.RATE_LIMITED){await Time.sleep(2e3);continue}if(c.error===NopeCHA.ERRORS.INVALID_KEY)break;if(c.error===NopeCHA.ERRORS.NO_CREDIT)break;break}var l="id"in c?c.id:c.data;return await NopeCHA.get({job_id:l,key:n})}catch(e){break}}return{job_id:null,clicks:null}}static async get({key:e,job_id:t}){for(var r=Date.now();!(Date.now()-r>1e3*NopeCHA.MAX_WAIT_GET);){await Time.sleep(500);var a=await Net.fetch(NopeCHA.INFERENCE_URL+`?id=${t}&key=`+e);try{var n=JSON.parse(a);if("error"in n){if(n.error!==NopeCHA.ERRORS.INCOMPLETE_JOB)return{job_id:t,clicks:null};continue}return{job_id:t,clicks:n.data}}catch(e){break}}return{job_id:t,clicks:null}}}function oep(a,n=1,e=100){return new Promise(t=>{const r=setInterval(()=>{var e=document.querySelectorAll(a);if(e.length===n)return clearInterval(r),t(1===n?e[0]:e)},e)})}export{Type,Logger,Time,BG,Net,Image,NopeCHA,oep};