ryukenshiroo commited on
Commit
5b6f7b7
·
verified ·
1 Parent(s): f219892

Update app.js

Browse files
Files changed (1) hide show
  1. app.js +40 -34
app.js CHANGED
@@ -7,11 +7,11 @@ import os from 'os';
7
  dotenv.config();
8
 
9
  const config = {
10
- maxTextLength: 100,
11
  viewport: { width: 1920, height: 1080 },
12
- userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
13
  };
14
 
 
15
  let browser, page;
16
 
17
  const utils = {
@@ -20,7 +20,7 @@ const utils = {
20
  browser = await chromium.launch({ headless: true });
21
  const context = await browser.newContext({
22
  viewport: config.viewport,
23
- userAgent: config.userAgent
24
  });
25
 
26
  await context.route('**/*', (route) => {
@@ -32,67 +32,73 @@ const utils = {
32
  });
33
 
34
  page = await context.newPage();
35
- await page.goto('https://www.bratgenerator.com/', { waitUntil: 'domcontentloaded', timeout: 10000 });
36
-
37
- try {
38
- await page.click('#onetrust-accept-btn-handler', { timeout: 2000 });
39
- } catch { }
40
-
41
- await page.evaluate(() => setupTheme('white'));
42
  }
43
  },
44
 
45
  async generateBrat(text) {
46
  await page.fill('#textInput', text);
47
  const overlay = page.locator('#textOverlay');
48
- return overlay.screenshot({ timeout: 3000 });
49
  },
50
 
51
  async close() {
52
  if (browser) await browser.close();
53
- }
 
 
 
 
 
 
 
 
 
 
 
 
54
  };
55
 
56
  const app = express();
57
  app.use(express.json());
58
  app.use(cors());
59
- app.set('json spaces', 3);
60
 
61
- app.get('*', async (req, res) => {
 
62
  try {
63
  const { q } = req.query;
64
  if (!q) {
65
- return res.status(200).json({
66
- name: 'HD Bart Generator API',
67
- message: 'Parameter q di perlukan',
68
- version: '2.1.0',
69
- runtime: {
70
- os: os.type(),
71
- platform: os.platform(),
72
- architecture: os.arch(),
73
- cpuCount: os.cpus().length,
74
- uptime: `${os.uptime()} seconds`,
75
- memoryUsage: `${Math.round((os.totalmem() - os.freemem()) / 1024 / 1024)} MB used of ${Math.round(os.totalmem() / 1024 / 1024)} MB`
76
- }
77
- });
78
  }
 
79
  const imageBuffer = await utils.generateBrat(q);
80
  res.set('Content-Type', 'image/png');
81
  res.send(imageBuffer);
82
  } catch (error) {
83
  console.error(error);
84
- res.status(500).json({
85
- status: false,
86
- message: 'Error generating image',
87
- error: process.env.NODE_ENV === 'development' ? error.message : undefined
88
- });
89
  }
90
  });
91
 
92
- const PORT = process.env.PORT || 7860;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
 
 
94
  app.listen(PORT, async () => {
95
- console.log(`Server running on port ${PORT}`);
96
  await utils.initialize();
97
  });
98
 
 
7
  dotenv.config();
8
 
9
  const config = {
 
10
  viewport: { width: 1920, height: 1080 },
11
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
12
  };
13
 
14
+ // Playwright browser instance
15
  let browser, page;
16
 
17
  const utils = {
 
20
  browser = await chromium.launch({ headless: true });
21
  const context = await browser.newContext({
22
  viewport: config.viewport,
23
+ userAgent: config.userAgent,
24
  });
25
 
26
  await context.route('**/*', (route) => {
 
32
  });
33
 
34
  page = await context.newPage();
35
+ await page.goto('https://www.bratgenerator.com/', { waitUntil: 'domcontentloaded' });
 
 
 
 
 
 
36
  }
37
  },
38
 
39
  async generateBrat(text) {
40
  await page.fill('#textInput', text);
41
  const overlay = page.locator('#textOverlay');
42
+ return overlay.screenshot();
43
  },
44
 
45
  async close() {
46
  if (browser) await browser.close();
47
+ },
48
+ };
49
+
50
+ const codeRunner = {
51
+ async runScript(language, code) {
52
+ const supportedLangs = ['javascript', 'python', 'java', 'csharp'];
53
+ if (!supportedLangs.includes(language.toLowerCase())) {
54
+ throw new Error(`Language "${language}" tidak didukung.`);
55
+ }
56
+
57
+ const result = `Eksekusi kode dalam bahasa ${language} berhasil. (Mocked result)`;
58
+ return { success: true, output: result };
59
+ },
60
  };
61
 
62
  const app = express();
63
  app.use(express.json());
64
  app.use(cors());
 
65
 
66
+ // Endpoint untuk gambar
67
+ app.get('/q', async (req, res) => {
68
  try {
69
  const { q } = req.query;
70
  if (!q) {
71
+ return res.status(400).json({ error: 'Parameter "q" diperlukan.' });
 
 
 
 
 
 
 
 
 
 
 
 
72
  }
73
+
74
  const imageBuffer = await utils.generateBrat(q);
75
  res.set('Content-Type', 'image/png');
76
  res.send(imageBuffer);
77
  } catch (error) {
78
  console.error(error);
79
+ res.status(500).json({ error: 'Terjadi kesalahan saat menghasilkan gambar.' });
 
 
 
 
80
  }
81
  });
82
 
83
+ // Endpoint untuk menjalankan kode
84
+ app.post('/run', async (req, res) => {
85
+ try {
86
+ const { language, code } = req.body;
87
+ if (!language || !code) {
88
+ return res.status(400).json({ error: 'Parameter "language" dan "code" diperlukan.' });
89
+ }
90
+
91
+ const result = await codeRunner.runScript(language, code);
92
+ res.json(result);
93
+ } catch (error) {
94
+ console.error(error);
95
+ res.status(500).json({ error: 'Terjadi kesalahan saat menjalankan kode.' });
96
+ }
97
+ });
98
 
99
+ const PORT = process.env.PORT || 7860;
100
  app.listen(PORT, async () => {
101
+ console.log(`Server berjalan di port ${PORT}`);
102
  await utils.initialize();
103
  });
104