62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
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", (error) => {
|
|
identity.stop();
|
|
database
|
|
.close()
|
|
.catch(() => console.error(JSON.stringify({ event: "database_close_failed" })));
|
|
console.error(JSON.stringify({ event: "server_start_failed", message: error.message }));
|
|
process.exitCode = 1;
|
|
});
|
|
let stopping = false;
|
|
|
|
const shutdown = () => {
|
|
if (stopping) {
|
|
return;
|
|
}
|
|
stopping = true;
|
|
identity.stop();
|
|
server.close((error) => {
|
|
if (error) {
|
|
console.error(JSON.stringify({ event: "server_close_failed" }));
|
|
process.exitCode = 1;
|
|
}
|
|
database.close().catch(() => {
|
|
console.error(JSON.stringify({ event: "database_close_failed" }));
|
|
process.exitCode = 1;
|
|
});
|
|
});
|
|
};
|
|
|
|
process.once("SIGINT", shutdown);
|
|
process.once("SIGTERM", shutdown);
|
|
} catch (error) {
|
|
// El fallo del cleanup no debe sustituir la causa original del arranque.
|
|
await database.close().catch(() => {
|
|
console.error(JSON.stringify({ event: "database_close_failed" }));
|
|
});
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
start().catch((error: unknown) => {
|
|
const message = error instanceof Error ? error.message : "Unknown startup failure";
|
|
|
|
console.error(JSON.stringify({ event: "server_start_failed", message }));
|
|
process.exitCode = 1;
|
|
});
|