build: switch to NodeNext module resolution
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 1.6 / OCPP16IncomingRequestService.ts
index 3647ebdb78d9a234ac7a4a95673dc1a19cc18165..f1ea435aac3fba768a8c76506e167494dacc574a 100644 (file)
@@ -6,11 +6,18 @@ import { URL, fileURLToPath } from 'node:url';
 
 import type { JSONSchemaType } from 'ajv';
 import { Client, type FTPResponse } from 'basic-ftp';
-import { addSeconds, differenceInSeconds, isDate, maxTime, secondsToMilliseconds } from 'date-fns';
+import {
+  type Interval,
+  addSeconds,
+  differenceInSeconds,
+  isDate,
+  secondsToMilliseconds,
+} from 'date-fns';
+import { maxTime } from 'date-fns/constants';
 import { create } from 'tar';
 
-import { OCPP16Constants } from './OCPP16Constants';
-import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
+import { OCPP16Constants } from './OCPP16Constants.js';
+import { OCPP16ServiceUtils } from './OCPP16ServiceUtils.js';
 import {
   type ChargingStation,
   canProceedChargingProfile,
@@ -20,13 +27,11 @@ import {
   prepareChargingProfileKind,
   removeExpiredReservations,
   setConfigurationKeyValue,
-} from '../../../charging-station';
-import { OCPPError } from '../../../exception';
+} from '../../../charging-station/index.js';
+import { OCPPError } from '../../../exception/index.js';
 import {
   type ChangeConfigurationRequest,
   type ChangeConfigurationResponse,
-  type ClearChargingProfileRequest,
-  type ClearChargingProfileResponse,
   ErrorType,
   type GenericResponse,
   GenericStatus,
@@ -49,6 +54,8 @@ import {
   OCPP16ChargingProfilePurposeType,
   type OCPP16ChargingSchedule,
   type OCPP16ClearCacheRequest,
+  type OCPP16ClearChargingProfileRequest,
+  type OCPP16ClearChargingProfileResponse,
   type OCPP16DataTransferRequest,
   type OCPP16DataTransferResponse,
   OCPP16DataTransferVendorId,
@@ -88,7 +95,7 @@ import {
   type SetChargingProfileResponse,
   type UnlockConnectorRequest,
   type UnlockConnectorResponse,
-} from '../../../types';
+} from '../../../types/index.js';
 import {
   Constants,
   convertToDate,
@@ -102,8 +109,8 @@ import {
   isUndefined,
   logger,
   sleep,
-} from '../../../utils';
-import { OCPPIncomingRequestService } from '../OCPPIncomingRequestService';
+} from '../../../utils/index.js';
+import { OCPPIncomingRequestService } from '../OCPPIncomingRequestService.js';
 
 const moduleName = 'OCPP16IncomingRequestService';
 
@@ -253,7 +260,7 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
       ],
       [
         OCPP16IncomingRequestCommand.CLEAR_CHARGING_PROFILE,
-        OCPP16ServiceUtils.parseJsonSchemaFile<ClearChargingProfileRequest>(
+        OCPP16ServiceUtils.parseJsonSchemaFile<OCPP16ClearChargingProfileRequest>(
           'assets/json-schemas/ocpp/1.6/ClearChargingProfile.json',
           moduleName,
           'constructor',
@@ -438,14 +445,9 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     commandPayload: ResetRequest,
   ): GenericResponse {
     const { type } = commandPayload;
-    this.runInAsyncScope(
-      chargingStation.reset.bind(chargingStation) as (
-        this: ChargingStation,
-        ...args: unknown[]
-      ) => Promise<void>,
-      chargingStation,
-      `${type}Reset` as OCPP16StopTransactionReason,
-    ).catch(Constants.EMPTY_FUNCTION);
+    chargingStation
+      .reset(`${type}Reset` as OCPP16StopTransactionReason)
+      .catch(Constants.EMPTY_FUNCTION);
     logger.info(
       `${chargingStation.logPrefix()} ${type} reset command received, simulating it. The station will be back online in ${formatDurationMilliSeconds(
         chargingStation.stationInfo.resetTime!,
@@ -791,8 +793,8 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
 
   private handleRequestClearChargingProfile(
     chargingStation: ChargingStation,
-    commandPayload: ClearChargingProfileRequest,
-  ): ClearChargingProfileResponse {
+    commandPayload: OCPP16ClearChargingProfileRequest,
+  ): OCPP16ClearChargingProfileResponse {
     if (
       OCPP16ServiceUtils.checkFeatureProfile(
         chargingStation,
@@ -1103,7 +1105,10 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
       return OCPP16Constants.OCPP_RESPONSE_EMPTY;
     }
     let { retrieveDate } = commandPayload;
-    if (chargingStation.stationInfo.firmwareStatus !== OCPP16FirmwareStatus.Installed) {
+    if (
+      !isNullOrUndefined(chargingStation.stationInfo.firmwareStatus) &&
+      chargingStation.stationInfo.firmwareStatus !== OCPP16FirmwareStatus.Installed
+    ) {
       logger.warn(
         `${chargingStation.logPrefix()} ${moduleName}.handleRequestUpdateFirmware: Cannot simulate firmware update: firmware update is already in progress`,
       );
@@ -1112,25 +1117,11 @@ export class OCPP16IncomingRequestService extends OCPPIncomingRequestService {
     retrieveDate = convertToDate(retrieveDate)!;
     const now = Date.now();
     if (retrieveDate?.getTime() <= now) {
-      this.runInAsyncScope(
-        this.updateFirmwareSimulation.bind(this) as (
-          this: OCPP16IncomingRequestService,
-          ...args: unknown[]
-        ) => Promise<void>,
-        this,
-        chargingStation,
-      ).catch(Constants.EMPTY_FUNCTION);
+      this.updateFirmwareSimulation(chargingStation).catch(Constants.EMPTY_FUNCTION);
     } else {
       setTimeout(
         () => {
-          this.runInAsyncScope(
-            this.updateFirmwareSimulation.bind(this) as (
-              this: OCPP16IncomingRequestService,
-              ...args: unknown[]
-            ) => Promise<void>,
-            this,
-            chargingStation,
-          ).catch(Constants.EMPTY_FUNCTION);
+          this.updateFirmwareSimulation(chargingStation).catch(Constants.EMPTY_FUNCTION);
         },
         retrieveDate?.getTime() - now,
       );