Merge pull request #813 from SAP/combined-prs-branch
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / OCPPRequestService.ts
index 6d0809c59440764674529248c9b2ac858de2c092..18aa5ffdb3cdbeee1b033521128cfc7f161d4aab 100644 (file)
@@ -55,6 +55,7 @@ export abstract class OCPPRequestService {
     ajvFormats(this.ajv);
     this.ocppResponseService = ocppResponseService;
     this.requestHandler = this.requestHandler.bind(this) as <
+      // eslint-disable-next-line @typescript-eslint/no-unused-vars
       ReqType extends JsonType,
       ResType extends JsonType,
     >(
@@ -142,6 +143,7 @@ export abstract class OCPPRequestService {
       handleSendMessageError(chargingStation, commandName, error as Error, {
         throwError: true,
       });
+      return null;
     }
   }
 
@@ -162,6 +164,7 @@ export abstract class OCPPRequestService {
       );
     } catch (error) {
       handleSendMessageError(chargingStation, commandName, error as Error);
+      return null;
     }
   }
 
@@ -170,7 +173,7 @@ export abstract class OCPPRequestService {
     messageId: string,
     messagePayload: JsonType,
     commandName: RequestCommand,
-    params: RequestParams = defaultRequestParams,
+    params?: RequestParams,
   ): Promise<ResponseType> {
     params = {
       ...defaultRequestParams,
@@ -189,6 +192,7 @@ export abstract class OCPPRequestService {
       handleSendMessageError(chargingStation, commandName, error as Error, {
         throwError: params.throwError,
       });
+      return null;
     }
   }
 
@@ -206,7 +210,7 @@ export abstract class OCPPRequestService {
       );
       return true;
     }
-    const validate = this.ajv.compile(this.jsonSchemas.get(commandName as RequestCommand));
+    const validate = this.ajv.compile(this.jsonSchemas.get(commandName as RequestCommand)!);
     payload = cloneObject<T>(payload);
     OCPPServiceUtils.convertDateToISOString<T>(payload);
     if (validate(payload)) {
@@ -218,10 +222,10 @@ export abstract class OCPPRequestService {
     );
     // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
     throw new OCPPError(
-      OCPPServiceUtils.ajvErrorsToErrorType(validate.errors),
+      OCPPServiceUtils.ajvErrorsToErrorType(validate.errors!),
       'Request PDU is invalid',
       commandName,
-      JSON.stringify(validate.errors, null, 2),
+      JSON.stringify(validate.errors, undefined, 2),
     );
   }
 
@@ -246,7 +250,7 @@ export abstract class OCPPRequestService {
     const validate = this.ajv.compile(
       this.ocppResponseService.jsonIncomingRequestResponseSchemas.get(
         commandName as IncomingRequestCommand,
-      ),
+      )!,
     );
     payload = cloneObject<T>(payload);
     OCPPServiceUtils.convertDateToISOString<T>(payload);
@@ -259,10 +263,10 @@ export abstract class OCPPRequestService {
     );
     // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
     throw new OCPPError(
-      OCPPServiceUtils.ajvErrorsToErrorType(validate.errors),
+      OCPPServiceUtils.ajvErrorsToErrorType(validate.errors!),
       'Response PDU is invalid',
       commandName,
-      JSON.stringify(validate.errors, null, 2),
+      JSON.stringify(validate.errors, undefined, 2),
     );
   }
 
@@ -272,7 +276,7 @@ export abstract class OCPPRequestService {
     messagePayload: JsonType | OCPPError,
     messageType: MessageType,
     commandName: RequestCommand | IncomingRequestCommand,
-    params: RequestParams = defaultRequestParams,
+    params?: RequestParams,
   ): Promise<ResponseType> {
     params = {
       ...defaultRequestParams,
@@ -291,7 +295,7 @@ export abstract class OCPPRequestService {
       const self = this;
       // Send a message through wsConnection
       return promiseWithTimeout(
-        new Promise((resolve, reject) => {
+        new Promise<ResponseType>((resolve, reject) => {
           /**
            * Function that will receive the request's response
            *
@@ -384,7 +388,7 @@ export abstract class OCPPRequestService {
             PerformanceStatistics.endMeasure(commandName, beginId);
           }
           const wsClosedOrErrored = !wsOpened || sendError === true;
-          if (wsClosedOrErrored && params.skipBufferingOnError === false) {
+          if (wsClosedOrErrored && params?.skipBufferingOnError === false) {
             // Buffer
             chargingStation.bufferMessage(messageToSend);
             // Reject and keep request in the cache
@@ -393,7 +397,7 @@ export abstract class OCPPRequestService {
                 ErrorType.GENERIC_ERROR,
                 `WebSocket closed or errored for buffered message id '${messageId}' with content '${messageToSend}'`,
                 commandName,
-                (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FREEZED_OBJECT,
+                (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FROZEN_OBJECT,
               ),
             );
           } else if (wsClosedOrErrored) {
@@ -401,7 +405,7 @@ export abstract class OCPPRequestService {
               ErrorType.GENERIC_ERROR,
               `WebSocket closed or errored for non buffered message id '${messageId}' with content '${messageToSend}'`,
               commandName,
-              (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FREEZED_OBJECT,
+              (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FROZEN_OBJECT,
             );
             // Reject response
             if (messageType !== MessageType.CALL_MESSAGE) {
@@ -420,7 +424,7 @@ export abstract class OCPPRequestService {
           ErrorType.GENERIC_ERROR,
           `Timeout for message id '${messageId}'`,
           commandName,
-          (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FREEZED_OBJECT,
+          (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FROZEN_OBJECT,
         ),
         () => {
           messageType === MessageType.CALL_MESSAGE && chargingStation.requests.delete(messageId);
@@ -492,6 +496,7 @@ export abstract class OCPPRequestService {
   public abstract requestHandler<ReqType extends JsonType, ResType extends JsonType>(
     chargingStation: ChargingStation,
     commandName: RequestCommand,
+    // FIXME: should be ReqType
     commandParams?: JsonType,
     params?: RequestParams,
   ): Promise<ResType>;