Ruloaooa commited on
Commit
fdf7b36
·
verified ·
1 Parent(s): ecbd556

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +64 -36
index.js CHANGED
@@ -6,12 +6,60 @@ const bodyParser = require('body-parser');
6
  const path = require('path');
7
  const loadImg = require('./loader');
8
  const app = express();
9
- const puppeteer = require('puppeteer');
10
  const port = 7860;
11
  app.set('trust proxy', 1);
12
 
13
  let totalReq = 0;
14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  //Security
16
  app.use(helmet());
17
  const limiter = rateLimit({
@@ -322,41 +370,21 @@ app.post('/generate2', async (req, res) => {
322
  }
323
  });
324
 
325
- app.post("/brat", async (req, res) => {
326
- const { text } = req.body;
327
-
328
- if (!text) {
329
- return res.status(400).json({ error: "Teks tidak boleh kosong." });
330
- }
331
-
332
- let browser;
333
-
334
- try {
335
- // Buka browser baru
336
- browser = await puppeteer.launch({
337
- headless: true,
338
- args: ["--no-sandbox", "--disable-setuid-sandbox"],
339
- });
340
-
341
- const page = await browser.newPage();
342
- await page.goto("https://www.bratgenerator.com/");
343
- await page.click("#toggleButtonWhite"); // Aktifkan tema putih
344
- await page.type("#textInput", text); // Isi teks
345
-
346
- // Ambil screenshot elemen hasil
347
- const screenshotBuffer = await page.$eval("#textOverlay", async (element) => {
348
- return await element.screenshot({ encoding: "binary" });
349
- });
350
-
351
- // Kirim hasil sebagai image
352
- res.set("Content-Type", "image/jpeg");
353
- res.send(screenshotBuffer);
354
- } catch (error) {
355
- console.error("Error generating Brat:", error);
356
- res.status(500).json({ error: "Terjadi kesalahan saat membuat gambar." });
357
- } finally {
358
- if (browser) await browser.close();
359
- }
360
  });
361
 
362
  // Mulai server Express
 
6
  const path = require('path');
7
  const loadImg = require('./loader');
8
  const app = express();
9
+ const { chromium } = require('playwright');
10
  const port = 7860;
11
  app.set('trust proxy', 1);
12
 
13
  let totalReq = 0;
14
 
15
+ //Brat
16
+ const config = {
17
+ maxTextLength: 100,
18
+ viewport: { width: 1920, height: 1080 },
19
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
20
+ };
21
+
22
+ let browser, page;
23
+
24
+ const utils = {
25
+ async initialize() {
26
+ if (!browser) {
27
+ browser = await chromium.launch({ headless: true });
28
+ const context = await browser.newContext({
29
+ viewport: config.viewport,
30
+ userAgent: config.userAgent
31
+ });
32
+
33
+ await context.route('**/*', (route) => {
34
+ const url = route.request().url();
35
+ if (url.endsWith('.png') || url.endsWith('.jpg') || url.includes('google-analytics')) {
36
+ return route.abort();
37
+ }
38
+ route.continue();
39
+ });
40
+
41
+ page = await context.newPage();
42
+ await page.goto('https://www.bratgenerator.com/', { waitUntil: 'domcontentloaded', timeout: 10000 });
43
+
44
+ try {
45
+ await page.click('#onetrust-accept-btn-handler', { timeout: 2000 });
46
+ } catch { }
47
+
48
+ await page.evaluate(() => setupTheme('white'));
49
+ }
50
+ },
51
+
52
+ async generateBrat(text) {
53
+ await page.fill('#textInput', text);
54
+ const overlay = page.locator('#textOverlay');
55
+ return overlay.screenshot({ timeout: 3000 });
56
+ },
57
+
58
+ async close() {
59
+ if (browser) await browser.close();
60
+ }
61
+ };
62
+
63
  //Security
64
  app.use(helmet());
65
  const limiter = rateLimit({
 
370
  }
371
  });
372
 
373
+ app.get('/brat', async (req, res) => {
374
+ try {
375
+ const { text } = req.query;
376
+ if (!text) {
377
+ return res.json('Input text brat!');
378
+ }
379
+ const imageBuffer = await utils.generateBrat(text);
380
+ res.set('Content-Type', 'image/png');
381
+ res.send(imageBuffer);
382
+ } catch (error) {
383
+ console.error(error);
384
+ res.status(500).json({
385
+ message: 'error generating brat'
386
+ });
387
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
388
  });
389
 
390
  // Mulai server Express