52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
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['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),
|
|
);
|
|
|
|
// 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.5.14.111: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);
|
|
|
|
}
|
|
bootstrap();
|