import { FactoryProvider } from '@nestjs/common'; import { ConfigurationService } from 'src/modules/config/config.service'; import * as session from 'express-session'; import * as connectRedis from 'connect-redis'; import * as redis from 'redis'; import { RequestHandler } from 'express'; export const sessionProviders = [ { provide: 'SESSION_STORE', useFactory: async ( config: ConfigurationService, ): Promise => { const RedisStore = connectRedis(session); const redisClient = redis.createClient({ url: process.env.REDIS_URL || config.get('app.redis_url') || 'redis://localhost:6379', legacyMode: true, }); await redisClient.connect(); return new RedisStore({ client: redisClient }); }, inject: [ConfigurationService], } as FactoryProvider, { provide: 'SESSION', useFactory: ( store: connectRedis.RedisStore, config: ConfigurationService, ) => session({ name: config.get('app.session_name'), secret: config.get('app.session_secret'), resave: true, saveUninitialized: false, store, cookie: { sameSite: 'lax', secure: process.env.NODE_ENV === 'production', }, }), inject: ['SESSION_STORE', ConfigurationService], } as FactoryProvider, ];