targo-backend/src/main.ts

106 lines
4.0 KiB
TypeScript

import 'reflect-metadata';
import * as nodeCrypto from 'crypto';
if (!(globalThis as any).crypto) {
(globalThis as any).crypto = nodeCrypto;
}
import { ensureAttachmentsTmpDir } from './time-and-attendance/attachments/config/attachment.fs';
import { NestFactory, Reflector } from '@nestjs/core';
import { AppModule } from './app.module';
// import { JwtAuthGuard } from './modules/authentication/guards/jwt-auth.guard';
import { ModulesGuard } from './common/guards/modules.guard';
// import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
// import { writeFileSync } from 'fs';
import * as session from 'express-session';
import * as passport from 'passport';
import { PrismaService } from 'src/prisma/prisma.service';
import { PrismaSessionStore } from '@quixo3/prisma-session-store';
// import { initSupervisor } from 'scripts/init-supervisor';
// import { initializePaidTimeOff } from 'scripts/init-paid-time-off';
// import { initializePreferences } from 'scripts/init-preferences-access';
// import { extractOldTimesheets } from 'scripts/migrate-timesheets';
// import { extractOldShifts } from 'scripts/migrate-shifts';
// import { extractOldExpenses } from 'scripts/migrate-expenses';
const SESSION_TOKEN_DURATION_MINUTES = 180
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const prisma_service = app.get(PrismaService);
const reflector = app.get(Reflector);
app.useGlobalGuards(
// new JwtAuthGuard(reflector), //Authentification JWT
new ModulesGuard(reflector), //deny-by-default and Module-based Access Control
);
// Authentication and session
app.use(session({
secret: 'This is a super secret dev secret that you cant share with anyone',
resave: false,
saveUninitialized: false,
rolling: true,
cookie: {
maxAge: SESSION_TOKEN_DURATION_MINUTES * 60 * 1000, // property maxAge requires milliseconds
httpOnly: true,
},
store: new PrismaSessionStore(prisma_service, {
sessionModelName: 'sessions',
checkPeriod: SESSION_TOKEN_DURATION_MINUTES * 60 * 1000, //ms
dbRecordIdIsSessionId: true,
dbRecordIdFunction: undefined,
})
}))
app.use(passport.initialize());
app.use(passport.session());
// Enable CORS
app.enableCors({
origin: ['http://10.100.251.2:9011', 'http://10.100.251.2:9012', 'http://10.100.251.2:9013', 'http://localhost:9000', 'https://app.targo.ca', 'https://app2.targo.ca','https://staging.app.targo.ca'],
credentials: true,
});
// //swagger config
// const config = new DocumentBuilder()
// .setTitle('Targo_Backend')
// .setDescription('Documentation de l`API REST pour Targo (NestJS + Prisma)')
// .setVersion('1.0')
// .addBearerAuth({
// type: 'http',
// scheme: 'bearer',
// bearerFormat: 'JWT',
// name: 'Authorization',
// description: 'Invalid JWT token',
// in: 'header',
// }, 'access-token')
// .addTag('Users')
// .addTag('Employees')
// .addTag('Customers')
// .addTag('Timesheets')
// .addTag('Shifts')
// .addTag('Leave Requests')
// .addTag('Shift Codes')
// .addTag('OAuth Access Tokens')
// .addTag('Authorization')
// .build();
// //document builder for swagger docs
// const documentFactory = () => SwaggerModule.createDocument(app, config);
// const document = documentFactory()
// SwaggerModule.setup('api/docs', app, document);
// writeFileSync('./docs/swagger/swagger-spec.json', JSON.stringify(document, null, 2));
await ensureAttachmentsTmpDir();
await app.listen(process.env.PORT ?? 3000);
// migration function calls
// await initializePaidTimeOff();
// await initializePreferences();
// await extractOldTimesheets();
// await extractOldShifts();
// await extractOldExpenses();
// await initSupervisor();
}
bootstrap();