fix: fix ui server default application protocol version handling
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / UIServerFactory.ts
1 import chalk from 'chalk';
2
3 import type { AbstractUIServer } from './AbstractUIServer';
4 import { UIHttpServer } from './UIHttpServer';
5 import { UIServerUtils } from './UIServerUtils';
6 import { UIWebSocketServer } from './UIWebSocketServer';
7 import {
8 ApplicationProtocol,
9 ApplicationProtocolVersion,
10 type UIServerConfiguration,
11 } from '../../types';
12
13 export class UIServerFactory {
14 private constructor() {
15 // This is intentional
16 }
17
18 public static getUIServerImplementation(
19 uiServerConfiguration: UIServerConfiguration,
20 ): AbstractUIServer | null {
21 if (UIServerUtils.isLoopback(uiServerConfiguration.options!.host!) === false) {
22 console.warn(
23 chalk.yellow(
24 'Loopback address not detected in UI server configuration. This is not recommended.',
25 ),
26 );
27 }
28 uiServerConfiguration = {
29 version: ApplicationProtocolVersion.VERSION_11,
30 ...uiServerConfiguration,
31 };
32 if (
33 uiServerConfiguration.type === ApplicationProtocol.WS &&
34 uiServerConfiguration.version !== ApplicationProtocolVersion.VERSION_11
35 ) {
36 console.warn(
37 chalk.yellow(
38 `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}.`,
39 ),
40 );
41 uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11;
42 }
43 switch (uiServerConfiguration.type) {
44 case ApplicationProtocol.WS:
45 return new UIWebSocketServer(uiServerConfiguration);
46 case ApplicationProtocol.HTTP:
47 return new UIHttpServer(uiServerConfiguration);
48 default:
49 return null;
50 }
51 }
52 }