79 lines
3.4 KiB
JavaScript
79 lines
3.4 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
require("./instrumentation");
|
|
const express_1 = __importDefault(require("express"));
|
|
const cors_1 = __importDefault(require("cors"));
|
|
const helmet_1 = __importDefault(require("helmet"));
|
|
const cookie_parser_1 = __importDefault(require("cookie-parser"));
|
|
const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const auth_1 = __importDefault(require("./routes/auth"));
|
|
const employees_1 = __importDefault(require("./routes/employees"));
|
|
const departments_1 = __importDefault(require("./routes/departments"));
|
|
const positions_1 = __importDefault(require("./routes/positions"));
|
|
const locations_1 = __importDefault(require("./routes/locations"));
|
|
const leave_1 = __importDefault(require("./routes/leave"));
|
|
const attendance_1 = __importDefault(require("./routes/attendance"));
|
|
const payroll_1 = __importDefault(require("./routes/payroll"));
|
|
const recruitment_1 = __importDefault(require("./routes/recruitment"));
|
|
const performance_1 = __importDefault(require("./routes/performance"));
|
|
const engagement_1 = __importDefault(require("./routes/engagement"));
|
|
const analytics_1 = __importDefault(require("./routes/analytics"));
|
|
const settings_1 = __importDefault(require("./routes/settings"));
|
|
const notifications_1 = __importDefault(require("./routes/notifications"));
|
|
const app = (0, express_1.default)();
|
|
const PORT = process.env.PORT || 5000;
|
|
// Security
|
|
app.use((0, helmet_1.default)({ contentSecurityPolicy: false }));
|
|
// CORS
|
|
app.use((0, cors_1.default)({
|
|
origin: [
|
|
'http://localhost:3000',
|
|
'http://localhost:5000',
|
|
'http://localhost:5173',
|
|
process.env.FRONTEND_URL || 'http://localhost:3000',
|
|
],
|
|
credentials: true,
|
|
}));
|
|
// Middleware
|
|
app.use(express_1.default.json({ limit: '10mb' }));
|
|
app.use((0, cookie_parser_1.default)());
|
|
// Rate limiting for auth
|
|
const authLimiter = (0, express_rate_limit_1.default)({
|
|
windowMs: 15 * 60 * 1000,
|
|
max: 20,
|
|
message: { error: 'Too many requests' },
|
|
});
|
|
// Health check
|
|
app.get('/health', (req, res) => {
|
|
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
});
|
|
// API Routes
|
|
app.use('/api/v1/auth', authLimiter, auth_1.default);
|
|
app.use('/api/v1/employees', employees_1.default);
|
|
app.use('/api/v1/departments', departments_1.default);
|
|
app.use('/api/v1/positions', positions_1.default);
|
|
app.use('/api/v1/locations', locations_1.default);
|
|
app.use('/api/v1/leave', leave_1.default);
|
|
app.use('/api/v1/attendance', attendance_1.default);
|
|
app.use('/api/v1/payroll', payroll_1.default);
|
|
app.use('/api/v1/recruitment', recruitment_1.default);
|
|
app.use('/api/v1/performance', performance_1.default);
|
|
app.use('/api/v1/engagement', engagement_1.default);
|
|
app.use('/api/v1/analytics', analytics_1.default);
|
|
app.use('/api/v1/settings', settings_1.default);
|
|
app.use('/api/v1/notifications', notifications_1.default);
|
|
// Serve frontend in production
|
|
const frontendDist = path_1.default.join(__dirname, '../../public');
|
|
app.use(express_1.default.static(frontendDist));
|
|
app.get('*', (req, res) => {
|
|
res.sendFile(path_1.default.join(frontendDist, 'index.html'));
|
|
});
|
|
app.listen(PORT, () => {
|
|
console.log(`BetterHuman API running on port ${PORT}`);
|
|
});
|
|
exports.default = app;
|
|
//# sourceMappingURL=index.js.map
|