metis-desk/apps/server/src/infrastructure/http/identity-runtime.ts

55 lines
1.9 KiB
TypeScript
Raw Normal View History

import { createAssetModule } from "@metis/assets/module";
import { createCompanyModule } from "@metis/companies/module";
import { createIdentityModule, migrateIdentity } from "@metis/identity/module";
2026-10-05 11:13:51 +00:00
import { createResourceModule } from "@metis/resources/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<typeof readDatabaseEnvironment>
) {
await database.authenticate();
await migrateIdentity(database);
const identity = await createIdentityModule(database, environment.APP_ORIGIN);
const companies = await createCompanyModule(database, identity.authenticate);
const assets = await createAssetModule(database, identity.authenticate);
2026-10-05 11:13:51 +00:00
const resources = await createResourceModule(database, identity.authenticate);
const mail = await companies.initializeMail(assets.services.inventory);
2026-10-05 07:53:29 +00:00
const profiles = await companies.initializeProfiles(assets.services.inventory);
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<typeof identity.register>[0]) => {
identity.register(app);
companies.register(app);
assets.register(app);
2026-10-05 11:13:51 +00:00
resources.register(app);
mail.register(app);
2026-10-05 07:53:29 +00:00
profiles.register(app);
},
middleware,
stop: () => store.stopExpiringSessions(),
};
}