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 { extractOldShifts } from 'scripts/migrate-shifts'; // import { extractOldTimesheets } from 'scripts/migrate-timesheets'; // 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'], 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 extractOldTimesheets(); // await extractOldShifts(); // await extractOldExpenses(); } bootstrap();