const express = require('express'); const http = require('http'); const cors = require('cors'); const { Server } = require('socket.io'); const dotenv = require('dotenv'); dotenv.config(); const authRoutes = require('./routes/auth'); const projectRoutes = require('./routes/projects'); const fileRoutes = require('./routes/files'); const aiRoutes = require('./routes/ai'); const deployRoutes = require('./routes/deploy'); const { setupTerminal } = require('./routes/terminal'); const { authMiddleware } = require('./middleware/auth'); const { rateLimiter } = require('./middleware/ratelimit'); const app = express(); const server = http.createServer(app); // Middleware app.use(cors({ origin: process.env.FRONTEND_URL || 'http://localhost:5173', credentials: true, })); app.use(express.json({ limit: '10mb' })); app.use(rateLimiter); // Root Route app.get('/', (req, res) => { res.send('🌊 Indus IDE Backend is running successfully!'); }); // Health check app.get('/api/health', (req, res) => { res.json({ status: 'ok', service: 'indus-backend', timestamp: new Date().toISOString() }); }); // Routes app.use('/api/auth', authRoutes); app.use('/api/projects', authMiddleware, projectRoutes); app.use('/api/files', authMiddleware, fileRoutes); app.use('/api/ai', aiRoutes); // AI has its own auth check app.use('/api/deploy', authMiddleware, deployRoutes); // WebSocket terminal setupTerminal(server); // Error handler app.use((err, req, res, next) => { console.error('Server error:', err.message); res.status(500).json({ error: 'Internal server error' }); }); const PORT = process.env.PORT || 4000; server.listen(PORT, () => { console.log(`🌊 Indus Backend running on port ${PORT}`); console.log(` Ollama URL: ${process.env.OLLAMA_URL || 'http://localhost:11434'}`); }); module.exports = { app, server };