Apply dependencies update
[e-mobility-charging-stations-simulator.git] / src / charging-station / ui-server / ui-services / AbstractUIService.ts
index db9a036d183054b7fd77cb98dda7ac0e3eb7626f..1e0f2a92e0a9f3189f969428c6eb8fda59a7837a 100644 (file)
@@ -1,22 +1,20 @@
-import { RawData } from 'ws';
+import type { RawData } from 'ws';
 
 import BaseError from '../../../exception/BaseError';
-import { JsonType } from '../../../types/JsonType';
+import { Bootstrap } from '../../../internal';
+import type { JsonType } from '../../../types/JsonType';
 import {
   ProcedureName,
   ProtocolRequest,
   ProtocolRequestHandler,
-  ProtocolResponse,
   ProtocolVersion,
   RequestPayload,
   ResponsePayload,
   ResponseStatus,
 } from '../../../types/UIProtocol';
 import logger from '../../../utils/Logger';
-import Utils from '../../../utils/Utils';
-import Bootstrap from '../../Bootstrap';
 import UIServiceWorkerBroadcastChannel from '../../UIServiceWorkerBroadcastChannel';
-import { AbstractUIServer } from '../AbstractUIServer';
+import type { AbstractUIServer } from '../AbstractUIServer';
 
 const moduleName = 'AbstractUIService';
 
@@ -37,7 +35,7 @@ export default abstract class AbstractUIService {
     this.uiServiceWorkerBroadcastChannel = new UIServiceWorkerBroadcastChannel(this);
   }
 
-  public async requestHandler(request: RawData): Promise<void> {
+  public async requestHandler(request: RawData | JsonType): Promise<void> {
     let messageId: string;
     let command: ProcedureName;
     let requestPayload: RequestPayload | undefined;
@@ -59,10 +57,7 @@ export default abstract class AbstractUIService {
       responsePayload = await this.requestHandlers.get(command)(messageId, requestPayload);
     } catch (error) {
       // Log
-      logger.error(
-        `${this.uiServer.logPrefix(moduleName, 'messageHandler')} Handle request error:`,
-        error
-      );
+      logger.error(`${this.logPrefix(moduleName, 'messageHandler')} Handle request error:`, error);
       responsePayload = {
         status: ResponseStatus.FAILURE,
         command,
@@ -75,7 +70,7 @@ export default abstract class AbstractUIService {
 
     if (responsePayload !== undefined) {
       // Send the response
-      this.uiServer.sendResponse(this.buildProtocolResponse(messageId ?? 'error', responsePayload));
+      this.sendResponse(messageId ?? 'error', responsePayload);
     }
   }
 
@@ -84,43 +79,32 @@ export default abstract class AbstractUIService {
     procedureName: ProcedureName,
     requestPayload: RequestPayload
   ): void {
-    this.uiServer.sendRequest(this.buildProtocolRequest(messageId, procedureName, requestPayload));
+    this.uiServer.sendRequest(
+      this.uiServer.buildProtocolRequest(messageId, procedureName, requestPayload)
+    );
   }
 
   public sendResponse(messageId: string, responsePayload: ResponsePayload): void {
-    this.uiServer.sendResponse(this.buildProtocolResponse(messageId, responsePayload));
+    this.uiServer.sendResponse(this.uiServer.buildProtocolResponse(messageId, responsePayload));
   }
 
   public logPrefix(modName: string, methodName: string): string {
     return this.uiServer.logPrefix(modName, methodName);
   }
 
-  private buildProtocolRequest(
-    messageId: string,
-    procedureName: ProcedureName,
-    requestPayload: RequestPayload
-  ): string {
-    return JSON.stringify([messageId, procedureName, requestPayload] as ProtocolRequest);
-  }
-
-  private buildProtocolResponse(messageId: string, responsePayload: ResponsePayload): string {
-    return JSON.stringify([messageId, responsePayload] as ProtocolResponse);
-  }
-
-  // Validate the raw data received from the WebSocket
-  // TODO: should probably be moved to the ws verify clients callback
-  private requestValidation(rawData: RawData): ProtocolRequest {
+  // Validate the raw data received from the UI server
+  private requestValidation(rawData: RawData | JsonType): ProtocolRequest {
     // logger.debug(
-    //   `${this.uiServer.logPrefix(
+    //   `${this.logPrefix(
     //     moduleName,
-    //     'dataValidation'
-    //   )} Raw data received: ${rawData.toString()}`
+    //     'requestValidation'
+    //   )} Data received in string format: ${rawData.toString()}`
     // );
 
     const data = JSON.parse(rawData.toString()) as JsonType[];
 
-    if (Utils.isIterable(data) === false) {
-      throw new BaseError('UI protocol request is not iterable');
+    if (Array.isArray(data) === false) {
+      throw new BaseError('UI protocol request is not an array');
     }
 
     if (data.length !== 3) {
@@ -134,7 +118,7 @@ export default abstract class AbstractUIService {
     // TODO: remove cast to unknown
     return {
       status: ResponseStatus.SUCCESS,
-      ...Array.from(this.uiServer.chargingStations.values()),
+      ...[...this.uiServer.chargingStations.values()],
     } as unknown as ResponsePayload;
   }