server.js•3.2 kB
const { createServer: createHttpsServer } = require("https");
const { createServer: createHttpServer } = require("http");
const { parse } = require("url");
const next = require("next");
const fs = require("fs");
const path = require("path");
require("dotenv").config();
const dev = process.env.NODE_ENV !== "production";
const hostname = "localhost";
const port = parseInt(process.env.PORT || "3000", 10);
const httpsEnabled = process.env.HTTPS_ENABLED === "true";
// Prepare Next.js app
const app = next({ dev, hostname, port });
const handle = app.getRequestHandler();
app.prepare().then(() => {
let server;
// Define SSL certificate paths (used for HTTPS check in listen callback)
const keyPath = process.env.SSL_KEY_PATH || "./ssl/server.key";
const certPath = process.env.SSL_CERT_PATH || "./ssl/server.cert";
if (httpsEnabled) {
// Check for SSL certificates
// Check if certificates exist
if (!fs.existsSync(keyPath) || !fs.existsSync(certPath)) {
console.warn("\n⚠️ SSL certificates not found!");
console.warn(" Expected locations:");
console.warn(` - Key: ${keyPath}`);
console.warn(` - Cert: ${certPath}`);
console.warn("\n To generate self-signed certificates, run:");
console.warn(" npm run generate-cert\n");
console.warn(" Starting HTTP server instead...\n");
// Fall back to HTTP
server = createHttpServer((req, res) => {
const parsedUrl = parse(req.url, true);
handle(req, res, parsedUrl);
});
} else {
// HTTPS server with SSL certificates
const httpsOptions = {
key: fs.readFileSync(keyPath),
cert: fs.readFileSync(certPath),
};
server = createHttpsServer(httpsOptions, (req, res) => {
const parsedUrl = parse(req.url, true);
handle(req, res, parsedUrl);
});
console.log("\n✅ HTTPS server configured");
}
} else {
// HTTP server
server = createHttpServer((req, res) => {
const parsedUrl = parse(req.url, true);
handle(req, res, parsedUrl);
});
}
server.listen(port, (err) => {
if (err) throw err;
const sslEnabled = httpsEnabled && fs.existsSync(keyPath);
const protocol = sslEnabled ? "https" : "http";
console.log("\n┌────────────────────────────────────────────────┐");
console.log("│ │");
console.log("│ ScanPower MCP Server │");
console.log("│ │");
console.log("└────────────────────────────────────────────────┘\n");
console.log(`🚀 Server running at: ${protocol}://${hostname}:${port}`);
console.log(`📊 Environment: ${process.env.NODE_ENV || "development"}`);
console.log(`🔒 HTTPS: ${sslEnabled ? "Enabled" : "Disabled"}`);
console.log(`📝 Request logging: ${process.env.LOG_REQUESTS !== "false" ? "Enabled" : "Disabled"}\n`);
});
});