40 files, ~9,674 lines, 27 of 68 tables. Core no longer contains anything that knows what a shard is. BREAKING for a deployment only in the sense that the module must be installed for these URLs to answer -- no URL moved. routes.manifest.json goes 228 -> 158 public routes here, and the 70 that left reappear byte-identical when the module is loaded: verified by generating the manifest against core+module and diffing it against the pre-extraction file. Zero missing, zero added, and routes.guards identical across all 228, so no auth gate moved either. The five tier mounts are gone from public/admin/player index.js and are still served: the loader mounts them onto the same routers after every core mount. That ordering is also what keeps the prefixes unclaimable -- the collision check asks the live router what core owns, so a second module claiming /shard is rejected against the mounts actually present rather than against a list. server.js loses its eight UO call sites to the module's onBoot/onShutdown. schema.sql loses its 27 shard_*/uo_link_* statements; the two that FK into users are why the fragment replays AFTER core's schema, and no core table ever referenced a module table, which is what makes core still able to boot alone. Verified against a running server with the module installed: it loads, mounts five prefixes, replays 35 statements, warms up and reaches `started`; public shard and atlas routes answer 200 with real data (800 creatures, 6,455 spawners), admin and player answer 401 from core's tier gates, and the extension slot answers at /admin/users/:id/shard/*. Core's own SPA renders the shard and atlas pages unchanged against the module-served API, with no console errors and no CSP reports. Co-Authored-By: Claude <noreply@anthropic.com>
48 lines
1.2 KiB
JSON
48 lines
1.2 KiB
JSON
{
|
|
"name": "runic-gateway-server",
|
|
"version": "1.0.0",
|
|
"description": "REST API for the Runic Gateway website and admin panel",
|
|
"main": "src/server.js",
|
|
"scripts": {
|
|
"start": "node src/server.js",
|
|
"dev": "nodemon src/server.js",
|
|
"seed": "node db/seed.js",
|
|
"swagger": "node swagger/swagger.js",
|
|
"routes:manifest": "node scripts/routeManifest.js",
|
|
"test": "node --test --require ./test/_setup.js"
|
|
},
|
|
"keywords": [
|
|
"express",
|
|
"mariadb",
|
|
"jwt",
|
|
"bcrypt"
|
|
],
|
|
"author": "whitlocktech",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"bcryptjs": "^2.4.3",
|
|
"cookie-parser": "^1.4.6",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^16.4.5",
|
|
"express": "^4.19.2",
|
|
"express-rate-limit": "^7.4.0",
|
|
"express-slow-down": "^3.1.0",
|
|
"express-validator": "^7.2.0",
|
|
"helmet": "^7.1.0",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"mariadb": "^3.3.1",
|
|
"morgan": "^1.10.0",
|
|
"multer": "^2.0.1",
|
|
"nodemailer": "^9.0.1",
|
|
"qrcode": "^1.5.4",
|
|
"sanitize-html": "^2.17.5",
|
|
"speakeasy": "^2.0.0",
|
|
"swagger-ui-express": "^5.0.1",
|
|
"ws": "^8.21.0"
|
|
},
|
|
"devDependencies": {
|
|
"nodemon": "^3.1.4",
|
|
"swagger-autogen": "^2.23.7"
|
|
}
|
|
}
|