sms-gateway/server.js
2026-03-04 19:30:01 +01:00

73 lines
2.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Load .env file if present (optional)
try { require('dotenv').config(); } catch { /* dotenv not installed use env vars directly */ }
const express = require('express');
const session = require('express-session');
const cors = require('cors');
const path = require('path');
const log = require('./src/logger');
const { initDB } = require('./src/db');
const { startPoller } = require('./src/poller');
const apiRoutes = require('./src/routes/api');
const app = express();
const PORT = parseInt(process.env.PORT || '3000', 10);
// ── Middleware ────────────────────────────────────────────────────────────────
app.use(cors({ origin: true, credentials: true }));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(session({
secret: process.env.SESSION_SECRET || 'sms-gateway-change-this-secret',
resave: false,
saveUninitialized: false,
cookie: {
secure: false,
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000,
},
}));
// HTTP request logging (DEBUG level)
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
const ms = Date.now() - start;
log.debug('HTTP', `${req.method} ${req.originalUrl}${res.statusCode} (${ms}ms)`);
});
next();
});
// ── Static files ──────────────────────────────────────────────────────────────
app.use(express.static(path.join(__dirname, 'public')));
// ── Routes ────────────────────────────────────────────────────────────────────
app.use('/api', apiRoutes);
// SPA fallback serve index.html for any non-API route
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
// ── Startup ───────────────────────────────────────────────────────────────────
async function start() {
initDB();
startPoller();
app.listen(PORT, () => {
log.info('Server', `SMS Gateway running at http://localhost:${PORT}`);
log.info('Server', 'Default admin: admin / changeme (change via Settings)');
log.info('Server', `Log level: ${log.getLevel()} (set LOG_LEVEL env or PUT /api/log-level)`);
});
}
start().catch(err => {
log.error('Server', 'Fatal startup error:', err.message);
process.exit(1);
});