-import type { IncomingMessage, RequestListener, ServerResponse } from 'http';
+import type { IncomingMessage, RequestListener, ServerResponse } from 'node:http';
import { StatusCodes } from 'http-status-codes';
-import BaseError from '../../exception/BaseError';
-import type { UIServerConfiguration } from '../../types/ConfigurationData';
+import { BaseError } from '../../exception';
import {
- ProcedureName,
- Protocol,
- ProtocolRequest,
- ProtocolResponse,
- ProtocolVersion,
- RequestPayload,
+ type ProcedureName,
+ type Protocol,
+ type ProtocolRequest,
+ type ProtocolResponse,
+ type ProtocolVersion,
+ type RequestPayload,
ResponseStatus,
-} from '../../types/UIProtocol';
-import logger from '../../utils/Logger';
-import Utils from '../../utils/Utils';
-import { AbstractUIServer } from './AbstractUIServer';
-import { UIServiceUtils } from './ui-services/UIServiceUtils';
+ type UIServerConfiguration,
+} from '../../types';
+import { Constants, Utils, logger } from '../../utils';
+import { AbstractUIServer, UIServerUtils } from '../internal';
const moduleName = 'UIHttpServer';
-export default class UIHttpServer extends AbstractUIServer {
+enum HttpMethods {
+ GET = 'GET',
+ PUT = 'PUT',
+ POST = 'POST',
+ PATCH = 'PATCH',
+}
+
+export class UIHttpServer extends AbstractUIServer {
public constructor(protected readonly uiServerConfiguration: UIServerConfiguration) {
super(uiServerConfiguration);
}
}
}
- public logPrefix(modName?: string, methodName?: string, prefixSuffix?: string): string {
+ public logPrefix = (modName?: string, methodName?: string, prefixSuffix?: string): string => {
const logMsgPrefix = prefixSuffix ? `UI HTTP Server ${prefixSuffix}` : 'UI HTTP Server';
const logMsg =
- modName && methodName ? ` ${logMsgPrefix} | ${modName}.${methodName}:` : ` ${logMsgPrefix} |`;
+ Utils.isNotEmptyString(modName) && Utils.isNotEmptyString(methodName)
+ ? ` ${logMsgPrefix} | ${modName}.${methodName}:`
+ : ` ${logMsgPrefix} |`;
return Utils.logPrefix(logMsg);
- }
+ };
private requestListener(req: IncomingMessage, res: ServerResponse): void {
this.authenticate(req, (err) => {
const uuid = Utils.generateUUID();
this.responseHandlers.set(uuid, res);
try {
- if (UIServiceUtils.isProtocolAndVersionSupported(protocol, version) === false) {
- throw new BaseError(`Unsupported UI protocol version: '/${protocol}/${version}'`);
+ const fullProtocol = `${protocol}${version}`;
+ if (UIServerUtils.isProtocolAndVersionSupported(fullProtocol) === false) {
+ throw new BaseError(`Unsupported UI protocol version: '${fullProtocol}'`);
}
this.registerProtocolVersionUIService(version);
req.on('error', (error) => {
error
);
});
- if (req.method === 'POST') {
+ if (req.method === HttpMethods.POST) {
const bodyBuffer = [];
req
.on('data', (chunk) => {
const body = JSON.parse(Buffer.concat(bodyBuffer).toString()) as RequestPayload;
this.uiServices
.get(version)
- .requestHandler(this.buildProtocolRequest(uuid, procedureName, body ?? {}))
- .catch(() => {
- /* Error caught by AbstractUIService */
- });
+ ?.requestHandler(
+ this.buildProtocolRequest(
+ uuid,
+ procedureName,
+ body ?? Constants.EMPTY_FREEZED_OBJECT
+ )
+ )
+ .catch(Constants.EMPTY_FUNCTION);
});
} else {
throw new BaseError(`Unsupported HTTP method: '${req.method}'`);