tunnel/source/server/index.ts

35 lines
1.0 KiB
TypeScript
Raw Normal View History

2026-07-16 12:17:00 +00:00
import 'dotenv/config';
import express from 'express';
import cookieParser from 'cookie-parser';
import http from 'http';
import { WebSocketServer } from 'ws';
import tunnelsRouter from './routes/tunnels';
import proxyRouter from './routes/proxy';
import { handleAgentUpgrade } from './routes/agent';
const app = express();
app.set( 'trust proxy', 1 );
app.use( cookieParser() );
// Apply JSON parsing only to API routes — proxy routes need raw body streams
app.use( '/api/tunnels', express.json(), tunnelsRouter );
app.use( '/t', proxyRouter );
const server = http.createServer( app );
const wss = new WebSocketServer( { noServer: true } );
server.on( 'upgrade', ( req, socket, head ) =>
{
if ( req.url?.startsWith( '/api/agent/' ) )
{
wss.handleUpgrade( req, socket, head, ws => handleAgentUpgrade( req, ws ) );
}
else
{
socket.destroy();
}
} );
const PORT = process.env.PORT ? Number( process.env.PORT ) : 3002;
server.listen( PORT, () => console.log( `rokojori-tunnel running on http://localhost:${ PORT }` ) );