Apply dependencies update
[e-mobility-charging-stations-simulator.git] / src / charging-station / ChargingStationWorkerBroadcastChannel.ts
index 0eecb7b1bf16838fc81c9eaed0bce0f0970e192c..1c7121ecc7f54b731655afc1c0f499445ae72973 100644 (file)
@@ -4,18 +4,23 @@ import { StandardParametersKey } from '../types/ocpp/Configuration';
 import {
   type BootNotificationRequest,
   type DataTransferRequest,
+  type DiagnosticsStatusNotificationRequest,
+  type FirmwareStatusNotificationRequest,
   type HeartbeatRequest,
   type MeterValuesRequest,
   RequestCommand,
+  RequestParams,
   type StatusNotificationRequest,
 } from '../types/ocpp/Requests';
 import {
   type BootNotificationResponse,
   type DataTransferResponse,
   DataTransferStatus,
+  type DiagnosticsStatusNotificationResponse,
+  type FirmwareStatusNotificationResponse,
   type HeartbeatResponse,
   type MeterValuesResponse,
-  RegistrationStatus,
+  RegistrationStatusEnumType,
   type StatusNotificationResponse,
 } from '../types/ocpp/Responses';
 import {
@@ -53,7 +58,9 @@ type CommandResponse =
   | StatusNotificationResponse
   | HeartbeatResponse
   | MeterValuesResponse
-  | DataTransferResponse;
+  | DataTransferResponse
+  | DiagnosticsStatusNotificationResponse
+  | FirmwareStatusNotificationResponse;
 
 type CommandHandler = (
   requestPayload?: BroadcastChannelRequestPayload
@@ -65,6 +72,9 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
 
   constructor(chargingStation: ChargingStation) {
     super();
+    const requestParams: RequestParams = {
+      throwError: true,
+    };
     this.commandHandlers = new Map<BroadcastChannelProcedureName, CommandHandler>([
       [BroadcastChannelProcedureName.START_CHARGING_STATION, () => this.chargingStation.start()],
       [
@@ -95,7 +105,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
           this.chargingStation.ocppRequestService.requestHandler<
             StartTransactionRequest,
             StartTransactionResponse
-          >(this.chargingStation, RequestCommand.START_TRANSACTION, requestPayload),
+          >(this.chargingStation, RequestCommand.START_TRANSACTION, requestPayload, requestParams),
       ],
       [
         BroadcastChannelProcedureName.STOP_TRANSACTION,
@@ -109,6 +119,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
               true
             ),
             ...requestPayload,
+            requestParams,
           }),
       ],
       [
@@ -117,7 +128,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
           this.chargingStation.ocppRequestService.requestHandler<
             AuthorizeRequest,
             AuthorizeResponse
-          >(this.chargingStation, RequestCommand.AUTHORIZE, requestPayload),
+          >(this.chargingStation, RequestCommand.AUTHORIZE, requestPayload, requestParams),
       ],
       [
         BroadcastChannelProcedureName.BOOT_NOTIFICATION,
@@ -135,6 +146,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
               },
               {
                 skipBufferingOnError: true,
+                throwError: true,
               }
             );
           return this.chargingStation.bootNotificationResponse;
@@ -146,7 +158,12 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
           this.chargingStation.ocppRequestService.requestHandler<
             StatusNotificationRequest,
             StatusNotificationResponse
-          >(this.chargingStation, RequestCommand.STATUS_NOTIFICATION, requestPayload),
+          >(
+            this.chargingStation,
+            RequestCommand.STATUS_NOTIFICATION,
+            requestPayload,
+            requestParams
+          ),
       ],
       [
         BroadcastChannelProcedureName.HEARTBEAT,
@@ -154,7 +171,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
           this.chargingStation.ocppRequestService.requestHandler<
             HeartbeatRequest,
             HeartbeatResponse
-          >(this.chargingStation, RequestCommand.HEARTBEAT, requestPayload),
+          >(this.chargingStation, RequestCommand.HEARTBEAT, requestPayload, requestParams),
       ],
       [
         BroadcastChannelProcedureName.METER_VALUES,
@@ -179,6 +196,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
               ),
             ],
             ...requestPayload,
+            requestParams,
           });
         },
       ],
@@ -188,7 +206,33 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
           this.chargingStation.ocppRequestService.requestHandler<
             DataTransferRequest,
             DataTransferResponse
-          >(this.chargingStation, RequestCommand.DATA_TRANSFER, requestPayload),
+          >(this.chargingStation, RequestCommand.DATA_TRANSFER, requestPayload, requestParams),
+      ],
+      [
+        BroadcastChannelProcedureName.DIAGNOSTICS_STATUS_NOTIFICATION,
+        async (requestPayload?: BroadcastChannelRequestPayload) =>
+          this.chargingStation.ocppRequestService.requestHandler<
+            DiagnosticsStatusNotificationRequest,
+            DiagnosticsStatusNotificationResponse
+          >(
+            this.chargingStation,
+            RequestCommand.DIAGNOSTICS_STATUS_NOTIFICATION,
+            requestPayload,
+            requestParams
+          ),
+      ],
+      [
+        BroadcastChannelProcedureName.FIRMWARE_STATUS_NOTIFICATION,
+        async (requestPayload?: BroadcastChannelRequestPayload) =>
+          this.chargingStation.ocppRequestService.requestHandler<
+            FirmwareStatusNotificationRequest,
+            FirmwareStatusNotificationResponse
+          >(
+            this.chargingStation,
+            RequestCommand.FIRMWARE_STATUS_NOTIFICATION,
+            requestPayload,
+            requestParams
+          ),
       ],
     ]);
     this.chargingStation = chargingStation;
@@ -213,7 +257,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
     }
     if (requestPayload?.hashId !== undefined) {
       logger.error(
-        `${this.chargingStation.logPrefix()} ${moduleName}.requestHandler: 'hashId' field usage in PDU is deprecated, use 'hashIds' instead`
+        `${this.chargingStation.logPrefix()} ${moduleName}.requestHandler: 'hashId' field usage in PDU is deprecated, use 'hashIds' array instead`
       );
       return;
     }
@@ -221,7 +265,11 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
     let commandResponse: CommandResponse | void;
     try {
       commandResponse = await this.commandHandler(command, requestPayload);
-      if (commandResponse === undefined || commandResponse === null) {
+      if (
+        commandResponse === undefined ||
+        commandResponse === null ||
+        Utils.isEmptyObject(commandResponse as CommandResponse)
+      ) {
         responsePayload = {
           hashId: this.chargingStation.stationInfo.hashId,
           status: ResponseStatus.SUCCESS,
@@ -324,7 +372,7 @@ export default class ChargingStationWorkerBroadcastChannel extends WorkerBroadca
         }
         return ResponseStatus.FAILURE;
       case BroadcastChannelProcedureName.BOOT_NOTIFICATION:
-        if (commandResponse?.status === RegistrationStatus.ACCEPTED) {
+        if (commandResponse?.status === RegistrationStatusEnumType.ACCEPTED) {
           return ResponseStatus.SUCCESS;
         }
         return ResponseStatus.FAILURE;