AI-Voice-Agent-Node/app.js

88 lines
2.9 KiB
JavaScript

require('dotenv').config();
const express = require('express');
const cors = require('cors');
const apiRoutes = require('./routes/apiRoutes');
const userRoutes = require('./routes/userRoutes');
const authRoutes = require('./routes/authRoutes');
const https = require('https');
const fs = require("fs")
const {initWebSocket} = require('./services/webSocket')
const { connectDB } = require('./config/database');
connectDB();
const app = express();
const sslOptions = {
// key: fs.readFileSync('./certificates/fullchain.pem'),
// cert: fs.readFileSync('./certificates/privkey.pem'),
};
// Create HTTP server (use HTTP for now to avoid SSL issues, in production use HTTPS with valid certificates)
const server = require('http').createServer(app);
// Initialize WebSocket server
initWebSocket(server);
console.log('WebSocket server initialized');
connectDB()
// Middleware to parse JSON bodies
app.use(express.json()); // 👈 Add this line
// Serve static files from the public directory
app.use(express.static('public'));
// CORS Configuration
const allowedOrigins = ['https://guardiancalls.tech4bizsolutions.com','http://localhost:5174', 'https://dashboard.tech4biz.info','http://localhost:5173', 'http://192.168.1.35:5173',"https://guardiancall.blueskyaiautomation.com"]; // Replace as needed
app.use((req, res, next) => {
// Check if the request is for the WebSocket test page
if (req.path === '/websocket-test' || req.path === '/public/websocket-test.html') {
// Less restrictive CSP for WebSocket test page
res.setHeader(
'Content-Security-Policy',
"default-src 'self'; connect-src 'self' ws: wss: http: https:; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';"
);
} else {
// Original CSP for other pages
res.setHeader(
'Content-Security-Policy',
"default-src 'self'; connect-src 'self' wss://guardiancalls.tech4bizsolutions.com https://your-api-domain.com; script-src 'self';"
);
}
next();
});
app.use(cors({
origin: function (origin, callback) {
if (!origin) return callback(null, true); // Allow requests with no origin
if (allowedOrigins.indexOf(origin) === -1) {
const msg = 'The CORS policy for this site does not allow access from the specified Origin.';
return callback(new Error(msg), false);
}
return callback(null, true);
},
optionsSuccessStatus: 200
}));
// Routes
app.use('/api/user', userRoutes);
app.use('/api/call-list', apiRoutes);
app.use('/api/auth', authRoutes);
app.get('/', (req, res) => {
res.send("Backend is working!");
});
// WebSocket test page
app.get('/websocket-test', (req, res) => {
res.sendFile(__dirname + '/public/websocket-test.html');
});
// Start server
const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
console.log(`HTTP server running on port ${PORT}`);
console.log(`WebSocket server available at ws://localhost:${PORT}`);
});