feat: add addChargingStations command to UI API
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / UIServerFactory.ts
index c4006b0396d96c8d5ad50e902bfedf8ea2743c65..fe2b36d22a3f39375800447beb895448e1cabd77 100644 (file)
@@ -1,33 +1,52 @@
-import chalk from 'chalk';
+import chalk from 'chalk'
 
-import type { AbstractUIServer } from './AbstractUIServer';
-import { UIHttpServer } from './UIHttpServer';
-import { UIServerUtils } from './UIServerUtils';
-import { UIWebSocketServer } from './UIWebSocketServer';
-import { ApplicationProtocol, type UIServerConfiguration } from '../../types';
+import type { AbstractUIServer } from './AbstractUIServer.js'
+import { UIHttpServer } from './UIHttpServer.js'
+import { UIServerUtils } from './UIServerUtils.js'
+import { UIWebSocketServer } from './UIWebSocketServer.js'
+import {
+  ApplicationProtocol,
+  ApplicationProtocolVersion,
+  type UIServerConfiguration
+} from '../../types/index.js'
 
+// eslint-disable-next-line @typescript-eslint/no-extraneous-class
 export class UIServerFactory {
-  private constructor() {
+  private constructor () {
     // This is intentional
   }
 
-  public static getUIServerImplementation(
-    uiServerConfiguration: UIServerConfiguration,
-  ): AbstractUIServer | null {
-    if (UIServerUtils.isLoopback(uiServerConfiguration.options!.host!) === false) {
+  public static getUIServerImplementation (
+    uiServerConfiguration: UIServerConfiguration
+  ): AbstractUIServer | undefined {
+    // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+    if (!UIServerUtils.isLoopback(uiServerConfiguration.options!.host!)) {
       console.warn(
         chalk.yellow(
-          'Loopback address not detected in UI server configuration. This is not recommended.',
-        ),
-      );
+          'Loopback address not detected in UI server configuration. This is not recommended.'
+        )
+      )
+    }
+    uiServerConfiguration = {
+      version: ApplicationProtocolVersion.VERSION_11,
+      ...uiServerConfiguration
+    }
+    if (
+      uiServerConfiguration.type === ApplicationProtocol.WS &&
+      uiServerConfiguration.version !== ApplicationProtocolVersion.VERSION_11
+    ) {
+      console.warn(
+        chalk.yellow(
+          `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}.`
+        )
+      )
+      uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11
     }
     switch (uiServerConfiguration.type) {
       case ApplicationProtocol.WS:
-        return new UIWebSocketServer(uiServerConfiguration);
+        return new UIWebSocketServer(uiServerConfiguration)
       case ApplicationProtocol.HTTP:
-        return new UIHttpServer(uiServerConfiguration);
-      default:
-        return null;
+        return new UIHttpServer(uiServerConfiguration)
     }
   }
 }