const http = require('http'); const net = require('net'); const url = require('url'); const PORT = 7860; const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Gemini Proxy is running. Use HTTPS_PROXY environment variable.'); }); var counter=0; // Handle the HTTP CONNECT method (for HTTPS tunneling) server.on('connect', (req, clientSocket, head) => { const { port, hostname } = url.parse(`//${req.url}`, false, true); console.log(`${counter}: Tunneling to: ${hostname}:${port}`); counter++; const serverSocket = net.connect(port || 443, hostname, () => { // Send 200 Connection Established to the client clientSocket.write('HTTP/1.1 200 Connection Established\r\n' + 'Proxy-agent: Node.js-Proxy\r\n' + '\r\n'); serverSocket.write(head); // Pipe data between client and server serverSocket.pipe(clientSocket); clientSocket.pipe(serverSocket); }); serverSocket.on('error', (err) => { console.error(`Error connecting to ${hostname}:`, err.message); clientSocket.end(); }); clientSocket.on('error', (err) => { console.error('Client socket error:', err.message); serverSocket.end(); }); }); server.listen(PORT, () => { console.log(`Gemini Proxy server running on port ${PORT}`); });