targo-backend/src/main.ts

65 lines
2.2 KiB
TypeScript

import 'reflect-metadata';
import * as nodeCrypto from 'crypto';
if (!(globalThis as any).crypto) {
(globalThis as any).crypto = nodeCrypto;
}
import { NestFactory, Reflector } from '@nestjs/core';
import { AppModule } from './app.module';
import { ModulesGuard } from './common/guards/modules.guard';
import * as session from 'express-session';
import * as passport from 'passport';
import { PrismaSessionStore } from '@quixo3/prisma-session-store';
import { PrismaPostgresService } from 'prisma/postgres/prisma-postgres.service';
const SESSION_TOKEN_DURATION_MINUTES = 180
async function bootstrap() {
(BigInt.prototype as any).toJSON = function () { return Number(this) };
const app = await NestFactory.create(AppModule);
const prisma_postgres = app.get(PrismaPostgresService);
const reflector = app.get(Reflector);
app.useGlobalGuards(
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_postgres, {
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://portail.targo.ca', 'https://staging.app.targo.ca'],
credentials: true,
});
await app.listen(process.env.PORT ?? 3000);
// migration function calls
// await initializePaidTimeOff();
// await initializePreferences();
// await extractOldTimesheets();
// await extractOldShifts();
// await extractOldExpenses();
// await initSupervisor();
}
bootstrap();