const express = require('express'); const fs = require('fs'); const path = require('os'); const axios = require('axios'); const cheerio = require('cheerio'); const app = express(); const port = 7860; const allowed = ['MLBB', 'BS', 'PUBG']; async function fetchKey(game) { if (!allowed.includes(game)) throw new Error('Invalid game'); const idxRes = await axios.get('https://web.aachann.my.id/Get-key/'); const m = idxRes.data.match(/const sessionToken\s*=\s*["']([^"']+)["']/); if (!m) throw new Error('sessionToken not found'); const sessionToken = m[1]; const data = Buffer.from(`game=${game}&token=${sessionToken}`).toString('base64'); const genRes = await axios.get(`https://web.aachann.my.id/Get-key/genkey.php?data=${data}`); const $ = cheerio.load(genRes.data); const key = $('#gameKey').text().trim(); if (!key) throw new Error('key not found in response'); return key; } app.get('/key', async (req, res) => { try { const game = (req.query.game || 'MLBB').toUpperCase(); const key = await fetchKey(game); res.json({ game, key }); } catch (e) { res.status(500).json({ error: e.message }); } }); app.get('/key/bulk', async (req, res) => { try { const game = (req.query.game || 'MLBB').toUpperCase(); const qty = Math.min(parseInt(req.query.qty) || 10, 1000); const keys = []; for (let i = 0; i < qty; i++) keys.push(await fetchKey(game)); const file = `${path.tmpdir()}/${game}-${Date.now()}.txt`; fs.writeFileSync(file, keys.join('\n')); res.download(file, `${game}-keys.txt`, () => fs.unlinkSync(file)); } catch (e) { res.status(500).json({ error: e.message }); } }); app.listen(port, () => console.log(`Running on :${port}`));