import https from 'https'; import fs from 'fs'; import path from 'path'; import { fileURLToPath } from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const options = { key: fs.readFileSync('./localhost+2-key.pem'), cert: fs.readFileSync('./localhost+2.pem') }; const server = https.createServer(options, (req, res) => { let filePath = '.' + req.url; // Handle root path if (filePath === './') { filePath = './index.html'; } // Handle callback.html specifically if (filePath === './callback.html') { filePath = './index.html'; // Serve the React app, which will handle the callback } // Read and serve the file fs.readFile(filePath, (err, data) => { if (err) { if (err.code === 'ENOENT') { // File not found, serve index.html for SPA routing fs.readFile('./index.html', (err, data) => { if (err) { res.writeHead(404); res.end('File not found'); return; } res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(data); }); } else { res.writeHead(500); res.end('Server Error'); } return; } // Set content type based on file extension const ext = path.extname(filePath); const contentType = { '.html': 'text/html', '.js': 'application/javascript', '.mjs': 'application/javascript', '.css': 'text/css', '.json': 'application/json', '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.gif': 'image/gif', '.svg': 'image/svg+xml', '.ico': 'image/x-icon', '.woff': 'font/woff', '.woff2': 'font/woff2', '.ttf': 'font/ttf' }[ext] || 'application/octet-stream'; res.writeHead(200, { 'Content-Type': contentType }); res.end(data); }); }); server.listen(3443, '0.0.0.0', () => { console.log('Direct HTTPS Server running on https://159.195.9.107:3443'); console.log('This serves the built files directly without proxying'); });