XORE21 commited on
Commit
d7a2854
·
verified ·
1 Parent(s): a6bee49

Update endpoints/recaptchav3.js

Browse files
Files changed (1) hide show
  1. endpoints/recaptchav3.js +76 -42
endpoints/recaptchav3.js CHANGED
@@ -1,75 +1,109 @@
 
 
 
1
  module.exports = async function(page, url, siteKey, action = 'submit') {
2
  return new Promise(async (resolve, reject) => {
3
- // Timeout Global 60 Detik
4
- const timeout = setTimeout(() => reject(new Error("Timeout waiting for reCAPTCHA v3 token (60s)")), 60000);
5
 
6
  try {
7
  console.log(`[RV3] Processing: ${url} | Action: ${action}`);
8
-
9
- // 1. Matikan Intercept (Biarkan browser handle resource sendiri)
10
  await page.setRequestInterception(false);
11
 
12
- // 2. Buka Halaman
13
- await page.goto(url, { waitUntil: "domcontentloaded", timeout: 45000 });
 
 
 
 
 
14
 
15
- // 3. Simulasi Mouse
16
  try {
17
  await page.mouse.move(100, 100);
18
- await page.mouse.move(200, 200, { steps: 10 });
19
- } catch(e) {}
20
 
21
- // 4. Eksekusi Token Generation
22
  const token = await page.evaluate(async (key, act) => {
23
- return new Promise((res, rej) => {
24
- // Timeout Internal Browser 15 detik
25
- const t = setTimeout(() => rej(new Error("Google Execute Timeout (Internal)")), 15000);
26
 
27
- const runCaptcha = () => {
28
- try {
29
- grecaptcha.ready(() => {
30
- grecaptcha.execute(key, { action: act })
31
- .then(token => {
32
- clearTimeout(t);
33
- res(token);
34
- })
35
- .catch(err => {
36
- clearTimeout(t);
37
- rej(new Error("Google Execute Error: " + err));
38
- });
39
- });
40
- } catch (e) {
41
- clearTimeout(t);
42
- rej(new Error("Global Context Error: " + e.message));
43
- }
44
  };
45
 
46
  // Cek & Inject
47
- if (typeof grecaptcha !== 'undefined') {
48
- runCaptcha();
49
- } else {
50
- console.log("Injecting Google Script...");
51
  const script = document.createElement('script');
52
  script.src = `https://www.google.com/recaptcha/api.js?render=${key}`;
53
- script.onload = runCaptcha;
54
- script.onerror = () => rej(new Error("Failed to load Google URL"));
55
  document.head.appendChild(script);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
56
  }
57
  });
58
  }, siteKey, action);
59
 
60
- clearTimeout(timeout);
61
 
62
  if (token) {
63
- console.log(`[RV3] Success! Token generated.`);
64
  resolve(token);
65
  } else {
66
- reject(new Error("Token returned null"));
67
  }
68
 
69
  } catch (e) {
70
- clearTimeout(timeout);
71
- // Pastikan error selalu berupa Object Error
72
- reject(e instanceof Error ? e : new Error(e.toString()));
 
73
  }
74
  });
75
  };
 
1
+ // Helper delay
2
+ const delay = ms => new Promise(res => setTimeout(res, ms));
3
+
4
  module.exports = async function(page, url, siteKey, action = 'submit') {
5
  return new Promise(async (resolve, reject) => {
6
+ // Global Timeout 60 Detik (Server Side)
7
+ const timeoutTimer = setTimeout(() => reject(new Error("Timeout Global (60s)")), 60000);
8
 
9
  try {
10
  console.log(`[RV3] Processing: ${url} | Action: ${action}`);
11
+
12
+ // 1. Matikan Intercept (Biarkan loading 100% natural)
13
  await page.setRequestInterception(false);
14
 
15
+ // 2. Navigasi & Tunggu Network Tenang
16
+ // Kita pakai 'networkidle2' agar script Google pasti termuat
17
+ try {
18
+ await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 });
19
+ } catch (e) {
20
+ console.log("[RV3] Navigation timeout, but proceeding...");
21
+ }
22
 
23
+ // 3. Simulasi Manusia (Pancingan Mouse)
24
  try {
25
  await page.mouse.move(100, 100);
26
+ await page.mouse.move(200, 200, { steps: 5 });
27
+ } catch (e) {}
28
 
29
+ // 4. Eksekusi Token (Logic di dalam Browser)
30
  const token = await page.evaluate(async (key, act) => {
31
+ return new Promise(async (res, rej) => {
32
+ // Timeout Internal Browser 30 Detik (Diperpanjang)
33
+ const t = setTimeout(() => rej("Google Execute Timeout (30s)"), 30000);
34
 
35
+ // Fungsi Tunggu Library Google
36
+ const waitForGrecaptcha = () => {
37
+ return new Promise(resolve => {
38
+ let attempts = 0;
39
+ const check = setInterval(() => {
40
+ attempts++;
41
+ if (typeof window.grecaptcha !== 'undefined' && window.grecaptcha.execute) {
42
+ clearInterval(check);
43
+ resolve(true);
44
+ }
45
+ if (attempts > 20) { // 10 detik nunggu
46
+ clearInterval(check);
47
+ resolve(false);
48
+ }
49
+ }, 500);
50
+ });
 
51
  };
52
 
53
  // Cek & Inject
54
+ let ready = await waitForGrecaptcha();
55
+
56
+ if (!ready) {
57
+ console.log("Injecting script manually...");
58
  const script = document.createElement('script');
59
  script.src = `https://www.google.com/recaptcha/api.js?render=${key}`;
60
+ script.async = true;
61
+ script.defer = true;
62
  document.head.appendChild(script);
63
+ // Tunggu lagi setelah inject
64
+ ready = await waitForGrecaptcha();
65
+ }
66
+
67
+ if (!ready) {
68
+ clearTimeout(t);
69
+ rej("Failed to load grecaptcha library");
70
+ return;
71
+ }
72
+
73
+ // Eksekusi Final
74
+ try {
75
+ window.grecaptcha.ready(() => {
76
+ window.grecaptcha.execute(key, { action: act })
77
+ .then(token => {
78
+ clearTimeout(t);
79
+ res(token);
80
+ })
81
+ .catch(err => {
82
+ clearTimeout(t);
83
+ rej("Execution Error: " + (err.message || err));
84
+ });
85
+ });
86
+ } catch (e) {
87
+ clearTimeout(t);
88
+ rej("Critical Error: " + e.message);
89
  }
90
  });
91
  }, siteKey, action);
92
 
93
+ clearTimeout(timeoutTimer);
94
 
95
  if (token) {
96
+ console.log(`[RV3] SUCCESS! Token length: ${token.length}`);
97
  resolve(token);
98
  } else {
99
+ reject(new Error("Token returned empty"));
100
  }
101
 
102
  } catch (e) {
103
+ clearTimeout(timeoutTimer);
104
+ // Bersihkan pesan error agar enak dibaca
105
+ const msg = e.message.replace("Evaluation failed: ", "");
106
+ reject(new Error(msg));
107
  }
108
  });
109
  };