diff --git a/Server/configs/db.js b/Server/configs/db.js index 9dd768da3..153962e36 100644 --- a/Server/configs/db.js +++ b/Server/configs/db.js @@ -12,4 +12,4 @@ const connectDbAndRunServer = async (app, db) => { } }; -module.exports = { connectDbAndRunServer }; +export { connectDbAndRunServer }; diff --git a/Server/controllers/authController.js b/Server/controllers/authController.js index 136a05a7a..70f72cff6 100644 --- a/Server/controllers/authController.js +++ b/Server/controllers/authController.js @@ -1,4 +1,4 @@ -const { +import { registrationBodyValidation, loginValidation, editUserParamValidation, @@ -6,15 +6,16 @@ const { recoveryValidation, recoveryTokenValidation, newPasswordValidation, -} = require("../validation/joi"); -const logger = require("../utils/logger"); -require("dotenv").config(); -const { errorMessages, successMessages } = require("../utils/messages"); -const jwt = require("jsonwebtoken"); -const SERVICE_NAME = "AuthController"; -const { getTokenFromHeaders } = require("../utils/utils"); -const crypto = require("crypto"); -const { handleValidationError, handleError } = require("./controllerUtils"); +} from "../validation/joi.js"; +import logger from "../utils/logger.js"; +import dotenv from "dotenv"; +import { errorMessages, successMessages } from "../utils/messages.js"; +import jwt from "jsonwebtoken"; +import { getTokenFromHeaders } from "../utils/utils.js"; +import crypto from "crypto"; +import { handleValidationError, handleError } from "./controllerUtils.js"; + +dotenv.config(); /** * Creates and returns JWT token with an arbitrary payload @@ -238,7 +239,7 @@ const editUser = async (req, res, next) => { * @returns {Object} The response object with a success status, a message indicating the existence of a superadmin, and a boolean indicating the existence of a superadmin. * @throws {Error} If there is an error during the process. */ -const checkSuperAdminExists = async (req, res, next) => { +const checkSuperadminExists = async (req, res, next) => { try { const superAdminExists = await req.db.checkSuperadmin(req, res); return res.status(200).json({ @@ -440,12 +441,12 @@ const getAllUsers = async (req, res) => { } }; -module.exports = { +export { issueToken, registerUser, loginUser, editUser, - checkSuperadminExists: checkSuperAdminExists, + checkSuperadminExists, requestRecovery, validateRecovery, resetPassword, diff --git a/Server/controllers/checkController.js b/Server/controllers/checkController.js index b0e98ed38..cdeaf3581 100644 --- a/Server/controllers/checkController.js +++ b/Server/controllers/checkController.js @@ -1,4 +1,4 @@ -const { +import { createCheckParamValidation, createCheckBodyValidation, getChecksParamValidation, @@ -8,12 +8,13 @@ const { deleteChecksParamValidation, deleteChecksByTeamIdParamValidation, updateChecksTTLBodyValidation, -} = require("../validation/joi"); -const { successMessages } = require("../utils/messages"); -const jwt = require("jsonwebtoken"); -const { getTokenFromHeaders } = require("../utils/utils"); +} from "../validation/joi.js"; +import { successMessages } from "../utils/messages.js"; +import jwt from "jsonwebtoken"; +import { getTokenFromHeaders } from "../utils/utils.js"; +import { handleValidationError, handleError } from "./controllerUtils.js"; + const SERVICE_NAME = "checkController"; -const { handleValidationError, handleError } = require("./controllerUtils"); const createCheck = async (req, res, next) => { try { @@ -143,7 +144,7 @@ const updateChecksTTL = async (req, res, next) => { } }; -module.exports = { +export default { createCheck, getChecks, getTeamChecks, diff --git a/Server/controllers/controllerUtils.js b/Server/controllers/controllerUtils.js index 3238cd2a1..d59314913 100644 --- a/Server/controllers/controllerUtils.js +++ b/Server/controllers/controllerUtils.js @@ -13,7 +13,4 @@ const handleError = (error, serviceName, method, status = 500) => { return error; }; -module.exports = { - handleValidationError, - handleError, -}; +export { handleValidationError, handleError }; diff --git a/Server/controllers/inviteController.js b/Server/controllers/inviteController.js index b22f9b2cc..162861e89 100644 --- a/Server/controllers/inviteController.js +++ b/Server/controllers/inviteController.js @@ -1,14 +1,17 @@ -const { +import { inviteRoleValidation, inviteBodyValidation, inviteVerificationBodyValidation, -} = require("../validation/joi"); -const logger = require("../utils/logger"); -require("dotenv").config(); -const jwt = require("jsonwebtoken"); -const { handleError, handleValidationError } = require("./controllerUtils"); +} from "../validation/joi.js"; +import logger from "../utils/logger.js"; +import dotenv from "dotenv"; +import jwt from "jsonwebtoken"; +import { handleError, handleValidationError } from "./controllerUtils.js"; +import { getTokenFromHeaders } from "../utils/utils.js"; + +dotenv.config(); + const SERVICE_NAME = "inviteController"; -const { getTokenFromHeaders } = require("../utils/utils"); /** * Issues an invitation to a new user. Only admins can invite new users. An invitation token is created and sent via email. @@ -82,7 +85,4 @@ const inviteVerifyController = async (req, res, next) => { } }; -module.exports = { - issueInvitation, - inviteVerifyController, -}; +export { issueInvitation, inviteVerifyController }; diff --git a/Server/controllers/maintenanceWindowController.js b/Server/controllers/maintenanceWindowController.js index 933da41ea..0891c47a3 100644 --- a/Server/controllers/maintenanceWindowController.js +++ b/Server/controllers/maintenanceWindowController.js @@ -1,4 +1,4 @@ -const { +import { createMaintenanceWindowBodyValidation, editMaintenanceWindowByIdParamValidation, editMaintenanceByIdWindowBodyValidation, @@ -6,11 +6,12 @@ const { getMaintenanceWindowsByMonitorIdParamValidation, getMaintenanceWindowsByTeamIdQueryValidation, deleteMaintenanceWindowByIdParamValidation, -} = require("../validation/joi"); -const jwt = require("jsonwebtoken"); -const { getTokenFromHeaders } = require("../utils/utils"); -const { successMessages } = require("../utils/messages"); -const { handleValidationError, handleError } = require("./controllerUtils"); +} from "../validation/joi.js"; +import jwt from "jsonwebtoken"; +import { getTokenFromHeaders } from "../utils/utils.js"; +import { successMessages } from "../utils/messages.js"; +import { handleValidationError, handleError } from "./controllerUtils.js"; + const SERVICE_NAME = "maintenanceWindowController"; const createMaintenanceWindows = async (req, res, next) => { @@ -160,7 +161,7 @@ const editMaintenanceWindow = async (req, res, next) => { } }; -module.exports = { +export default { createMaintenanceWindows, getMaintenanceWindowById, getMaintenanceWindowsByTeamId, diff --git a/Server/controllers/monitorController.js b/Server/controllers/monitorController.js index 9ef90fa4b..e14c790f6 100644 --- a/Server/controllers/monitorController.js +++ b/Server/controllers/monitorController.js @@ -1,4 +1,4 @@ -const { +import { getMonitorByIdParamValidation, getMonitorByIdQueryValidation, getMonitorsByTeamIdValidation, @@ -11,15 +11,15 @@ const { getMonitorStatsByIdParamValidation, getMonitorStatsByIdQueryValidation, getCertificateParamValidation, -} = require("../validation/joi"); +} from "../validation/joi.js"; -const sslChecker = require("ssl-checker"); +import sslChecker from "ssl-checker"; const SERVICE_NAME = "monitorController"; -const { errorMessages, successMessages } = require("../utils/messages"); -const jwt = require("jsonwebtoken"); -const { getTokenFromHeaders } = require("../utils/utils"); -const logger = require("../utils/logger"); -const { handleError, handleValidationError } = require("./controllerUtils"); +import { errorMessages, successMessages } from "../utils/messages.js"; +import jwt from "jsonwebtoken"; +import { getTokenFromHeaders } from "../utils/utils.js"; +import logger from "../utils/logger.js"; +import { handleError, handleValidationError } from "./controllerUtils.js"; /** * Returns all monitors @@ -477,7 +477,7 @@ const addDemoMonitors = async (req, res, next) => { } }; -module.exports = { +export default { getAllMonitors, getMonitorStatsById, getMonitorCertificate, diff --git a/Server/controllers/queueController.js b/Server/controllers/queueController.js index 3151816be..a248d543a 100644 --- a/Server/controllers/queueController.js +++ b/Server/controllers/queueController.js @@ -1,5 +1,6 @@ -const { handleError } = require("./controllerUtils"); -const { errorMessages, successMessages } = require("../utils/messages"); +import { handleError } from "./controllerUtils.js"; +import { errorMessages, successMessages } from "../utils/messages.js"; + const SERVICE_NAME = "JobQueueController"; const getMetrics = async (req, res, next) => { @@ -55,7 +56,7 @@ const obliterateQueue = async (req, res, next) => { } }; -module.exports = { +export default { getMetrics, getJobs, addJob, diff --git a/Server/controllers/settingsController.js b/Server/controllers/settingsController.js index 3e4e3c304..b9ea25874 100644 --- a/Server/controllers/settingsController.js +++ b/Server/controllers/settingsController.js @@ -1,7 +1,7 @@ -const { successMessages } = require("../utils/messages"); +import { successMessages } from "../utils/messages.js"; +import { updateAppSettingsBodyValidation } from "../validation/joi.js"; +import { handleValidationError, handleError } from "./controllerUtils.js"; const SERVICE_NAME = "SettingsController"; -const { updateAppSettingsBodyValidation } = require("../validation/joi"); -const { handleValidationError, handleError } = require("./controllerUtils"); const getAppSettings = async (req, res, next) => { try { @@ -39,7 +39,7 @@ const updateAppSettings = async (req, res, next) => { } }; -module.exports = { +export default { getAppSettings, updateAppSettings, }; diff --git a/Server/db/models/AppSettings.js b/Server/db/models/AppSettings.js index f95d58f4b..399c0331d 100644 --- a/Server/db/models/AppSettings.js +++ b/Server/db/models/AppSettings.js @@ -1,4 +1,4 @@ -const mongoose = require("mongoose"); +import mongoose from "mongoose"; const AppSettingsSchema = mongoose.Schema( { @@ -78,4 +78,4 @@ const AppSettingsSchema = mongoose.Schema( } ); -module.exports = mongoose.model("AppSettings", AppSettingsSchema); +export default mongoose.model("AppSettings", AppSettingsSchema); diff --git a/Server/db/models/Check.js b/Server/db/models/Check.js index 7705ba3fd..e560f8530 100644 --- a/Server/db/models/Check.js +++ b/Server/db/models/Check.js @@ -1,6 +1,6 @@ -const mongoose = require("mongoose"); -const EmailService = require("../../service/emailService"); -const Notification = require("./Notification"); +import mongoose from "mongoose"; +import EmailService from "../../service/emailService.js"; +import Notification from "./Notification.js"; /** * Check Schema for MongoDB collection. @@ -73,5 +73,4 @@ const CheckSchema = mongoose.Schema( ); CheckSchema.index({ createdAt: 1 }); - -module.exports = mongoose.model("Check", CheckSchema); +export default mongoose.model("Check", CheckSchema); diff --git a/Server/db/models/InviteToken.js b/Server/db/models/InviteToken.js index 5fbd4fc73..5e12d8e5d 100644 --- a/Server/db/models/InviteToken.js +++ b/Server/db/models/InviteToken.js @@ -1,5 +1,4 @@ -const mongoose = require("mongoose"); - +import mongoose from "mongoose"; const InviteTokenSchema = mongoose.Schema( { email: { @@ -32,4 +31,4 @@ const InviteTokenSchema = mongoose.Schema( } ); -module.exports = mongoose.model("InviteToken", InviteTokenSchema); +export default mongoose.model("InviteToken", InviteTokenSchema); diff --git a/Server/db/models/MaintenanceWindow.js b/Server/db/models/MaintenanceWindow.js index 3727d3b40..95664bdcd 100644 --- a/Server/db/models/MaintenanceWindow.js +++ b/Server/db/models/MaintenanceWindow.js @@ -1,5 +1,4 @@ -const mongoose = require("mongoose"); - +import mongoose from "mongoose"; /** * MaintenanceWindow Schema * @module MaintenanceWindow @@ -66,4 +65,4 @@ const MaintenanceWindow = mongoose.Schema( } ); -module.exports = mongoose.model("MaintenanceWindow", MaintenanceWindow); +export default mongoose.model("MaintenanceWindow", MaintenanceWindow); diff --git a/Server/db/models/Monitor.js b/Server/db/models/Monitor.js index d91275e23..2184484aa 100644 --- a/Server/db/models/Monitor.js +++ b/Server/db/models/Monitor.js @@ -1,5 +1,5 @@ -const mongoose = require("mongoose"); -const Notification = require("./Notification"); +import mongoose from "mongoose"; +import Notification from "./Notification.js"; const MonitorSchema = mongoose.Schema( { @@ -60,4 +60,4 @@ const MonitorSchema = mongoose.Schema( } ); -module.exports = mongoose.model("Monitor", MonitorSchema); +export default mongoose.model("Monitor", MonitorSchema); diff --git a/Server/db/models/Notification.js b/Server/db/models/Notification.js index 6e4683ae2..79217f6fe 100644 --- a/Server/db/models/Notification.js +++ b/Server/db/models/Notification.js @@ -1,5 +1,4 @@ -const mongoose = require("mongoose"); - +import mongoose from "mongoose"; const NotificationSchema = mongoose.Schema( { monitorId: { @@ -22,5 +21,4 @@ const NotificationSchema = mongoose.Schema( timestamps: true, } ); - -module.exports = mongoose.model("Notification", NotificationSchema); +export default mongoose.model("Notification", NotificationSchema); diff --git a/Server/db/models/PageSpeedCheck.js b/Server/db/models/PageSpeedCheck.js index 3ae0bada9..c3afd5231 100644 --- a/Server/db/models/PageSpeedCheck.js +++ b/Server/db/models/PageSpeedCheck.js @@ -1,5 +1,4 @@ -const mongoose = require("mongoose"); - +import mongoose from "mongoose"; const AuditSchema = mongoose.Schema({ id: { type: String, required: true }, title: { type: String, required: true }, @@ -109,4 +108,4 @@ PageSpeedCheck.pre("save", async function (next) { } }); -module.exports = mongoose.model("PageSpeedCheck", PageSpeedCheck); +export default mongoose.model("PageSpeedCheck", PageSpeedCheck); diff --git a/Server/db/models/RecoveryToken.js b/Server/db/models/RecoveryToken.js index 2b67a89e1..ed7eee3b1 100644 --- a/Server/db/models/RecoveryToken.js +++ b/Server/db/models/RecoveryToken.js @@ -1,4 +1,4 @@ -const mongoose = require("mongoose"); +import mongoose from "mongoose"; const RecoveryTokenSchema = mongoose.Schema( { @@ -22,4 +22,4 @@ const RecoveryTokenSchema = mongoose.Schema( } ); -module.exports = mongoose.model("RecoveryToken", RecoveryTokenSchema); +export default mongoose.model("RecoveryToken", RecoveryTokenSchema); diff --git a/Server/db/models/Team.js b/Server/db/models/Team.js index 25e1f9b22..c125df329 100644 --- a/Server/db/models/Team.js +++ b/Server/db/models/Team.js @@ -1,5 +1,4 @@ -const mongoose = require("mongoose"); - +import mongoose from "mongoose"; const TeamSchema = mongoose.Schema( { email: { @@ -12,5 +11,4 @@ const TeamSchema = mongoose.Schema( timestamps: true, } ); - -module.exports = mongoose.model("Team", TeamSchema); +export default mongoose.model("Team", TeamSchema); diff --git a/Server/db/models/User.js b/Server/db/models/User.js index e56840c48..dfdb6397d 100644 --- a/Server/db/models/User.js +++ b/Server/db/models/User.js @@ -1,5 +1,5 @@ -const mongoose = require("mongoose"); -const bcrypt = require("bcrypt"); +import mongoose from "mongoose"; +import bcrypt from "bcrypt"; const UserSchema = mongoose.Schema( { @@ -84,4 +84,4 @@ User.init().then(() => { console.log("User model initialized"); }); -module.exports = mongoose.model("User", UserSchema); +export default mongoose.model("User", UserSchema); diff --git a/Server/db/mongo/MongoDB.js b/Server/db/mongo/MongoDB.js index 21d3b8c46..ad9ea2a2a 100644 --- a/Server/db/mongo/MongoDB.js +++ b/Server/db/mongo/MongoDB.js @@ -1,6 +1,6 @@ -const mongoose = require("mongoose"); -const UserModel = require("../models/User"); -const AppSettings = require("../models/AppSettings"); +import mongoose from "mongoose"; +import UserModel from "../models/User.js"; +import AppSettings from "../models/AppSettings.js"; //**************************************** // DB Connection @@ -41,7 +41,7 @@ const checkSuperadmin = async (req, res) => { // User Operations //**************************************** -const { +import { insertUser, getUserByEmail, updateUser, @@ -50,32 +50,32 @@ const { deleteAllOtherUsers, getAllUsers, logoutUser, -} = require("./modules/userModule"); +} from "./modules/userModule.js"; //**************************************** // Invite Token Operations //**************************************** -const { +import { requestInviteToken, getInviteToken, getInviteTokenAndDelete, -} = require("./modules/inviteModule"); +} from "./modules/inviteModule.js"; //**************************************** // Recovery Operations //**************************************** -const { +import { requestRecoveryToken, validateRecoveryToken, resetPassword, -} = require("./modules/recoveryModule"); +} from "./modules/recoveryModule.js"; //**************************************** // Monitors //**************************************** -const { +import { getAllMonitors, getMonitorStatsById, getMonitorById, @@ -87,23 +87,23 @@ const { deleteMonitorsByUserId, editMonitor, addDemoMonitors, -} = require("./modules/monitorModule"); +} from "./modules/monitorModule.js"; //**************************************** // Page Speed Checks //**************************************** -const { +import { createPageSpeedCheck, getPageSpeedChecks, deletePageSpeedChecksByMonitorId, -} = require("./modules/pageSpeedCheckModule"); +} from "./modules/pageSpeedCheckModule.js"; //**************************************** // Checks //**************************************** -const { +import { createCheck, getChecksCount, getChecks, @@ -111,12 +111,12 @@ const { deleteChecks, deleteChecksByTeamId, updateChecksTTL, -} = require("./modules/checkModule"); +} from "./modules/checkModule.js"; //**************************************** // Maintenance Window //**************************************** -const { +import { createMaintenanceWindow, getMaintenanceWindowById, getMaintenanceWindowsByTeamId, @@ -125,26 +125,23 @@ const { deleteMaintenanceWindowByMonitorId, deleteMaintenanceWindowByUserId, editMaintenanceWindowById, -} = require("./modules/maintenanceWindowModule"); +} from "./modules/maintenanceWindowModule.js"; //**************************************** // Notifications //**************************************** -const { +import { createNotification, getNotificationsByMonitorId, deleteNotificationsByMonitorId, -} = require("./modules/notificationModule"); +} from "./modules/notificationModule.js"; //**************************************** // AppSettings //**************************************** -const { - getAppSettings, - updateAppSettings, -} = require("./modules/settingsModule"); +import { getAppSettings, updateAppSettings } from "./modules/settingsModule.js"; -module.exports = { +export default { connect, insertUser, getUserByEmail, diff --git a/Server/db/mongo/modules/checkModule.js b/Server/db/mongo/modules/checkModule.js index 193d793c6..ae1d5df4d 100644 --- a/Server/db/mongo/modules/checkModule.js +++ b/Server/db/mongo/modules/checkModule.js @@ -1,7 +1,7 @@ -const Check = require("../../models/Check"); -const Monitor = require("../../models/Monitor"); -const User = require("../../models/User"); -const logger = require("../../../utils/logger"); +import Check from "../../models/Check.js"; +import Monitor from "../../models/Monitor.js"; +import User from "../../models/User.js"; +import logger from "../../../utils/logger.js"; const SERVICE_NAME = "checkModule"; const dateRangeLookup = { day: new Date(new Date().setDate(new Date().getDate() - 1)), @@ -274,7 +274,7 @@ const updateChecksTTL = async (teamId, ttl) => { } }; -module.exports = { +export { createCheck, getChecksCount, getChecks, diff --git a/Server/db/mongo/modules/inviteModule.js b/Server/db/mongo/modules/inviteModule.js index 8152941d7..c2a8eecc4 100644 --- a/Server/db/mongo/modules/inviteModule.js +++ b/Server/db/mongo/modules/inviteModule.js @@ -1,8 +1,8 @@ -const InviteToken = require("../../models/InviteToken"); -const crypto = require("crypto"); -const { errorMessages } = require("../../../utils/messages"); -const SERVICE_NAME = "inviteModule"; +import InviteToken from "../../models/InviteToken.js"; +import crypto from "crypto"; +import { errorMessages } from "../../../utils/messages.js"; +const SERVICE_NAME = "inviteModule"; /** * Request an invite token for a user. * @@ -83,8 +83,4 @@ const getInviteTokenAndDelete = async (token) => { } }; -module.exports = { - requestInviteToken, - getInviteToken, - getInviteTokenAndDelete, -}; +export { requestInviteToken, getInviteToken, getInviteTokenAndDelete }; diff --git a/Server/db/mongo/modules/maintenanceWindowModule.js b/Server/db/mongo/modules/maintenanceWindowModule.js index 5eb3e1ea7..173af5467 100644 --- a/Server/db/mongo/modules/maintenanceWindowModule.js +++ b/Server/db/mongo/modules/maintenanceWindowModule.js @@ -1,4 +1,4 @@ -const MaintenanceWindow = require("../../models/MaintenanceWindow"); +import MaintenanceWindow from "../../models/MaintenanceWindow.js"; const SERVICE_NAME = "maintenanceWindowModule"; /** @@ -220,7 +220,7 @@ const editMaintenanceWindowById = async ( } }; -module.exports = { +export { createMaintenanceWindow, getMaintenanceWindowById, getMaintenanceWindowsByTeamId, diff --git a/Server/db/mongo/modules/monitorModule.js b/Server/db/mongo/modules/monitorModule.js index bac2e146b..847d07841 100644 --- a/Server/db/mongo/modules/monitorModule.js +++ b/Server/db/mongo/modules/monitorModule.js @@ -1,10 +1,22 @@ -const Monitor = require("../../models/Monitor"); -const Check = require("../../models/Check"); -const PageSpeedCheck = require("../../models/PageSpeedCheck"); -const { errorMessages } = require("../../../utils/messages"); -const Notification = require("../../models/Notification"); -const { NormalizeData } = require("../../../utils/dataUtils"); -const demoMonitors = require("../../../utils/demoMonitors.json"); +import Monitor from "../../models/Monitor.js"; +import Check from "../../models/Check.js"; +import PageSpeedCheck from "../../models/PageSpeedCheck.js"; +import { errorMessages } from "../../../utils/messages.js"; +import Notification from "../../models/Notification.js"; +import { NormalizeData } from "../../../utils/dataUtils.js"; +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const demoMonitorsPath = path.resolve( + __dirname, + "../../../utils/demoMonitors.json" +); +const demoMonitors = JSON.parse(fs.readFileSync(demoMonitorsPath, "utf8")); + const SERVICE_NAME = "monitorModule"; /** @@ -572,7 +584,7 @@ const addDemoMonitors = async (userId, teamId) => { } }; -module.exports = { +export { getAllMonitors, getMonitorStatsById, getMonitorById, diff --git a/Server/db/mongo/modules/notificationModule.js b/Server/db/mongo/modules/notificationModule.js index ecc52644d..ec690b5d2 100644 --- a/Server/db/mongo/modules/notificationModule.js +++ b/Server/db/mongo/modules/notificationModule.js @@ -1,4 +1,4 @@ -const Notification = require("../../models/Notification"); +import Notification from "../../models/Notification.js"; const SERVICE_NAME = "notificationModule"; /** * Creates a new notification. @@ -49,7 +49,7 @@ const deleteNotificationsByMonitorId = async (monitorId) => { } }; -module.exports = { +export { createNotification, getNotificationsByMonitorId, deleteNotificationsByMonitorId, diff --git a/Server/db/mongo/modules/pageSpeedCheckModule.js b/Server/db/mongo/modules/pageSpeedCheckModule.js index a0c7694c8..be3dda2d9 100644 --- a/Server/db/mongo/modules/pageSpeedCheckModule.js +++ b/Server/db/mongo/modules/pageSpeedCheckModule.js @@ -1,4 +1,4 @@ -const PageSpeedCheck = require("../../models/PageSpeedCheck"); +import PageSpeedCheck from "../../models/PageSpeedCheck.js"; const SERVICE_NAME = "pageSpeedCheckModule"; /** * Create a PageSpeed check for a monitor @@ -63,7 +63,7 @@ const deletePageSpeedChecksByMonitorId = async (monitorId) => { } }; -module.exports = { +export { createPageSpeedCheck, getPageSpeedChecks, deletePageSpeedChecksByMonitorId, diff --git a/Server/db/mongo/modules/recoveryModule.js b/Server/db/mongo/modules/recoveryModule.js index 4649fa084..e9faa5a3c 100644 --- a/Server/db/mongo/modules/recoveryModule.js +++ b/Server/db/mongo/modules/recoveryModule.js @@ -1,7 +1,8 @@ -const UserModel = require("../../models/User"); -const RecoveryToken = require("../../models/RecoveryToken"); -const crypto = require("crypto"); -const { errorMessages } = require("../../../utils/messages"); +import UserModel from "../../models/User.js"; +import RecoveryToken from "../../models/RecoveryToken.js"; +import crypto from "crypto"; +import { errorMessages } from "../../../utils/messages.js"; + const SERVICE_NAME = "recoveryModule"; /** @@ -81,8 +82,4 @@ const resetPassword = async (req, res) => { } }; -module.exports = { - requestRecoveryToken, - validateRecoveryToken, - resetPassword, -}; +export { requestRecoveryToken, validateRecoveryToken, resetPassword }; diff --git a/Server/db/mongo/modules/settingsModule.js b/Server/db/mongo/modules/settingsModule.js index f7cfc9ce1..70dc16175 100644 --- a/Server/db/mongo/modules/settingsModule.js +++ b/Server/db/mongo/modules/settingsModule.js @@ -1,4 +1,4 @@ -const AppSettings = require("../../models/AppSettings"); +import AppSettings from "../../models/AppSettings.js"; const SERVICE_NAME = "SettingsModule"; const getAppSettings = async () => { @@ -27,7 +27,4 @@ const updateAppSettings = async (newSettings) => { } }; -module.exports = { - getAppSettings, - updateAppSettings, -}; +export { getAppSettings, updateAppSettings }; diff --git a/Server/db/mongo/modules/userModule.js b/Server/db/mongo/modules/userModule.js index c72bd7c5d..689aceb30 100644 --- a/Server/db/mongo/modules/userModule.js +++ b/Server/db/mongo/modules/userModule.js @@ -1,11 +1,11 @@ -const UserModel = require("../../models/User"); -const TeamModel = require("../../models/Team"); -const { errorMessages } = require("../../../utils/messages"); -const { GenerateAvatarImage } = require("../../../utils/imageProcessing"); +import UserModel from "../../models/User.js"; +import TeamModel from "../../models/Team.js"; +import { errorMessages } from "../../../utils/messages.js"; +import { GenerateAvatarImage } from "../../../utils/imageProcessing.js"; const DUPLICATE_KEY_CODE = 11000; // MongoDB error code for duplicate key -const { ParseBoolean } = require("../../../utils/utils"); -SERVICE_NAME = "userModule"; +import { ParseBoolean } from "../../../utils/utils.js"; +const SERVICE_NAME = "userModule"; /** * Insert a User @@ -208,7 +208,7 @@ const logoutUser = async (userId) => { } }; -module.exports = { +export { insertUser, getUserByEmail, updateUser, diff --git a/Server/index.js b/Server/index.js index b717482cd..7035f0c91 100644 --- a/Server/index.js +++ b/Server/index.js @@ -1,30 +1,35 @@ -const path = require("path"); -const fs = require("fs"); -const swaggerUi = require("swagger-ui-express"); +import path from "path"; +import fs from "fs"; +import swaggerUi from "swagger-ui-express"; -const express = require("express"); -const helmet = require("helmet"); -const cors = require("cors"); -const logger = require("./utils/logger"); -const { verifyJWT } = require("./middleware/verifyJWT"); -const { handleErrors } = require("./middleware/handleErrors"); -const { errorMessages } = require("./utils/messages"); -const authRouter = require("./routes/authRoute"); -const inviteRouter = require("./routes/inviteRoute"); -const monitorRouter = require("./routes/monitorRoute"); -const checkRouter = require("./routes/checkRoute"); -const maintenanceWindowRouter = require("./routes/maintenanceWindowRoute"); -const settingsRouter = require("./routes/settingsRoute"); +import express from "express"; +import helmet from "helmet"; +import cors from "cors"; +import logger from "./utils/logger.js"; +import { verifyJWT } from "./middleware/verifyJWT.js"; +import { handleErrors } from "./middleware/handleErrors.js"; +import { errorMessages } from "./utils/messages.js"; +import authRouter from "./routes/authRoute.js"; +import inviteRouter from "./routes/inviteRoute.js"; +import monitorRouter from "./routes/monitorRoute.js"; +import checkRouter from "./routes/checkRoute.js"; +import maintenanceWindowRouter from "./routes/maintenanceWindowRoute.js"; +import settingsRouter from "./routes/settingsRoute.js"; +import { fileURLToPath } from "url"; -const { connectDbAndRunServer } = require("./configs/db"); -const queueRouter = require("./routes/queueRoute"); -const JobQueue = require("./service/jobQueue"); -const NetworkService = require("./service/networkService"); -const EmailService = require("./service/emailService"); -const SettingsService = require("./service/settingsService"); +import { connectDbAndRunServer } from "./configs/db.js"; +import queueRouter from "./routes/queueRoute.js"; +import JobQueue from "./service/jobQueue.js"; +import NetworkService from "./service/networkService.js"; +import EmailService from "./service/emailService.js"; +import SettingsService from "./service/settingsService.js"; +import db from "./db/mongo/MongoDB.js"; const SERVICE_NAME = "Server"; let cleaningUp = false; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + const openApiSpec = JSON.parse( fs.readFileSync(path.join(__dirname, "openapi.json"), "utf8") ); @@ -42,16 +47,16 @@ const startApp = async () => { // const db = require("./db/MongoDB"); // // ************************** - const DB_TYPE = { - MongoDB: () => require("./db/mongo/MongoDB"), - FakedDB: () => require("./db/FakeDb"), - }; + // const DB_TYPE = { + // MongoDB: async () => (await import("./db/mongo/MongoDB.js")).default, + // FakedDB: async () => (await import("./db/FakeDb.js")).default, + // }; // const db = DB_TYPE[process.env.DB_TYPE] // ? DB_TYPE[process.env.DB_TYPE]() // : require("./db/FakeDb"); - const db = DB_TYPE.MongoDB(); + // const db = DB_TYPE.MongoDB(); const app = express(); diff --git a/Server/middleware/handleErrors.js b/Server/middleware/handleErrors.js index 3f1ba56f4..c59967382 100644 --- a/Server/middleware/handleErrors.js +++ b/Server/middleware/handleErrors.js @@ -1,5 +1,5 @@ -const logger = require("../utils/logger"); -const { errorMessages } = require("../utils/messages"); +import logger from "../utils/logger.js"; +import { errorMessages } from "../utils/messages.js"; const handleErrors = (error, req, res, next) => { const status = error.status || 500; @@ -12,4 +12,4 @@ const handleErrors = (error, req, res, next) => { res.status(status).json({ success: false, msg: message }); }; -module.exports = { handleErrors }; +export { handleErrors }; diff --git a/Server/middleware/isAllowed.js b/Server/middleware/isAllowed.js index e141ad165..a48afb337 100644 --- a/Server/middleware/isAllowed.js +++ b/Server/middleware/isAllowed.js @@ -1,7 +1,7 @@ -const jwt = require("jsonwebtoken"); +import jwt from "jsonwebtoken"; const TOKEN_PREFIX = "Bearer "; const SERVICE_NAME = "allowedRoles"; -const { errorMessages } = require("../utils/messages"); +import { errorMessages } from "../utils/messages.js"; const isAllowed = (allowedRoles) => { return (req, res, next) => { @@ -52,4 +52,4 @@ const isAllowed = (allowedRoles) => { }; }; -module.exports = { isAllowed }; +export { isAllowed }; diff --git a/Server/middleware/verifyJWT.js b/Server/middleware/verifyJWT.js index 8f6bbecfe..b3a0009ae 100644 --- a/Server/middleware/verifyJWT.js +++ b/Server/middleware/verifyJWT.js @@ -1,7 +1,7 @@ -const jwt = require("jsonwebtoken"); +import jwt from "jsonwebtoken"; const SERVICE_NAME = "verifyJWT"; const TOKEN_PREFIX = "Bearer "; -const { errorMessages } = require("../utils/messages"); +import { errorMessages } from "../utils/messages.js"; /** * Verifies the JWT token * @function @@ -48,4 +48,4 @@ const verifyJWT = (req, res, next) => { }); }; -module.exports = { verifyJWT }; +export { verifyJWT }; diff --git a/Server/middleware/verifyOwnership.js b/Server/middleware/verifyOwnership.js index 8bfadeebb..2b656568b 100644 --- a/Server/middleware/verifyOwnership.js +++ b/Server/middleware/verifyOwnership.js @@ -1,6 +1,6 @@ -const logger = require("../utils/logger"); +import logger from "../utils/logger.js"; +import { errorMessages } from "../utils/messages.js"; const SERVICE_NAME = "verifyOwnership"; -const { errorMessages } = require("../utils/messages"); const verifyOwnership = (Model, paramName) => { return async (req, res, next) => { @@ -46,4 +46,4 @@ const verifyOwnership = (Model, paramName) => { }; }; -module.exports = { verifyOwnership }; +export { verifyOwnership }; diff --git a/Server/package.json b/Server/package.json index cb6997132..4e24f66f0 100644 --- a/Server/package.json +++ b/Server/package.json @@ -3,6 +3,7 @@ "version": "1.0.0", "description": "", "main": "index.js", + "type": "module", "scripts": { "test": "nyc mocha", "dev": "nodemon index.js" diff --git a/Server/routes/authRoute.js b/Server/routes/authRoute.js index ce6ec440e..275348711 100644 --- a/Server/routes/authRoute.js +++ b/Server/routes/authRoute.js @@ -1,12 +1,14 @@ -const router = require("express").Router(); -const { verifyJWT } = require("../middleware/verifyJWT"); -const { verifyOwnership } = require("../middleware/verifyOwnership"); -const { isAllowed } = require("../middleware/isAllowed"); -const multer = require("multer"); -const upload = multer(); -const User = require("../db/models/User"); +import { Router } from "express"; +import { verifyJWT } from "../middleware/verifyJWT.js"; +import { verifyOwnership } from "../middleware/verifyOwnership.js"; +import { isAllowed } from "../middleware/isAllowed.js"; +import multer from "multer"; +import User from "../db/models/User.js"; -const { +const router = Router(); +const upload = multer(); + +import { registerUser, loginUser, editUser, @@ -16,17 +18,12 @@ const { checkSuperadminExists, getAllUsers, deleteUser, -} = require("../controllers/authController"); +} from "../controllers/authController.js"; //Auth routes router.post("/register", upload.single("profileImage"), registerUser); router.post("/login", loginUser); -router.put( - "/user/:userId", - upload.single("profileImage"), - verifyJWT, - editUser -); +router.put("/user/:userId", upload.single("profileImage"), verifyJWT, editUser); router.get("/users/superadmin", checkSuperadminExists); router.get( "/users", @@ -46,4 +43,4 @@ router.post("/recovery/request", requestRecovery); router.post("/recovery/validate", validateRecovery); router.post("/recovery/reset/", resetPassword); -module.exports = router; +export default router; diff --git a/Server/routes/checkRoute.js b/Server/routes/checkRoute.js index 47b48809d..48b2a609b 100644 --- a/Server/routes/checkRoute.js +++ b/Server/routes/checkRoute.js @@ -1,8 +1,10 @@ -const router = require("express").Router(); -const checkController = require("../controllers/checkController"); -const { verifyOwnership } = require("../middleware/verifyOwnership"); -const { isAllowed } = require("../middleware/isAllowed"); -const Monitor = require("../db/models/Monitor"); +import { Router } from "express"; +import checkController from "../controllers/checkController.js"; +import { verifyOwnership } from "../middleware/verifyOwnership.js"; +import { isAllowed } from "../middleware/isAllowed.js"; +import Monitor from "../db/models/Monitor.js"; + +const router = Router(); router.get("/:monitorId", checkController.getChecks); router.post( @@ -30,4 +32,4 @@ router.put( checkController.updateChecksTTL ); -module.exports = router; +export default router; diff --git a/Server/routes/inviteRoute.js b/Server/routes/inviteRoute.js index 93e77e068..b64074751 100644 --- a/Server/routes/inviteRoute.js +++ b/Server/routes/inviteRoute.js @@ -1,11 +1,12 @@ -const router = require("express").Router(); -const { verifyJWT } = require("../middleware/verifyJWT"); -const { isAllowed } = require("../middleware/isAllowed"); - -const { +import { Router } from "express"; +import { verifyJWT } from "../middleware/verifyJWT.js"; +import { isAllowed } from "../middleware/isAllowed.js"; +import { issueInvitation, inviteVerifyController, -} = require("../controllers/inviteController"); +} from "../controllers/inviteController.js"; + +const router = Router(); router.post( "/", @@ -15,4 +16,4 @@ router.post( ); router.post("/verify", issueInvitation); -module.exports = router; +export default router; diff --git a/Server/routes/maintenanceWindowRoute.js b/Server/routes/maintenanceWindowRoute.js index ceb27d548..47ac7f54d 100644 --- a/Server/routes/maintenanceWindowRoute.js +++ b/Server/routes/maintenanceWindowRoute.js @@ -1,7 +1,9 @@ -const router = require("express").Router(); -const maintenanceWindowController = require("../controllers/maintenanceWindowController"); -const { verifyOwnership } = require("../middleware/verifyOwnership"); -const Monitor = require("../db/models/Monitor"); +import { Router } from "express"; +import maintenanceWindowController from "../controllers/maintenanceWindowController.js"; +import { verifyOwnership } from "../middleware/verifyOwnership.js"; +import Monitor from "../db/models/Monitor.js"; + +const router = Router(); router.post("/", maintenanceWindowController.createMaintenanceWindows); @@ -19,4 +21,4 @@ router.put("/:id", maintenanceWindowController.editMaintenanceWindow); router.delete("/:id", maintenanceWindowController.deleteMaintenanceWindow); -module.exports = router; +export default router; diff --git a/Server/routes/monitorRoute.js b/Server/routes/monitorRoute.js index aaa9c10e9..876e3b3da 100644 --- a/Server/routes/monitorRoute.js +++ b/Server/routes/monitorRoute.js @@ -1,6 +1,8 @@ -const router = require("express").Router(); -const monitorController = require("../controllers/monitorController"); -const { isAllowed } = require("../middleware/isAllowed"); +import { Router } from "express"; +import monitorController from "../controllers/monitorController.js"; +import { isAllowed } from "../middleware/isAllowed.js"; + +const router = Router(); router.get("/", monitorController.getAllMonitors); router.get("/stats/:monitorId", monitorController.getMonitorStatsById); @@ -48,4 +50,4 @@ router.post( monitorController.addDemoMonitors ); -module.exports = router; +export default router; diff --git a/Server/routes/queueRoute.js b/Server/routes/queueRoute.js index b14eaa2b0..38832f947 100644 --- a/Server/routes/queueRoute.js +++ b/Server/routes/queueRoute.js @@ -1,6 +1,7 @@ -const router = require("express").Router(); -const queueController = require("../controllers/queueController"); +import { Router } from "express"; +import queueController from "../controllers/queueController.js"; +const router = Router(); router.get("/metrics", queueController.getMetrics); // Get Jobs @@ -12,4 +13,4 @@ router.post("/jobs", queueController.addJob); // Obliterate Queue router.post("/obliterate", queueController.obliterateQueue); -module.exports = router; +export default router; diff --git a/Server/routes/settingsRoute.js b/Server/routes/settingsRoute.js index 521987aec..37bbe1929 100644 --- a/Server/routes/settingsRoute.js +++ b/Server/routes/settingsRoute.js @@ -1,7 +1,8 @@ -const router = require("express").Router(); -const settingsController = require("../controllers/settingsController"); -const { isAllowed } = require("../middleware/isAllowed"); -const Monitor = require("../db/models/Monitor"); +import { Router } from "express"; +import settingsController from "../controllers/settingsController.js"; +import { isAllowed } from "../middleware/isAllowed.js"; + +const router = Router(); router.get("/", settingsController.getAppSettings); router.put( @@ -10,4 +11,4 @@ router.put( settingsController.updateAppSettings ); -module.exports = router; +export default router; diff --git a/Server/service/emailService.js b/Server/service/emailService.js index edee0cc72..7bcaa31f0 100644 --- a/Server/service/emailService.js +++ b/Server/service/emailService.js @@ -1,10 +1,15 @@ -const fs = require("fs"); -const path = require("path"); -const nodemailer = require("nodemailer"); -const { compile } = require("handlebars"); -const mjml2html = require("mjml"); +import fs from "fs"; +import path from "path"; +import nodemailer from "nodemailer"; +import pkg from "handlebars"; +const { compile } = pkg; +import mjml2html from "mjml"; +import logger from "../utils/logger.js"; +import { fileURLToPath } from "url"; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + const SERVICE_NAME = "EmailService"; -const logger = require("../utils/logger"); /** * Represents an email service that can load templates, build, and send emails. @@ -134,5 +139,4 @@ class EmailService { } }; } - -module.exports = EmailService; +export default EmailService; diff --git a/Server/service/jobQueue.js b/Server/service/jobQueue.js index 66db548db..b8e56a7d3 100644 --- a/Server/service/jobQueue.js +++ b/Server/service/jobQueue.js @@ -1,9 +1,9 @@ -const { Queue, Worker, Job } = require("bullmq"); +import { Queue, Worker, Job } from "bullmq"; const QUEUE_NAME = "monitors"; const JOBS_PER_WORKER = 5; -const logger = require("../utils/logger"); -const { errorMessages, successMessages } = require("../utils/messages"); +import logger from "../utils/logger.js"; +import { errorMessages, successMessages } from "../utils/messages.js"; const SERVICE_NAME = "JobQueue"; /** * JobQueue @@ -360,4 +360,4 @@ class JobQueue { } } -module.exports = JobQueue; +export default JobQueue; diff --git a/Server/service/networkService.js b/Server/service/networkService.js index f09c7ac70..158bff62b 100644 --- a/Server/service/networkService.js +++ b/Server/service/networkService.js @@ -1,8 +1,8 @@ -const axios = require("axios"); -const ping = require("ping"); -const logger = require("../utils/logger"); -const http = require("http"); -const { errorMessages, successMessages } = require("../utils/messages"); +import axios from "axios"; +import ping from "ping"; +import logger from "../utils/logger.js"; +import http from "http"; +import { errorMessages, successMessages } from "../utils/messages.js"; /** * NetworkService @@ -329,4 +329,4 @@ class NetworkService { } } -module.exports = NetworkService; +export default NetworkService; diff --git a/Server/service/settingsService.js b/Server/service/settingsService.js index 24e890d64..b73f7caa8 100644 --- a/Server/service/settingsService.js +++ b/Server/service/settingsService.js @@ -1,5 +1,4 @@ -const { env } = require("process"); -const AppSettings = require("../db/models/AppSettings"); +import AppSettings from "../db/models/AppSettings.js"; const SERVICE_NAME = "SettingsService"; const envConfig = { logLevel: undefined, @@ -81,4 +80,4 @@ class SettingsService { } } -module.exports = SettingsService; +export default SettingsService; diff --git a/Server/utils/dataUtils.js b/Server/utils/dataUtils.js index b1180802b..b5e0015d8 100644 --- a/Server/utils/dataUtils.js +++ b/Server/utils/dataUtils.js @@ -45,6 +45,4 @@ const NormalizeData = (checks, rangeMin, rangeMax) => { } }; -module.exports = { - NormalizeData, -}; +export { NormalizeData }; diff --git a/Server/utils/imageProcessing.js b/Server/utils/imageProcessing.js index 59793004f..e40d46ff7 100644 --- a/Server/utils/imageProcessing.js +++ b/Server/utils/imageProcessing.js @@ -1,4 +1,4 @@ -const sharp = require("sharp"); +import sharp from "sharp"; /** * Generates a 64 * 64 pixel image from a given image * @param {} file @@ -22,6 +22,4 @@ const GenerateAvatarImage = async (file) => { } }; -module.exports = { - GenerateAvatarImage, -}; +export { GenerateAvatarImage }; diff --git a/Server/utils/logger.js b/Server/utils/logger.js index a8f65527c..4d37dc255 100644 --- a/Server/utils/logger.js +++ b/Server/utils/logger.js @@ -1,8 +1,8 @@ -const winston = require('winston'); +import winston from "winston"; /** * @module * @example - * logger.info("Registered a new user!") + * logger.info("Registered a new user!") * logger.warn("User not found!") * logger.error("Cannot save") * @example @@ -12,15 +12,15 @@ const winston = require('winston'); * logger.error("User not found!",{"service":"Auth"}) */ const logger = winston.createLogger({ - level: 'info', - format: winston.format.combine( - winston.format.timestamp(), - winston.format.json() - ), - transports: [ + level: "info", + format: winston.format.combine( + winston.format.timestamp(), + winston.format.json() + ), + transports: [ new winston.transports.Console(), - new winston.transports.File({ filename: 'app.log' }), + new winston.transports.File({ filename: "app.log" }), ], }); -module.exports = logger; \ No newline at end of file +export default logger; diff --git a/Server/utils/messages.js b/Server/utils/messages.js index d685e7326..c951dc0c9 100644 --- a/Server/utils/messages.js +++ b/Server/utils/messages.js @@ -114,7 +114,4 @@ const successMessages = { UPDATE_APP_SETTINGS: "Updated app settings successfully", }; -module.exports = { - errorMessages, - successMessages, -}; +export { errorMessages, successMessages }; diff --git a/Server/utils/utils.js b/Server/utils/utils.js index 4331a4610..da61a69c3 100644 --- a/Server/utils/utils.js +++ b/Server/utils/utils.js @@ -27,7 +27,4 @@ const getTokenFromHeaders = (headers) => { return parts[1]; }; -module.exports = { - ParseBoolean, - getTokenFromHeaders, -}; +export { ParseBoolean, getTokenFromHeaders }; diff --git a/Server/validation/joi.js b/Server/validation/joi.js index 9e36c2135..033650a3d 100644 --- a/Server/validation/joi.js +++ b/Server/validation/joi.js @@ -1,7 +1,4 @@ -const exp = require("constants"); -const joi = require("joi"); -const { normalize } = require("path"); -const { start } = require("repl"); +import joi from "joi"; //**************************************** // Custom Validators @@ -143,7 +140,7 @@ const inviteBodyValidation = joi.object({ teamId: joi.string().required(), }); -const inviteVerifciationBodyValidation = joi.object({ +const inviteVerificationBodyValidation = joi.object({ token: joi.string().required(), }); @@ -427,7 +424,7 @@ const updateAppSettingsBodyValidation = joi.object({ systemEmailPassword: joi.string().allow(""), }); -module.exports = { +export { roleValidatior, loginValidation, registrationBodyValidation, @@ -436,7 +433,7 @@ module.exports = { newPasswordValidation, inviteRoleValidation, inviteBodyValidation, - inviteVerificationBodyValidation: inviteVerifciationBodyValidation, + inviteVerificationBodyValidation, createMonitorBodyValidation, getMonitorByIdParamValidation, getMonitorByIdQueryValidation,