Update Healer Man server
This commit is contained in:
1 parent
9c5fb4c614
commit
bd073fb00f
113 files changed
+4902
-273
No files matched your search
+75
-1
@@ -4,6 +4,7 @@ import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { GameDatabaseError, openGameDatabase } from "./database.mjs";
|
||||
import { createArenaService } from "./arena-service.mjs";
|
||||
import { createDungeonRaceService } from "./dungeon-race-service.mjs";
|
||||
import { publicManastormAdminConfig } from "./manastorm-config.mjs";
|
||||
import { createOnlineSessionManager } from "./online-session.mjs";
|
||||
import { upgradeArenaWebSocket } from "./websocket.mjs";
|
||||
@@ -188,6 +189,7 @@ export function createGameServer(options = {}) {
|
||||
});
|
||||
const onlineSessions = createOnlineSessionManager();
|
||||
const arenaService = createArenaService({ database: gameDatabase, autoPump: enableShelvedModes });
|
||||
const dungeonRaceService = createDungeonRaceService({ database: gameDatabase });
|
||||
const allowAuthRequest = createAuthLimiter();
|
||||
const allowReportRequest = createAuthLimiter();
|
||||
const allowDungeonRunRequest = createAuthLimiter();
|
||||
@@ -303,6 +305,40 @@ export function createGameServer(options = {}) {
|
||||
json(response, 200, { account: gameDatabase.authenticate(bearerToken(request)) });
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/dungeon-races/leaderboard" && request.method === "GET") {
|
||||
json(response, 200, gameDatabase.listDungeonRaceLeaderboard({
|
||||
view: url.searchParams.get("view") ?? "wins",
|
||||
period: url.searchParams.get("period") ?? "30d",
|
||||
dungeonId: url.searchParams.get("dungeon") || null,
|
||||
limit: Number(url.searchParams.get("limit") ?? 20),
|
||||
offset: Number(url.searchParams.get("offset") ?? 0),
|
||||
}));
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/dungeon-races/queue" && request.method === "POST") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
json(response, 200, dungeonRaceService.queue(account, await readJson(request, 4 * 1024)));
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/dungeon-races/queue" && request.method === "DELETE") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
json(response, 200, dungeonRaceService.leave(account));
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/dungeon-races/state" && request.method === "GET") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
json(response, 200, dungeonRaceService.state(account));
|
||||
return;
|
||||
}
|
||||
const dungeonRaceMatch = /^\/api\/dungeon-races\/(race-[A-Za-z0-9-]+)\/(ready|finish|forfeit)$/.exec(url.pathname);
|
||||
if (dungeonRaceMatch && request.method === "POST") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
const [, id, action] = dungeonRaceMatch;
|
||||
json(response, 200, action === "ready" ? dungeonRaceService.ready(account, id)
|
||||
: action === "finish" ? dungeonRaceService.finish(account, id, await readJson(request, 4 * 1024))
|
||||
: dungeonRaceService.leave(account, id));
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/dungeon-leaderboards" && request.method === "GET") {
|
||||
json(response, 200, gameDatabase.listDungeonLeaderboard({ dungeonId: url.searchParams.get("dungeon"),
|
||||
difficultyId: url.searchParams.get("difficulty"), clear: url.searchParams.get("clear"),
|
||||
@@ -540,6 +576,43 @@ export function createGameServer(options = {}) {
|
||||
json(response, 200, result);
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/party-buff-policy" && request.method === "GET") {
|
||||
const current = gameDatabase.getPartyBuffPolicy();
|
||||
json(response, 200, { revision: current.revision, updatedAt: current.updatedAt, config: current.config });
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/dungeon-queue-policy" && request.method === "GET") {
|
||||
const current = gameDatabase.getDungeonQueuePolicy();
|
||||
json(response, 200, { revision: current.revision, updatedAt: current.updatedAt, config: current.config });
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/gm/dungeon-queue-policy" && request.method === "GET") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
if (!gameDatabase.isGameMaster(account)) throw new GameDatabaseError("Game Master access is required.", 403, "gm_required");
|
||||
json(response, 200, gameDatabase.getDungeonQueuePolicy());
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/gm/dungeon-queue-policy" && request.method === "PUT") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
if (!gameDatabase.isGameMaster(account)) throw new GameDatabaseError("Game Master access is required.", 403, "gm_required");
|
||||
const body = await readJson(request, bodyLimit);
|
||||
json(response, 200, gameDatabase.putDungeonQueuePolicy(account, body.expectedRevision, body.config));
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/gm/party-buff-policy" && request.method === "GET") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
if (!gameDatabase.isGameMaster(account)) throw new GameDatabaseError("Game Master access is required.", 403, "gm_required");
|
||||
json(response, 200, gameDatabase.getPartyBuffPolicy());
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/gm/party-buff-policy" && request.method === "PUT") {
|
||||
const account = gameDatabase.authenticate(bearerToken(request));
|
||||
if (!gameDatabase.isGameMaster(account)) throw new GameDatabaseError("Game Master access is required.", 403, "gm_required");
|
||||
const body = await readJson(request, bodyLimit);
|
||||
const result = gameDatabase.putPartyBuffPolicy(account, body.expectedRevision, body.config);
|
||||
json(response, 200, result);
|
||||
return;
|
||||
}
|
||||
if (url.pathname === "/api/companion-spec-readiness" && request.method === "GET") {
|
||||
const current = gameDatabase.getCompanionSpecReadiness();
|
||||
json(response, 200, {
|
||||
@@ -686,9 +759,10 @@ export function createGameServer(options = {}) {
|
||||
balanceLabJobs.close?.();
|
||||
onlineSessions.clear();
|
||||
arenaService.close();
|
||||
dungeonRaceService.close();
|
||||
gameDatabase.close();
|
||||
});
|
||||
return { server, database: gameDatabase, arenaService, balanceLabJobs, staticDir, contentDir, enableShelvedModes };
|
||||
return { server, database: gameDatabase, arenaService, dungeonRaceService, balanceLabJobs, staticDir, contentDir, enableShelvedModes };
|
||||
}
|
||||
|
||||
if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) {
|
||||
|
||||
Reference in new issue
Block a user