From d7151988290a9692ea7b0942feeaaff5d2da8224 Mon Sep 17 00:00:00 2001 From: Miodec Date: Thu, 18 Jul 2024 11:19:29 +0200 Subject: [PATCH] backend imports --- backend/src/api/controllers/admin.ts | 8 ++-- backend/src/api/controllers/ape-key.ts | 8 ++-- backend/src/api/controllers/config.ts | 4 +- backend/src/api/controllers/configuration.ts | 6 +-- backend/src/api/controllers/dev.ts | 16 +++---- backend/src/api/controllers/leaderboard.ts | 12 +++--- backend/src/api/controllers/preset.ts | 4 +- backend/src/api/controllers/psa.ts | 4 +- backend/src/api/controllers/public.ts | 4 +- backend/src/api/controllers/quote.ts | 16 +++---- backend/src/api/controllers/result.ts | 41 +++++++++--------- backend/src/api/controllers/user.ts | 38 ++++++++--------- backend/src/api/controllers/webhooks.ts | 4 +- backend/src/api/routes/admin.ts | 16 +++---- backend/src/api/routes/ape-keys.ts | 14 +++---- backend/src/api/routes/configs.ts | 12 +++--- backend/src/api/routes/configuration.ts | 12 +++--- backend/src/api/routes/dev.ts | 10 ++--- backend/src/api/routes/index.ts | 42 +++++++++---------- backend/src/api/routes/leaderboards.ts | 14 +++---- backend/src/api/routes/presets.ts | 12 +++--- backend/src/api/routes/psas.ts | 6 +-- backend/src/api/routes/public.ts | 8 ++-- backend/src/api/routes/quotes.ts | 14 +++---- backend/src/api/routes/results.ts | 16 +++---- backend/src/api/routes/swagger.ts | 2 +- backend/src/api/routes/users.ts | 20 ++++----- backend/src/api/routes/webhooks.ts | 8 ++-- backend/src/app.ts | 8 ++-- backend/src/dal/admin-uids.ts | 2 +- backend/src/dal/ape-keys.ts | 4 +- backend/src/dal/blocklist.ts | 2 +- backend/src/dal/config.ts | 2 +- backend/src/dal/leaderboards.ts | 10 ++--- backend/src/dal/new-quotes.ts | 6 +-- backend/src/dal/preset.ts | 4 +- backend/src/dal/psa.ts | 2 +- backend/src/dal/public.ts | 6 +-- backend/src/dal/quote-ratings.ts | 2 +- backend/src/dal/report.ts | 4 +- backend/src/dal/result.ts | 6 +-- backend/src/dal/user.ts | 14 +++---- backend/src/init/configuration.ts | 8 ++-- backend/src/init/db.ts | 4 +- backend/src/init/email-client.ts | 8 ++-- backend/src/init/firebase-admin.ts | 6 +-- backend/src/init/redis.ts | 4 +- backend/src/jobs/delete-old-logs.ts | 6 +-- backend/src/jobs/index.ts | 8 ++-- backend/src/jobs/log-collection-sizes.ts | 4 +- backend/src/jobs/log-queue-sizes.ts | 4 +- backend/src/jobs/update-leaderboards.ts | 6 +-- backend/src/middlewares/ape-rate-limit.ts | 6 +-- backend/src/middlewares/auth.ts | 12 +++--- backend/src/middlewares/configuration.ts | 2 +- backend/src/middlewares/context.ts | 2 +- backend/src/middlewares/error.ts | 19 +++++---- backend/src/middlewares/permission.ts | 8 ++-- backend/src/middlewares/rate-limit.ts | 4 +- backend/src/middlewares/utility.ts | 7 +++- backend/src/middlewares/validation.ts | 2 +- backend/src/queues/email-queue.ts | 2 +- backend/src/queues/george-queue.ts | 4 +- backend/src/queues/index.ts | 6 +-- backend/src/queues/later-queue.ts | 9 ++-- backend/src/server.ts | 28 ++++++------- backend/src/services/weekly-xp-leaderboard.ts | 6 +-- backend/src/utils/auth.ts | 4 +- backend/src/utils/captcha.ts | 3 +- backend/src/utils/daily-leaderboards.ts | 6 +-- backend/src/utils/discord.ts | 7 ++-- backend/src/utils/error.ts | 2 +- backend/src/utils/logger.ts | 4 +- backend/src/utils/monkey-response.ts | 2 +- backend/src/utils/pb.ts | 2 +- backend/src/utils/validation.ts | 8 ++-- backend/src/version.ts | 2 +- backend/src/workers/email-worker.ts | 8 ++-- backend/src/workers/index.ts | 4 +- backend/src/workers/later-worker.ts | 22 ++++++---- 80 files changed, 353 insertions(+), 339 deletions(-) diff --git a/backend/src/api/controllers/admin.ts b/backend/src/api/controllers/admin.ts index da8e66f63..289830bb3 100644 --- a/backend/src/api/controllers/admin.ts +++ b/backend/src/api/controllers/admin.ts @@ -1,7 +1,7 @@ -import { MonkeyResponse } from "../../utils/monkey-response"; -import { buildMonkeyMail } from "../../utils/monkey-mail"; -import * as UserDAL from "../../dal/user"; -import * as ReportDAL from "../../dal/report"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import { buildMonkeyMail } from "../../utils/monkey-mail.js"; +import * as UserDAL from "../../dal/user.js"; +import * as ReportDAL from "../../dal/report.js"; export async function test(): Promise { return new MonkeyResponse("OK"); diff --git a/backend/src/api/controllers/ape-key.ts b/backend/src/api/controllers/ape-key.ts index 9ae476eef..fb6a6e713 100644 --- a/backend/src/api/controllers/ape-key.ts +++ b/backend/src/api/controllers/ape-key.ts @@ -1,10 +1,10 @@ import _ from "lodash"; import { randomBytes } from "crypto"; import { hash } from "bcrypt"; -import * as ApeKeysDAL from "../../dal/ape-keys"; -import MonkeyError from "../../utils/error"; -import { MonkeyResponse } from "../../utils/monkey-response"; -import { base64UrlEncode } from "../../utils/misc"; +import * as ApeKeysDAL from "../../dal/ape-keys.js"; +import MonkeyError from "../../utils/error.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import { base64UrlEncode } from "../../utils/misc.js"; import { ObjectId } from "mongodb"; import { ApeKey } from "@monkeytype/shared-types"; import { PlaySoundOnError } from "@monkeytype/shared-types/config"; diff --git a/backend/src/api/controllers/config.ts b/backend/src/api/controllers/config.ts index bb93d7c9c..3f3c26c21 100644 --- a/backend/src/api/controllers/config.ts +++ b/backend/src/api/controllers/config.ts @@ -1,5 +1,5 @@ -import * as ConfigDAL from "../../dal/config"; -import { MonkeyResponse } from "../../utils/monkey-response"; +import * as ConfigDAL from "../../dal/config.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; export async function getConfig( req: MonkeyTypes.Request diff --git a/backend/src/api/controllers/configuration.ts b/backend/src/api/controllers/configuration.ts index df9900707..aa99513aa 100644 --- a/backend/src/api/controllers/configuration.ts +++ b/backend/src/api/controllers/configuration.ts @@ -1,6 +1,6 @@ -import * as Configuration from "../../init/configuration"; -import { MonkeyResponse } from "../../utils/monkey-response"; -import { CONFIGURATION_FORM_SCHEMA } from "../../constants/base-configuration"; +import * as Configuration from "../../init/configuration.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import { CONFIGURATION_FORM_SCHEMA } from "../../constants/base-configuration.js"; export async function getConfiguration( _req: MonkeyTypes.Request diff --git a/backend/src/api/controllers/dev.ts b/backend/src/api/controllers/dev.ts index 122f24018..4fa9ef701 100644 --- a/backend/src/api/controllers/dev.ts +++ b/backend/src/api/controllers/dev.ts @@ -1,15 +1,15 @@ -import { MonkeyResponse } from "../../utils/monkey-response"; -import * as UserDal from "../../dal/user"; -import FirebaseAdmin from "../../init/firebase-admin"; -import Logger from "../../utils/logger"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import * as UserDal from "../../dal/user.js"; +import FirebaseAdmin from "../../init/firebase-admin.js"; +import Logger from "../../utils/logger.js"; import * as DateUtils from "date-fns"; import { UTCDate } from "@date-fns/utc"; -import * as ResultDal from "../../dal/result"; -import { roundTo2 } from "../../utils/misc"; +import * as ResultDal from "../../dal/result.js"; +import { roundTo2 } from "../../utils/misc.js"; import { ObjectId } from "mongodb"; -import * as LeaderboardDal from "../../dal/leaderboards"; +import * as LeaderboardDal from "../../dal/leaderboards.js"; import { isNumber } from "lodash"; -import MonkeyError from "../../utils/error"; +import MonkeyError from "../../utils/error.js"; type GenerateDataOptions = { firstTestTimestamp: Date; diff --git a/backend/src/api/controllers/leaderboard.ts b/backend/src/api/controllers/leaderboard.ts index bed10e239..cffcd9f23 100644 --- a/backend/src/api/controllers/leaderboard.ts +++ b/backend/src/api/controllers/leaderboard.ts @@ -3,12 +3,12 @@ import { getCurrentDayTimestamp, MILLISECONDS_IN_DAY, getCurrentWeekTimestamp, -} from "../../utils/misc"; -import { MonkeyResponse } from "../../utils/monkey-response"; -import * as LeaderboardsDAL from "../../dal/leaderboards"; -import MonkeyError from "../../utils/error"; -import * as DailyLeaderboards from "../../utils/daily-leaderboards"; -import * as WeeklyXpLeaderboard from "../../services/weekly-xp-leaderboard"; +} from "../../utils/misc.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import * as LeaderboardsDAL from "../../dal/leaderboards.js"; +import MonkeyError from "../../utils/error.js"; +import * as DailyLeaderboards from "../../utils/daily-leaderboards.js"; +import * as WeeklyXpLeaderboard from "../../services/weekly-xp-leaderboard.js"; export async function getLeaderboard( req: MonkeyTypes.Request diff --git a/backend/src/api/controllers/preset.ts b/backend/src/api/controllers/preset.ts index 0bf4e0e2d..23ff3a921 100644 --- a/backend/src/api/controllers/preset.ts +++ b/backend/src/api/controllers/preset.ts @@ -1,5 +1,5 @@ -import * as PresetDAL from "../../dal/preset"; -import { MonkeyResponse } from "../../utils/monkey-response"; +import * as PresetDAL from "../../dal/preset.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; export async function getPresets( req: MonkeyTypes.Request diff --git a/backend/src/api/controllers/psa.ts b/backend/src/api/controllers/psa.ts index 18a3e31b9..b99c527fa 100644 --- a/backend/src/api/controllers/psa.ts +++ b/backend/src/api/controllers/psa.ts @@ -1,5 +1,5 @@ -import * as PsaDAL from "../../dal/psa"; -import { MonkeyResponse } from "../../utils/monkey-response"; +import * as PsaDAL from "../../dal/psa.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; export async function getPsas(): Promise { const data = await PsaDAL.get(); diff --git a/backend/src/api/controllers/public.ts b/backend/src/api/controllers/public.ts index f49dca031..b5852e287 100644 --- a/backend/src/api/controllers/public.ts +++ b/backend/src/api/controllers/public.ts @@ -1,5 +1,5 @@ -import * as PublicDAL from "../../dal/public"; -import { MonkeyResponse } from "../../utils/monkey-response"; +import * as PublicDAL from "../../dal/public.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; export async function getPublicSpeedHistogram( req: MonkeyTypes.Request diff --git a/backend/src/api/controllers/quote.ts b/backend/src/api/controllers/quote.ts index 53d006432..6b9d7c48e 100644 --- a/backend/src/api/controllers/quote.ts +++ b/backend/src/api/controllers/quote.ts @@ -1,13 +1,13 @@ import _ from "lodash"; import { v4 as uuidv4 } from "uuid"; -import { getPartialUser, updateQuoteRatings } from "../../dal/user"; -import * as ReportDAL from "../../dal/report"; -import * as NewQuotesDAL from "../../dal/new-quotes"; -import * as QuoteRatingsDAL from "../../dal/quote-ratings"; -import MonkeyError from "../../utils/error"; -import { verify } from "../../utils/captcha"; -import Logger from "../../utils/logger"; -import { MonkeyResponse } from "../../utils/monkey-response"; +import { getPartialUser, updateQuoteRatings } from "../../dal/user.js"; +import * as ReportDAL from "../../dal/report.js"; +import * as NewQuotesDAL from "../../dal/new-quotes.js"; +import * as QuoteRatingsDAL from "../../dal/quote-ratings.js"; +import MonkeyError from "../../utils/error.js"; +import { verify } from "../../utils/captcha.js"; +import Logger from "../../utils/logger.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; import { ObjectId } from "mongodb"; async function verifyCaptcha(captcha: string): Promise { diff --git a/backend/src/api/controllers/result.ts b/backend/src/api/controllers/result.ts index 0f3100910..be6977156 100644 --- a/backend/src/api/controllers/result.ts +++ b/backend/src/api/controllers/result.ts @@ -1,5 +1,5 @@ -import * as ResultDAL from "../../dal/result"; -import * as PublicDAL from "../../dal/public"; +import * as ResultDAL from "../../dal/result.js"; +import * as PublicDAL from "../../dal/public.js"; import { getCurrentDayTimestamp, getStartOfDayTimestamp, @@ -8,34 +8,37 @@ import { roundTo2, stdDev, stringToNumberOrDefault, -} from "../../utils/misc"; +} from "../../utils/misc.js"; import objectHash from "object-hash"; -import Logger from "../../utils/logger"; +import Logger from "../../utils/logger.js"; import "dotenv/config"; -import { MonkeyResponse } from "../../utils/monkey-response"; -import MonkeyError from "../../utils/error"; -import { areFunboxesCompatible, isTestTooShort } from "../../utils/validation"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import MonkeyError from "../../utils/error.js"; +import { + areFunboxesCompatible, + isTestTooShort, +} from "../../utils/validation.js"; import { implemented as anticheatImplemented, validateResult, validateKeys, -} from "../../anticheat/index"; -import MonkeyStatusCodes from "../../constants/monkey-status-codes"; +} from "../../anticheat/index.js"; +import MonkeyStatusCodes from "../../constants/monkey-status-codes.js"; import { incrementResult, incrementDailyLeaderboard, -} from "../../utils/prometheus"; -import GeorgeQueue from "../../queues/george-queue"; -import { getDailyLeaderboard } from "../../utils/daily-leaderboards"; -import AutoRoleList from "../../constants/auto-roles"; -import * as UserDAL from "../../dal/user"; -import { buildMonkeyMail } from "../../utils/monkey-mail"; -import FunboxList from "../../constants/funbox-list"; +} from "../../utils/prometheus.js"; +import GeorgeQueue from "../../queues/george-queue.js"; +import { getDailyLeaderboard } from "../../utils/daily-leaderboards.js"; +import AutoRoleList from "../../constants/auto-roles.js"; +import * as UserDAL from "../../dal/user.js"; +import { buildMonkeyMail } from "../../utils/monkey-mail.js"; +import FunboxList from "../../constants/funbox-list.js"; import _ from "lodash"; -import * as WeeklyXpLeaderboard from "../../services/weekly-xp-leaderboard"; +import * as WeeklyXpLeaderboard from "../../services/weekly-xp-leaderboard.js"; import { UAParser } from "ua-parser-js"; -import { canFunboxGetPb } from "../../utils/pb"; -import { buildDbResult } from "../../utils/result"; +import { canFunboxGetPb } from "../../utils/pb.js"; +import { buildDbResult } from "../../utils/result.js"; try { if (!anticheatImplemented()) throw new Error("undefined"); diff --git a/backend/src/api/controllers/user.ts b/backend/src/api/controllers/user.ts index 5ff96c686..8d1c58edc 100644 --- a/backend/src/api/controllers/user.ts +++ b/backend/src/api/controllers/user.ts @@ -1,34 +1,34 @@ import _ from "lodash"; -import * as UserDAL from "../../dal/user"; -import MonkeyError from "../../utils/error"; -import Logger from "../../utils/logger"; -import { MonkeyResponse } from "../../utils/monkey-response"; -import * as DiscordUtils from "../../utils/discord"; +import * as UserDAL from "../../dal/user.js"; +import MonkeyError from "../../utils/error.js"; +import Logger from "../../utils/logger.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import * as DiscordUtils from "../../utils/discord.js"; import { MILLISECONDS_IN_DAY, buildAgentLog, isDevEnvironment, sanitizeString, -} from "../../utils/misc"; -import GeorgeQueue from "../../queues/george-queue"; +} from "../../utils/misc.js"; +import GeorgeQueue from "../../queues/george-queue.js"; import admin, { FirebaseError } from "firebase-admin"; -import { deleteAllApeKeys } from "../../dal/ape-keys"; -import { deleteAllPresets } from "../../dal/preset"; -import { deleteAll as deleteAllResults } from "../../dal/result"; -import { deleteConfig } from "../../dal/config"; -import { verify } from "../../utils/captcha"; -import * as LeaderboardsDAL from "../../dal/leaderboards"; -import { purgeUserFromDailyLeaderboards } from "../../utils/daily-leaderboards"; +import { deleteAllApeKeys } from "../../dal/ape-keys.js"; +import { deleteAllPresets } from "../../dal/preset.js"; +import { deleteAll as deleteAllResults } from "../../dal/result.js"; +import { deleteConfig } from "../../dal/config.js"; +import { verify } from "../../utils/captcha.js"; +import * as LeaderboardsDAL from "../../dal/leaderboards.js"; +import { purgeUserFromDailyLeaderboards } from "../../utils/daily-leaderboards.js"; import { v4 as uuidv4 } from "uuid"; import { ObjectId } from "mongodb"; -import * as ReportDAL from "../../dal/report"; -import emailQueue from "../../queues/email-queue"; -import FirebaseAdmin from "../../init/firebase-admin"; -import * as AuthUtil from "../../utils/auth"; +import * as ReportDAL from "../../dal/report.js"; +import emailQueue from "../../queues/email-queue.js"; +import FirebaseAdmin from "../../init/firebase-admin.js"; +import * as AuthUtil from "../../utils/auth.js"; import * as Dates from "date-fns"; import { UTCDateMini } from "@date-fns/utc"; -import * as BlocklistDal from "../../dal/blocklist"; +import * as BlocklistDal from "../../dal/blocklist.js"; async function verifyCaptcha(captcha: string): Promise { if (!(await verify(captcha))) { diff --git a/backend/src/api/controllers/webhooks.ts b/backend/src/api/controllers/webhooks.ts index 3bef5bbca..a809d8607 100644 --- a/backend/src/api/controllers/webhooks.ts +++ b/backend/src/api/controllers/webhooks.ts @@ -1,5 +1,5 @@ -import { MonkeyResponse } from "../../utils/monkey-response"; -import GeorgeQueue from "../../queues/george-queue"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import GeorgeQueue from "../../queues/george-queue.js"; export async function githubRelease( req: MonkeyTypes.Request diff --git a/backend/src/api/routes/admin.ts b/backend/src/api/routes/admin.ts index 4c1bdb93f..c5c799d55 100644 --- a/backend/src/api/routes/admin.ts +++ b/backend/src/api/routes/admin.ts @@ -1,14 +1,14 @@ // import joi from "joi"; import { Router } from "express"; -import { authenticateRequest } from "../../middlewares/auth"; -import * as AdminController from "../controllers/admin"; -import { adminLimit } from "../../middlewares/rate-limit"; -import { sendForgotPasswordEmail, toggleBan } from "../controllers/user"; +import { authenticateRequest } from "../../middlewares/auth.js"; +import * as AdminController from "../controllers/admin.js"; +import { adminLimit } from "../../middlewares/rate-limit.js"; +import { sendForgotPasswordEmail, toggleBan } from "../controllers/user.js"; import joi from "joi"; -import { validate } from "../../middlewares/configuration"; -import { checkIfUserIsAdmin } from "../../middlewares/permission"; -import { asyncHandler } from "../../middlewares/utility"; -import { validateRequest } from "../../middlewares/validation"; +import { validate } from "../../middlewares/configuration.js"; +import { checkIfUserIsAdmin } from "../../middlewares/permission.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { validateRequest } from "../../middlewares/validation.js"; const router = Router(); diff --git a/backend/src/api/routes/ape-keys.ts b/backend/src/api/routes/ape-keys.ts index 1e49bc892..d85797530 100644 --- a/backend/src/api/routes/ape-keys.ts +++ b/backend/src/api/routes/ape-keys.ts @@ -1,12 +1,12 @@ import joi from "joi"; import { Router } from "express"; -import { authenticateRequest } from "../../middlewares/auth"; -import * as ApeKeyController from "../controllers/ape-key"; -import * as RateLimit from "../../middlewares/rate-limit"; -import { checkUserPermissions } from "../../middlewares/permission"; -import { validate } from "../../middlewares/configuration"; -import { asyncHandler } from "../../middlewares/utility"; -import { validateRequest } from "../../middlewares/validation"; +import { authenticateRequest } from "../../middlewares/auth.js"; +import * as ApeKeyController from "../controllers/ape-key.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import { checkUserPermissions } from "../../middlewares/permission.js"; +import { validate } from "../../middlewares/configuration.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { validateRequest } from "../../middlewares/validation.js"; const apeKeyNameSchema = joi .string() diff --git a/backend/src/api/routes/configs.ts b/backend/src/api/routes/configs.ts index c2e580b62..4b4923fb8 100644 --- a/backend/src/api/routes/configs.ts +++ b/backend/src/api/routes/configs.ts @@ -1,10 +1,10 @@ import { Router } from "express"; -import { authenticateRequest } from "../../middlewares/auth"; -import configSchema from "../schemas/config-schema"; -import * as ConfigController from "../controllers/config"; -import * as RateLimit from "../../middlewares/rate-limit"; -import { asyncHandler } from "../../middlewares/utility"; -import { validateRequest } from "../../middlewares/validation"; +import { authenticateRequest } from "../../middlewares/auth.js"; +import configSchema from "../schemas/config-schema.js"; +import * as ConfigController from "../controllers/config.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { validateRequest } from "../../middlewares/validation.js"; const router = Router(); diff --git a/backend/src/api/routes/configuration.ts b/backend/src/api/routes/configuration.ts index 54cc3a963..ec165bfdf 100644 --- a/backend/src/api/routes/configuration.ts +++ b/backend/src/api/routes/configuration.ts @@ -1,11 +1,11 @@ import joi from "joi"; import { Router } from "express"; -import * as ConfigurationController from "../controllers/configuration"; -import { authenticateRequest } from "../../middlewares/auth"; -import { adminLimit } from "../../middlewares/rate-limit"; -import { asyncHandler, useInProduction } from "../../middlewares/utility"; -import { checkIfUserIsAdmin } from "../../middlewares/permission"; -import { validateRequest } from "../../middlewares/validation"; +import * as ConfigurationController from "../controllers/configuration.js"; +import { authenticateRequest } from "../../middlewares/auth.js"; +import { adminLimit } from "../../middlewares/rate-limit.js"; +import { asyncHandler, useInProduction } from "../../middlewares/utility.js"; +import { checkIfUserIsAdmin } from "../../middlewares/permission.js"; +import { validateRequest } from "../../middlewares/validation.js"; const router = Router(); diff --git a/backend/src/api/routes/dev.ts b/backend/src/api/routes/dev.ts index 2c2dd2a42..52763129d 100644 --- a/backend/src/api/routes/dev.ts +++ b/backend/src/api/routes/dev.ts @@ -1,10 +1,10 @@ import { Router } from "express"; import joi from "joi"; -import { createTestData } from "../controllers/dev"; -import { isDevEnvironment } from "../../utils/misc"; -import { validate } from "../../middlewares/configuration"; -import { validateRequest } from "../../middlewares/validation"; -import { asyncHandler } from "../../middlewares/utility"; +import { createTestData } from "../controllers/dev.js"; +import { isDevEnvironment } from "../../utils/misc.js"; +import { validate } from "../../middlewares/configuration.js"; +import { validateRequest } from "../../middlewares/validation.js"; +import { asyncHandler } from "../../middlewares/utility.js"; const router = Router(); diff --git a/backend/src/api/routes/index.ts b/backend/src/api/routes/index.ts index 57c613896..3102c61bf 100644 --- a/backend/src/api/routes/index.ts +++ b/backend/src/api/routes/index.ts @@ -1,23 +1,23 @@ import _ from "lodash"; -import psas from "./psas"; -import publicStats from "./public"; -import users from "./users"; +import psas from "./psas.js"; +import publicStats from "./public.js"; +import users from "./users.js"; import { join } from "path"; -import quotes from "./quotes"; -import configs from "./configs"; -import results from "./results"; -import presets from "./presets"; -import apeKeys from "./ape-keys"; -import admin from "./admin"; -import webhooks from "./webhooks"; -import dev from "./dev"; -import configuration from "./configuration"; -import { version } from "../../version"; -import leaderboards from "./leaderboards"; -import addSwaggerMiddlewares from "./swagger"; -import { asyncHandler } from "../../middlewares/utility"; -import { MonkeyResponse } from "../../utils/monkey-response"; -import { recordClientVersion } from "../../utils/prometheus"; +import quotes from "./quotes.js"; +import configs from "./configs.js"; +import results from "./results.js"; +import presets from "./presets.js"; +import apeKeys from "./ape-keys.js"; +import admin from "./admin.js"; +import webhooks from "./webhooks.js"; +import dev from "./dev.js"; +import configuration from "./configuration.js"; +import { version } from "../../version.js"; +import leaderboards from "./leaderboards.js"; +import addSwaggerMiddlewares from "./swagger.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { MonkeyResponse } from "../../utils/monkey-response.js"; +import { recordClientVersion } from "../../utils/prometheus.js"; import { Application, NextFunction, @@ -25,9 +25,9 @@ import { Router, static as expressStatic, } from "express"; -import { isDevEnvironment } from "../../utils/misc"; -import { getLiveConfiguration } from "../../init/configuration"; -import Logger from "../../utils/logger"; +import { isDevEnvironment } from "../../utils/misc.js"; +import { getLiveConfiguration } from "../../init/configuration.js"; +import Logger from "../../utils/logger.js"; const pathOverride = process.env["API_PATH_OVERRIDE"]; const BASE_ROUTE = pathOverride !== undefined ? `/${pathOverride}` : ""; diff --git a/backend/src/api/routes/leaderboards.ts b/backend/src/api/routes/leaderboards.ts index 9b2705e3a..ea0302fe3 100644 --- a/backend/src/api/routes/leaderboards.ts +++ b/backend/src/api/routes/leaderboards.ts @@ -1,12 +1,12 @@ import joi from "joi"; import { Router } from "express"; -import * as RateLimit from "../../middlewares/rate-limit"; -import { withApeRateLimiter } from "../../middlewares/ape-rate-limit"; -import { authenticateRequest } from "../../middlewares/auth"; -import * as LeaderboardController from "../controllers/leaderboard"; -import { validate } from "../../middlewares/configuration"; -import { validateRequest } from "../../middlewares/validation"; -import { asyncHandler } from "../../middlewares/utility"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import { withApeRateLimiter } from "../../middlewares/ape-rate-limit.js"; +import { authenticateRequest } from "../../middlewares/auth.js"; +import * as LeaderboardController from "../controllers/leaderboard.js"; +import { validate } from "../../middlewares/configuration.js"; +import { validateRequest } from "../../middlewares/validation.js"; +import { asyncHandler } from "../../middlewares/utility.js"; const BASE_LEADERBOARD_VALIDATION_SCHEMA = { language: joi diff --git a/backend/src/api/routes/presets.ts b/backend/src/api/routes/presets.ts index c33ce3afe..9b3cc8637 100644 --- a/backend/src/api/routes/presets.ts +++ b/backend/src/api/routes/presets.ts @@ -1,11 +1,11 @@ import joi from "joi"; -import { authenticateRequest } from "../../middlewares/auth"; -import * as PresetController from "../controllers/preset"; -import * as RateLimit from "../../middlewares/rate-limit"; -import configSchema from "../schemas/config-schema"; +import { authenticateRequest } from "../../middlewares/auth.js"; +import * as PresetController from "../controllers/preset.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import configSchema from "../schemas/config-schema.js"; import { Router } from "express"; -import { asyncHandler } from "../../middlewares/utility"; -import { validateRequest } from "../../middlewares/validation"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { validateRequest } from "../../middlewares/validation.js"; const router = Router(); diff --git a/backend/src/api/routes/psas.ts b/backend/src/api/routes/psas.ts index 6fbbd6759..d0191b8d0 100644 --- a/backend/src/api/routes/psas.ts +++ b/backend/src/api/routes/psas.ts @@ -1,7 +1,7 @@ import { Router } from "express"; -import * as PsaController from "../controllers/psa"; -import * as RateLimit from "../../middlewares/rate-limit"; -import { asyncHandler } from "../../middlewares/utility"; +import * as PsaController from "../controllers/psa.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import { asyncHandler } from "../../middlewares/utility.js"; const router = Router(); diff --git a/backend/src/api/routes/public.ts b/backend/src/api/routes/public.ts index 86491c6b3..41324bce3 100644 --- a/backend/src/api/routes/public.ts +++ b/backend/src/api/routes/public.ts @@ -1,9 +1,9 @@ import { Router } from "express"; -import * as PublicController from "../controllers/public"; -import * as RateLimit from "../../middlewares/rate-limit"; -import { asyncHandler } from "../../middlewares/utility"; +import * as PublicController from "../controllers/public.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import { asyncHandler } from "../../middlewares/utility.js"; import joi from "joi"; -import { validateRequest } from "../../middlewares/validation"; +import { validateRequest } from "../../middlewares/validation.js"; const GET_MODE_STATS_VALIDATION_SCHEMA = { language: joi diff --git a/backend/src/api/routes/quotes.ts b/backend/src/api/routes/quotes.ts index 19a4f7604..f17b46b19 100644 --- a/backend/src/api/routes/quotes.ts +++ b/backend/src/api/routes/quotes.ts @@ -1,12 +1,12 @@ import joi from "joi"; -import { authenticateRequest } from "../../middlewares/auth"; +import { authenticateRequest } from "../../middlewares/auth.js"; import { Router } from "express"; -import * as QuoteController from "../controllers/quote"; -import * as RateLimit from "../../middlewares/rate-limit"; -import { checkUserPermissions } from "../../middlewares/permission"; -import { asyncHandler } from "../../middlewares/utility"; -import { validate } from "../../middlewares/configuration"; -import { validateRequest } from "../../middlewares/validation"; +import * as QuoteController from "../controllers/quote.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import { checkUserPermissions } from "../../middlewares/permission.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { validate } from "../../middlewares/configuration.js"; +import { validateRequest } from "../../middlewares/validation.js"; const router = Router(); diff --git a/backend/src/api/routes/results.ts b/backend/src/api/routes/results.ts index 92328c072..c6740e45b 100644 --- a/backend/src/api/routes/results.ts +++ b/backend/src/api/routes/results.ts @@ -1,13 +1,13 @@ -import * as ResultController from "../controllers/result"; -import resultSchema from "../schemas/result-schema"; -import * as RateLimit from "../../middlewares/rate-limit"; +import * as ResultController from "../controllers/result.js"; +import resultSchema from "../schemas/result-schema.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; import { Router } from "express"; -import { authenticateRequest } from "../../middlewares/auth"; +import { authenticateRequest } from "../../middlewares/auth.js"; import joi from "joi"; -import { withApeRateLimiter } from "../../middlewares/ape-rate-limit"; -import { validateRequest } from "../../middlewares/validation"; -import { asyncHandler } from "../../middlewares/utility"; -import { validate } from "../../middlewares/configuration"; +import { withApeRateLimiter } from "../../middlewares/ape-rate-limit.js"; +import { validateRequest } from "../../middlewares/validation.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { validate } from "../../middlewares/configuration.js"; const router = Router(); diff --git a/backend/src/api/routes/swagger.ts b/backend/src/api/routes/swagger.ts index 37d4754b8..0944edd64 100644 --- a/backend/src/api/routes/swagger.ts +++ b/backend/src/api/routes/swagger.ts @@ -7,7 +7,7 @@ import { } from "swagger-ui-express"; import publicSwaggerSpec from "../../documentation/public-swagger.json"; import internalSwaggerSpec from "../../documentation/internal-swagger.json"; -import { isDevEnvironment } from "../../utils/misc"; +import { isDevEnvironment } from "../../utils/misc.js"; const SWAGGER_UI_OPTIONS = { customCss: ".swagger-ui .topbar { display: none } .try-out { display: none }", diff --git a/backend/src/api/routes/users.ts b/backend/src/api/routes/users.ts index 79e5d0658..ffd9cd2cf 100644 --- a/backend/src/api/routes/users.ts +++ b/backend/src/api/routes/users.ts @@ -1,15 +1,15 @@ import joi from "joi"; -import { authenticateRequest } from "../../middlewares/auth"; +import { authenticateRequest } from "../../middlewares/auth.js"; import { Router } from "express"; -import * as UserController from "../controllers/user"; -import * as RateLimit from "../../middlewares/rate-limit"; -import { withApeRateLimiter } from "../../middlewares/ape-rate-limit"; -import { containsProfanity, isUsernameValid } from "../../utils/validation"; -import filterSchema from "../schemas/filter-schema"; -import { asyncHandler } from "../../middlewares/utility"; -import { validate } from "../../middlewares/configuration"; -import { validateRequest } from "../../middlewares/validation"; -import { checkUserPermissions } from "../../middlewares/permission"; +import * as UserController from "../controllers/user.js"; +import * as RateLimit from "../../middlewares/rate-limit.js"; +import { withApeRateLimiter } from "../../middlewares/ape-rate-limit.js"; +import { containsProfanity, isUsernameValid } from "../../utils/validation.js"; +import filterSchema from "../schemas/filter-schema.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { validate } from "../../middlewares/configuration.js"; +import { validateRequest } from "../../middlewares/validation.js"; +import { checkUserPermissions } from "../../middlewares/permission.js"; const router = Router(); diff --git a/backend/src/api/routes/webhooks.ts b/backend/src/api/routes/webhooks.ts index d0e774d09..3c2f71fb2 100644 --- a/backend/src/api/routes/webhooks.ts +++ b/backend/src/api/routes/webhooks.ts @@ -1,9 +1,9 @@ // import joi from "joi"; import { Router } from "express"; -import { authenticateGithubWebhook } from "../../middlewares/auth"; -import { asyncHandler } from "../../middlewares/utility"; -import { webhookLimit } from "../../middlewares/rate-limit"; -import { githubRelease } from "../controllers/webhooks"; +import { authenticateGithubWebhook } from "../../middlewares/auth.js"; +import { asyncHandler } from "../../middlewares/utility.js"; +import { webhookLimit } from "../../middlewares/rate-limit.js"; +import { githubRelease } from "../controllers/webhooks.js"; const router = Router(); diff --git a/backend/src/app.ts b/backend/src/app.ts index 2a5470908..496725d6b 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -1,13 +1,13 @@ import cors from "cors"; import helmet from "helmet"; -import addApiRoutes from "./api/routes"; +import addApiRoutes from "./api/routes/index.js"; import express, { urlencoded, json } from "express"; -import contextMiddleware from "./middlewares/context"; -import errorHandlingMiddleware from "./middlewares/error"; +import contextMiddleware from "./middlewares/context.js"; +import errorHandlingMiddleware from "./middlewares/error.js"; import { badAuthRateLimiterHandler, rootRateLimiter, -} from "./middlewares/rate-limit"; +} from "./middlewares/rate-limit.js"; function buildApp(): express.Application { const app = express(); diff --git a/backend/src/dal/admin-uids.ts b/backend/src/dal/admin-uids.ts index cd2bbfaf5..e44d672e5 100644 --- a/backend/src/dal/admin-uids.ts +++ b/backend/src/dal/admin-uids.ts @@ -1,4 +1,4 @@ -import * as db from "../init/db"; +import * as db from "../init/db.js"; export async function isAdmin(uid: string): Promise { const doc = await db.collection("admin-uids").findOne({ uid }); diff --git a/backend/src/dal/ape-keys.ts b/backend/src/dal/ape-keys.ts index 46a08aaed..5a78b3010 100644 --- a/backend/src/dal/ape-keys.ts +++ b/backend/src/dal/ape-keys.ts @@ -1,5 +1,5 @@ import _ from "lodash"; -import * as db from "../init/db"; +import * as db from "../init/db.js"; import { Filter, ObjectId, @@ -7,7 +7,7 @@ import { Collection, WithId, } from "mongodb"; -import MonkeyError from "../utils/error"; +import MonkeyError from "../utils/error.js"; export const getApeKeysCollection = (): Collection< WithId diff --git a/backend/src/dal/blocklist.ts b/backend/src/dal/blocklist.ts index 78e53daef..3ebc9355e 100644 --- a/backend/src/dal/blocklist.ts +++ b/backend/src/dal/blocklist.ts @@ -1,5 +1,5 @@ import { Collection } from "mongodb"; -import * as db from "../init/db"; +import * as db from "../init/db.js"; import { createHash } from "crypto"; type BlocklistEntryProperties = Pick< diff --git a/backend/src/dal/config.ts b/backend/src/dal/config.ts index ac7fb1ee7..770f7495c 100644 --- a/backend/src/dal/config.ts +++ b/backend/src/dal/config.ts @@ -1,5 +1,5 @@ import { UpdateResult } from "mongodb"; -import * as db from "../init/db"; +import * as db from "../init/db.js"; import _ from "lodash"; const configLegacyProperties = [ diff --git a/backend/src/dal/leaderboards.ts b/backend/src/dal/leaderboards.ts index f30771034..22edb4e22 100644 --- a/backend/src/dal/leaderboards.ts +++ b/backend/src/dal/leaderboards.ts @@ -1,9 +1,9 @@ -import * as db from "../init/db"; -import Logger from "../utils/logger"; +import * as db from "../init/db.js"; +import Logger from "../utils/logger.js"; import { performance } from "perf_hooks"; -import { setLeaderboard } from "../utils/prometheus"; -import { isDevEnvironment } from "../utils/misc"; -import { getCachedConfiguration } from "../init/configuration"; +import { setLeaderboard } from "../utils/prometheus.js"; +import { isDevEnvironment } from "../utils/misc.js"; +import { getCachedConfiguration } from "../init/configuration.js"; export async function get( mode: string, diff --git a/backend/src/dal/new-quotes.ts b/backend/src/dal/new-quotes.ts index 4f0947d6f..7c4623fba 100644 --- a/backend/src/dal/new-quotes.ts +++ b/backend/src/dal/new-quotes.ts @@ -3,11 +3,11 @@ import { ObjectId } from "mongodb"; import path from "path"; import { existsSync, writeFileSync } from "fs"; import { readFile } from "node:fs/promises"; -import * as db from "../init/db"; -import MonkeyError from "../utils/error"; +import * as db from "../init/db.js"; +import MonkeyError from "../utils/error.js"; import { compareTwoStrings } from "string-similarity"; -const PATH_TO_REPO = "../../../../monkeytype-new-quotes"; +const PATH_TO_REPO = "../../../../monkeytype-new-quotes.js"; let git; try { diff --git a/backend/src/dal/preset.ts b/backend/src/dal/preset.ts index a38bd5012..d8b78ab95 100644 --- a/backend/src/dal/preset.ts +++ b/backend/src/dal/preset.ts @@ -1,5 +1,5 @@ -import MonkeyError from "../utils/error"; -import * as db from "../init/db"; +import MonkeyError from "../utils/error.js"; +import * as db from "../init/db.js"; import { ObjectId, Filter, Collection, WithId } from "mongodb"; const MAX_PRESETS = 10; diff --git a/backend/src/dal/psa.ts b/backend/src/dal/psa.ts index 3f7ace3b7..cd103f38c 100644 --- a/backend/src/dal/psa.ts +++ b/backend/src/dal/psa.ts @@ -1,4 +1,4 @@ -import * as db from "../init/db"; +import * as db from "../init/db.js"; type PSA = MonkeyTypes.WithObjectId; diff --git a/backend/src/dal/public.ts b/backend/src/dal/public.ts index 5927da57e..5c7fb6983 100644 --- a/backend/src/dal/public.ts +++ b/backend/src/dal/public.ts @@ -1,6 +1,6 @@ -import * as db from "../init/db"; -import { roundTo2 } from "../utils/misc"; -import MonkeyError from "../utils/error"; +import * as db from "../init/db.js"; +import { roundTo2 } from "../utils/misc.js"; +import MonkeyError from "../utils/error.js"; type PublicTypingStatsDB = SharedTypes.PublicTypingStats & { _id: "stats" }; type PublicSpeedStatsDB = { diff --git a/backend/src/dal/quote-ratings.ts b/backend/src/dal/quote-ratings.ts index 09b180949..bb72f365a 100644 --- a/backend/src/dal/quote-ratings.ts +++ b/backend/src/dal/quote-ratings.ts @@ -1,4 +1,4 @@ -import * as db from "../init/db"; +import * as db from "../init/db.js"; export async function submit( quoteId: number, diff --git a/backend/src/dal/report.ts b/backend/src/dal/report.ts index 7f746019c..ff7a2bf97 100644 --- a/backend/src/dal/report.ts +++ b/backend/src/dal/report.ts @@ -1,5 +1,5 @@ -import MonkeyError from "../utils/error"; -import * as db from "../init/db"; +import MonkeyError from "../utils/error.js"; +import * as db from "../init/db.js"; const COLLECTION_NAME = "reports"; diff --git a/backend/src/dal/result.ts b/backend/src/dal/result.ts index 5e19576bb..612bde2a9 100644 --- a/backend/src/dal/result.ts +++ b/backend/src/dal/result.ts @@ -1,9 +1,9 @@ import _ from "lodash"; import { Collection, DeleteResult, ObjectId, UpdateResult } from "mongodb"; -import MonkeyError from "../utils/error"; -import * as db from "../init/db"; +import MonkeyError from "../utils/error.js"; +import * as db from "../init/db.js"; -import { getUser, getTags } from "./user"; +import { getUser, getTags } from "./user.js"; type DBResult = MonkeyTypes.WithObjectId< SharedTypes.DBResult diff --git a/backend/src/dal/user.ts b/backend/src/dal/user.ts index 81f3e553f..e57c01fc5 100644 --- a/backend/src/dal/user.ts +++ b/backend/src/dal/user.ts @@ -1,12 +1,12 @@ import _ from "lodash"; -import { containsProfanity, isUsernameValid } from "../utils/validation"; -import { canFunboxGetPb, checkAndUpdatePb } from "../utils/pb"; -import * as db from "../init/db"; -import MonkeyError from "../utils/error"; +import { containsProfanity, isUsernameValid } from "../utils/validation.js"; +import { canFunboxGetPb, checkAndUpdatePb } from "../utils/pb.js"; +import * as db from "../init/db.js"; +import MonkeyError from "../utils/error.js"; import { Collection, ObjectId, Long, UpdateFilter, Filter } from "mongodb"; -import Logger from "../utils/logger"; -import { flattenObjectDeep, isToday, isYesterday } from "../utils/misc"; -import { getCachedConfiguration } from "../init/configuration"; +import Logger from "../utils/logger.js"; +import { flattenObjectDeep, isToday, isYesterday } from "../utils/misc.js"; +import { getCachedConfiguration } from "../init/configuration.js"; import { getDayOfYear } from "date-fns"; import { UTCDate } from "@date-fns/utc"; diff --git a/backend/src/init/configuration.ts b/backend/src/init/configuration.ts index 72ed34d4f..e6a04fe52 100644 --- a/backend/src/init/configuration.ts +++ b/backend/src/init/configuration.ts @@ -1,9 +1,9 @@ import _ from "lodash"; -import * as db from "./db"; +import * as db from "./db.js"; import { ObjectId } from "mongodb"; -import Logger from "../utils/logger"; -import { identity } from "../utils/misc"; -import { BASE_CONFIGURATION } from "../constants/base-configuration"; +import Logger from "../utils/logger.js"; +import { identity } from "../utils/misc.js"; +import { BASE_CONFIGURATION } from "../constants/base-configuration.js"; const CONFIG_UPDATE_INTERVAL = 10 * 60 * 1000; // 10 Minutes diff --git a/backend/src/init/db.ts b/backend/src/init/db.ts index ca86b0c70..b9a02e8d9 100644 --- a/backend/src/init/db.ts +++ b/backend/src/init/db.ts @@ -6,8 +6,8 @@ import { MongoClientOptions, WithId, } from "mongodb"; -import MonkeyError from "../utils/error"; -import Logger from "../utils/logger"; +import MonkeyError from "../utils/error.js"; +import Logger from "../utils/logger.js"; let db: Db; let mongoClient: MongoClient; diff --git a/backend/src/init/email-client.ts b/backend/src/init/email-client.ts index e1166dcdb..7375ae637 100644 --- a/backend/src/init/email-client.ts +++ b/backend/src/init/email-client.ts @@ -1,12 +1,12 @@ import * as nodemailer from "nodemailer"; -import Logger from "../utils/logger"; +import Logger from "../utils/logger.js"; import fs from "fs"; import { join } from "path"; import mjml2html from "mjml"; import mustache from "mustache"; -import { recordEmail } from "../utils/prometheus"; -import { EmailTaskContexts, EmailType } from "../queues/email-queue"; -import { isDevEnvironment } from "../utils/misc"; +import { recordEmail } from "../utils/prometheus.js"; +import { EmailTaskContexts, EmailType } from "../queues/email-queue.js"; +import { isDevEnvironment } from "../utils/misc.js"; type EmailMetadata = { subject: string; diff --git a/backend/src/init/firebase-admin.ts b/backend/src/init/firebase-admin.ts index 9ab11c2be..817cd5914 100644 --- a/backend/src/init/firebase-admin.ts +++ b/backend/src/init/firebase-admin.ts @@ -1,9 +1,9 @@ import admin, { ServiceAccount } from "firebase-admin"; -import Logger from "../utils/logger"; +import Logger from "../utils/logger.js"; import { readFileSync, existsSync } from "fs"; -import MonkeyError from "../utils/error"; +import MonkeyError from "../utils/error.js"; import path from "path"; -import { isDevEnvironment } from "../utils/misc"; +import { isDevEnvironment } from "../utils/misc.js"; const SERVICE_ACCOUNT_PATH = path.join( __dirname, diff --git a/backend/src/init/redis.ts b/backend/src/init/redis.ts index cdce2e906..357762aad 100644 --- a/backend/src/init/redis.ts +++ b/backend/src/init/redis.ts @@ -2,8 +2,8 @@ import fs from "fs"; import _ from "lodash"; import { join } from "path"; import IORedis from "ioredis"; -import Logger from "../utils/logger"; -import { isDevEnvironment } from "../utils/misc"; +import Logger from "../utils/logger.js"; +import { isDevEnvironment } from "../utils/misc.js"; let connection: IORedis.Redis; let connected = false; diff --git a/backend/src/jobs/delete-old-logs.ts b/backend/src/jobs/delete-old-logs.ts index 8e767247c..bf2f95584 100644 --- a/backend/src/jobs/delete-old-logs.ts +++ b/backend/src/jobs/delete-old-logs.ts @@ -1,7 +1,7 @@ import { CronJob } from "cron"; -import * as db from "../init/db"; -import Logger from "../utils/logger"; -import { getCachedConfiguration } from "../init/configuration"; +import * as db from "../init/db.js"; +import Logger from "../utils/logger.js"; +import { getCachedConfiguration } from "../init/configuration.js"; const CRON_SCHEDULE = "0 0 0 * * *"; const LOG_MAX_AGE_DAYS = 30; diff --git a/backend/src/jobs/index.ts b/backend/src/jobs/index.ts index 13a821331..f93cae881 100644 --- a/backend/src/jobs/index.ts +++ b/backend/src/jobs/index.ts @@ -1,7 +1,7 @@ -import updateLeaderboards from "./update-leaderboards"; -import deleteOldLogs from "./delete-old-logs"; -import logCollectionSizes from "./log-collection-sizes"; -import logQueueSizes from "./log-queue-sizes"; +import updateLeaderboards from "./update-leaderboards.js"; +import deleteOldLogs from "./delete-old-logs.js"; +import logCollectionSizes from "./log-collection-sizes.js"; +import logQueueSizes from "./log-queue-sizes.js"; export default [ updateLeaderboards, diff --git a/backend/src/jobs/log-collection-sizes.ts b/backend/src/jobs/log-collection-sizes.ts index da767ed41..931fcc3c4 100644 --- a/backend/src/jobs/log-collection-sizes.ts +++ b/backend/src/jobs/log-collection-sizes.ts @@ -1,6 +1,6 @@ import { CronJob } from "cron"; -import * as db from "../init/db"; -import * as Prometheus from "../utils/prometheus"; +import * as db from "../init/db.js"; +import * as Prometheus from "../utils/prometheus.js"; const CRON_SCHEDULE = "0 */5 * * * *"; diff --git a/backend/src/jobs/log-queue-sizes.ts b/backend/src/jobs/log-queue-sizes.ts index 56b7e892f..c4d88fdf7 100644 --- a/backend/src/jobs/log-queue-sizes.ts +++ b/backend/src/jobs/log-queue-sizes.ts @@ -1,6 +1,6 @@ import { CronJob } from "cron"; -import Queues from "../queues/index"; -import { setQueueLength } from "../utils/prometheus"; +import Queues from "../queues/index.js"; +import { setQueueLength } from "../utils/prometheus.js"; const CRON_SCHEDULE = "0 */5 * * * *"; diff --git a/backend/src/jobs/update-leaderboards.ts b/backend/src/jobs/update-leaderboards.ts index dbe459c1b..0d81758d6 100644 --- a/backend/src/jobs/update-leaderboards.ts +++ b/backend/src/jobs/update-leaderboards.ts @@ -1,7 +1,7 @@ import { CronJob } from "cron"; -import GeorgeQueue from "../queues/george-queue"; -import * as LeaderboardsDAL from "../dal/leaderboards"; -import { getCachedConfiguration } from "../init/configuration"; +import GeorgeQueue from "../queues/george-queue.js"; +import * as LeaderboardsDAL from "../dal/leaderboards.js"; +import { getCachedConfiguration } from "../init/configuration.js"; const CRON_SCHEDULE = "30 14/15 * * * *"; const RECENT_AGE_MINUTES = 10; diff --git a/backend/src/middlewares/ape-rate-limit.ts b/backend/src/middlewares/ape-rate-limit.ts index 54272558d..59d61ec84 100644 --- a/backend/src/middlewares/ape-rate-limit.ts +++ b/backend/src/middlewares/ape-rate-limit.ts @@ -1,11 +1,11 @@ -import MonkeyError from "../utils/error"; +import MonkeyError from "../utils/error.js"; import { Response, NextFunction, RequestHandler } from "express"; -import statuses from "../constants/monkey-status-codes"; +import statuses from "../constants/monkey-status-codes.js"; import rateLimit, { RateLimitRequestHandler, Options, } from "express-rate-limit"; -import { isDevEnvironment } from "../utils/misc"; +import { isDevEnvironment } from "../utils/misc.js"; const REQUEST_MULTIPLIER = isDevEnvironment() ? 1 : 1; diff --git a/backend/src/middlewares/auth.ts b/backend/src/middlewares/auth.ts index fd99786ab..989f5bde3 100644 --- a/backend/src/middlewares/auth.ts +++ b/backend/src/middlewares/auth.ts @@ -1,16 +1,16 @@ import { compare } from "bcrypt"; -import { getApeKey, updateLastUsedOn } from "../dal/ape-keys"; -import MonkeyError from "../utils/error"; -import { verifyIdToken } from "../utils/auth"; -import { base64UrlDecode, isDevEnvironment } from "../utils/misc"; +import { getApeKey, updateLastUsedOn } from "../dal/ape-keys.js"; +import MonkeyError from "../utils/error.js"; +import { verifyIdToken } from "../utils/auth.js"; +import { base64UrlDecode, isDevEnvironment } from "../utils/misc.js"; import { NextFunction, Response, Handler } from "express"; -import statuses from "../constants/monkey-status-codes"; +import statuses from "../constants/monkey-status-codes.js"; import { incrementAuth, recordAuthTime, recordRequestCountry, // recordRequestForUid, -} from "../utils/prometheus"; +} from "../utils/prometheus.js"; import crypto from "crypto"; import { performance } from "perf_hooks"; diff --git a/backend/src/middlewares/configuration.ts b/backend/src/middlewares/configuration.ts index 19ee0b86f..01093c17f 100644 --- a/backend/src/middlewares/configuration.ts +++ b/backend/src/middlewares/configuration.ts @@ -1,5 +1,5 @@ import { Response, NextFunction, RequestHandler } from "express"; -import MonkeyError from "../utils/error"; +import MonkeyError from "../utils/error.js"; export type ValidationOptions = { criteria: (data: T) => boolean; diff --git a/backend/src/middlewares/context.ts b/backend/src/middlewares/context.ts index b858efae2..e53ed2dfe 100644 --- a/backend/src/middlewares/context.ts +++ b/backend/src/middlewares/context.ts @@ -1,4 +1,4 @@ -import { getCachedConfiguration } from "../init/configuration"; +import { getCachedConfiguration } from "../init/configuration.js"; import { Response, NextFunction } from "express"; async function contextMiddleware( diff --git a/backend/src/middlewares/error.ts b/backend/src/middlewares/error.ts index 043087acf..58d237773 100644 --- a/backend/src/middlewares/error.ts +++ b/backend/src/middlewares/error.ts @@ -1,17 +1,20 @@ -import * as db from "../init/db"; +import * as db from "../init/db.js"; import { v4 as uuidv4 } from "uuid"; -import Logger from "../utils/logger"; -import MonkeyError from "../utils/error"; -import { incrementBadAuth } from "./rate-limit"; +import Logger from "../utils/logger.js"; +import MonkeyError from "../utils/error.js"; +import { incrementBadAuth } from "./rate-limit.js"; import { NextFunction, Response } from "express"; -import { MonkeyResponse, handleMonkeyResponse } from "../utils/monkey-response"; +import { + MonkeyResponse, + handleMonkeyResponse, +} from "../utils/monkey-response.js"; import { recordClientErrorByVersion, recordServerErrorByVersion, -} from "../utils/prometheus"; -import { isDevEnvironment } from "../utils/misc"; +} from "../utils/prometheus.js"; +import { isDevEnvironment } from "../utils/misc.js"; import { ObjectId } from "mongodb"; -import { version } from "../version"; +import { version } from "../version.js"; type DBError = { _id: ObjectId; diff --git a/backend/src/middlewares/permission.ts b/backend/src/middlewares/permission.ts index 2a01a9f74..e4843c74f 100644 --- a/backend/src/middlewares/permission.ts +++ b/backend/src/middlewares/permission.ts @@ -1,9 +1,9 @@ import _ from "lodash"; -import MonkeyError from "../utils/error"; +import MonkeyError from "../utils/error.js"; import { Response, NextFunction, RequestHandler } from "express"; -import { getUser } from "../dal/user"; -import { isAdmin } from "../dal/admin-uids"; -import { ValidationOptions } from "./configuration"; +import { getUser } from "../dal/user.js"; +import { isAdmin } from "../dal/admin-uids.js"; +import { ValidationOptions } from "./configuration.js"; /** * Check if the user is an admin before handling request. diff --git a/backend/src/middlewares/rate-limit.ts b/backend/src/middlewares/rate-limit.ts index b81dd12ef..c9f846835 100644 --- a/backend/src/middlewares/rate-limit.ts +++ b/backend/src/middlewares/rate-limit.ts @@ -1,9 +1,9 @@ import _ from "lodash"; -import MonkeyError from "../utils/error"; +import MonkeyError from "../utils/error.js"; import { Response, NextFunction } from "express"; import { RateLimiterMemory } from "rate-limiter-flexible"; import rateLimit, { Options } from "express-rate-limit"; -import { isDevEnvironment } from "../utils/misc"; +import { isDevEnvironment } from "../utils/misc.js"; const REQUEST_MULTIPLIER = isDevEnvironment() ? 100 : 1; diff --git a/backend/src/middlewares/utility.ts b/backend/src/middlewares/utility.ts index d62bac424..e5fb86553 100644 --- a/backend/src/middlewares/utility.ts +++ b/backend/src/middlewares/utility.ts @@ -1,7 +1,10 @@ import _ from "lodash"; import { Response, NextFunction, RequestHandler } from "express"; -import { handleMonkeyResponse, MonkeyResponse } from "../utils/monkey-response"; -import { isDevEnvironment } from "../utils/misc"; +import { + handleMonkeyResponse, + MonkeyResponse, +} from "../utils/monkey-response.js"; +import { isDevEnvironment } from "../utils/misc.js"; export const emptyMiddleware = ( _req: MonkeyTypes.Request, diff --git a/backend/src/middlewares/validation.ts b/backend/src/middlewares/validation.ts index 106621b29..49fdb817f 100644 --- a/backend/src/middlewares/validation.ts +++ b/backend/src/middlewares/validation.ts @@ -1,6 +1,6 @@ import _ from "lodash"; import joi from "joi"; -import MonkeyError from "../utils/error"; +import MonkeyError from "../utils/error.js"; import { Response, NextFunction, RequestHandler } from "express"; type ValidationSchema = { diff --git a/backend/src/queues/email-queue.ts b/backend/src/queues/email-queue.ts index e9a249cc3..a3bc437f5 100644 --- a/backend/src/queues/email-queue.ts +++ b/backend/src/queues/email-queue.ts @@ -1,4 +1,4 @@ -import { MonkeyQueue } from "./monkey-queue"; +import { MonkeyQueue } from "./monkey-queue.js"; const QUEUE_NAME = "email-tasks"; diff --git a/backend/src/queues/george-queue.ts b/backend/src/queues/george-queue.ts index 7b884f8b2..2dc3553cc 100644 --- a/backend/src/queues/george-queue.ts +++ b/backend/src/queues/george-queue.ts @@ -1,5 +1,5 @@ -import { LbEntryWithRank } from "../utils/daily-leaderboards"; -import { MonkeyQueue } from "./monkey-queue"; +import { LbEntryWithRank } from "../utils/daily-leaderboards.js"; +import { MonkeyQueue } from "./monkey-queue.js"; const QUEUE_NAME = "george-tasks"; diff --git a/backend/src/queues/index.ts b/backend/src/queues/index.ts index 7cd78b61b..af44bf214 100644 --- a/backend/src/queues/index.ts +++ b/backend/src/queues/index.ts @@ -1,5 +1,5 @@ -import LaterQueue from "./later-queue"; -import GeorgeQueue from "./george-queue"; -import EmailQueue from "./email-queue"; +import LaterQueue from "./later-queue.js"; +import GeorgeQueue from "./george-queue.js"; +import EmailQueue from "./email-queue.js"; export default [GeorgeQueue, LaterQueue, EmailQueue]; diff --git a/backend/src/queues/later-queue.ts b/backend/src/queues/later-queue.ts index 496ea1720..46c2e064f 100644 --- a/backend/src/queues/later-queue.ts +++ b/backend/src/queues/later-queue.ts @@ -1,7 +1,10 @@ import LRUCache from "lru-cache"; -import Logger from "../utils/logger"; -import { MonkeyQueue } from "./monkey-queue"; -import { getCurrentDayTimestamp, getCurrentWeekTimestamp } from "../utils/misc"; +import Logger from "../utils/logger.js"; +import { MonkeyQueue } from "./monkey-queue.js"; +import { + getCurrentDayTimestamp, + getCurrentWeekTimestamp, +} from "../utils/misc.js"; const QUEUE_NAME = "later"; diff --git a/backend/src/server.ts b/backend/src/server.ts index acf9eab70..bac0ede6c 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -1,20 +1,20 @@ import "dotenv/config"; -import * as db from "./init/db"; -import jobs from "./jobs"; -import { getLiveConfiguration } from "./init/configuration"; -import app from "./app"; +import * as db from "./init/db.js"; +import jobs from "./jobs/index.js"; +import { getLiveConfiguration } from "./init/configuration.js"; +import app from "./app.js"; import { Server } from "http"; -import { version } from "./version"; -import { recordServerVersion } from "./utils/prometheus"; -import * as RedisClient from "./init/redis"; -import queues from "./queues"; -import workers from "./workers"; -import Logger from "./utils/logger"; -import * as EmailClient from "./init/email-client"; -import { init as initFirebaseAdmin } from "./init/firebase-admin"; +import { version } from "./version.js"; +import { recordServerVersion } from "./utils/prometheus.js"; +import * as RedisClient from "./init/redis.js"; +import queues from "./queues/index.js"; +import workers from "./workers/index.js"; +import Logger from "./utils/logger.js"; +import * as EmailClient from "./init/email-client.js"; +import { init as initFirebaseAdmin } from "./init/firebase-admin.js"; -import { createIndicies as leaderboardDbSetup } from "./dal/leaderboards"; -import { createIndicies as blocklistDbSetup } from "./dal/blocklist"; +import { createIndicies as leaderboardDbSetup } from "./dal/leaderboards.js"; +import { createIndicies as blocklistDbSetup } from "./dal/blocklist.js"; import { monotest } from "@monkeytype/mono-test"; monotest(); diff --git a/backend/src/services/weekly-xp-leaderboard.ts b/backend/src/services/weekly-xp-leaderboard.ts index 82f824f95..288bf82df 100644 --- a/backend/src/services/weekly-xp-leaderboard.ts +++ b/backend/src/services/weekly-xp-leaderboard.ts @@ -1,6 +1,6 @@ -import * as RedisClient from "../init/redis"; -import LaterQueue from "../queues/later-queue"; -import { getCurrentWeekTimestamp } from "../utils/misc"; +import * as RedisClient from "../init/redis.js"; +import LaterQueue from "../queues/later-queue.js"; +import { getCurrentWeekTimestamp } from "../utils/misc.js"; type InternalWeeklyXpLeaderboardEntry = { uid: string; diff --git a/backend/src/utils/auth.ts b/backend/src/utils/auth.ts index 69f014745..4b63ef5c3 100644 --- a/backend/src/utils/auth.ts +++ b/backend/src/utils/auth.ts @@ -1,10 +1,10 @@ -import FirebaseAdmin from "./../init/firebase-admin"; +import FirebaseAdmin from "./../init/firebase-admin.js"; import LRUCache from "lru-cache"; import { recordTokenCacheAccess, setTokenCacheLength, setTokenCacheSize, -} from "./prometheus"; +} from "./prometheus.js"; import { DecodedIdToken, UserRecord } from "firebase-admin/auth"; const tokenCache = new LRUCache({ diff --git a/backend/src/utils/captcha.ts b/backend/src/utils/captcha.ts index 7c95a2f30..3bca41a66 100644 --- a/backend/src/utils/captcha.ts +++ b/backend/src/utils/captcha.ts @@ -1,5 +1,4 @@ -import fetch from "node-fetch"; -import { isDevEnvironment } from "./misc"; +import { isDevEnvironment } from "./misc.js"; type CaptchaData = { success: boolean; diff --git a/backend/src/utils/daily-leaderboards.ts b/backend/src/utils/daily-leaderboards.ts index 25ce3af61..e259a5e89 100644 --- a/backend/src/utils/daily-leaderboards.ts +++ b/backend/src/utils/daily-leaderboards.ts @@ -1,7 +1,7 @@ import _ from "lodash"; -import * as RedisClient from "../init/redis"; -import LaterQueue from "../queues/later-queue"; -import { getCurrentDayTimestamp, matchesAPattern, kogascore } from "./misc"; +import * as RedisClient from "../init/redis.js"; +import LaterQueue from "../queues/later-queue.js"; +import { getCurrentDayTimestamp, matchesAPattern, kogascore } from "./misc.js"; type DailyLeaderboardEntry = { uid: string; diff --git a/backend/src/utils/discord.ts b/backend/src/utils/discord.ts index b3b74381f..1293f4774 100644 --- a/backend/src/utils/discord.ts +++ b/backend/src/utils/discord.ts @@ -1,8 +1,7 @@ -import fetch from "node-fetch"; -import { isDevEnvironment } from "./misc"; -import * as RedisClient from "../init/redis"; +import { isDevEnvironment } from "./misc.js"; +import * as RedisClient from "../init/redis.js"; import { randomBytes } from "crypto"; -import MonkeyError from "./error"; +import MonkeyError from "./error.js"; const BASE_URL = "https://discord.com/api"; diff --git a/backend/src/utils/error.ts b/backend/src/utils/error.ts index 7108e3a81..19b02fa8d 100644 --- a/backend/src/utils/error.ts +++ b/backend/src/utils/error.ts @@ -1,5 +1,5 @@ import { v4 as uuidv4 } from "uuid"; -import { isDevEnvironment } from "./misc"; +import { isDevEnvironment } from "./misc.js"; class MonkeyError extends Error { status: number; diff --git a/backend/src/utils/logger.ts b/backend/src/utils/logger.ts index d2ab557bb..1cf2c74d6 100644 --- a/backend/src/utils/logger.ts +++ b/backend/src/utils/logger.ts @@ -1,4 +1,4 @@ -import * as db from "../init/db"; +import * as db from "../init/db.js"; import chalk from "chalk"; import { format, createLogger, transports, Logger } from "winston"; import { resolve } from "path"; @@ -9,7 +9,7 @@ const warningColor = chalk.yellow.bold; const successColor = chalk.green.bold; const infoColor = chalk.white; -const logFolderPath = process.env["LOG_FOLDER_PATH"] ?? "./logs"; +const logFolderPath = process.env["LOG_FOLDER_PATH"] ?? "./logs.js"; const maxLogSize = parseInt(process.env["LOG_FILE_MAX_SIZE"] ?? "10485760"); type Log = { diff --git a/backend/src/utils/monkey-response.ts b/backend/src/utils/monkey-response.ts index ac7e781ee..9a7520f80 100644 --- a/backend/src/utils/monkey-response.ts +++ b/backend/src/utils/monkey-response.ts @@ -1,5 +1,5 @@ import { Response } from "express"; -import { isCustomCode } from "../constants/monkey-status-codes"; +import { isCustomCode } from "../constants/monkey-status-codes.js"; //TODO FIX ANYS diff --git a/backend/src/utils/pb.ts b/backend/src/utils/pb.ts index bacad5d16..bd20329d0 100644 --- a/backend/src/utils/pb.ts +++ b/backend/src/utils/pb.ts @@ -1,5 +1,5 @@ import _ from "lodash"; -import FunboxList from "../constants/funbox-list"; +import FunboxList from "../constants/funbox-list.js"; type CheckAndUpdatePbResult = { isPb: boolean; diff --git a/backend/src/utils/validation.ts b/backend/src/utils/validation.ts index fe44aec73..ff8b4578b 100644 --- a/backend/src/utils/validation.ts +++ b/backend/src/utils/validation.ts @@ -1,8 +1,8 @@ import _ from "lodash"; -import { replaceHomoglyphs } from "../constants/homoglyphs"; -import { profanities } from "../constants/profanities"; -import { intersect, sanitizeString } from "./misc"; -import { default as FunboxList } from "../constants/funbox-list"; +import { replaceHomoglyphs } from "../constants/homoglyphs.js"; +import { profanities } from "../constants/profanities.js"; +import { intersect, sanitizeString } from "./misc.js"; +import { default as FunboxList } from "../constants/funbox-list.js"; export function inRange(value: number, min: number, max: number): boolean { return value >= min && value <= max; diff --git a/backend/src/version.ts b/backend/src/version.ts index 1dd8a0ecb..946c05448 100644 --- a/backend/src/version.ts +++ b/backend/src/version.ts @@ -1,5 +1,5 @@ import { join } from "path"; -import { isDevEnvironment, padNumbers } from "./utils/misc"; +import { isDevEnvironment, padNumbers } from "./utils/misc.js"; import { readFileSync, writeFileSync, existsSync } from "fs"; const SERVER_VERSION_FILE_PATH = join(__dirname, "./server.version"); diff --git a/backend/src/workers/email-worker.ts b/backend/src/workers/email-worker.ts index 842432436..cb7778ef5 100644 --- a/backend/src/workers/email-worker.ts +++ b/backend/src/workers/email-worker.ts @@ -1,13 +1,13 @@ import _ from "lodash"; import IORedis from "ioredis"; import { Worker, Job, ConnectionOptions } from "bullmq"; -import Logger from "../utils/logger"; +import Logger from "../utils/logger.js"; import EmailQueue, { EmailTaskContexts, EmailType, -} from "../queues/email-queue"; -import { sendEmail } from "../init/email-client"; -import { recordTimeToCompleteJob } from "../utils/prometheus"; +} from "../queues/email-queue.js"; +import { sendEmail } from "../init/email-client.js"; +import { recordTimeToCompleteJob } from "../utils/prometheus.js"; async function jobHandler(job: Job): Promise { const type: EmailType = job.data.type; diff --git a/backend/src/workers/index.ts b/backend/src/workers/index.ts index ae49644ad..9ae2677a4 100644 --- a/backend/src/workers/index.ts +++ b/backend/src/workers/index.ts @@ -1,4 +1,4 @@ -import LaterWorker from "./later-worker"; -import EmailWorker from "./email-worker"; +import LaterWorker from "./later-worker.js"; +import EmailWorker from "./email-worker.js"; export default [LaterWorker, EmailWorker]; diff --git a/backend/src/workers/later-worker.ts b/backend/src/workers/later-worker.ts index 456bc7b4e..23873f6ba 100644 --- a/backend/src/workers/later-worker.ts +++ b/backend/src/workers/later-worker.ts @@ -1,19 +1,23 @@ import _ from "lodash"; import IORedis from "ioredis"; import { Worker, Job, ConnectionOptions } from "bullmq"; -import Logger from "../utils/logger"; -import { addToInboxBulk } from "../dal/user"; -import GeorgeQueue from "../queues/george-queue"; -import { buildMonkeyMail } from "../utils/monkey-mail"; -import { DailyLeaderboard } from "../utils/daily-leaderboards"; -import { getCachedConfiguration } from "../init/configuration"; -import { formatSeconds, getOrdinalNumberString, mapRange } from "../utils/misc"; +import Logger from "../utils/logger.js"; +import { addToInboxBulk } from "../dal/user.js"; +import GeorgeQueue from "../queues/george-queue.js"; +import { buildMonkeyMail } from "../utils/monkey-mail.js"; +import { DailyLeaderboard } from "../utils/daily-leaderboards.js"; +import { getCachedConfiguration } from "../init/configuration.js"; +import { + formatSeconds, + getOrdinalNumberString, + mapRange, +} from "../utils/misc.js"; import LaterQueue, { LaterTask, LaterTaskContexts, LaterTaskType, -} from "../queues/later-queue"; -import { recordTimeToCompleteJob } from "../utils/prometheus"; +} from "../queues/later-queue.js"; +import { recordTimeToCompleteJob } from "../utils/prometheus.js"; import { WeeklyXpLeaderboard } from "../services/weekly-xp-leaderboard.js"; async function handleDailyLeaderboardResults(