import { createCompanyModule } from "@metis/companies/module"; import { createIdentityModule, migrateIdentity } from "@metis/identity/module"; import connectSequelize from "connect-session-sequelize"; import session from "express-session"; import type { Sequelize } from "sequelize"; import type { readDatabaseEnvironment } from "../../config/database"; export async function createIdentityRuntime( database: Sequelize, environment: ReturnType ) { await database.authenticate(); await migrateIdentity(database); const identity = await createIdentityModule(database, environment.APP_ORIGIN); const companies = await createCompanyModule(database, identity.authenticate); const SequelizeStore = connectSequelize(session.Store); const store = new SequelizeStore({ db: database, tableName: "http_sessions", expiration: 8 * 60 * 60 * 1000, }); const middleware = session({ name: "metis.sid", secret: environment.SESSION_SECRET, store, resave: false, saveUninitialized: false, cookie: { httpOnly: true, sameSite: "strict", secure: environment.NODE_ENV === "production", maxAge: 8 * 60 * 60 * 1000, }, }); return { register: (app: Parameters[0]) => { identity.register(app); companies.register(app); }, middleware, stop: () => store.stopExpiringSessions(), }; }