const express = require('express'); const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); const path = require('path'); puppeteer.use(StealthPlugin()); const app = express(); app.use(express.json()); app.use(express.static(path.join(__dirname, 'public'))); app.post('/api/generate', async (req, res) => { const { prompt } = req.body; if (!prompt) return res.status(400).json({ success: false, error: "Prompt is required." }); let browser; try { // Notice we removed executablePath, it will use the one NPM installs! browser = await puppeteer.launch({ headless: "new", args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--window-size=1280,720' ] }); const page = await browser.newPage(); await page.setViewport({ width: 1280, height: 720 }); await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'); let mediaUrl = null; page.on('response', async (response) => { if (response.url().includes('/nextjs-api/stream/create-evaluation') && response.status() === 200) { try { const text = await response.text(); const match = text.match(/https:\/\/[^\s"'<>\\]+\.(mp4|png|webp|jpg|jpeg)/i); if (match) mediaUrl = match[0]; } catch (e) {} } }); // 1. Go to site await page.goto('https://arena.ai/', { waitUntil: 'networkidle2' }); // Give Cloudflare 5 extra seconds to clear await new Promise(r => setTimeout(r, 5000)); // 2. Wait for textarea and type await page.waitForSelector('textarea', { timeout: 15000 }); await page.type('textarea', prompt, { delay: 50 }); await new Promise(r => setTimeout(r, 500)); // 3. Press Enter await page.keyboard.press('Enter'); // 4. Wait for media (up to 45 seconds) let attempts = 0; while (!mediaUrl && attempts < 45) { await new Promise(r => setTimeout(r, 1000)); attempts++; } if (mediaUrl) { res.json({ success: true, creator: "Silent Tech", prompt: prompt, url: mediaUrl }); } else { // 👁️ TAKE A SCREENSHOT OF THE BLOCK! const base64Screenshot = await page.screenshot({ encoding: "base64" }); res.status(500).json({ success: false, error: "Generation Timeout. See debug screenshot to find out why.", debug_image: `data:image/png;base64,${base64Screenshot}` }); } } catch (err) { res.status(500).json({ success: false, error: err.message }); } finally { if (browser) await browser.close(); } }); app.listen(7860, "0.0.0.0", () => { console.log('Silent Tech API Proxy running on port 7860'); });