metis-desk/apps/server/src/index.ts

43 lines
1.5 KiB
TypeScript
Raw Normal View History

import { createApp } from "./app";
import { createDatabase, readDatabaseEnvironment } from "./config/database";
import { readServerEnvironment } from "./config/env-schema";
import { createIdentityRuntime } from "./infrastructure/http/identity-runtime";
async function start(): Promise<void> {
const environment = readServerEnvironment(process.env);
const databaseEnvironment = readDatabaseEnvironment(process.env);
const database = createDatabase(databaseEnvironment);
try {
const identity = await createIdentityRuntime(database, databaseEnvironment);
const server = createApp(undefined, identity).listen(environment.PORT, "127.0.0.1", () => {
console.info(JSON.stringify({ event: "server_started", port: environment.PORT }));
});
server.on("error", () => {
identity.stop();
database
.close()
.catch(() => console.error(JSON.stringify({ event: "database_close_failed" })));
console.error(JSON.stringify({ event: "server_start_failed" }));
process.exitCode = 1;
});
const shutdown = () => {
identity.stop();
server.close(() => {
database.close().catch(() => {
console.error(JSON.stringify({ event: "database_close_failed" }));
process.exitCode = 1;
});
});
};
process.once("SIGINT", shutdown);
process.once("SIGTERM", shutdown);
} catch (error) {
await database.close();
throw error;
}
}
start().catch(() => {
console.error(JSON.stringify({ event: "server_start_failed" }));
process.exitCode = 1;
});