Files
Checkmate/server/src/config/services.js
T

179 lines
5.8 KiB
JavaScript
Raw Normal View History

2025-07-25 15:15:14 -07:00
import ServiceRegistry from "../service/system/serviceRegistry.js";
import TranslationService from "../service/system/translationService.js";
import StringService from "../service/system/stringService.js";
import MongoDB from "../db/mongo/MongoDB.js";
import NetworkService from "../service/infrastructure/networkService.js";
import EmailService from "../service/infrastructure/emailService.js";
import BufferService from "../service/infrastructure/bufferService.js";
import StatusService from "../service/infrastructure/statusService.js";
import NotificationUtils from "../service/infrastructure/notificationUtils.js";
import NotificationService from "../service/infrastructure/notificationService.js";
import ErrorService from "../service/infrastructure/errorService.js";
import SuperSimpleQueueHelper from "../service/infrastructure/SuperSimpleQueue/SuperSimpleQueueHelper.js";
import SuperSimpleQueue from "../service/infrastructure/SuperSimpleQueue/SuperSimpleQueue.js";
import UserService from "../service/business/userService.js";
import CheckService from "../service/business/checkService.js";
import DiagnosticService from "../service/business/diagnosticService.js";
import InviteService from "../service/business/inviteService.js";
import MaintenanceWindowService from "../service/business/maintenanceWindowService.js";
import MonitorService from "../service/business/monitorService.js";
import papaparse from "papaparse";
import axios from "axios";
import ping from "ping";
import http from "http";
import Docker from "dockerode";
import net from "net";
import fs from "fs";
import path from "path";
import nodemailer from "nodemailer";
import pkg from "handlebars";
const { compile } = pkg;
import mjml2html from "mjml";
import jwt from "jsonwebtoken";
2025-07-27 19:51:39 -07:00
import crypto from "crypto";
2025-07-25 15:15:14 -07:00
// DB Modules
2025-07-30 10:20:33 -07:00
import { NormalizeData } from "../utils/dataUtils.js";
2025-07-30 10:41:53 -07:00
import { GenerateAvatarImage } from "../utils/imageProcessing.js";
import { ParseBoolean } from "../utils/utils.js";
2025-07-30 10:20:33 -07:00
2025-07-30 10:41:53 -07:00
// Models
import Check from "../db/models/Check.js";
import HardwareCheck from "../db/models/HardwareCheck.js";
import PageSpeedCheck from "../db/models/PageSpeedCheck.js";
import Monitor from "../db/models/Monitor.js";
import User from "../db/models/User.js";
2025-07-29 19:53:11 -07:00
import InviteToken from "../db/models/InviteToken.js";
2025-07-30 10:20:33 -07:00
import StatusPage from "../db/models/StatusPage.js";
2025-07-30 10:41:53 -07:00
import Team from "../db/models/Team.js";
2025-07-29 19:53:11 -07:00
import InviteModule from "../db/mongo/modules/inviteModule.js";
import CheckModule from "../db/mongo/modules/checkModule.js";
2025-07-30 10:20:33 -07:00
import StatusPageModule from "../db/mongo/modules/statusPageModule.js";
2025-07-30 10:41:53 -07:00
import UserModule from "../db/mongo/modules/userModule.js";
2025-07-30 11:27:29 -07:00
import HardwareCheckModule from "../db/mongo/modules/hardwareCheckModule.js";
2025-07-28 15:03:28 -07:00
export const initializeServices = async ({ logger, envSettings, settingsService }) => {
const serviceRegistry = new ServiceRegistry({ logger });
2025-07-28 15:25:33 -07:00
ServiceRegistry.instance = serviceRegistry;
2025-07-28 15:03:28 -07:00
2025-07-25 15:15:14 -07:00
const translationService = new TranslationService(logger);
await translationService.initialize();
const stringService = new StringService(translationService);
// Create DB
const checkModule = new CheckModule({ logger, Check, HardwareCheck, PageSpeedCheck, Monitor, User });
2025-07-29 19:53:11 -07:00
const inviteModule = new InviteModule({ InviteToken, crypto, stringService });
2025-07-30 10:20:33 -07:00
const statusPageModule = new StatusPageModule({ StatusPage, NormalizeData, stringService });
2025-07-30 10:41:53 -07:00
const userModule = new UserModule({ User, Team, GenerateAvatarImage, ParseBoolean, stringService });
2025-07-30 11:27:29 -07:00
const hardwareCheckModule = new HardwareCheckModule({ HardwareCheck, Monitor, logger });
const db = new MongoDB({ logger, envSettings, checkModule, inviteModule, statusPageModule, userModule, hardwareCheckModule });
2025-07-30 10:41:53 -07:00
2025-07-25 15:15:14 -07:00
await db.connect();
const networkService = new NetworkService(axios, ping, logger, http, Docker, net, stringService, settingsService);
const emailService = new EmailService(settingsService, fs, path, compile, mjml2html, nodemailer, logger);
2025-07-28 14:37:18 -07:00
const bufferService = new BufferService({ db, logger, envSettings });
2025-07-25 15:15:14 -07:00
const statusService = new StatusService({ db, logger, buffer: bufferService });
const notificationUtils = new NotificationUtils({
stringService,
emailService,
});
const notificationService = new NotificationService({
emailService,
db,
logger,
networkService,
stringService,
notificationUtils,
});
const errorService = new ErrorService();
const superSimpleQueueHelper = new SuperSimpleQueueHelper({
db,
logger,
networkService,
statusService,
notificationService,
});
const superSimpleQueue = await SuperSimpleQueue.create({
2025-07-28 14:37:18 -07:00
envSettings,
2025-07-25 15:15:14 -07:00
db,
logger,
helper: superSimpleQueueHelper,
});
// Business services
const userService = new UserService({
2025-07-27 19:51:39 -07:00
crypto,
2025-07-25 15:15:14 -07:00
db,
emailService,
settingsService,
logger,
stringService,
jwt,
errorService,
2025-07-27 19:51:39 -07:00
jobQueue: superSimpleQueue,
2025-07-25 15:15:14 -07:00
});
const checkService = new CheckService({
db,
settingsService,
stringService,
errorService,
});
const diagnosticService = new DiagnosticService();
const inviteService = new InviteService({
db,
settingsService,
emailService,
stringService,
errorService,
});
const maintenanceWindowService = new MaintenanceWindowService({
db,
settingsService,
stringService,
errorService,
});
const monitorService = new MonitorService({
db,
settingsService,
jobQueue: superSimpleQueue,
stringService,
emailService,
papaparse,
logger,
errorService,
});
const services = {
settingsService,
translationService,
stringService,
db,
networkService,
emailService,
bufferService,
statusService,
notificationService,
jobQueue: superSimpleQueue,
userService,
checkService,
diagnosticService,
inviteService,
maintenanceWindowService,
monitorService,
errorService,
logger,
};
Object.values(services).forEach((service) => {
2025-07-28 15:25:33 -07:00
ServiceRegistry.register(service.serviceName, service);
2025-07-25 15:15:14 -07:00
});
return services;
};