type ErrorResponse,
ErrorType,
type IncomingRequestCommand,
- type JsonObject,
type JsonType,
MessageType,
type OCPPVersion,
type ResponseType,
} from '../../types';
import {
- Constants,
cloneObject,
+ formatDurationMilliSeconds,
handleSendMessageError,
isNullOrUndefined,
logger,
.then(() => {
resolve(payload);
})
- .catch((error) => {
- reject(error);
- })
+ .catch(reject)
.finally(() => {
chargingStation.requests.delete(messageId);
});
reject(ocppError);
};
- const rejectWithOcppError = (ocppError: OCPPError): void => {
- // Reject response
- if (messageType !== MessageType.CALL_MESSAGE) {
- return reject(ocppError);
- }
- // Reject and remove request from the cache
- return errorCallback(ocppError, false);
- };
-
- const bufferAndRejectWithOcppError = (ocppError: OCPPError): void => {
- // Buffer
- chargingStation.bufferMessage(messageToSend);
- if (messageType === MessageType.CALL_MESSAGE) {
- this.cacheRequestPromise(
- chargingStation,
- messageId,
- messagePayload as JsonType,
- commandName,
- responseCallback,
- errorCallback,
- );
+ const handleSendError = (ocppError: OCPPError): void => {
+ if (params?.skipBufferingOnError === false) {
+ // Buffer
+ chargingStation.bufferMessage(messageToSend);
+ if (messageType === MessageType.CALL_MESSAGE) {
+ this.cacheRequestPromise(
+ chargingStation,
+ messageId,
+ messagePayload as JsonType,
+ commandName,
+ responseCallback,
+ errorCallback,
+ );
+ }
+ } else if (
+ params?.skipBufferingOnError === true &&
+ messageType === MessageType.CALL_MESSAGE
+ ) {
+ // Remove request from the cache
+ chargingStation.requests.delete(messageId);
}
- // Reject and keep request in the cache
return reject(ocppError);
};
if (chargingStation.isWebSocketConnectionOpened() === true) {
const beginId = PerformanceStatistics.beginMeasure(commandName);
const sendTimeout = setTimeout(() => {
- return rejectWithOcppError(
+ return handleSendError(
new OCPPError(
ErrorType.GENERIC_ERROR,
- `Timeout for message id '${messageId}'`,
+ `Timeout ${formatDurationMilliSeconds(
+ OCPPConstants.OCPP_WEBSOCKET_TIMEOUT,
+ )} reached for ${
+ params?.skipBufferingOnError === false ? '' : 'non '
+ }buffered message id '${messageId}' with content '${messageToSend}`,
commandName,
- (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FROZEN_OBJECT,
+ (messagePayload as OCPPError).details,
),
);
}, OCPPConstants.OCPP_WEBSOCKET_TIMEOUT);
responseCallback,
errorCallback,
);
- }
- // Resolve response
- if (messageType !== MessageType.CALL_MESSAGE) {
+ } else {
+ // Resolve response
return resolve(messagePayload);
}
} else if (error) {
- const ocppError = new OCPPError(
- ErrorType.GENERIC_ERROR,
- `WebSocket errored for ${
- params?.skipBufferingOnError === false ? '' : 'non '
- }buffered message id '${messageId}' with content '${messageToSend}'`,
- commandName,
- { name: error.name, message: error.message, stack: error.stack },
+ return handleSendError(
+ new OCPPError(
+ ErrorType.GENERIC_ERROR,
+ `WebSocket errored for ${
+ params?.skipBufferingOnError === false ? '' : 'non '
+ }buffered message id '${messageId}' with content '${messageToSend}'`,
+ commandName,
+ { name: error.name, message: error.message, stack: error.stack },
+ ),
);
- if (params?.skipBufferingOnError === false) {
- return bufferAndRejectWithOcppError(ocppError);
- }
- return rejectWithOcppError(ocppError);
}
});
} else {
- const ocppError = new OCPPError(
- ErrorType.GENERIC_ERROR,
- `WebSocket closed for ${
- params?.skipBufferingOnError === false ? '' : 'non '
- }buffered message id '${messageId}' with content '${messageToSend}'`,
- commandName,
- (messagePayload as JsonObject)?.details ?? Constants.EMPTY_FROZEN_OBJECT,
+ return handleSendError(
+ new OCPPError(
+ ErrorType.GENERIC_ERROR,
+ `WebSocket closed for ${
+ params?.skipBufferingOnError === false ? '' : 'non '
+ }buffered message id '${messageId}' with content '${messageToSend}'`,
+ commandName,
+ (messagePayload as OCPPError).details,
+ ),
);
- if (params?.skipBufferingOnError === false) {
- return bufferAndRejectWithOcppError(ocppError);
- }
- return rejectWithOcppError(ocppError);
}
});
}
messageToSend = JSON.stringify([
messageType,
messageId,
- (messagePayload as OCPPError)?.code ?? ErrorType.GENERIC_ERROR,
- (messagePayload as OCPPError)?.message ?? '',
- (messagePayload as OCPPError)?.details ?? { commandName },
+ (messagePayload as OCPPError).code,
+ (messagePayload as OCPPError).message,
+ (messagePayload as OCPPError).details ?? {
+ command: (messagePayload as OCPPError).command ?? commandName,
+ },
] as ErrorResponse);
break;
}