Full modpack installer integrated into Trinity Console. Architecture locked via 4-round Gemini consultation. Migrations: - 143: server_config modpack columns (provider, version tracking, RAM, hibernation, spawn_verified) - 144: install_history table (UUID PK, JSONB log_output, FK to server_config) Provider API clients (src/services/providerApi/): - curseforge.js: search, pack details, version list, download URL resolution - modrinth.js: search, pack details, version list, download URL - ftb.js: stub (+ ATLauncher, Technic, VoidsWrath aliases) - index.js: provider registry with getProvider() + listProviders() Job queue: - pg-boss ^10.1.5 added to package.json - index.js: initializes pg-boss, registers modpack-installs worker (concurrency 2) - modpackInstaller.js: 11-step install pipeline (preflight → Pterodactyl create → download → DNS → Discord → server_config seed → power on). Each step logged to install_history.log_output JSONB for live status streaming. Admin routes (src/routes/admin/modpack-installer.js): - GET /admin/modpack-installer — main page (provider select → search → configure → install) - GET /search — HTMX pack search partial - GET /pack/:provider/:id — HTMX pack details + install form - POST /install — enqueue pg-boss job, redirect to status - GET /status/:id — live status page (polls /status/:id/json every 3s) - GET /history — install history table - GET /pending-spawns — Holly's spawn verification queue - POST /verify-spawn/:id — mark spawn verified Views (6 EJS files): - index.ejs: 3-step flow (provider cards → search with MC version filter → pack details + form) - _pack_list.ejs: search results grid partial - _pack_details.ejs: pack info + install config form (version, name, short_name, node, RAM, spawn type) - status.ejs: live log viewer with 3s polling, color-coded steps - history.ejs: filterable job history table - pending-spawns.ejs: Holly's queue with Mark Verified buttons Also: sidebar nav link, .env.example (CURSEFORGE_API_KEY, BITCH_BOT_SCHEMATIC_*, CLOUDFLARE_ZONE_ID) All 8 JS files pass node --check. All 7 EJS files pass ejs.compile().
34 lines
854 B
JSON
34 lines
854 B
JSON
{
|
|
"name": "arbiter-3.0",
|
|
"version": "3.0.0",
|
|
"description": "Modular Access & Role Manager with Trinity Console",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"dev": "node --watch src/index.js"
|
|
},
|
|
"dependencies": {
|
|
"axios": "^1.14.0",
|
|
"body-parser": "^1.20.2",
|
|
"connect-pg-simple": "^10.0.0",
|
|
"cookie-parser": "^1.4.7",
|
|
"cors": "^2.8.6",
|
|
"csurf": "^1.11.0",
|
|
"date-fns": "^4.1.0",
|
|
"discord.js": "^14.14.1",
|
|
"dotenv": "^16.4.5",
|
|
"ejs": "^3.1.9",
|
|
"express": "^4.18.2",
|
|
"express-ejs-layouts": "^2.5.1",
|
|
"express-session": "^1.19.0",
|
|
"multer": "^1.4.5-lts.1",
|
|
"node-cron": "^3.0.3",
|
|
"passport": "^0.7.0",
|
|
"pg-boss": "^10.1.5",
|
|
"passport-discord": "^0.1.4",
|
|
"pg": "^8.11.3",
|
|
"socket.io-client": "^4.7.5",
|
|
"stripe": "^14.14.0"
|
|
}
|
|
}
|