termai commited on
Commit
07aa35b
·
verified ·
1 Parent(s): 0b921e7

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +41 -28
index.js CHANGED
@@ -1,28 +1,34 @@
1
  const express = require("express");
2
  const { chromium: origChromium } = require("playwright");
3
- const axios = require("axios")
4
- const Form = require("form-data")
5
- const http = require('http');
6
 
7
  const app = express();
8
  app.use(express.json({ limit: "5mb" }));
9
 
10
  const uploadFile = async (file) => {
11
- const key = "AIzaBj7z2z3xBjsk"
12
- let domain = 'https://c.termai.cc'
13
  const formData = new Form();
14
- formData.append('file', file, { filename: 'file.png'});
15
 
16
  try {
17
- const response = await axios.post(`${domain}/api/upload?uploader=drive&key=` + key, formData, {
18
- headers: formData.getHeaders(),
19
- maxBodyLength: Infinity,
20
- });
21
- console.log("[patchScreenshot] Upload result:", response.data);
22
-
 
 
 
23
  return response.data || {};
24
  } catch (error) {
25
- console.error('Error uploading file', error.response?.data || error.message);
 
 
 
26
  return {};
27
  }
28
  };
@@ -30,16 +36,16 @@ const uploadFile = async (file) => {
30
  const patchScreenshot = (page, images) => {
31
  const orig = page.screenshot;
32
  page.screenshot = async function (options = {}) {
 
33
  const buffer = await orig.apply(this, [options]);
34
  const url = await uploadFile(buffer);
35
- if (url && url.path) {
36
  images.push(url.path);
37
  }
38
  return buffer;
39
  };
40
  };
41
 
42
-
43
  app.all("/", async (req, res) => {
44
  const code = req.body?.code || req.query?.code;
45
  if (!code) return res.status(400).json({ error: "No code provided" });
@@ -51,37 +57,44 @@ app.all("/", async (req, res) => {
51
  ...origChromium,
52
  launch: async (...args) => {
53
  browser = await origChromium.launch(...args);
54
- const origNewPage = browser.newPage;
55
  browser.newPage = async (...a) => {
56
- const page = await origNewPage.apply(browser, a);
57
  patchScreenshot(page, images);
58
  return page;
59
  };
60
  return browser;
61
- }
62
  };
63
 
64
  try {
65
- const result = await eval(`
66
- (async () => {
67
- ${code}
68
- })()
69
- `);
 
 
70
  res.json({ success: true, result, images });
71
  } catch (err) {
72
  res.status(500).json({ error: err.message, images });
73
  } finally {
74
  if (browser) {
75
- try { await browser.close(); } catch {}
 
 
76
  }
77
  }
78
  });
79
 
80
  const PORT = process.env.PORT || 7860;
81
- const server = http.createServer({
82
- maxHeaderSize: 64 * 1024
83
- }, app);
 
 
 
84
 
85
  server.listen(PORT, () => {
86
  console.log(`Server running on port ${PORT}`);
87
- });
 
1
  const express = require("express");
2
  const { chromium: origChromium } = require("playwright");
3
+ const axios = require("axios");
4
+ const Form = require("form-data");
5
+ const http = require("http");
6
 
7
  const app = express();
8
  app.use(express.json({ limit: "5mb" }));
9
 
10
  const uploadFile = async (file) => {
11
+ const key = "AIzaBj7z2z3xBjsk";
12
+ let domain = "https://c.termai.cc";
13
  const formData = new Form();
14
+ formData.append("file", file, { filename: "file.png" });
15
 
16
  try {
17
+ const response = await axios.post(
18
+ `${domain}/api/upload?uploader=drive&key=` + key,
19
+ formData,
20
+ {
21
+ headers: formData.getHeaders(),
22
+ maxBodyLength: Infinity,
23
+ }
24
+ );
25
+ console.log("[uploadFile] Upload result:", response.data);
26
  return response.data || {};
27
  } catch (error) {
28
+ console.error(
29
+ "Error uploading file",
30
+ error.response?.data || error.message
31
+ );
32
  return {};
33
  }
34
  };
 
36
  const patchScreenshot = (page, images) => {
37
  const orig = page.screenshot;
38
  page.screenshot = async function (options = {}) {
39
+ console.log("[patchScreenshot] Screenshot called");
40
  const buffer = await orig.apply(this, [options]);
41
  const url = await uploadFile(buffer);
42
+ if (url && url.path) {
43
  images.push(url.path);
44
  }
45
  return buffer;
46
  };
47
  };
48
 
 
49
  app.all("/", async (req, res) => {
50
  const code = req.body?.code || req.query?.code;
51
  if (!code) return res.status(400).json({ error: "No code provided" });
 
57
  ...origChromium,
58
  launch: async (...args) => {
59
  browser = await origChromium.launch(...args);
60
+ const origNewPage = browser.newPage.bind(browser);
61
  browser.newPage = async (...a) => {
62
+ const page = await origNewPage(...a);
63
  patchScreenshot(page, images);
64
  return page;
65
  };
66
  return browser;
67
+ },
68
  };
69
 
70
  try {
71
+ const func = new Function(
72
+ "chromium",
73
+ `return (async () => { ${code} })()`
74
+ );
75
+
76
+ const result = await func(chromium);
77
+
78
  res.json({ success: true, result, images });
79
  } catch (err) {
80
  res.status(500).json({ error: err.message, images });
81
  } finally {
82
  if (browser) {
83
+ try {
84
+ await browser.close();
85
+ } catch {}
86
  }
87
  }
88
  });
89
 
90
  const PORT = process.env.PORT || 7860;
91
+ const server = http.createServer(
92
+ {
93
+ maxHeaderSize: 64 * 1024,
94
+ },
95
+ app
96
+ );
97
 
98
  server.listen(PORT, () => {
99
  console.log(`Server running on port ${PORT}`);
100
+ });