typed-ocpp
Version:
A library for type-aware parsing, serialization and validation of OCPP 1.6, OCPP 2.0 and OCPP 2.1 messages
62 lines • 2.89 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.ChangeAvailabilityRequest,
[]: schemas.ChangeConfigurationRequest,
[]: schemas.ClearCacheRequest,
[]: schemas.ClearChargingProfileRequest,
[]: schemas.DataTransferRequest,
[]: schemas.DiagnosticsStatusNotificationRequest,
[]: schemas.FirmwareStatusNotificationRequest,
[]: schemas.GetCompositeScheduleRequest,
[]: schemas.GetConfigurationRequest,
[]: schemas.GetDiagnosticsRequest,
[]: schemas.GetLocalListVersionRequest,
[]: schemas.HeartbeatRequest,
[]: schemas.MeterValuesRequest,
[]: schemas.RemoteStartTransactionRequest,
[]: schemas.RemoteStopTransactionRequest,
[]: schemas.ReserveNowRequest,
[]: schemas.ResetRequest,
[]: schemas.SendLocalListRequest,
[]: schemas.SetChargingProfileRequest,
[]: schemas.StartTransactionRequest,
[]: schemas.StatusNotificationRequest,
[]: schemas.StopTransactionRequest,
[]: schemas.TriggerMessageRequest,
[]: schemas.UnlockConnectorRequest,
[]: 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