typed-ocpp
Version:
A library for type-aware parsing, serialization and validation of OCPP 1.6, OCPP 2.0 and OCPP 2.1 messages
105 lines • 5.74 kB
JavaScript
import { EMPTY_ARR, assign } from '../common/utils.js';
import { validate } from '../common/ajv.js';
import { Action, MessageType } from './utils.js';
import * as schemas from './schemas.js';
import * as types from './types.js';
const unchecked_call_result_schema = {
type: 'array',
items: [
{ type: 'number', enum: [MessageType.CALLRESULT] },
{ type: 'string' },
{ type: 'object', additionalProperties: true },
],
minItems: 3,
maxItems: 3,
};
const schemasByCommand = {
[]: schemas.AuthorizeResponse,
[]: schemas.BootNotificationResponse,
[]: schemas.CancelReservationResponse,
[]: schemas.CertificateSignedResponse,
[]: schemas.ChangeAvailabilityResponse,
[]: schemas.ClearCacheResponse,
[]: schemas.ClearChargingProfileResponse,
[]: schemas.ClearDisplayMessageResponse,
[]: schemas.ClearedChargingLimitResponse,
[]: schemas.ClearVariableMonitoringResponse,
[]: schemas.CostUpdatedResponse,
[]: schemas.CustomerInformationResponse,
[]: schemas.DataTransferResponse,
[]: schemas.DeleteCertificateResponse,
[]: schemas.FirmwareStatusNotificationResponse,
[]: schemas.Get15118EVCertificateResponse,
[]: schemas.GetBaseReportResponse,
[]: schemas.GetCertificateStatusResponse,
[]: schemas.GetChargingProfilesResponse,
[]: schemas.GetCompositeScheduleResponse,
[]: schemas.GetDisplayMessagesResponse,
[]: schemas.GetInstalledCertificateIdsResponse,
[]: schemas.GetLocalListVersionResponse,
[]: schemas.GetLogResponse,
[]: schemas.GetMonitoringReportResponse,
[]: schemas.GetReportResponse,
[]: schemas.GetTransactionStatusResponse,
[]: schemas.GetVariablesResponse,
[]: schemas.HeartbeatResponse,
[]: schemas.InstallCertificateResponse,
[]: schemas.LogStatusNotificationResponse,
[]: schemas.MeterValuesResponse,
[]: schemas.NotifyChargingLimitResponse,
[]: schemas.NotifyCustomerInformationResponse,
[]: schemas.NotifyDisplayMessagesResponse,
[]: schemas.NotifyEVChargingNeedsResponse,
[]: schemas.NotifyEVChargingScheduleResponse,
[]: schemas.NotifyEventResponse,
[]: schemas.NotifyMonitoringReportResponse,
[]: schemas.NotifyReportResponse,
[]: schemas.PublishFirmwareResponse,
[]: schemas.PublishFirmwareStatusNotificationResponse,
[]: schemas.ReportChargingProfilesResponse,
[]: schemas.RequestStartTransactionResponse,
[]: schemas.RequestStopTransactionResponse,
[]: schemas.ReservationStatusUpdateResponse,
[]: schemas.ReserveNowResponse,
[]: schemas.ResetResponse,
[]: schemas.SecurityEventNotificationResponse,
[]: schemas.SendLocalListResponse,
[]: schemas.SetChargingProfileResponse,
[]: schemas.SetDisplayMessageResponse,
[]: schemas.SetMonitoringBaseResponse,
[]: schemas.SetMonitoringLevelResponse,
[]: schemas.SetNetworkProfileResponse,
[]: schemas.SetVariableMonitoringResponse,
[]: schemas.SetVariablesResponse,
[]: schemas.SignCertificateResponse,
[]: schemas.StatusNotificationResponse,
[]: schemas.TransactionEventResponse,
[]: schemas.TriggerMessageResponse,
[]: schemas.UnlockConnectorResponse,
[]: schemas.UnpublishFirmwareResponse,
[]: schemas.UpdateFirmwareResponse,
};
export const validateCallResult = assign((arr) => {
if (!validate(arr, unchecked_call_result_schema, 'Invalid OCPP call result')) {
validateCallResult.errors = validate.errors;
return false;
}
validateCallResult.errors = EMPTY_ARR;
return true;
}, { errors: EMPTY_ARR });
;
export const checkCallResult = assign((result, call) => {
const [, call_id, payload] = result;
if (call_id !== call[1]) {
checkCallResult.errors = [`Invalid OCPP call result: id ${call_id} does not equal call id ${call[1]}`];
return false;
}
const schema = schemasByCommand[call[2]];
if (!validate(payload, schema, 'Invalid OCPP call result')) {
checkCallResult.errors = validate.errors;
return false;
}
checkCallResult.errors = EMPTY_ARR;
return true;
}, { errors: EMPTY_ARR });
//# sourceMappingURL=callresult.js.map