const fs = require("fs"); const path = require("path"); const root = path.resolve(__dirname, ".."); function fail(message, error) { console.error(`[verify] ${message}`); if (error) { console.error(`[verify] ${error instanceof Error ? error.message : String(error)}`); } if (process.platform === "win32") { console.error("[verify] Retry with windows\\install.bat."); console.error("[verify] Native fallback: run C:\\Program Files\\nodejs\\install_tools.bat as Administrator."); } process.exit(1); } try { require("express"); } catch (error) { fail("Express could not be loaded.", error); } try { const Database = require("better-sqlite3"); const db = new Database(":memory:"); const row = db.prepare("SELECT 1 AS ok").get(); db.close(); if (row?.ok !== 1) { fail("SQLite verification query returned an unexpected result."); } } catch (error) { fail("better-sqlite3 could not be loaded or initialized.", error); } for (const directory of ["data", "logs"]) { fs.mkdirSync(path.join(root, directory), { recursive: true }); } if (process.platform === "win32") { const ammcDir = path.join(root, "AMMC", "windows64"); const requiredFiles = ["ammc-amb.exe", "ammc.dll", "MyLapsSDK.dll"]; const missingFiles = requiredFiles.filter((file) => !fs.existsSync(path.join(ammcDir, file))); if (missingFiles.length > 0) { fail(`Bundled AMMC runtime is incomplete: ${missingFiles.join(", ")}`); } console.log(`[verify] AMMC Windows runtime: ${ammcDir}`); } console.log(`[verify] Express and SQLite: OK (${process.platform}/${process.arch}, Node ${process.version})`); console.log(`[verify] Installation is ready. Start with: ${process.platform === "win32" ? "npm.cmd start" : "npm start"}`);