From cd07ca0c13cf69c60a293dbd6df14254ef2e2172 Mon Sep 17 00:00:00 2001 From: zkldi <20380519+zkldi@users.noreply.github.com> Date: Sat, 29 Jan 2022 16:37:42 +0000 Subject: [PATCH] Configuration information should be exposed on an API endpoint for the client. Fixes #638 --- .../router/api/v1/config/router.test.ts | 19 ++++++++++++++++++- .../src/server/router/api/v1/config/router.ts | 19 ++++++++++++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/server/src/server/router/api/v1/config/router.test.ts b/server/src/server/router/api/v1/config/router.test.ts index f103984e1..bc2030187 100644 --- a/server/src/server/router/api/v1/config/router.test.ts +++ b/server/src/server/router/api/v1/config/router.test.ts @@ -1,7 +1,24 @@ -import { ServerConfig } from "lib/setup/config"; +import { ServerConfig, TachiConfig } from "lib/setup/config"; import t from "tap"; import mockApi from "test-utils/mock-api"; +t.test("GET /api/v1/config", async (t) => { + const res = await mockApi.get("/api/v1/config"); + + t.strictSame( + res.body.body, + { + games: TachiConfig.GAMES, + importTypes: TachiConfig.IMPORT_TYPES, + name: TachiConfig.NAME, + type: TachiConfig.TYPE, + }, + "Should return TachiConfig info" + ); + + t.end(); +}); + t.test("GET /api/v1/config/beatoraja-queue-size", async (t) => { const res = await mockApi.get("/api/v1/config/beatoraja-queue-size"); diff --git a/server/src/server/router/api/v1/config/router.ts b/server/src/server/router/api/v1/config/router.ts index f4bf38177..97fb7b8d9 100644 --- a/server/src/server/router/api/v1/config/router.ts +++ b/server/src/server/router/api/v1/config/router.ts @@ -1,9 +1,26 @@ import { Router } from "express"; -import { ServerConfig } from "lib/setup/config"; +import { ServerConfig, TachiConfig } from "lib/setup/config"; import { RequireBokutachi } from "server/middleware/type-require"; const router: Router = Router({ mergeParams: true }); +/** + * Returns Tachi Configuration info, such as server name, type, supported games + * and more. + */ +router.get("/", (req, res) => + res.status(200).json({ + success: true, + description: `Returned configuration info.`, + body: { + games: TachiConfig.GAMES, + importTypes: TachiConfig.IMPORT_TYPES, + name: TachiConfig.NAME, + type: TachiConfig.TYPE, + }, + }) +); + /** * Returns the value of the BEATORAJA_QUEUE_SIZE. *