// SPDX-FileCopyrightText: 2026 Paul Schoeneck // // SPDX-License-Identifier: AGPL-3.0-only AND LicenseRef-KIBU-Additional-Terms import { spawnSync } from "node:child_process"; import { createRequire } from "node:module"; import { fileURLToPath } from "node:url"; import { demoLogin, isDemoDatabase } from "../src/lib/demo"; function prepare() { if (!process.env.DATABASE_URL) throw new Error("DATABASE_URL fehlt."); if (process.env.DEMO_MODE && !["true", "false"].includes(process.env.DEMO_MODE)) { throw new Error("DEMO_MODE muss true oder false sein."); } const demo = demoLogin(); if (demo) { const target = new URL(process.env.DATABASE_URL); if (!isDemoDatabase(target) || !["postgres:", "postgresql:"].includes(target.protocol)) { throw new Error("Demo-Start erfordert DEMO_RESET_ON_START=true und die separate Datenbank demo-db/kibu_demo. Nichts wurde veraendert."); } process.env.BOOTSTRAP_EMAIL = demo.email; process.env.BOOTSTRAP_PASSWORD = demo.password; console.log("DEMOMODUS: Gemeinsamer oeffentlicher Zugang; alle Demodaten werden bei jedem App-Start ersetzt."); } else if (process.env.DEMO_RESET_ON_START === "true") { throw new Error("DEMO_RESET_ON_START erfordert DEMO_MODE=true."); } const tsx = createRequire(import.meta.url).resolve("tsx/cli"); const commands = demo ? [["setup.ts"], ["reset-instance.ts", "demo", "--confirm-reset"]] : [["setup.ts"]]; for (const [script, ...args] of commands) { const result = spawnSync(process.execPath, [tsx, fileURLToPath(new URL(script, import.meta.url)), ...args], { env: process.env, stdio: "inherit", }); if (result.error) throw result.error; if (result.status !== 0) throw new Error(`${script} fehlgeschlagen; App wird nicht gestartet.`); } } try { prepare(); } catch (error) { console.error("Container-Vorbereitung fehlgeschlagen:", error); process.exitCode = 1; }