Update app.js
Browse files
app.js
CHANGED
|
@@ -24,23 +24,7 @@ import { CookieJar } from 'tough-cookie';
|
|
| 24 |
import * as cheerio from 'cheerio';
|
| 25 |
import TurndownService from 'turndown';
|
| 26 |
import { Readable } from 'stream';
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
const scraper = new Scraper({
|
| 30 |
-
headless: true, // Pastikan TRUE untuk lingkungan Docker/server tanpa GUI
|
| 31 |
-
skip_chromium_download: true, // WAJIB TRUE, karena browser sudah ada di image base
|
| 32 |
-
// HAPUS ATAU KOMEN BARIS chromium_path: "/usr/bin/chromium-browser",
|
| 33 |
-
// Karena Playwright akan mengelola jalur browsernya sendiri.
|
| 34 |
-
wait_for_network_idle: false,
|
| 35 |
-
PUP_TIMEOUT: 16_000,
|
| 36 |
-
args: [
|
| 37 |
-
'--no-sandbox', // Penting untuk Docker/lingkungan tanpa hak akses root penuh
|
| 38 |
-
'--disable-setuid-sandbox', // Penting untuk Docker/lingkungan tanpa hak akses root penuh
|
| 39 |
-
'--disable-dev-shm-usage', // Mengatasi masalah memori di Docker
|
| 40 |
-
'--disable-gpu', // Nonaktifkan akselerasi GPU (tidak ada di sebagian besar server/Docker)
|
| 41 |
-
'--single-process' // Memungkinkan browser berjalan sebagai satu proses (opsional, tapi bisa membantu)
|
| 42 |
-
]
|
| 43 |
-
});
|
| 44 |
dotenv.config();
|
| 45 |
|
| 46 |
const config = {
|
|
@@ -2427,30 +2411,6 @@ app.get('/colorifyai', async (req, res) => {
|
|
| 2427 |
}
|
| 2428 |
});
|
| 2429 |
|
| 2430 |
-
app.get('/cf-bypass', async (req, res) => {
|
| 2431 |
-
const { url, ...rest } = req.query;
|
| 2432 |
-
|
| 2433 |
-
if (!url) {
|
| 2434 |
-
return res.status(400).json({ error: 'Parameter URL diperlukan.' });
|
| 2435 |
-
}
|
| 2436 |
-
|
| 2437 |
-
try {
|
| 2438 |
-
const bypassResult = await scraper
|
| 2439 |
-
.proxy(url, rest);
|
| 2440 |
-
|
| 2441 |
-
if (bypassResult) {
|
| 2442 |
-
res.json({
|
| 2443 |
-
message: 'Turnstile berhasil di-bypass!',
|
| 2444 |
-
data: bypassResult
|
| 2445 |
-
});
|
| 2446 |
-
} else {
|
| 2447 |
-
res.status(500).json({ error: 'Gagal bypass Turnstile. Hasil tidak lengkap.' });
|
| 2448 |
-
}
|
| 2449 |
-
} catch (error) {
|
| 2450 |
-
res.status(500).json({ error: 'Terjadi kesalahan saat mencoba bypass Turnstile.', details: error.message });
|
| 2451 |
-
}
|
| 2452 |
-
});
|
| 2453 |
-
|
| 2454 |
const PORT = process.env.PORT || 7860;
|
| 2455 |
|
| 2456 |
app.listen(PORT, async () => {
|
|
|
|
| 24 |
import * as cheerio from 'cheerio';
|
| 25 |
import TurndownService from 'turndown';
|
| 26 |
import { Readable } from 'stream';
|
| 27 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
dotenv.config();
|
| 29 |
|
| 30 |
const config = {
|
|
|
|
| 2411 |
}
|
| 2412 |
});
|
| 2413 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2414 |
const PORT = process.env.PORT || 7860;
|
| 2415 |
|
| 2416 |
app.listen(PORT, async () => {
|