refactor: improve OCPP error defaults and usage
authorJérôme Benoit <jerome.benoit@sap.com>
Mon, 20 Nov 2023 20:23:41 +0000 (21:23 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Mon, 20 Nov 2023 20:23:41 +0000 (21:23 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts
src/charging-station/ocpp/OCPPRequestService.ts
src/charging-station/ui-server/ui-services/AbstractUIService.ts
src/exception/BaseError.ts
src/exception/OCPPError.ts

index 5188d974c33d6f65d87812b273731b25e0e789bd..a8d9b045abde5b93728ab16548a3a4e91fec8511 100644 (file)
@@ -293,8 +293,8 @@ export class ChargingStationWorkerBroadcastChannel extends WorkerBroadcastChanne
         command,
         requestPayload,
         commandResponse: commandResponse as CommandResponse,
-        errorMessage: (error as Error).message,
-        errorStack: (error as Error).stack,
+        errorMessage: (error as OCPPError).message,
+        errorStack: (error as OCPPError).stack,
         errorDetails: (error as OCPPError).details,
       };
     } finally {
index 77e87f43e31be8550c5e568cbdbc71c5e63c8a54..849ecbd0382e461d1ab81e08e358e09824a1ed66 100644 (file)
@@ -23,13 +23,7 @@ import {
   type ResponseCallback,
   type ResponseType,
 } from '../../types';
-import {
-  Constants,
-  cloneObject,
-  handleSendMessageError,
-  isNullOrUndefined,
-  logger,
-} from '../../utils';
+import { cloneObject, handleSendMessageError, isNullOrUndefined, logger } from '../../utils';
 
 const moduleName = 'OCPPRequestService';
 
@@ -421,7 +415,7 @@ export abstract class OCPPRequestService {
                 ErrorType.GENERIC_ERROR,
                 `Timeout for message id '${messageId}'`,
                 commandName,
-                (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FROZEN_OBJECT,
+                (messagePayload as OCPPError).details,
               ),
             );
           }, OCPPConstants.OCPP_WEBSOCKET_TIMEOUT);
@@ -468,7 +462,7 @@ export abstract class OCPPRequestService {
                 params?.skipBufferingOnError === false ? '' : 'non '
               }buffered message id '${messageId}' with content '${messageToSend}'`,
               commandName,
-              (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FROZEN_OBJECT,
+              (messagePayload as JsonObject).details,
             ),
           );
         }
@@ -518,9 +512,11 @@ export abstract class OCPPRequestService {
         messageToSend = JSON.stringify([
           messageType,
           messageId,
-          (messagePayload as OCPPError)?.code ?? ErrorType.GENERIC_ERROR,
-          (messagePayload as OCPPError)?.message ?? '',
-          (messagePayload as OCPPError)?.details ?? { commandName },
+          (messagePayload as OCPPError).code,
+          (messagePayload as OCPPError).message,
+          (messagePayload as OCPPError).details ?? {
+            command: (messagePayload as OCPPError).command ?? commandName,
+          },
         ] as ErrorResponse);
         break;
     }
index 20531c6f37ce4002d48ac5fe255628086ab5c0e2..a190b60395e216f8c0a46ec6e6ad1ad0597829f5 100644 (file)
@@ -105,8 +105,8 @@ export abstract class AbstractUIService {
         command,
         requestPayload,
         responsePayload,
-        errorMessage: (error as Error).message,
-        errorStack: (error as Error).stack,
+        errorMessage: (error as OCPPError).message,
+        errorStack: (error as OCPPError).stack,
         errorDetails: (error as OCPPError).details,
       };
     }
index 84421eac143b3db6440fd74cb2c8fc6ed8ec3eee..2163f6ee4d78cce456a220391f0c498783cfc34e 100644 (file)
@@ -3,7 +3,9 @@ export class BaseError extends Error {
     super(message);
     this.name = new.target.name;
     Object.setPrototypeOf(this, new.target.prototype);
-    Error.captureStackTrace ? Error.captureStackTrace(this, this.constructor) : this.createStack();
+    typeof Error.captureStackTrace === 'function'
+      ? Error.captureStackTrace(this, this.constructor)
+      : this.createStack();
   }
 
   private createStack(): void {
index f624d7e79704026eb60925f88ba3ddd0ae56de97..5736ad277a1b981907c052eadc9c06aba04b342a 100644 (file)
@@ -22,8 +22,9 @@ export class OCPPError extends BaseError {
   ) {
     super(message);
 
-    this.code = code ?? ErrorType.GENERIC_ERROR;
-    this.command = command;
-    this.details = details ?? Constants.EMPTY_FROZEN_OBJECT;
+    this.code = code;
+    this.command =
+      command ?? (Constants.UNKNOWN_COMMAND as RequestCommand | IncomingRequestCommand);
+    this.details = details;
   }
 }