]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commitdiff
refactor(ocpp): remove dead parseJsonSchemaFile overrides and standardize validation
authorJérôme Benoit <jerome.benoit@sap.com>
Thu, 12 Mar 2026 22:42:20 +0000 (23:42 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Thu, 12 Mar 2026 22:42:20 +0000 (23:42 +0100)
- Delete unused parseJsonSchemaFile overrides from OCPP16/20ServiceUtils
  (createPayloadValidatorMap already passes version via options)
- Remove orphaned JSONSchemaType and JsonType imports
- Standardize null-validator return to false in OCPPRequestService
  (consistent with OCPPIncomingRequestService and OCPPResponseService)
- Change validateRequestPayload and validateIncomingRequestResponsePayload
  visibility from private to protected (consistent with other base classes)

src/charging-station/ocpp/1.6/OCPP16ServiceUtils.ts
src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts
src/charging-station/ocpp/OCPPRequestService.ts

index 996c2f45dcc63e34cd7a73b9634a94579989d9af..515fffeb6916927a5b0f9bc3a6d1f5990e172a9d 100644 (file)
@@ -1,5 +1,3 @@
-import type { JSONSchemaType } from 'ajv'
-
 import {
   addSeconds,
   areIntervalsOverlapping,
@@ -18,7 +16,6 @@ import {
 import {
   type ConfigurationKey,
   type GenericResponse,
-  type JsonType,
   OCPP16AuthorizationStatus,
   type OCPP16AvailabilityType,
   type OCPP16ChangeAvailabilityResponse,
@@ -515,19 +512,6 @@ export class OCPP16ServiceUtils extends OCPPServiceUtils {
     return key.visible
   }
 
-  public static override parseJsonSchemaFile<T extends JsonType>(
-    relativePath: string,
-    moduleName?: string,
-    methodName?: string
-  ): JSONSchemaType<T> {
-    return super.parseJsonSchemaFile<T>(
-      relativePath,
-      OCPPVersion.VERSION_16,
-      moduleName,
-      methodName
-    )
-  }
-
   public static remoteStopTransaction = async (
     chargingStation: ChargingStation,
     connectorId: number
index 5bcc1268ca6f813ccd5a82eedcfdb2527c497850..3bcc0909f57cecb783af8d0ca15fdfecc059a98f 100644 (file)
@@ -1,14 +1,11 @@
 /* eslint-disable @typescript-eslint/unified-signatures */
 
-import type { JSONSchemaType } from 'ajv'
-
 import { type ChargingStation, resetConnectorStatus } from '../../../charging-station/index.js'
 import { OCPPError } from '../../../exception/index.js'
 import {
   ConnectorStatusEnum,
   ErrorType,
   type GenericResponse,
-  type JsonType,
   OCPP20IncomingRequestCommand,
   OCPP20RequestCommand,
   OCPP20TransactionEventEnumType,
@@ -386,19 +383,6 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils {
     return currentResults
   }
 
-  public static override parseJsonSchemaFile<T extends JsonType>(
-    relativePath: string,
-    moduleName?: string,
-    methodName?: string
-  ): JSONSchemaType<T> {
-    return super.parseJsonSchemaFile<T>(
-      relativePath,
-      OCPPVersion.VERSION_201,
-      moduleName,
-      methodName
-    )
-  }
-
   /**
    * Read ItemsPerMessage and BytesPerMessage configuration limits
    * Extracts configuration-reading logic shared between handleRequestGetVariables
index c9762612e30532e78dbc6e75a4710069980bbd34..ce31ba90b210df0ecdf380d85f5e90cd273b3edc 100644 (file)
@@ -179,6 +179,83 @@ export abstract class OCPPRequestService {
     }
   }
 
+  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
+  protected validateIncomingRequestResponsePayload<T extends JsonType>(
+    chargingStation: ChargingStation,
+    commandName: IncomingRequestCommand | RequestCommand,
+    payload: T
+  ): boolean {
+    if (chargingStation.stationInfo?.ocppStrictCompliance === false) {
+      return true
+    }
+    const validate = this.ocppResponseService.incomingRequestResponsePayloadValidateFunctions.get(
+      commandName as IncomingRequestCommand
+    )
+    if (validate == null) {
+      logger.warn(
+        `${chargingStation.logPrefix()} ${moduleName}.validateIncomingRequestResponsePayload: No JSON schema validation function found for command '${commandName}' PDU validation`
+      )
+      return false
+    }
+    payload = clone<T>(payload)
+    convertDateToISOString<T>(payload)
+    if (validate(payload)) {
+      return true
+    }
+    logger.error(
+      `${chargingStation.logPrefix()} ${moduleName}.validateIncomingRequestResponsePayload: Command '${commandName}' incoming request response PDU is invalid: %j`,
+      validate.errors
+    )
+    // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
+    throw new OCPPError(
+      ajvErrorsToErrorType(validate.errors),
+      'Incoming request response PDU is invalid',
+      commandName,
+      JSON.stringify(validate.errors, undefined, 2)
+    )
+  }
+
+  /**
+   * Validates outgoing request payload against JSON schema
+   * @param chargingStation - The charging station instance sending the request
+   * @param commandName - OCPP command name to validate against
+   * @param payload - JSON payload to validate
+   * @returns True if payload validation succeeds, false otherwise
+   */
+  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
+  protected validateRequestPayload<T extends JsonType>(
+    chargingStation: ChargingStation,
+    commandName: IncomingRequestCommand | RequestCommand,
+    payload: T
+  ): boolean {
+    if (chargingStation.stationInfo?.ocppStrictCompliance === false) {
+      return true
+    }
+    const validate = this.payloadValidatorFunctions.get(commandName as RequestCommand)
+    if (validate == null) {
+      logger.warn(
+        `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: No JSON schema validation function found for command '${commandName}' PDU validation`
+      )
+      return false
+    }
+    payload = clone<T>(payload)
+    convertDateToISOString<T>(payload)
+    if (validate(payload)) {
+      return true
+    }
+    logger.error(
+      `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: Command '${commandName}' request PDU is invalid: %j`,
+      validate.errors
+    )
+    // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
+    throw new OCPPError(
+      ajvErrorsToErrorType(validate.errors),
+      'Request PDU is invalid',
+      commandName,
+      JSON.stringify(validate.errors, undefined, 2)
+    )
+  }
+
   private buildMessageToSend (
     chargingStation: ChargingStation,
     messageId: string,
@@ -438,81 +515,4 @@ export abstract class OCPPRequestService {
       messagePayload,
     ])
   }
-
-  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
-  private validateIncomingRequestResponsePayload<T extends JsonType>(
-    chargingStation: ChargingStation,
-    commandName: IncomingRequestCommand | RequestCommand,
-    payload: T
-  ): boolean {
-    if (chargingStation.stationInfo?.ocppStrictCompliance === false) {
-      return true
-    }
-    const validate = this.ocppResponseService.incomingRequestResponsePayloadValidateFunctions.get(
-      commandName as IncomingRequestCommand
-    )
-    if (validate == null) {
-      logger.warn(
-        `${chargingStation.logPrefix()} ${moduleName}.validateIncomingRequestResponsePayload: No JSON schema validation function found for command '${commandName}' PDU validation`
-      )
-      return true
-    }
-    payload = clone<T>(payload)
-    convertDateToISOString<T>(payload)
-    if (validate(payload)) {
-      return true
-    }
-    logger.error(
-      `${chargingStation.logPrefix()} ${moduleName}.validateIncomingRequestResponsePayload: Command '${commandName}' incoming request response PDU is invalid: %j`,
-      validate.errors
-    )
-    // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
-    throw new OCPPError(
-      ajvErrorsToErrorType(validate.errors),
-      'Incoming request response PDU is invalid',
-      commandName,
-      JSON.stringify(validate.errors, undefined, 2)
-    )
-  }
-
-  /**
-   * Validates outgoing request payload against JSON schema
-   * @param chargingStation - The charging station instance sending the request
-   * @param commandName - OCPP command name to validate against
-   * @param payload - JSON payload to validate
-   * @returns True if payload validation succeeds, false otherwise
-   */
-  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
-  private validateRequestPayload<T extends JsonType>(
-    chargingStation: ChargingStation,
-    commandName: IncomingRequestCommand | RequestCommand,
-    payload: T
-  ): boolean {
-    if (chargingStation.stationInfo?.ocppStrictCompliance === false) {
-      return true
-    }
-    const validate = this.payloadValidatorFunctions.get(commandName as RequestCommand)
-    if (validate == null) {
-      logger.warn(
-        `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: No JSON schema validation function found for command '${commandName}' PDU validation`
-      )
-      return true
-    }
-    payload = clone<T>(payload)
-    convertDateToISOString<T>(payload)
-    if (validate(payload)) {
-      return true
-    }
-    logger.error(
-      `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: Command '${commandName}' request PDU is invalid: %j`,
-      validate.errors
-    )
-    // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError().
-    throw new OCPPError(
-      ajvErrorsToErrorType(validate.errors),
-      'Request PDU is invalid',
-      commandName,
-      JSON.stringify(validate.errors, undefined, 2)
-    )
-  }
 }