Pati / server.js
HerzaJ's picture
Update server.js
b7106fd verified
const express = require('express');
const { chromium, devices } = require('playwright');
const cors = require('cors');
const fs = require('fs').promises;
const path = require('path');
const app = express();
const PORT = process.env.PORT || 7860;
app.use(cors());
app.use(express.json({ limit: '50mb' }));
app.use('/files', express.static('public'));
const publicDir = path.join(__dirname, 'public');
fs.mkdir(publicDir, { recursive: true }).catch(console.error);
app.post('/api/s-playwright', async (req, res) => {
const { code, lang } = req.body;
if (!code || !lang) {
return res.status(400).json({
success: false,
error: 'Missing required fields: code and lang'
});
}
const supportedLangs = ['javascript'];
const normalizedLang = lang.toLowerCase();
if (!supportedLangs.includes(normalizedLang)) {
return res.status(400).json({
success: false,
error: `Unsupported language: "${lang}". Supported: ${supportedLangs.join(', ')}`
});
}
try {
const AsyncFunction = Object.getPrototypeOf(async function(){}).constructor;
const executableCode = new AsyncFunction('chromium', 'devices', 'publicDir', 'path', code);
const result = await executableCode(chromium, devices, publicDir, path);
const timestamp = Date.now();
const baseUrl = `${req.protocol}://${req.get('host')}`;
const screenshotFiles = await fs.readdir(publicDir);
const recentFiles = screenshotFiles
.filter(f => f.startsWith('screenshot-') && f.endsWith('.png'))
.map(f => ({
name: f,
publicURL: `${baseUrl}/files/${f}`
}));
res.json({
success: true,
data: {
result: result,
files: recentFiles,
timestamp: timestamp
}
});
} catch (error) {
res.status(500).json({
success: false,
error: error.message,
stack: error.stack
});
}
});
app.get('/', (req, res) => {
res.json({
message: 'Playwright API is running',
endpoints: {
'POST /api/s-playwright': 'Execute playwright code'
}
});
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`Server running on port ${PORT}`);
});