} from '../../types/index.js'
import {
Constants,
+ JSONStringifyWithMapSupport,
getWebSocketCloseEventStatusString,
isNotEmptyString,
logPrefix,
}
const [, version] = UIServerUtils.getProtocolAndVersion(ws.protocol)
this.registerProtocolVersionUIService(version)
- ws.on('message', (rawData) => {
+ ws.on('message', rawData => {
const request = this.validateRawDataRequest(rawData)
if (request === false) {
ws.close(WebSocketCloseEventStatusCode.CLOSE_INVALID_PAYLOAD)
})
.catch(Constants.EMPTY_FUNCTION)
})
- ws.on('error', (error) => {
+ ws.on('error', error => {
logger.error(`${this.logPrefix(moduleName, 'start.ws.onerror')} WebSocket error:`, error)
})
ws.on('close', (code, reason) => {
}
})
this.httpServer.on('upgrade', (req: IncomingMessage, socket: Duplex, head: Buffer): void => {
- this.authenticate(req, (err) => {
+ this.authenticate(req, err => {
if (err != null) {
socket.write(`HTTP/1.1 ${StatusCodes.UNAUTHORIZED} Unauthorized\r\n\r\n`)
socket.destroy()
if (this.hasResponseHandler(responseId)) {
const ws = this.responseHandlers.get(responseId) as WebSocket
if (ws.readyState === WebSocket.OPEN) {
- ws.send(JSON.stringify(response))
+ ws.send(JSONStringifyWithMapSupport(response))
} else {
logger.error(
`${this.logPrefix(
// )} Raw data received in string format: ${rawData.toString()}`
// )
- // eslint-disable-next-line @typescript-eslint/no-base-to-string
- const request = JSON.parse(rawData.toString()) as ProtocolRequest
+ let request: ProtocolRequest
+ try {
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
+ request = JSON.parse(rawData.toString()) as ProtocolRequest
+ } catch (error) {
+ logger.error(
+ `${this.logPrefix(
+ moduleName,
+ 'validateRawDataRequest'
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
+ )} UI protocol request is not valid JSON: ${rawData.toString()}`
+ )
+ return false
+ }
if (!Array.isArray(request)) {
logger.error(