35 lines
1.0 KiB
TypeScript
35 lines
1.0 KiB
TypeScript
|
|
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 }` ) );
|