Strong type protocols payloads
authorJérôme Benoit <jerome.benoit@sap.com>
Sun, 6 Feb 2022 09:24:47 +0000 (10:24 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Sun, 6 Feb 2022 09:24:47 +0000 (10:24 +0100)
And fix related bugs

Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
14 files changed:
src/charging-station/ChargingStation.ts
src/charging-station/UIWebSocketServer.ts
src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts
src/charging-station/ocpp/1.6/OCPP16RequestService.ts
src/charging-station/ocpp/1.6/OCPP16ResponseService.ts
src/charging-station/ocpp/OCPPIncomingRequestService.ts
src/charging-station/ocpp/OCPPRequestService.ts
src/charging-station/ocpp/OCPPResponseService.ts
src/charging-station/ui-websocket-services/AbstractUIService.ts
src/charging-station/ui-websocket-services/UIService001.ts
src/exception/OCPPError.ts
src/types/UIProtocol.ts
src/types/ocpp/Requests.ts
src/types/ocpp/Responses.ts

index 6be15b83e980656b237a7a1586078134dd17ae54..99e8f5ee6aaf91b923c8da8d491e4ba383381e12 100644 (file)
@@ -20,6 +20,7 @@ import { ConnectorStatus } from '../types/ConnectorStatus';
 import Constants from '../utils/Constants';
 import { ErrorType } from '../types/ocpp/ErrorType';
 import FileUtils from '../utils/FileUtils';
+import { JsonType } from '../types/JsonType';
 import { MessageType } from '../types/ocpp/MessageType';
 import OCPP16IncomingRequestService from './ocpp/1.6/OCPP16IncomingRequestService';
 import OCPP16RequestService from './ocpp/1.6/OCPP16RequestService';
@@ -697,10 +698,10 @@ export default class ChargingStation {
 
   private async onMessage(data: Data): Promise<void> {
     let [messageType, messageId, commandName, commandPayload, errorDetails]: IncomingRequest = [0, '', '' as IncomingRequestCommand, {}, {}];
-    let responseCallback: (payload: Record<string, unknown> | string, requestPayload: Record<string, unknown>) => void;
+    let responseCallback: (payload: JsonType | string, requestPayload: JsonType | OCPPError) => void;
     let rejectCallback: (error: OCPPError, requestStatistic?: boolean) => void;
     let requestCommandName: RequestCommand | IncomingRequestCommand;
-    let requestPayload: Record<string, unknown>;
+    let requestPayload: JsonType | OCPPError;
     let cachedRequest: CachedRequest;
     let errMsg: string;
     try {
index dba59e9206b4a32583c049bc64d4154abb5d5fd4..083f95bcdbac1022a90ccae19d786a7e52594bd3 100644 (file)
@@ -5,6 +5,7 @@ import AbstractUIService from './ui-websocket-services/AbstractUIService';
 import BaseError from '../exception/BaseError';
 import Configuration from '../utils/Configuration';
 import { IncomingMessage } from 'http';
+import { JsonType } from '../types/JsonType';
 import UIServiceFactory from './ui-websocket-services/UIServiceFactory';
 import Utils from '../utils/Utils';
 import logger from '../utils/Logger';
@@ -23,7 +24,7 @@ export default class UIWebSocketServer extends Server {
     }
   }
 
-  public broadcastToClients(message: string | Record<string, unknown>): void {
+  public broadcastToClients(message: string): void {
     for (const client of this.clients) {
       if (client?.readyState === OPEN) {
         client.send(message);
index 77bf637f228a6c116976f534f1c102387211427b..4988a9ef491f6187f62916fa5ae7fb7e6ef24b96 100644 (file)
@@ -11,6 +11,7 @@ import Constants from '../../../utils/Constants';
 import { DefaultResponse } from '../../../types/ocpp/Responses';
 import { ErrorType } from '../../../types/ocpp/ErrorType';
 import { IncomingRequestHandler } from '../../../types/ocpp/Requests';
+import { JsonType } from '../../../types/JsonType';
 import { OCPP16ChargePointStatus } from '../../../types/ocpp/1.6/ChargePointStatus';
 import { OCPP16DiagnosticsStatus } from '../../../types/ocpp/1.6/DiagnosticsStatus';
 import { OCPP16StandardParametersKey } from '../../../types/ocpp/1.6/Configuration';
@@ -45,8 +46,8 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
     ]);
   }
 
-  public async handleRequest(messageId: string, commandName: OCPP16IncomingRequestCommand, commandPayload: Record<string, unknown>): Promise<void> {
-    let result: Record<string, unknown>;
+  public async handleRequest(messageId: string, commandName: OCPP16IncomingRequestCommand, commandPayload: JsonType): Promise<void> {
+    let result: JsonType;
     if (this.chargingStation.isInPendingState()
       && (commandName === OCPP16IncomingRequestCommand.REMOTE_START_TRANSACTION || commandName === OCPP16IncomingRequestCommand.REMOTE_STOP_TRANSACTION)) {
       throw new OCPPError(ErrorType.SECURITY_ERROR, `${commandName} cannot be issued to handle request payload ${JSON.stringify(commandPayload, null, 2)} while charging station is in pending state`, commandName);
@@ -433,7 +434,10 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
           setTimeout(() => {
             this.chargingStation.ocppRequestService.sendBootNotification(this.chargingStation.getBootNotificationRequest().chargePointModel,
               this.chargingStation.getBootNotificationRequest().chargePointVendor, this.chargingStation.getBootNotificationRequest().chargeBoxSerialNumber,
-              this.chargingStation.getBootNotificationRequest().firmwareVersion, null, null, null, null, null, { triggerMessage: true }).catch(() => { /* This is intentional */ });
+              this.chargingStation.getBootNotificationRequest().firmwareVersion, this.chargingStation.getBootNotificationRequest().chargePointSerialNumber,
+              this.chargingStation.getBootNotificationRequest().iccid, this.chargingStation.getBootNotificationRequest().imsi,
+              this.chargingStation.getBootNotificationRequest().meterSerialNumber, this.chargingStation.getBootNotificationRequest().meterType,
+              { triggerMessage: true }).catch(() => { /* This is intentional */ });
           }, Constants.OCPP_TRIGGER_MESSAGE_DELAY);
           return Constants.OCPP_TRIGGER_MESSAGE_RESPONSE_ACCEPTED;
         case MessageTrigger.Heartbeat:
index 6ae6cf3225e208abba901fb3e560608b943f1158..1fc89fa8c2d15b1bd0df8e3bed919d3063b6e2c3 100644 (file)
@@ -8,6 +8,7 @@ import { MeterValueUnit, MeterValuesRequest, OCPP16MeterValue, OCPP16MeterValueM
 
 import Constants from '../../../utils/Constants';
 import { ErrorType } from '../../../types/ocpp/ErrorType';
+import { JsonType } from '../../../types/JsonType';
 import MeasurandPerPhaseSampledValueTemplates from '../../../types/MeasurandPerPhaseSampledValueTemplates';
 import MeasurandValues from '../../../types/MeasurandValues';
 import { MessageType } from '../../../types/ocpp/MessageType';
@@ -381,21 +382,21 @@ export default class OCPP16RequestService extends OCPPRequestService {
     }
   }
 
-  public async sendResult(messageId: string, resultMessageData: Record<string, unknown>, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise<unknown> {
+  public async sendResult(messageId: string, resultMessageData: JsonType, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise<JsonType> {
     try {
       // Send error
-      return await this.sendMessage(messageId, resultMessageData, MessageType.CALL_RESULT_MESSAGE, commandName);
-    } catch (err) {
-      this.handleRequestError(commandName as OCPP16RequestCommand, err as Error);
+      return await this.sendMessage(messageId, resultMessageData, MessageType.CALL_RESULT_MESSAGE, commandName) as JsonType;
+    } catch (error) {
+      this.handleRequestError(commandName as OCPP16RequestCommand, error as Error);
     }
   }
 
-  public async sendError(messageId: string, error: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise<unknown> {
+  public async sendError(messageId: string, ocppError: OCPPError, commandName: OCPP16RequestCommand | OCPP16IncomingRequestCommand): Promise<JsonType> {
     try {
       // Send error
-      return await this.sendMessage(messageId, error, MessageType.CALL_ERROR_MESSAGE, commandName);
-    } catch (err) {
-      this.handleRequestError(commandName as OCPP16RequestCommand, err as Error);
+      return await this.sendMessage(messageId, ocppError, MessageType.CALL_ERROR_MESSAGE, commandName) as JsonType;
+    } catch (error) {
+      this.handleRequestError(commandName as OCPP16RequestCommand, error as Error);
     }
   }
 }
index 5b6a3feca3babbc40699c68b64e83a18d092c422..05e2ed9a4f7e0c4043a2d31d6caf616f7d73953f 100644 (file)
@@ -7,6 +7,7 @@ import { MeterValuesRequest, MeterValuesResponse } from '../../../types/ocpp/1.6
 
 import ChargingStation from '../../ChargingStation';
 import { ErrorType } from '../../../types/ocpp/ErrorType';
+import { JsonType } from '../../../types/JsonType';
 import { OCPP16ChargePointStatus } from '../../../types/ocpp/1.6/ChargePointStatus';
 import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
 import { OCPP16StandardParametersKey } from '../../../types/ocpp/1.6/Configuration';
@@ -32,7 +33,7 @@ export default class OCPP16ResponseService extends OCPPResponseService {
     ]);
   }
 
-  public async handleResponse(commandName: OCPP16RequestCommand, payload: Record<string, unknown> | string, requestPayload: Record<string, unknown>): Promise<void> {
+  public async handleResponse(commandName: OCPP16RequestCommand, payload: JsonType | string, requestPayload: JsonType): Promise<void> {
     if (this.chargingStation.isRegistered() || commandName === OCPP16RequestCommand.BOOT_NOTIFICATION) {
       if (this.responseHandlers.has(commandName)) {
         try {
index dcef40287f014d9de35a04a95fa022a013a9ae37..e815fe298d4590f610f279443ca46998817552e2 100644 (file)
@@ -1,5 +1,6 @@
 import ChargingStation from '../ChargingStation';
 import { IncomingRequestCommand } from '../../types/ocpp/Requests';
+import { JsonType } from '../../types/JsonType';
 import logger from '../../utils/Logger';
 
 export default abstract class OCPPIncomingRequestService {
@@ -17,5 +18,5 @@ export default abstract class OCPPIncomingRequestService {
     throw error;
   }
 
-  public abstract handleRequest(messageId: string, commandName: IncomingRequestCommand, commandPayload: Record<string, unknown>): Promise<void>;
+  public abstract handleRequest(messageId: string, commandName: IncomingRequestCommand, commandPayload: JsonType): Promise<void>;
 }
index e459bc07a6bdba06c0466f099196851dfd38076f..14cab283366c96b64cd61bf7970251ae2c0f43c8 100644 (file)
@@ -7,6 +7,7 @@ import { ChargePointStatus } from '../../types/ocpp/ChargePointStatus';
 import ChargingStation from '../ChargingStation';
 import Constants from '../../utils/Constants';
 import { ErrorType } from '../../types/ocpp/ErrorType';
+import { JsonType } from '../../types/JsonType';
 import { MessageType } from '../../types/ocpp/MessageType';
 import { MeterValue } from '../../types/ocpp/MeterValues';
 import OCPPError from '../../exception/OCPPError';
@@ -24,11 +25,11 @@ export default abstract class OCPPRequestService {
     this.ocppResponseService = ocppResponseService;
   }
 
-  public async sendMessage(messageId: string, messageData: any, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand,
+  public async sendMessage(messageId: string, messageData: JsonType | OCPPError, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand,
       params: SendParams = {
         skipBufferingOnError: false,
         triggerMessage: false
-      }): Promise<unknown> {
+      }): Promise<JsonType | OCPPError | string> {
     if (this.chargingStation.isInRejectedState() || (this.chargingStation.isInPendingState() && !params.triggerMessage)) {
       throw new OCPPError(ErrorType.SECURITY_ERROR, 'Cannot send command payload if the charging station is not in accepted state', commandName);
     } else if (this.chargingStation.isInAcceptedState() || (this.chargingStation.isInPendingState() && params.triggerMessage)) {
@@ -50,7 +51,7 @@ export default abstract class OCPPRequestService {
         } else if (!params.skipBufferingOnError) {
           // Buffer it
           this.chargingStation.bufferMessage(messageToSend);
-          const ocppError = new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for buffered message id '${messageId}' with content '${messageToSend}'`, messageData?.details ?? {});
+          const ocppError = new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for buffered message id '${messageId}' with content '${messageToSend}'`, commandName, messageData?.details as JsonType ?? {});
           if (messageType === MessageType.CALL_MESSAGE) {
             // Reject it but keep the request in the cache
             return reject(ocppError);
@@ -58,7 +59,7 @@ export default abstract class OCPPRequestService {
           return rejectCallback(ocppError, false);
         } else {
           // Reject it
-          return rejectCallback(new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for non buffered message id '${messageId}' with content '${messageToSend}'`, messageData?.details ?? {}), false);
+          return rejectCallback(new OCPPError(ErrorType.GENERIC_ERROR, `WebSocket closed for non buffered message id '${messageId}' with content '${messageToSend}'`, commandName, messageData?.details as JsonType ?? {}), false);
         }
         // Response?
         if (messageType !== MessageType.CALL_MESSAGE) {
@@ -72,7 +73,7 @@ export default abstract class OCPPRequestService {
          * @param payload
          * @param requestPayload
          */
-        async function responseCallback(payload: Record<string, unknown> | string, requestPayload: Record<string, unknown>): Promise<void> {
+        async function responseCallback(payload: JsonType | string, requestPayload: JsonType): Promise<void> {
           if (self.chargingStation.getEnableStatistics()) {
             self.chargingStation.performanceStatistics.addRequestStatistic(commandName, MessageType.CALL_RESULT_MESSAGE);
           }
@@ -102,7 +103,7 @@ export default abstract class OCPPRequestService {
           self.chargingStation.requests.delete(messageId);
           reject(error);
         }
-      }), Constants.OCPP_WEBSOCKET_TIMEOUT, new OCPPError(ErrorType.GENERIC_ERROR, `Timeout for message id '${messageId}'`, messageData?.details ?? {}), () => {
+      }), Constants.OCPP_WEBSOCKET_TIMEOUT, new OCPPError(ErrorType.GENERIC_ERROR, `Timeout for message id '${messageId}'`, commandName, messageData?.details as JsonType ?? {}), () => {
         messageType === MessageType.CALL_MESSAGE && this.chargingStation.requests.delete(messageId);
       });
     } else {
@@ -115,8 +116,8 @@ export default abstract class OCPPRequestService {
     throw error;
   }
 
-  private buildMessageToSend(messageId: string, messageData: Record<string, unknown>, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand,
-      responseCallback: (payload: Record<string, unknown> | string, requestPayload: Record<string, unknown>) => Promise<void>,
+  private buildMessageToSend(messageId: string, messageData: JsonType | OCPPError, messageType: MessageType, commandName: RequestCommand | IncomingRequestCommand,
+      responseCallback: (payload: JsonType | string, requestPayload: JsonType) => Promise<void>,
       rejectCallback: (error: OCPPError, requestStatistic?: boolean) => void): string {
     let messageToSend: string;
     // Type of message
@@ -151,6 +152,6 @@ export default abstract class OCPPRequestService {
   public abstract sendTransactionBeginMeterValues(connectorId: number, transactionId: number, beginMeterValue: MeterValue): Promise<void>;
   public abstract sendTransactionEndMeterValues(connectorId: number, transactionId: number, endMeterValue: MeterValue): Promise<void>;
   public abstract sendDiagnosticsStatusNotification(diagnosticsStatus: DiagnosticsStatus): Promise<void>;
-  public abstract sendResult(messageId: string, resultMessageData: Record<string, unknown>, commandName: RequestCommand | IncomingRequestCommand): Promise<unknown>;
-  public abstract sendError(messageId: string, error: OCPPError, commandName: RequestCommand | IncomingRequestCommand): Promise<unknown>;
+  public abstract sendResult(messageId: string, resultMessageData: JsonType, commandName: RequestCommand | IncomingRequestCommand): Promise<JsonType>;
+  public abstract sendError(messageId: string, error: OCPPError, commandName: RequestCommand | IncomingRequestCommand): Promise<JsonType>;
 }
index 0a1cd0c610a117ad9c7b0af8211c6ef2efe037c5..17bf80650c1e04e615e7b7ddc017f31d43822dc8 100644 (file)
@@ -1,4 +1,5 @@
 import ChargingStation from '../ChargingStation';
+import { JsonType } from '../../types/JsonType';
 import { RequestCommand } from '../../types/ocpp/Requests';
 
 export default abstract class OCPPResponseService {
@@ -8,5 +9,5 @@ export default abstract class OCPPResponseService {
     this.chargingStation = chargingStation;
   }
 
-  public abstract handleResponse(commandName: RequestCommand, payload: Record<string, unknown> | string, requestPayload: Record<string, unknown>): Promise<void>;
+  public abstract handleResponse(commandName: RequestCommand, payload: JsonType | string, requestPayload: JsonType): Promise<void>;
 }
index 130c8a5a0d06629897e4b576036df214d1260c27..2dd6a2008465dbf29a336b7e010156bbb676f33b 100644 (file)
@@ -1,6 +1,7 @@
 import { ProtocolCommand, ProtocolRequestHandler } from '../../types/UIProtocol';
 
 import BaseError from '../../exception/BaseError';
+import { JsonType } from '../../types/JsonType';
 import UIWebSocketServer from '../UIWebSocketServer';
 import logger from '../../utils/Logger';
 
@@ -15,12 +16,12 @@ export default abstract class AbstractUIService {
     ]);
   }
 
-  public async handleMessage(command: ProtocolCommand, payload: Record<string, unknown>): Promise<void> {
-    let messageResponse: Record<string, unknown>;
+  public async handleMessage(command: ProtocolCommand, payload: JsonType): Promise<void> {
+    let messageResponse: JsonType;
     if (this.messageHandlers.has(command)) {
       try {
         // Call the method to build the message response
-        messageResponse = await this.messageHandlers.get(command)(payload) as Record<string, unknown>;
+        messageResponse = await this.messageHandlers.get(command)(payload) as JsonType;
       } catch (error) {
         // Log
         logger.error(this.uiWebSocketServer.logPrefix() + ' Handle message error: %j', error);
@@ -36,7 +37,7 @@ export default abstract class AbstractUIService {
 
   protected buildProtocolMessage(
       command: ProtocolCommand,
-      payload: Record<string, unknown>,
+      payload: JsonType,
   ): string {
     return JSON.stringify([command, payload]);
   }
index 3270aaf30d7ee84bbc46438a4b478d29f8f858ae..a9bc401c98f2f92895620bf57ca21b3e8f15b50c 100644 (file)
@@ -1,6 +1,7 @@
 import { ProtocolCommand, ProtocolRequestHandler } from '../../types/UIProtocol';
 
 import AbstractUIService from './AbstractUIService';
+import { JsonType } from '../../types/JsonType';
 import UIWebSocketServer from '../UIWebSocketServer';
 
 export default class UIService001 extends AbstractUIService {
@@ -10,6 +11,6 @@ export default class UIService001 extends AbstractUIService {
     this.messageHandlers.set(ProtocolCommand.STOP_TRANSACTION, this.handleStopTransaction.bind(this) as ProtocolRequestHandler);
   }
 
-  private handleStartTransaction(payload: Record<string, unknown>): void { }
-  private handleStopTransaction(payload: Record<string, unknown>): void { }
+  private handleStartTransaction(payload: JsonType): void { }
+  private handleStopTransaction(payload: JsonType): void { }
 }
index cfcc4f40c8dacc0c6eefcd07e71706877cbb3c01..8b108aec535255e746ee6d2c7e630ff49581b43d 100644 (file)
@@ -4,13 +4,14 @@ import { IncomingRequestCommand, RequestCommand } from '../types/ocpp/Requests';
 
 import BaseError from './BaseError';
 import { ErrorType } from '../types/ocpp/ErrorType';
+import { JsonType } from '../types/JsonType';
 
 export default class OCPPError extends BaseError {
   code: ErrorType | IncomingRequestCommand;
   command?: RequestCommand | IncomingRequestCommand;
-  details?: Record<string, unknown>;
+  details?: JsonType;
 
-  constructor(code: ErrorType | IncomingRequestCommand, message: string, command?: RequestCommand | IncomingRequestCommand, details?: Record<string, unknown>) {
+  constructor(code: ErrorType | IncomingRequestCommand, message: string, command?: RequestCommand | IncomingRequestCommand, details?: JsonType) {
     super(message);
 
     this.code = code ?? ErrorType.GENERIC_ERROR;
index 05ddaa235da3e016cbdac2a1033b1419f308be62..ea01b4fc77558063716b3837e20715dc3a25285b 100644 (file)
@@ -1,3 +1,5 @@
+import { JsonType } from './JsonType';
+
 export enum Protocol {
   UI = 'ui',
 }
@@ -13,6 +15,6 @@ export enum ProtocolCommand {
   UNKNOWN = 'unknown',
 }
 
-export type ProtocolRequest = [ProtocolCommand, Record<string, unknown>];
+export type ProtocolRequest = [ProtocolCommand, JsonType];
 
-export type ProtocolRequestHandler = (payload: Record<string, unknown>) => void | Promise<void> | Record<string, unknown> | Promise<Record<string, unknown>>;
+export type ProtocolRequestHandler = (payload: JsonType) => void | Promise<void> | JsonType | Promise<JsonType>;
index 7f2955840c8d0a28c3ef996b4d68db47469c9a82..fcd39a014a34e4f5c1355dedae845284b0a5e524 100644 (file)
@@ -1,5 +1,6 @@
 import { OCPP16AvailabilityType, OCPP16BootNotificationRequest, OCPP16IncomingRequestCommand, OCPP16RequestCommand } from './1.6/Requests';
 
+import { JsonType } from '../JsonType';
 import { MessageType } from './MessageType';
 import { OCPP16DiagnosticsStatus } from './1.6/DiagnosticsStatus';
 import OCPPError from '../../exception/OCPPError';
@@ -9,7 +10,7 @@ export interface SendParams {
   triggerMessage?: boolean
 }
 
-export type IncomingRequestHandler = (commandPayload: Record<string, unknown>) => Record<string, unknown> | Promise<Record<string, unknown>>;
+export type IncomingRequestHandler = (commandPayload: JsonType) => JsonType | Promise<JsonType>;
 
 export type BootNotificationRequest = OCPP16BootNotificationRequest;
 
@@ -37,8 +38,8 @@ export const DiagnosticsStatus = {
   ...OCPP16DiagnosticsStatus
 };
 
-export type Request = [MessageType, string, RequestCommand, Record<string, unknown>, Record<string, unknown>];
+export type Request = [MessageType, string, RequestCommand, JsonType, JsonType];
 
-export type IncomingRequest = [MessageType, string, IncomingRequestCommand, Record<string, unknown>, Record<string, unknown>];
+export type IncomingRequest = [MessageType, string, IncomingRequestCommand, JsonType, JsonType];
 
-export type CachedRequest = [(payload: Record<string, unknown> | string, requestPayload: Record<string, unknown>) => void, (error: OCPPError, requestStatistic?: boolean) => void, RequestCommand | IncomingRequestCommand, Record<string, unknown>];
+export type CachedRequest = [(payload: JsonType, requestPayload: JsonType) => void, (error: OCPPError, requestStatistic?: boolean) => void, RequestCommand | IncomingRequestCommand, JsonType | OCPPError];
index 7a851170bea7a274c645263cbae0e1b4a0c3024b..21ddd903aa142cd39f11077879d2352ed2fc3233 100644 (file)
@@ -1,6 +1,8 @@
 import { OCPP16AvailabilityStatus, OCPP16BootNotificationResponse, OCPP16ChargingProfileStatus, OCPP16ClearChargingProfileStatus, OCPP16ConfigurationStatus, OCPP16RegistrationStatus, OCPP16TriggerMessageStatus, OCPP16UnlockStatus } from './1.6/Responses';
 
-export type ResponseHandler = (payload: Record<string, unknown> | string, requestPayload?: Record<string, unknown>) => void | Promise<void>;
+import { JsonType } from '../JsonType';
+
+export type ResponseHandler = (payload: JsonType | string, requestPayload?: JsonType) => void | Promise<void>;
 
 export type BootNotificationResponse = OCPP16BootNotificationResponse;