1 import chalk from
'chalk'
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 { BaseError
} from
'../../exception/BaseError.js'
10 ApplicationProtocolVersion
,
12 type UIServerConfiguration
13 } from
'../../types/index.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
23 ): AbstractUIServer
| undefined {
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')
39 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
40 if (!UIServerUtils
.isLoopback(uiServerConfiguration
.options
!.host
!)) {
43 'Loopback address not detected in UI server configuration. This is not recommended'
48 uiServerConfiguration
.type === ApplicationProtocol
.WS
&&
49 uiServerConfiguration
.version
!== ApplicationProtocolVersion
.VERSION_11
53 `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}`
56 uiServerConfiguration
.version
= ApplicationProtocolVersion
.VERSION_11
58 switch (uiServerConfiguration
.type) {
59 case ApplicationProtocol
.WS
:
60 return new UIWebSocketServer(uiServerConfiguration
)
61 case ApplicationProtocol
.HTTP
:
62 return new UIHttpServer(uiServerConfiguration
)