refactor: cleanup log messages
[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.js'
4 import { UIHttpServer } from './UIHttpServer.js'
5 import { UIServerUtils } from './UIServerUtils.js'
6 import { UIWebSocketServer } from './UIWebSocketServer.js'
7 import {
8 ApplicationProtocol,
9 ApplicationProtocolVersion,
10 type UIServerConfiguration
11 } from '../../types/index.js'
12
13 // eslint-disable-next-line @typescript-eslint/no-extraneous-class
14 export class UIServerFactory {
15 private constructor () {
16 // This is intentional
17 }
18
19 public static getUIServerImplementation (
20 uiServerConfiguration: UIServerConfiguration
21 ): AbstractUIServer | undefined {
22 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
23 if (!UIServerUtils.isLoopback(uiServerConfiguration.options!.host!)) {
24 console.warn(
25 chalk.yellow(
26 'Loopback address not detected in UI server configuration. This is not recommended'
27 )
28 )
29 }
30 uiServerConfiguration = {
31 version: ApplicationProtocolVersion.VERSION_11,
32 ...uiServerConfiguration
33 }
34 if (
35 uiServerConfiguration.type === ApplicationProtocol.WS &&
36 uiServerConfiguration.version !== ApplicationProtocolVersion.VERSION_11
37 ) {
38 console.warn(
39 chalk.yellow(
40 `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}`
41 )
42 )
43 uiServerConfiguration.version = ApplicationProtocolVersion.VERSION_11
44 }
45 switch (uiServerConfiguration.type) {
46 case ApplicationProtocol.WS:
47 return new UIWebSocketServer(uiServerConfiguration)
48 case ApplicationProtocol.HTTP:
49 return new UIHttpServer(uiServerConfiguration)
50 }
51 }
52 }