diff --git a/server/src/lib/logger/logger.ts b/server/src/lib/logger/logger.ts index aca856315..8cd210bcb 100644 --- a/server/src/lib/logger/logger.ts +++ b/server/src/lib/logger/logger.ts @@ -16,6 +16,8 @@ const formatExcessProperties = (meta: Record, limit = false) => let i = 0; for (const [key, val] of Object.entries(meta)) { + // this is probably fine + // eslint-disable-next-line cadence/no-instanceof if (val instanceof Error) { meta[key] = { message: val.message, stack: val.stack }; } @@ -52,6 +54,8 @@ const formatExcessPropertiesNoStack = ( continue; } + // this is probably fine + // eslint-disable-next-line cadence/no-instanceof if (val instanceof Error) { realMeta[key] = { message: val.message }; } else if (!key.startsWith("__") && !key.startsWith("!")) { diff --git a/server/src/lib/score-import/framework/express-wrapper.ts b/server/src/lib/score-import/framework/express-wrapper.ts index 680644557..d2ed01470 100644 --- a/server/src/lib/score-import/framework/express-wrapper.ts +++ b/server/src/lib/score-import/framework/express-wrapper.ts @@ -51,6 +51,8 @@ export async function ExpressWrappedScoreImportMain( }, }; } catch (err) { + // this is definitely fine, as the errors are emitted from the same place. + // eslint-disable-next-line cadence/no-instanceof if (err instanceof ScoreImportFatalError) { logger.info(err.message); return { diff --git a/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts b/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts index 478d69522..d69c7f5a3 100644 --- a/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts +++ b/server/src/lib/score-import/import-types/common/eamusement-iidx-csv/parser.ts @@ -103,6 +103,8 @@ export function IIDXCSVParse(csvBuffer: Buffer, playtype: Playtypes["iidx"], log try { ({ rawHeaders, rawRows } = NaiveCSVParse(csvBuffer, logger)); } catch (e) { + // this is probably fine + // eslint-disable-next-line cadence/no-instanceof if (e instanceof CSVParseError) { throw new ScoreImportFatalError(400, e.message); } diff --git a/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts b/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts index d1924d5e7..3ab4e6431 100644 --- a/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts +++ b/server/src/lib/score-import/import-types/file/eamusement-sdvx-csv/parser.ts @@ -33,6 +33,8 @@ export default function ParseEamusementSDVXCSV( try { ({ rawHeaders, rawRows } = NaiveCSVParse(fileData.buffer, logger)); } catch (e) { + // This is probably fine. + // eslint-disable-next-line cadence/no-instanceof if (e instanceof CSVParseError) { throw new ScoreImportFatalError(400, e.message); } diff --git a/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts b/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts index 292c17880..551713447 100644 --- a/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts +++ b/server/src/lib/score-import/import-types/ir/beatoraja/converter.ts @@ -199,8 +199,8 @@ export const ConverterIRBeatoraja: ConverterFunction { }); t.test("Should reject empty bodies", (t) => { - t.throws(() => ParseIRUSC({}, TestingUSCChart.data.hashSHA1 as string, "Controller", logger), { - statusCode: 400, - message: /invalid usc score/iu, - }); + t.throws( + () => ParseIRUSC({}, TestingUSCChart.data.hashSHA1 as string, "Controller", logger), + { + statusCode: 400, + message: /invalid usc score/iu, + } + ); t.end(); }); diff --git a/server/src/server/middleware/multer-upload.ts b/server/src/server/middleware/multer-upload.ts index 208f47ce4..4a36f6df5 100644 --- a/server/src/server/middleware/multer-upload.ts +++ b/server/src/server/middleware/multer-upload.ts @@ -19,6 +19,8 @@ export const CreateMulterSingleUploadMiddleware = ( return (req, res, next) => { UploadMW(req, res, (err: unknown) => { + // this use is fine... ish.. probably. + // eslint-disable-next-line cadence/no-instanceof if (err instanceof MulterError) { logger.info(`Multer Error.`, { err }); diff --git a/server/src/server/router/api/v1/search/router.ts b/server/src/server/router/api/v1/search/router.ts index fdbc82e19..7a25ca370 100644 --- a/server/src/server/router/api/v1/search/router.ts +++ b/server/src/server/router/api/v1/search/router.ts @@ -7,11 +7,10 @@ import { SearchUsersRegExp, } from "lib/search/search"; import { TachiConfig } from "lib/setup/config"; -import { RequireBokutachi } from "server/middleware/type-require"; import { IsString } from "utils/misc"; import { GetAllUserRivals, GetUserPlayedGPTs } from "utils/user"; import type { FilterQuery } from "mongodb"; -import type { FolderDocument, Game, integer, UserDocument, SongDocument } from "tachi-common"; +import type { FolderDocument, Game, SongDocument, UserDocument, integer } from "tachi-common"; const router: Router = Router({ mergeParams: true }); diff --git a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts index 40c96a8ef..a90aad6ea 100644 --- a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts +++ b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/folders/_folderID/router.ts @@ -156,20 +156,6 @@ router.get( chartID: { $in: charts.map((e) => e.chartID) }, }; - if (!conf) { - // not possible? - return res.status(500).json({ - success: false, - description: `Invalid criteria ${req.query.criteriaType}.`, - }); - } - - if (conf.type === "ENUM") { - matchCriteria[`scoreData.enumIndexes.${metric}`] = { $gte: criteriaValue }; - } else { - matchCriteria[`scoreData.${metric}`] = { $gte: criteriaValue }; - } - // Returns a unique score per-chart that was the first score to achieve // this criteria on that chart. const scoresAgg: Array<{ doc: ScoreDocument }> = await db.scores.aggregate([ diff --git a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts index 129def73b..ccedb6107 100644 --- a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts +++ b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/pbs/router.ts @@ -112,7 +112,7 @@ router.get("/best", prValidate({ alg: "*string" }), async (req, res) => { }); } - const alg = req.query.alg ?? gptConfig.defaultScoreRatingAlg; + const alg = (req.query.alg as string | undefined) ?? gptConfig.defaultScoreRatingAlg; const pbs = await db["personal-bests"].find( { diff --git a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts index 64563f6a1..6fe653b82 100644 --- a/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts +++ b/server/src/server/router/api/v1/users/_userID/games/_game/_playtype/router.ts @@ -266,7 +266,7 @@ router.get("/leaderboard-adjacent", async (req, res) => { const gptConfig = GetGamePTConfig(game, playtype); - let alg = gptConfig.defaultProfileRatingAlg as ProfileRatingAlgorithms[GPTString]; + let alg = gptConfig.defaultProfileRatingAlg; if (IsString(req.query.alg)) { const temp = CheckStrProfileAlg(game, playtype, req.query.alg); diff --git a/server/src/server/router/api/v1/users/_userID/integrations/kshook-sv6c/router.ts b/server/src/server/router/api/v1/users/_userID/integrations/kshook-sv6c/router.ts index a43c03a88..bc6f264ee 100644 --- a/server/src/server/router/api/v1/users/_userID/integrations/kshook-sv6c/router.ts +++ b/server/src/server/router/api/v1/users/_userID/integrations/kshook-sv6c/router.ts @@ -3,8 +3,6 @@ import { Router } from "express"; import db from "external/mongo/db"; import prValidate from "server/middleware/prudence-validate"; import { RequireKamaitachi } from "server/middleware/type-require"; -import { DeleteUndefinedProps } from "utils/misc"; -import { optNull } from "utils/prudence"; import { GetTachiData } from "utils/req-tachi-data"; const router: Router = Router({ mergeParams: true }); diff --git a/server/src/server/router/ir/beatoraja/auth.ts b/server/src/server/router/ir/beatoraja/auth.ts index 7907e6111..2081d895e 100644 --- a/server/src/server/router/ir/beatoraja/auth.ts +++ b/server/src/server/router/ir/beatoraja/auth.ts @@ -3,7 +3,7 @@ import type { RequestHandler } from "express"; export const ValidateIRClientVersion: RequestHandler = (req, res, next) => { const header = req.header("X-TachiIR-Version"); - if (!header || !header.startsWith("v2")) { + if (!header?.startsWith("v2")) { return res.status(400).json({ success: false, description: `Invalid X-TachiIR-Version.`, diff --git a/server/src/server/router/ir/fervidex/router.ts b/server/src/server/router/ir/fervidex/router.ts index 5dbfc431d..39bbcc165 100644 --- a/server/src/server/router/ir/fervidex/router.ts +++ b/server/src/server/router/ir/fervidex/router.ts @@ -126,7 +126,7 @@ const ValidateCards: RequestHandler = async (req, res, next) => { const cardFilters = await db["fer-settings"].findOne({ userID }); - if (!cardFilters || !cardFilters.cards) { + if (!cardFilters?.cards) { next(); return; } diff --git a/server/src/server/router/ir/kshook/sv6c/router.ts b/server/src/server/router/ir/kshook/sv6c/router.ts index f9dffd655..e0fa988c5 100644 --- a/server/src/server/router/ir/kshook/sv6c/router.ts +++ b/server/src/server/router/ir/kshook/sv6c/router.ts @@ -110,7 +110,7 @@ router.post("/score/export", async (req, res) => { const settings = await db["kshook-sv6c-settings"].findOne({ userID }); - if (!settings || !settings.forceStaticImport) { + if (!settings?.forceStaticImport) { return res.status(200).json({ success: true, description: "Static importing is disabled. Ignoring static import request.", diff --git a/server/src/server/server.ts b/server/src/server/server.ts index 9056156fd..98de35400 100644 --- a/server/src/server/server.ts +++ b/server/src/server/server.ts @@ -178,6 +178,8 @@ interface ExpressJSONErr extends SyntaxError { const MAIN_ERR_HANDLER: express.ErrorRequestHandler = (err, req, res, _next) => { logger.info(`MAIN_ERR_HANDLER hit by request.`, { url: req.originalUrl }); + // this use of instanceof is fine. + // eslint-disable-next-line cadence/no-instanceof if (err instanceof SyntaxError) { const expErr: ExpressJSONErr = err as ExpressJSONErr; diff --git a/server/src/test-utils/mock-db/class-achivements.json b/server/src/test-utils/mock-db/class-achivements.json new file mode 100644 index 000000000..0637a088a --- /dev/null +++ b/server/src/test-utils/mock-db/class-achivements.json @@ -0,0 +1 @@ +[] \ No newline at end of file