RocketChat/Rocket.Chat

View on GitHub
apps/meteor/server/services/startup.ts

Summary

Maintainability
A
1 hr
Test Coverage
import { api } from '@rocket.chat/core-services';
import { Logger } from '@rocket.chat/logger';
import { OmnichannelTranscript, QueueWorker } from '@rocket.chat/omnichannel-services';
import { MongoInternals } from 'meteor/mongo';

import { AuthorizationLivechat } from '../../app/livechat/server/roomAccessValidator.internalService';
import { isRunningMs } from '../lib/isRunningMs';
import { AnalyticsService } from './analytics/service';
import { AppsEngineService } from './apps-engine/service';
import { BannerService } from './banner/service';
import { CalendarService } from './calendar/service';
import { DeviceManagementService } from './device-management/service';
import { MediaService } from './image/service';
import { ImportService } from './import/service';
import { LDAPService } from './ldap/service';
import { MessageService } from './messages/service';
import { MeteorService } from './meteor/service';
import { NPSService } from './nps/service';
import { OmnichannelAnalyticsService } from './omnichannel-analytics/service';
import { OmnichannelIntegrationService } from './omnichannel-integrations/service';
import { OmnichannelVoipService } from './omnichannel-voip/service';
import { OmnichannelService } from './omnichannel/service';
import { PushService } from './push/service';
import { RoomService } from './room/service';
import { SAUMonitorService } from './sauMonitor/service';
import { SettingsService } from './settings/service';
import { TeamService } from './team/service';
import { TranslationService } from './translation/service';
import { UiKitCoreAppService } from './uikit-core-app/service';
import { UploadService } from './upload/service';
import { UserService } from './user/service';
import { VideoConfService } from './video-conference/service';
import { VoipAsteriskService } from './voip-asterisk/service';

export const registerServices = async (): Promise<void> => {
    const { db } = MongoInternals.defaultRemoteCollectionDriver().mongo;

    api.registerService(new AppsEngineService());
    api.registerService(new AnalyticsService());
    api.registerService(new AuthorizationLivechat());
    api.registerService(new BannerService());
    api.registerService(new CalendarService());
    api.registerService(new LDAPService());
    api.registerService(new MediaService());
    api.registerService(new MeteorService());
    api.registerService(new NPSService());
    api.registerService(new RoomService());
    api.registerService(new SAUMonitorService());
    api.registerService(new VoipAsteriskService(db));
    api.registerService(new OmnichannelService());
    api.registerService(new OmnichannelVoipService());
    api.registerService(new TeamService());
    api.registerService(new UiKitCoreAppService());
    api.registerService(new PushService());
    api.registerService(new DeviceManagementService());
    api.registerService(new VideoConfService());
    api.registerService(new UploadService());
    api.registerService(new MessageService());
    api.registerService(new TranslationService());
    api.registerService(new SettingsService());
    api.registerService(new OmnichannelIntegrationService());
    api.registerService(new ImportService());
    api.registerService(new OmnichannelAnalyticsService());
    api.registerService(new UserService());

    // if the process is running in micro services mode we don't need to register services that will run separately
    if (!isRunningMs()) {
        const { Presence } = await import('@rocket.chat/presence');

        const { Authorization } = await import('./authorization/service');

        api.registerService(new Presence());
        api.registerService(new Authorization());

        // Run EE services defined outside of the main repo
        // Otherwise, monolith would ignore them :(
        // Always register the service and manage licensing inside the service (tbd)
        api.registerService(new QueueWorker(db, Logger));
        api.registerService(new OmnichannelTranscript(Logger));
    }
};