brat / app.js
emiogiwara's picture
update app.js
6a51d12
require('dotenv').config();
const express = require('express');
const morgan = require('morgan');
const os = require('os');
const axios = require('axios');
const { launchBrowser, closeBrowser } = require('./services/browser');
const { generateBrat } = require('./services/brat');
const Upload = require('./services/uploader')
const { urlToBuffer } = require('./services/function')
const { generateImage } = require('./services/editimg.js')
const { bigjpg } = require('./services/upscaler')
const { tes } = require('./services/tes')
const { takeScreenshot } = require('./services/screenshot');
const { executePlaywright } = require('./services/run-playwright');
const app = express();
const PORT = process.env.PORT || 3000;
const API_KEY = process.env.API_KEY; // API Key dari .envv
app.use(morgan('common'));
app.use(express.json()); // Parsing JSON
launchBrowser();
// Hit Counter
async function fetchCount() {
try {
return (await axios.get("https://api.counterapi.dev/v1/aqul/brat/up")).data?.count || 0;
} catch {
return 0;
}
}
// Route `/brat?q=`
app.get('/brat', async (req, res) => {
const { q } = req.query;
if (!q) return res.status(400).json({ error: "Parameter `q` diperlukan" });
try {
const image = await generateBrat(q);
res.set('Content-Type', 'image/png');
res.send(image);
} catch (error) {
res.status(500).json({ error: 'Gagal menghasilkan brat', detail: error.message });
}
});
app.get('/editimg', async (req, res) => {
const { q, url } = req.query;
if (!q && !url) return res.status(400).json({ error: "Parameter `q` diperlukan" });
try {
let buffer = await urlToBuffer(url)
const image = await generateImage(q, buffer);
res.set('Content-Type', 'image/png');
res.send(image);
} catch (error) {
res.status(500).json({ error: 'Gagal menghasilkan image', detail: error.message });
}
});
//upscaler
app.get('/upscaler', async (req, res) =>{
const { url, style } = req.query
if (!url) return res.status(400).json({ error: "Parameter `url` diperlukan" });
try {
//const image = await urlToBuffer(url)
const up = await bigjpg.upscale(url, { style })
//const u = await Upload(up)
res.json(up)
} catch (e) {
res.status(500).json({ error: 'Gagal menghdkan', detail: e });
}
})
// Route `/ss?url=`
app.get('/ss', async (req, res) => {
const { url, device } = req.query;
if (!url) return res.status(400).json({ error: "Parameter `url` diperlukan" });
try {
const image = await takeScreenshot(url, device);
res.set('Content-Type', 'image/png');
res.send(image);
} catch (error) {
res.status(500).json({ error: 'Gagal mengambil screenshot', detail: error.message });
}
});
app.get('/tes', async (req, res) => {
let iya = await tes()
return res.json({
html: iya,
})
})
// Endpoint `POST /run` untuk eksekusi Playwright kustom
app.post('/run', async (req, res) => {
const { api_key, code } = req.body;
// Validasi API Key
if (api_key !== API_KEY) {
return res.status(403).json({ error: "Unauthorized" });
}
if (!code) {
return res.status(400).json({ error: "Parameter `code` diperlukan" });
}
try {
const result = await executePlaywright(code);
res.json(result);
} catch (error) {
res.status(500).json({ error: "Runtime Error", detail: error.message });
}
});
// Root Route
app.get('/', async (req, res) => {
res.json({
author: 'cipungmo',
repository: { github: 'https://github.com/cifumo' },
hit: await fetchCount(),
message: "Gunakan endpoint `/brat?q=`, `/ss?url=`, atau `/run`",
runtime: {
os: os.type(),
platform: os.platform(),
architecture: os.arch(),
cpuCount: os.cpus().length,
uptime: `${os.uptime()} seconds`,
memoryUsage: `${Math.round((os.totalmem() - os.freemem()) / 1024 / 1024)} MB used of ${Math.round(os.totalmem() / 1024 / 1024)} MB`,
},
});
});
// Menangani Penutupan Server
process.on('SIGINT', async () => {
console.log('SIGINT diterima, menutup browser...');
await closeBrowser();
process.exit(0);
});
process.on('SIGTERM', async () => {
console.log('SIGTERM diterima, menutup browser...');
await closeBrowser();
process.exit(0);
});
process.on('exit', async () => {
console.log('Proses keluar, menutup browser...');
await closeBrowser();
});
app.listen(PORT, () => console.log(`Server berjalan di port ${PORT}`));