1 import chalk from
'chalk'
3 import { BaseError
} from
'../../exception/index.js'
6 ApplicationProtocolVersion
,
8 type UIServerConfiguration
9 } from
'../../types/index.js'
10 import type { AbstractUIServer
} from
'./AbstractUIServer.js'
11 import { UIHttpServer
} from
'./UIHttpServer.js'
12 import { isLoopback
} from
'./UIServerUtils.js'
13 import { UIWebSocketServer
} from
'./UIWebSocketServer.js'
15 // eslint-disable-next-line @typescript-eslint/no-extraneous-class
16 export class UIServerFactory
{
17 private constructor () {
18 // This is intentional
21 public static getUIServerImplementation (
22 uiServerConfiguration
: UIServerConfiguration
25 uiServerConfiguration
.authentication
?.enabled
=== true &&
26 !Object.values(AuthenticationType
).includes(uiServerConfiguration
.authentication
.type)
29 `Unknown authentication type '${uiServerConfiguration.authentication.type}' for UI server`
33 uiServerConfiguration
.type === ApplicationProtocol
.HTTP
&&
34 uiServerConfiguration
.authentication
?.enabled
=== true &&
35 uiServerConfiguration
.authentication
.type === AuthenticationType
.PROTOCOL_BASIC_AUTH
37 throw new BaseError('Protocol basic authentication is not supported for HTTP UI server')
40 uiServerConfiguration
.authentication
?.enabled
!== true &&
41 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
42 !isLoopback(uiServerConfiguration
.options
!.host
!)
46 'Non loopback address in UI server configuration without authentication enabled. This is not recommended'
51 uiServerConfiguration
.type === ApplicationProtocol
.WS
&&
52 uiServerConfiguration
.version
!== ApplicationProtocolVersion
.VERSION_11
56 `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}`
59 uiServerConfiguration
.version
= ApplicationProtocolVersion
.VERSION_11
61 switch (uiServerConfiguration
.type) {
62 case ApplicationProtocol
.HTTP
:
63 return new UIHttpServer(uiServerConfiguration
)
64 case ApplicationProtocol
.WS
:
66 return new UIWebSocketServer(uiServerConfiguration
)