typed-ocpp
Version:
A library for type-aware parsing, serialization and validation of OCPP 1.6, OCPP 2.0 and OCPP 2.1 messages
98 lines • 5.37 kB
JavaScript
import { EMPTY_ARR, assign } from '../common/utils.js';
import { Action, MessageType } from './utils.js';
import { validate } from '../common/ajv.js';
import * as schemas from './schemas.js';
import * as types from './types.js';
const schemasByCommand = {
[]: schemas.AuthorizeRequest,
[]: schemas.BootNotificationRequest,
[]: schemas.CancelReservationRequest,
[]: schemas.CertificateSignedRequest,
[]: schemas.ChangeAvailabilityRequest,
[]: schemas.ClearCacheRequest,
[]: schemas.ClearChargingProfileRequest,
[]: schemas.ClearDisplayMessageRequest,
[]: schemas.ClearedChargingLimitRequest,
[]: schemas.ClearVariableMonitoringRequest,
[]: schemas.CostUpdatedRequest,
[]: schemas.CustomerInformationRequest,
[]: schemas.DataTransferRequest,
[]: schemas.DeleteCertificateRequest,
[]: schemas.FirmwareStatusNotificationRequest,
[]: schemas.Get15118EVCertificateRequest,
[]: schemas.GetBaseReportRequest,
[]: schemas.GetCertificateStatusRequest,
[]: schemas.GetChargingProfilesRequest,
[]: schemas.GetCompositeScheduleRequest,
[]: schemas.GetDisplayMessagesRequest,
[]: schemas.GetInstalledCertificateIdsRequest,
[]: schemas.GetLocalListVersionRequest,
[]: schemas.GetLogRequest,
[]: schemas.GetMonitoringReportRequest,
[]: schemas.GetReportRequest,
[]: schemas.GetTransactionStatusRequest,
[]: schemas.GetVariablesRequest,
[]: schemas.HeartbeatRequest,
[]: schemas.InstallCertificateRequest,
[]: schemas.LogStatusNotificationRequest,
[]: schemas.MeterValuesRequest,
[]: schemas.NotifyChargingLimitRequest,
[]: schemas.NotifyCustomerInformationRequest,
[]: schemas.NotifyDisplayMessagesRequest,
[]: schemas.NotifyEVChargingNeedsRequest,
[]: schemas.NotifyEVChargingScheduleRequest,
[]: schemas.NotifyEventRequest,
[]: schemas.NotifyMonitoringReportRequest,
[]: schemas.NotifyReportRequest,
[]: schemas.PublishFirmwareRequest,
[]: schemas.PublishFirmwareStatusNotificationRequest,
[]: schemas.ReportChargingProfilesRequest,
[]: schemas.RequestStartTransactionRequest,
[]: schemas.RequestStopTransactionRequest,
[]: schemas.ReservationStatusUpdateRequest,
[]: schemas.ReserveNowRequest,
[]: schemas.ResetRequest,
[]: schemas.SecurityEventNotificationRequest,
[]: schemas.SendLocalListRequest,
[]: schemas.SetChargingProfileRequest,
[]: schemas.SetDisplayMessageRequest,
[]: schemas.SetMonitoringBaseRequest,
[]: schemas.SetMonitoringLevelRequest,
[]: schemas.SetNetworkProfileRequest,
[]: schemas.SetVariableMonitoringRequest,
[]: schemas.SetVariablesRequest,
[]: schemas.SignCertificateRequest,
[]: schemas.StatusNotificationRequest,
[]: schemas.TransactionEventRequest,
[]: schemas.TriggerMessageRequest,
[]: schemas.UnlockConnectorRequest,
[]: schemas.UnpublishFirmwareRequest,
[]: schemas.UpdateFirmwareRequest,
};
const basecall_schema = {
type: 'array',
items: [
{ type: 'number', enum: [MessageType.CALL] },
{ type: 'string' },
{ type: 'string', enum: Object.values(Action) },
{ type: 'object', additionalProperties: true },
],
minItems: 4,
maxItems: 4
};
export const validateCall = assign((arr) => {
if (!validate(arr, basecall_schema, 'Invalid OCPP call')) {
validateCall.errors = validate.errors;
return false;
}
const [, , action, payload] = arr;
const schema = schemasByCommand[action];
if (!validate(payload, schema, 'Invalid OCPP call')) {
validateCall.errors = validate.errors;
return false;
}
validateCall.errors = EMPTY_ARR;
return true;
}, { errors: EMPTY_ARR });
validateCall.errors = EMPTY_ARR;
//# sourceMappingURL=call.js.map