- Cliente Windows com modo silencioso e auto-start robusto - Backend Node.js + API REST - Frontend Next.js + Dashboard - Scripts PowerShell de configuração e diagnóstico - Documentação completa - Build scripts para Windows e Linux - Solução de auto-start após reinicialização Resolução do problema: Cliente não voltava ativo após reboot Solução: Registro do Windows + Task Scheduler + Modo silencioso
83 lines
2.4 KiB
JavaScript
83 lines
2.4 KiB
JavaScript
const express = require('express');
|
|
const cors = require('cors');
|
|
require('dotenv').config();
|
|
|
|
const app = express();
|
|
|
|
// Middleware CORS
|
|
const corsOptions = {
|
|
origin: function (origin, callback) {
|
|
// Permitir requisições sem origin (mobile apps, Postman, etc)
|
|
if (!origin) return callback(null, true);
|
|
|
|
// Lista de origens permitidas
|
|
const allowedOrigins = [
|
|
'https://admin.noidle.tech',
|
|
'https://admin.pointcontrol.co',
|
|
'http://localhost:3000',
|
|
'http://localhost:3001'
|
|
];
|
|
|
|
if (allowedOrigins.indexOf(origin) !== -1 || origin.includes('localhost')) {
|
|
callback(null, true);
|
|
} else {
|
|
callback(null, true); // Permitir todas por enquanto, pode restringir depois
|
|
}
|
|
},
|
|
credentials: true,
|
|
methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
|
|
allowedHeaders: ['Content-Type', 'Authorization', 'X-API-Key']
|
|
};
|
|
|
|
app.use(cors(corsOptions));
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({ extended: true }));
|
|
|
|
// Log
|
|
app.use((req, res, next) => {
|
|
console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
|
|
next();
|
|
});
|
|
|
|
// Rotas
|
|
const authRoutes = require('./routes/auth');
|
|
const dashboardRoutes = require('./routes/dashboard');
|
|
const devicesRoutes = require('./routes/devices');
|
|
const activitiesRoutes = require('./routes/activities');
|
|
const activityRoutes = require('./routes/activity');
|
|
const keysRoutes = require('./routes/keys');
|
|
const usersRoutes = require('./routes/users');
|
|
const teamsRoutes = require("./routes/teams");
|
|
|
|
app.use('/api/auth', authRoutes);
|
|
app.use('/api/dashboard', dashboardRoutes);
|
|
app.use('/api/devices', devicesRoutes);
|
|
app.use('/api/activities', activitiesRoutes);
|
|
app.use("/api/activity", activityRoutes);
|
|
app.use('/api/keys', keysRoutes);
|
|
app.use('/api/users', usersRoutes);
|
|
app.use("/api/teams", teamsRoutes);
|
|
|
|
// Health check
|
|
app.get('/api/health', (req, res) => {
|
|
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
});
|
|
|
|
// 404
|
|
app.use((req, res) => {
|
|
res.status(404).json({ error: 'Rota não encontrada' });
|
|
});
|
|
|
|
// Error handler
|
|
app.use((err, req, res, next) => {
|
|
console.error('Erro:', err);
|
|
res.status(500).json({ error: 'Erro interno do servidor' });
|
|
});
|
|
|
|
const PORT = process.env.PORT || 3005;
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`✅ PointControl API rodando na porta ${PORT}`);
|
|
console.log(`📅 ${new Date().toISOString()}`);
|
|
});
|