- Modelo Usuario + seed desde lista de vendedores (18 usuarios, bcrypt cost 12) - POST /api/auth/login + /api/auth/me; middleware Bearer en todo /api excepto health, login y webhook Monday; flag AUTH_ENABLED - Username = nombre completo normalizado (case/acentos insensible), password inicial Frasa2026, admin vía ADMIN_PASSWORD - Apps: LoginScreen + AuthGate (StudioBlank), token en localStorage, header Authorization en todas las llamadas, logout en 401 - Tests: api 136, cotizador 71, alta 65, cobranza 71, agente-ia 13, landing 4
24 lines
666 B
TypeScript
24 lines
666 B
TypeScript
import express from 'express'
|
|
import cors from 'cors'
|
|
import { apiRouter } from './routes/index.js'
|
|
import { authMiddleware } from './middleware/auth.middleware.js'
|
|
import { errorHandler } from './middleware/errorHandler.js'
|
|
import { requestLogger } from './middleware/requestLogger.js'
|
|
|
|
export function crearApp(): express.Express {
|
|
const app = express()
|
|
|
|
app.use(cors()) // CORS abierto solo para dev (red interna)
|
|
app.use(express.json({ limit: '10mb' }))
|
|
app.use(requestLogger)
|
|
|
|
app.use('/api', authMiddleware, apiRouter)
|
|
|
|
app.use((_req, res) => {
|
|
res.status(404).json({ error: 'Ruta no encontrada' })
|
|
})
|
|
app.use(errorHandler)
|
|
|
|
return app
|
|
}
|