const express = require('express'); const { PuppeterHcaptchaSolve } = require("puppeteer-hcaptcha-solver"); const puppeteer = require("puppeteer"); const app = express(); app.use(express.json()); // Endpoint health check app.get('/', (req, res) => { res.json({ status: 'ok', message: 'hCaptcha Solver API is running', endpoints: { solve: 'POST /solve - Body: { url: string, sitekey: string }' } }); }); // Endpoint untuk solve hCaptcha app.post('/solve', async (req, res) => { const { url, sitekey } = req.body; if (!url || !sitekey) { return res.status(400).json({ error: 'Missing required parameters: url and sitekey' }); } let browser; try { // Launch browser dengan konfigurasi headless browser = await puppeteer.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-accelerated-2d-canvas', '--disable-gpu', '--window-size=1920x1080' ] }); const captcha = new PuppeterHcaptchaSolve(browser); const page = await browser.newPage(); await page.setDefaultNavigationTimeout(60000); // Navigate ke URL await page.goto(url, { waitUntil: 'load', timeout: 60000 }); // Tunggu iframe hCaptcha muncul await page.waitForSelector("iframe", { timeout: 10000 }); console.log("hCaptcha detected"); // Solve captcha const token = await captcha.solve(page); await browser.close(); res.json({ success: true, token: token, message: 'hCaptcha solved successfully' }); } catch (error) { if (browser) { await browser.close(); } console.error('Error solving captcha:', error); res.status(500).json({ success: false, error: error.message }); } }); // Endpoint untuk solve dengan demo hCaptcha app.get('/solve-demo', async (req, res) => { let browser; try { browser = await puppeteer.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-accelerated-2d-canvas', '--disable-gpu' ] }); const captcha = new PuppeterHcaptchaSolve(browser); const page = await browser.newPage(); await page.setDefaultNavigationTimeout(60000); await page.goto("https://accounts.hcaptcha.com/demo?sitekey=4c672d35-0701-42b2-88c3-78380b0db560", { waitUntil: 'load', timeout: 60000 }); await page.waitForSelector("iframe", { timeout: 10000 }); console.log("hCaptcha detected"); const token = await captcha.solve(page); await browser.close(); res.json({ success: true, token: token, message: 'Demo hCaptcha solved successfully' }); } catch (error) { if (browser) { await browser.close(); } console.error('Error solving captcha:', error); res.status(500).json({ success: false, error: error.message }); } }); const PORT = process.env.PORT || 7860; app.listen(PORT, '0.0.0.0', () => { console.log(`Server running on port ${PORT}`); });