50 lines
1.9 KiB
JavaScript
50 lines
1.9 KiB
JavaScript
const { loadConfig } = require('./config');
|
|
const { SessionManager } = require('./session/SessionManager');
|
|
const { createLogger } = require('./utils/logger');
|
|
|
|
const log = createLogger('Main');
|
|
|
|
// ─── Banner ──────────────────────────────────────────
|
|
console.log(`
|
|
\x1b[33m _____ _ ____
|
|
| ___| | __ _ _ _ ___ _ _| _ \\ _ __ _____ ___ _
|
|
| |_ | |/ _\` | | | |/ _ \\ '__| |_) | '__/ _ \\ \\/ / | | |
|
|
| _| | | (_| | |_| | __/ | | __/| | | (_) > <| |_| |
|
|
|_| |_|\\__,_|\\__, |\\___|_| |_| |_| \\___/_/\\_\\\\__, |
|
|
|___/ |___/ \x1b[0m
|
|
`);
|
|
|
|
// ─── Load config ─────────────────────────────────────
|
|
let config;
|
|
try {
|
|
config = loadConfig();
|
|
log.info(`Loaded config: server=${config.server.host}:${config.server.port} version=${config.server.version}`);
|
|
log.info(`Proxy will listen on port ${config.proxy.port}`);
|
|
} catch (err) {
|
|
log.error(`Failed to load config: ${err.message}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
// ─── Start session manager ──────────────────────────
|
|
const session = new SessionManager(config);
|
|
session.start();
|
|
|
|
// ─── Graceful shutdown ──────────────────────────────
|
|
function shutdown(signal) {
|
|
log.info(`Received ${signal}, shutting down...`);
|
|
session.stop();
|
|
setTimeout(() => process.exit(0), 2000);
|
|
}
|
|
|
|
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
|
|
process.on('uncaughtException', (err) => {
|
|
log.error(`Uncaught exception: ${err.message}`);
|
|
log.error(err.stack);
|
|
});
|
|
|
|
process.on('unhandledRejection', (reason) => {
|
|
log.error(`Unhandled rejection: ${reason}`);
|
|
});
|