+import { EventEmitter } from 'node:events'
+
import _Ajv, { type ValidateFunction } from 'ajv'
import _ajvFormats from 'ajv-formats'
-import { OCPPConstants } from './OCPPConstants.js'
-import { OCPPServiceUtils } from './OCPPServiceUtils.js'
import { type ChargingStation, getIdTagsFile } from '../../charging-station/index.js'
import { OCPPError } from '../../exception/index.js'
import type {
OCPPVersion
} from '../../types/index.js'
import { logger, setDefaultErrorParams } from '../../utils/index.js'
+import { OCPPConstants } from './OCPPConstants.js'
+import { ajvErrorsToErrorType } from './OCPPServiceUtils.js'
type Ajv = _Ajv.default
// eslint-disable-next-line @typescript-eslint/no-redeclare
const Ajv = _Ajv.default
const moduleName = 'OCPPIncomingRequestService'
-export abstract class OCPPIncomingRequestService {
+export abstract class OCPPIncomingRequestService extends EventEmitter {
private static instance: OCPPIncomingRequestService | null = null
private readonly version: OCPPVersion
protected readonly ajv: Ajv
- protected abstract jsonSchemasValidateFunction: Map<
+ protected abstract payloadValidateFunctions: Map<
IncomingRequestCommand,
ValidateFunction<JsonType>
>
protected constructor (version: OCPPVersion) {
+ super()
this.version = version
this.ajv = new Ajv({
keywords: ['javaType'],
error: Error,
params: HandleErrorParams<T> = { throwError: true, consoleOut: false }
): T | undefined {
- setDefaultErrorParams(params)
+ params = setDefaultErrorParams(params)
logger.error(
`${chargingStation.logPrefix()} ${moduleName}.handleIncomingRequestError: Incoming request command '${commandName}' error:`,
error
if (chargingStation.stationInfo?.ocppStrictCompliance === false) {
return true
}
- const validate = this.jsonSchemasValidateFunction.get(commandName)
+ const validate = this.payloadValidateFunctions.get(commandName)
if (validate?.(payload) === true) {
return true
}
validate?.errors
)
throw new OCPPError(
- OCPPServiceUtils.ajvErrorsToErrorType(validate?.errors),
+ ajvErrorsToErrorType(validate?.errors),
'Incoming request PDU is invalid',
commandName,
JSON.stringify(validate?.errors, undefined, 2)