const express = require('express'); const app = express(); const port = process.env.PORT || 7860 const cookieParser = require('cookie-parser') const puppeteer = require('puppeteer-extra'); const StealthPlugin = require('puppeteer-extra-plugin-stealth'); const fetch = require("node-fetch"); puppeteer.use(StealthPlugin()); const { exec } = require('child_process'); app.use(express.json()); app.use(cookieParser()); exec('node node_modules/puppeteer/install.mjs', (error, stdout, stderr) => { if (error) { console.error(`Error: ${error}`); return; } }); app.get('/head', async (req, res) => { const url = req.query.url; if (!url) { return res.send({ status: false, owner: 'pakaya', err: 'Need site URL!' }); } let browser; try { browser = await puppeteer.launch({ headless: true, args: ['--disable-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--ignoreHTTPSErrors'], }); const page = await browser.newPage(); // Create a new page await page.setRequestInterception(true); page.on('request', (request) => { request.continue(); }); // Go to the specified URL const response = await page.goto(url, { waitUntil: 'networkidle2' }); // Wait for a while to ensure all requests are completed await new Promise(resolve => setTimeout(resolve, 60000)); // Get the response status and headers const status = response.status(); const headers = response.headers(); console.log('Response Headers:', headers); // Send the response back to the client return res.status(200).json({ status: true, response: { status, headers } }); } catch (e) { console.error(e); return res.status(500).json({ status: false, error: e.message }); } finally { if (browser) { await browser.close(); } } }); app.get('/headers', async (req, res) => { const url = req.query.url; if (!url) return res.send({ status: false, owner: 'pakaya', err: 'Need site URL!' }); let downloadurl = ''; // Initialize redirectUrl variable const browser = await puppeteer.launch({ headless: true, args: ['--disable-gpu', '--no-sandbox', '--disable-setuid-sandbox', '--ignoreHTTPSErrors'], }); const page = await browser.newPage(); // Create a new page await page.setRequestInterception(true); page.on('request', (request) => { request.continue(); }); try { let response = await page.goto(url, { waitUntil: 'networkidle2' }); await page.waitForTimeout(60000); await browser.close(); return res.status(200).json({ status: response.status(),headers: response.headers() }); } catch (e) { console.log(e); res.status(200).json({ status: response.status(),headers: response.headers() }); } }); app.get("/api/direct", async (req, res) => { const { url } = req.query; if (!url) return res.status(400).json({ status: false, error: "Missing url parameter" }); let browser; try { browser = await puppeteer.launch({ headless: true, args: ["--no-sandbox"] }); const page = await browser.newPage(); // Set user agent await page.setUserAgent( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36" ); // Step 1: Go to main page await page.goto(url, { waitUntil: "domcontentloaded", timeout: 60000 }); // Step 2: Extract the onclick link const intermediate = await page.$eval(".wildbutton", el => el.getAttribute("onclick").match(/'(.*?)'/)[1] ); if (!intermediate) { return res.status(404).json({ status: false, error: "Download link not found" }); } const cookies = await page.cookies(); const cookieHeader = cookies.map(c => `${c.name}=${c.value}`).join("; "); res.json({ status: true, cookieHeader }); } catch (err) { res.status(500).json({ status: false, error: err.message }); } finally { if (browser) await browser.close(); } }); app.get('/moddl', async (req, res) => { const apkUrl = req.query.url if (!apkUrl) { return res.status(400).send('APK URL is required'); } try { const browser = await puppeteer.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-accelerated-2d-canvas', '--disable-gpu', ], }); const page = await browser.newPage(); // Navigate to the APK URL await page.goto(apkUrl, { waitUntil: 'networkidle2' }); // Wait for the download link to appear (adjust the selector as needed) const downloadLinkSelector = 'a.download-link'; // Update this selector based on the actual link await page.waitForSelector(downloadLinkSelector); // Get the download link const downloadLink = await page.$eval(downloadLinkSelector, el => el.href); console.log('Download link:', downloadLink); // Navigate to the download link const response = await page.goto(downloadLink, { waitUntil: 'networkidle2' }); console.log(response); // Get the APK file buffer const buffer = await response.arraybuffer() // Set the response headers for file download res.set({ 'Content-Type': 'application/vnd.android.package-archive', 'Content-Disposition': 'attachment; filename=downloaded.apk', 'Content-Length': buffer.length, }); // Send the APK file buffer in the response res.send(buffer); await browser.close(); } catch (error) { console.error('Error downloading APK:', error); res.status(500).send(error); } }); app.listen(port, () => { console.log(`Server is running on port ${port}`); }); module.exports = app