andhikagg commited on
Commit
4d7f8c3
·
verified ·
1 Parent(s): f3ac512

Create app.js

Browse files
Files changed (1) hide show
  1. app.js +102 -0
app.js ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const express = require('express');
2
+ const { chromium } = require('playwright');
3
+ const cors = require('cors');
4
+ const dotenv = require('dotenv');
5
+ const os = require('os');
6
+
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 = {
18
+ async initialize() {
19
+ if (!browser) {
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) => {
27
+ const url = route.request().url();
28
+ if (url.endsWith('.png') || url.endsWith('.jpg') || url.includes('google-analytics')) {
29
+ return route.abort();
30
+ }
31
+ route.continue();
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
+
99
+ process.on('SIGINT', async () => {
100
+ await utils.close();
101
+ process.exit(0);
102
+ });