File size: 2,172 Bytes
bb41030
2c2fae6
 
 
950475f
bb41030
 
 
 
2c2fae6
 
 
 
 
 
 
aaa04de
 
 
2c2fae6
 
aaa04de
2c2fae6
 
aaa04de
2c2fae6
 
 
aaa04de
 
 
 
 
 
 
 
 
 
 
 
4358f3a
 
bb41030
 
 
2c2fae6
bb41030
2c2fae6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bb41030
 
 
 
 
2c2fae6
bb41030
2c2fae6
bb41030
2c2fae6
 
 
bb41030
 
 
0bbe894
950475f
 
 
 
 
 
2c2fae6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
const express = require("express");
const { chromium: origChromium } = require("playwright");
const axios = require("axios")
const Form = require("form-data")
const http = require('http');

const app = express();
app.use(express.json({ limit: "5mb" }));

const uploadFile = async (file) => {
  const key = "AIzaBj7z2z3xBjsk"
  let domain = 'https://c.termai.cc'
  const formData = new Form();
  formData.append('file', file, { filename: 'file.png'});

  try {
    const response = await axios.post(`${domain}/api/upload?uploader=drive&key=` + key, formData, {
      headers: formData.getHeaders(), 
      maxBodyLength: Infinity,
    });

    return response.data || {};
  } catch (error) {
    console.error('Error uploading file', error.response?.data || error.message);
    return {};
  }
};

const patchScreenshot = (page) => {
  const orig = page.screenshot;
  page.screenshot = async function (options = {}) {
    const buffer = await orig.apply(this, [options]);
    const url = await uploadFile(buffer);
    if (url && url.path) { 
      images.push(url.path);
    }
    return buffer;
  };
};

app.all("/", async (req, res) => {
  const code = req.body?.code || req.query?.code;
  if (!code) return res.status(400).json({ error: "No code provided" });

  let browser;
  const images = [];

  const chromium = {
    ...origChromium,
    launch: async (...args) => {
      browser = await origChromium.launch(...args);
      const origNewPage = browser.newPage;
      browser.newPage = async (...a) => {
        const page = await origNewPage.apply(browser, a);
        patchScreenshot(page);
        return page;
      };
      return browser;
    }
  };

  try {
    const result = await eval(`
      (async () => {
        ${code}
      })()
    `);
    res.json({ success: true, result, images });
  } catch (err) {
    res.status(500).json({ error: err.message, images });
  } finally {
    if (browser) {
      try { await browser.close(); } catch {}
    }
  }
});

const PORT = process.env.PORT || 7860;
const server = http.createServer({
  maxHeaderSize: 64 * 1024  
}, app);

server.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});