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'
9 ApplicationProtocolVersion
,
10 type UIServerConfiguration
11 } from
'../../types/index.js'
13 // eslint-disable-next-line @typescript-eslint/no-extraneous-class
14 export class UIServerFactory
{
15 private constructor () {
16 // This is intentional
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
!)) {
26 'Loopback address not detected in UI server configuration. This is not recommended.'
30 uiServerConfiguration
= {
31 version
: ApplicationProtocolVersion
.VERSION_11
,
32 ...uiServerConfiguration
35 uiServerConfiguration
.type === ApplicationProtocol
.WS
&&
36 uiServerConfiguration
.version
!== ApplicationProtocolVersion
.VERSION_11
40 `Only version ${ApplicationProtocolVersion.VERSION_11} is supported for WebSocket UI server. Falling back to version ${ApplicationProtocolVersion.VERSION_11}.`
43 uiServerConfiguration
.version
= ApplicationProtocolVersion
.VERSION_11
45 switch (uiServerConfiguration
.type) {
46 case ApplicationProtocol
.WS
:
47 return new UIWebSocketServer(uiServerConfiguration
)
48 case ApplicationProtocol
.HTTP
:
49 return new UIHttpServer(uiServerConfiguration
)