import { PerformanceStatistics } from '../performance/index.js'
import {
ChargingStationEvents,
+ IdTagDistribution,
type StartTransactionResult,
type Status,
StopTransactionReason,
}
public static deleteInstance (chargingStation: ChargingStation): boolean {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return AutomaticTransactionGenerator.instances.delete(chargingStation.stationInfo!.hashId)
+ const hashId = chargingStation.stationInfo?.hashId
+ if (hashId == null) {
+ return false
+ }
+ return AutomaticTransactionGenerator.instances.delete(hashId)
}
public static getInstance (
chargingStation: ChargingStation
): AutomaticTransactionGenerator | undefined {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- if (!AutomaticTransactionGenerator.instances.has(chargingStation.stationInfo!.hashId)) {
+ const hashId = chargingStation.stationInfo?.hashId
+ if (hashId == null) {
+ return undefined
+ }
+ if (!AutomaticTransactionGenerator.instances.has(hashId)) {
AutomaticTransactionGenerator.instances.set(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.hashId,
+ hashId,
new AutomaticTransactionGenerator(chargingStation)
)
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return AutomaticTransactionGenerator.instances.get(chargingStation.stationInfo!.hashId)
+ return AutomaticTransactionGenerator.instances.get(hashId)
}
public start (stopAbsoluteDuration?: boolean): void {
logger.error(`${this.logPrefix(connectorId)} stopping on non existing connector`)
throw new BaseError(`Connector ${connectorId.toString()} does not exist`)
}
- if (this.connectorsStatus.get(connectorId)?.start === true) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.start = false
- } else if (this.connectorsStatus.get(connectorId)?.start === false) {
+ const connectorStatus = this.connectorsStatus.get(connectorId)
+ if (connectorStatus?.start === true) {
+ connectorStatus.start = false
+ } else if (connectorStatus?.start === false) {
logger.warn(`${this.logPrefix(connectorId)} is already stopped on connector`)
}
}
private canStartConnector (connectorId: number): boolean {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- if (new Date() > this.connectorsStatus.get(connectorId)!.stopDate!) {
+ const stopDate = this.connectorsStatus.get(connectorId)?.stopDate
+ if (stopDate != null && new Date() > stopDate) {
logger.info(
`${this.logPrefix(
connectorId
throw new BaseError(`Invalid connector id ${connectorId.toString()}`)
}
let connectorStatus: Status | undefined
- if (this.chargingStation.getAutomaticTransactionGeneratorStatuses()?.[statusIndex] != null) {
- connectorStatus = clone<Status>(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorStatuses()![statusIndex]
- )
+ const statusEntry =
+ this.chargingStation.getAutomaticTransactionGeneratorStatuses()?.[statusIndex]
+ if (statusEntry != null) {
+ connectorStatus = clone<Status>(statusEntry)
} else {
logger.warn(
`${this.logPrefix(
}
private handleStartTransactionResult (connectorId: number, result: StartTransactionResult): void {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.startTransactionRequests
+ const connectorStatus = this.connectorsStatus.get(connectorId)
+ if (connectorStatus == null) {
+ return
+ }
+ ++connectorStatus.startTransactionRequests
if (result.accepted) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.acceptedStartTransactionRequests
+ ++connectorStatus.acceptedStartTransactionRequests
} else {
logger.warn(`${this.logPrefix(connectorId)} start transaction rejected`)
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.rejectedStartTransactionRequests
+ ++connectorStatus.rejectedStartTransactionRequests
}
}
stopAbsoluteDuration?: boolean
): Promise<void> {
this.setStartConnectorStatus(connectorId, stopAbsoluteDuration)
+ const connectorStatus = this.connectorsStatus.get(connectorId)
+ if (connectorStatus == null) {
+ return
+ }
logger.info(
`${this.logPrefix(
connectorId
)} started on connector and will run for ${formatDurationMilliSeconds(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.stopDate!.getTime() -
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.startDate!.getTime()
+ (connectorStatus.stopDate?.getTime() ?? 0) - (connectorStatus.startDate?.getTime() ?? 0)
)}`
)
while (this.connectorsStatus.get(connectorId)?.start === true) {
}
const wait = secondsToMilliseconds(
randomInt(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!
- .minDelayBetweenTwoTransactions,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!
- .maxDelayBetweenTwoTransactions + 1
+ this.chargingStation.getAutomaticTransactionGeneratorConfiguration()
+ ?.minDelayBetweenTwoTransactions ?? 0,
+ (this.chargingStation.getAutomaticTransactionGeneratorConfiguration()
+ ?.maxDelayBetweenTwoTransactions ?? 0) + 1
)
)
logger.info(`${this.logPrefix(connectorId)} waiting for ${formatDurationMilliSeconds(wait)}`)
const start = secureRandom()
if (
start <
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.probabilityOfStart
+ (this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.probabilityOfStart ??
+ 0)
) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.skippedConsecutiveTransactions = 0
+ connectorStatus.skippedConsecutiveTransactions = 0
// Start transaction
const startResponse = await this.startTransaction(connectorId)
if (startResponse?.accepted === true) {
// Wait until end of transaction
const waitTrxEnd = secondsToMilliseconds(
randomInt(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.minDuration,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.maxDuration + 1
+ this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.minDuration ??
+ 0,
+ (this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.maxDuration ??
+ 0) + 1
)
)
logger.info(
await this.stopTransaction(connectorId)
}
} else {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.skippedConsecutiveTransactions
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.skippedTransactions
+ ++connectorStatus.skippedConsecutiveTransactions
+ ++connectorStatus.skippedTransactions
logger.info(
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `${this.logPrefix(connectorId)} skipped consecutively ${this.connectorsStatus
- .get(connectorId)
- ?.skippedConsecutiveTransactions.toString()
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- }/${this.connectorsStatus.get(connectorId)?.skippedTransactions.toString()} transaction(s)`
+ `${this.logPrefix(connectorId)} skipped consecutively ${connectorStatus.skippedConsecutiveTransactions.toString()}/${connectorStatus.skippedTransactions.toString()} transaction(s)`
)
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.lastRunDate = new Date()
+ connectorStatus.lastRunDate = new Date()
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.stoppedDate = new Date()
+ connectorStatus.stoppedDate = new Date()
logger.info(
`${this.logPrefix(
connectorId
)} stopped on connector and lasted for ${formatDurationMilliSeconds(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.stoppedDate!.getTime() -
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.startDate!.getTime()
+ connectorStatus.stoppedDate.getTime() - (connectorStatus.startDate?.getTime() ?? 0)
)}`
)
logger.debug(
`${this.logPrefix(connectorId)} stopped with connector status: %j`,
- this.connectorsStatus.get(connectorId)
+ connectorStatus
)
this.chargingStation.emitChargingStationEvent(ChargingStationEvents.updated)
}
stopAbsoluteDuration = this.chargingStation.getAutomaticTransactionGeneratorConfiguration()
?.stopAbsoluteDuration
): void {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.startDate = new Date()
- if (
- stopAbsoluteDuration === false ||
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- !isValidDate(this.connectorsStatus.get(connectorId)!.stopDate)
- ) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.stopDate = new Date(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.startDate!.getTime() +
+ const connectorStatus = this.connectorsStatus.get(connectorId)
+ if (connectorStatus == null) {
+ return
+ }
+ connectorStatus.startDate = new Date()
+ if (stopAbsoluteDuration === false || !isValidDate(connectorStatus.stopDate)) {
+ connectorStatus.stopDate = new Date(
+ connectorStatus.startDate.getTime() +
hoursToMilliseconds(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.stopAfterHours
+ this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.stopAfterHours ??
+ 0
)
)
}
- delete this.connectorsStatus.get(connectorId)?.stoppedDate
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.skippedConsecutiveTransactions = 0
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.connectorsStatus.get(connectorId)!.start = true
+ delete connectorStatus.stoppedDate
+ connectorStatus.skippedConsecutiveTransactions = 0
+ connectorStatus.start = true
this.chargingStation.emitChargingStationEvent(ChargingStationEvents.updated)
}
let result: StartTransactionResult | undefined
if (this.chargingStation.hasIdTags()) {
const idTag = IdTagsCache.getInstance().getIdTag(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- this.chargingStation.getAutomaticTransactionGeneratorConfiguration()!.idTagDistribution!,
+ this.chargingStation.getAutomaticTransactionGeneratorConfiguration()?.idTagDistribution ??
+ IdTagDistribution.ROUND_ROBIN,
this.chargingStation,
connectorId
)
connectorId
)} start transaction with an idTag '${idTag}'`
if (this.getRequireAuthorize()) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.authorizeRequests
+ const connectorStatus = this.connectorsStatus.get(connectorId)
+ if (connectorStatus != null) {
+ ++connectorStatus.authorizeRequests
+ }
if (await isIdTagAuthorized(this.chargingStation, connectorId, idTag)) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.acceptedAuthorizeRequests
+ if (connectorStatus != null) {
+ ++connectorStatus.acceptedAuthorizeRequests
+ }
logger.info(startTransactionLogMsg)
result = await startTransactionOnConnector(this.chargingStation, connectorId, idTag)
this.handleStartTransactionResult(connectorId, result)
PerformanceStatistics.endMeasure(measureId, beginId)
return result
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.rejectedAuthorizeRequests
+ if (connectorStatus != null) {
+ ++connectorStatus.rejectedAuthorizeRequests
+ }
PerformanceStatistics.endMeasure(measureId, beginId)
return result
}
?.transactionId?.toString()}`
)
result = await stopTransactionOnConnector(this.chargingStation, connectorId, reason)
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.stopTransactionRequests
- if (result.accepted) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.acceptedStopTransactionRequests
- } else {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- ++this.connectorsStatus.get(connectorId)!.rejectedStopTransactionRequests
+ const connectorStatus = this.connectorsStatus.get(connectorId)
+ if (connectorStatus != null) {
+ ++connectorStatus.stopTransactionRequests
+ if (result.accepted) {
+ ++connectorStatus.acceptedStopTransactionRequests
+ } else {
+ ++connectorStatus.rejectedStopTransactionRequests
+ }
}
} else {
const transactionId = this.chargingStation.getConnectorStatus(connectorId)?.transactionId
const chargingProfilesLimit = getChargingProfilesLimit(chargingStation, 0, chargingProfiles)
if (chargingProfilesLimit != null) {
const limit = buildChargingProfilesLimit(chargingStation, chargingProfilesLimit)
- const chargingStationMaximumPower =
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.maximumPower!
+ const chargingStationMaximumPower = chargingStation.stationInfo?.maximumPower ?? 0
if (limit > chargingStationMaximumPower) {
logger.error(
`${chargingStation.logPrefix()} ${moduleName}.getChargingStationChargingProfilesLimit: Charging profile id ${getChargingProfileId(chargingProfilesLimit.chargingProfile)} limit ${limit.toString()} is greater than charging station maximum ${chargingStationMaximumPower.toString()}: %j`,
if (chargingProfilesLimit != null) {
const limit = buildChargingProfilesLimit(chargingStation, chargingProfilesLimit)
const connectorMaximumPower =
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.maximumPower! / chargingStation.powerDivider!
+ (chargingStation.stationInfo?.maximumPower ?? 0) / (chargingStation.powerDivider ?? 1)
if (limit > connectorMaximumPower) {
logger.error(
`${chargingStation.logPrefix()} ${moduleName}.getConnectorChargingProfilesLimit: Charging profile id ${getChargingProfileId(chargingProfilesLimit.chargingProfile)} limit ${limit.toString()} is greater than connector ${connectorId.toString()} maximum ${connectorMaximumPower.toString()}: %j`,
chargingStation: ChargingStation,
connectorId: number
): string {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const hashId = chargingStation.stationInfo!.hashId
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const idTagsFile = getIdTagsFile(chargingStation.stationInfo!)!
+ if (chargingStation.stationInfo == null) {
+ return ''
+ }
+ const hashId = chargingStation.stationInfo.hashId
+ const idTagsFile = getIdTagsFile(chargingStation.stationInfo) ?? ''
switch (distribution) {
case IdTagDistribution.CONNECTOR_AFFINITY:
return this.getConnectorAffinityIdTag(chargingStation, connectorId)
}
private getConnectorAffinityIdTag (chargingStation: ChargingStation, connectorId: number): string {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const file = getIdTagsFile(chargingStation.stationInfo!)!
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const idTags = this.getIdTags(file)!
+ if (chargingStation.stationInfo == null) {
+ return ''
+ }
+ const file = getIdTagsFile(chargingStation.stationInfo) ?? ''
+ const idTags = this.getIdTags(file) ?? []
const addressableKey = this.getIdTagsCacheIndexesAddressableKey(
file,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.hashId
+ chargingStation.stationInfo.hashId
)
this.idTagsCachesAddressableIndexes.set(
addressableKey,
(chargingStation.index - 1 + (connectorId - 1)) % idTags.length
)
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return idTags[this.idTagsCachesAddressableIndexes.get(addressableKey)!]
+ return idTags[this.idTagsCachesAddressableIndexes.get(addressableKey) ?? 0]
}
private getIdTagsCache (file: string): string[] | undefined {
const [uuid, command, requestPayload] = validatedMessageEvent.data as BroadcastChannelRequest
if (
requestPayload.hashIds != null &&
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- !requestPayload.hashIds.includes(this.chargingStation.stationInfo!.hashId)
+ !requestPayload.hashIds.includes(this.chargingStation.stationInfo?.hashId ?? '')
) {
return
}
) => {
if (response.status === GenericStatus.Accepted) {
const { connectorId, idTag } = request
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.getConnectorStatus(connectorId!)!.transactionRemoteStarted = true
+ if (connectorId != null) {
+ const connectorStatus = chargingStation.getConnectorStatus(connectorId)
+ if (connectorStatus != null) {
+ connectorStatus.transactionRemoteStarted = true
+ }
+ }
chargingStation.ocppRequestService
.requestHandler<Partial<OCPP16StartTransactionRequest>, OCPP16StartTransactionResponse>(
chargingStation,
) => {
if (response.status === GenericStatus.Accepted) {
const { transactionId } = request
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const connectorId = chargingStation.getConnectorIdByTransactionId(transactionId)!
+ const connectorId = chargingStation.getConnectorIdByTransactionId(transactionId)
+ if (connectorId == null) {
+ return
+ }
OCPP16ServiceUtils.remoteStopTransaction(chargingStation, connectorId)
.then(response => {
if (response.status === GenericStatus.Accepted) {
)
return OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_ACCEPTED
} catch (error) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return handleIncomingRequestError<GenericResponse>(
- chargingStation,
- OCPP16IncomingRequestCommand.CANCEL_RESERVATION,
- ensureError(error),
- {
- errorResponse: OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_REJECTED,
- }
- )!
+ return (
+ handleIncomingRequestError<GenericResponse>(
+ chargingStation,
+ OCPP16IncomingRequestCommand.CANCEL_RESERVATION,
+ ensureError(error),
+ {
+ errorResponse: OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_REJECTED,
+ }
+ ) ?? OCPP16Constants.OCPP_CANCEL_RESERVATION_RESPONSE_REJECTED
+ )
}
}
type
)
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return response!
+ return response ?? OCPP16Constants.OCPP_AVAILABILITY_RESPONSE_ACCEPTED
} else if (
connectorId > 0 &&
(chargingStation.isChargingStationAvailable() ||
type === OCPP16AvailabilityType.Inoperative))
) {
if (chargingStation.getConnectorStatus(connectorId)?.transactionStarted === true) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.getConnectorStatus(connectorId)!.availability = type
+ const connectorStatus = chargingStation.getConnectorStatus(connectorId)
+ if (connectorStatus != null) {
+ connectorStatus.availability = type
+ }
return OCPP16Constants.OCPP_AVAILABILITY_RESPONSE_SCHEDULED
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.getConnectorStatus(connectorId)!.availability = type
+ const connectorStatus = chargingStation.getConnectorStatus(connectorId)
+ if (connectorStatus != null) {
+ connectorStatus.availability = type
+ }
await OCPP16ServiceUtils.sendAndSetConnectorStatus(chargingStation, {
connectorId,
status: chargePointStatus,
}
private handleRequestClearCache (chargingStation: ChargingStation): ClearCacheResponse {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- if (chargingStation.idTagsCache.deleteIdTags(getIdTagsFile(chargingStation.stationInfo!)!)) {
+ const idTagsFile =
+ chargingStation.stationInfo != null ? getIdTagsFile(chargingStation.stationInfo) : undefined
+ if (idTagsFile != null && chargingStation.idTagsCache.deleteIdTags(idTagsFile)) {
return OCPPConstants.OCPP_RESPONSE_ACCEPTED
}
return OCPPConstants.OCPP_RESPONSE_REJECTED
}
return OCPP16Constants.OCPP_DATA_TRANSFER_RESPONSE_ACCEPTED
} catch (error) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return handleIncomingRequestError<OCPP16DataTransferResponse>(
- chargingStation,
- OCPP16IncomingRequestCommand.DATA_TRANSFER,
- ensureError(error),
- { errorResponse: OCPP16Constants.OCPP_DATA_TRANSFER_RESPONSE_REJECTED }
- )!
+ return (
+ handleIncomingRequestError<OCPP16DataTransferResponse>(
+ chargingStation,
+ OCPP16IncomingRequestCommand.DATA_TRANSFER,
+ ensureError(error),
+ { errorResponse: OCPP16Constants.OCPP_DATA_TRANSFER_RESPONSE_REJECTED }
+ ) ?? OCPP16Constants.OCPP_DATA_TRANSFER_RESPONSE_REJECTED
+ )
}
}
const configurationKey: OCPPConfigurationKey[] = []
const unknownKey: string[] = []
if (key == null || isEmpty(key)) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- for (const configKey of chargingStation.ocppConfiguration!.configurationKey!) {
+ for (const configKey of chargingStation.ocppConfiguration?.configurationKey ?? []) {
if (!OCPP16ServiceUtils.isConfigurationKeyVisible(configKey)) {
continue
}
info.bytes / 1024
).toString()} bytes transferred from diagnostics archive ${info.name}`
)
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.diagnosticsStatus = OCPP16DiagnosticsStatus.Uploading
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.diagnosticsStatus = OCPP16DiagnosticsStatus.Uploading
+ }
chargingStation.ocppRequestService
.requestHandler<
OCPP16DiagnosticsStatusNotificationRequest,
>(chargingStation, OCPP16RequestCommand.DIAGNOSTICS_STATUS_NOTIFICATION, {
status: OCPP16DiagnosticsStatus.Uploaded,
})
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.diagnosticsStatus = OCPP16DiagnosticsStatus.Uploaded
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.diagnosticsStatus = OCPP16DiagnosticsStatus.Uploaded
+ }
ftpClient.close()
return { fileName: diagnosticsArchive }
}
>(chargingStation, OCPP16RequestCommand.DIAGNOSTICS_STATUS_NOTIFICATION, {
status: OCPP16DiagnosticsStatus.UploadFailed,
})
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.diagnosticsStatus = OCPP16DiagnosticsStatus.UploadFailed
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.diagnosticsStatus = OCPP16DiagnosticsStatus.UploadFailed
+ }
ftpClient?.close()
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return handleIncomingRequestError<GetDiagnosticsResponse>(
- chargingStation,
- OCPP16IncomingRequestCommand.GET_DIAGNOSTICS,
- ensureError(error),
- { errorResponse: OCPP16Constants.OCPP_RESPONSE_EMPTY }
- )!
+ return (
+ handleIncomingRequestError<GetDiagnosticsResponse>(
+ chargingStation,
+ OCPP16IncomingRequestCommand.GET_DIAGNOSTICS,
+ ensureError(error),
+ { errorResponse: OCPP16Constants.OCPP_RESPONSE_EMPTY }
+ ) ?? OCPP16Constants.OCPP_RESPONSE_EMPTY
+ )
}
} else {
logger.warn(
>(chargingStation, OCPP16RequestCommand.DIAGNOSTICS_STATUS_NOTIFICATION, {
status: OCPP16DiagnosticsStatus.UploadFailed,
})
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.diagnosticsStatus = OCPP16DiagnosticsStatus.UploadFailed
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.diagnosticsStatus = OCPP16DiagnosticsStatus.UploadFailed
+ }
return OCPP16Constants.OCPP_RESPONSE_EMPTY
}
}
) {
return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- commandPayload.expiryDate = convertToDate(commandPayload.expiryDate)!
+ commandPayload.expiryDate = convertToDate(commandPayload.expiryDate) ?? new Date()
const { connectorId, idTag, reservationId } = commandPayload
if (!chargingStation.hasConnector(connectorId)) {
logger.warn(
if (!(await OCPPServiceUtils.isIdTagAuthorizedUnified(chargingStation, connectorId, idTag))) {
return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
}
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- const connectorStatus = chargingStation.getConnectorStatus(connectorId)!
+ const connectorStatus = chargingStation.getConnectorStatus(connectorId)
+ if (connectorStatus == null) {
+ return OCPP16Constants.OCPP_RESERVATION_RESPONSE_REJECTED
+ }
resetAuthorizeConnectorStatus(connectorStatus)
let response: OCPP16ReserveNowResponse
try {
}
return response
} catch (error) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.getConnectorStatus(connectorId)!.status = OCPP16ChargePointStatus.Available
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- return handleIncomingRequestError<OCPP16ReserveNowResponse>(
- chargingStation,
- OCPP16IncomingRequestCommand.RESERVE_NOW,
- ensureError(error),
- { errorResponse: OCPP16Constants.OCPP_RESERVATION_RESPONSE_FAULTED }
- )!
+ const errorConnectorStatus = chargingStation.getConnectorStatus(connectorId)
+ if (errorConnectorStatus != null) {
+ errorConnectorStatus.status = OCPP16ChargePointStatus.Available
+ }
+ return (
+ handleIncomingRequestError<OCPP16ReserveNowResponse>(
+ chargingStation,
+ OCPP16IncomingRequestCommand.RESERVE_NOW,
+ ensureError(error),
+ { errorResponse: OCPP16Constants.OCPP_RESERVATION_RESPONSE_FAULTED }
+ ) ?? OCPP16Constants.OCPP_RESERVATION_RESPONSE_FAULTED
+ )
}
}
})
logger.info(
`${chargingStation.logPrefix()} ${moduleName}.handleRequestReset: ${type} reset request received, simulating it. The station will be back online in ${formatDurationMilliSeconds(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.resetTime!
+ chargingStation.stationInfo?.resetTime ?? 0
)}`
)
return OCPP16Constants.OCPP_RESPONSE_ACCEPTED
>(chargingStation, OCPP16RequestCommand.FIRMWARE_STATUS_NOTIFICATION, {
status: OCPP16FirmwareStatus.Downloading,
})
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.firmwareStatus = OCPP16FirmwareStatus.Downloading
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.firmwareStatus = OCPP16FirmwareStatus.Downloading
+ }
if (
chargingStation.stationInfo?.firmwareUpgrade?.failureStatus ===
OCPP16FirmwareStatus.DownloadFailed
>(chargingStation, OCPP16RequestCommand.FIRMWARE_STATUS_NOTIFICATION, {
status: OCPP16FirmwareStatus.Downloaded,
})
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.firmwareStatus = OCPP16FirmwareStatus.Downloaded
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.firmwareStatus = OCPP16FirmwareStatus.Downloaded
+ }
let wasTransactionsStarted = false
let transactionsStarted: boolean
do {
>(chargingStation, OCPP16RequestCommand.FIRMWARE_STATUS_NOTIFICATION, {
status: OCPP16FirmwareStatus.Installing,
})
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- chargingStation.stationInfo!.firmwareStatus = OCPP16FirmwareStatus.Installing
+ if (chargingStation.stationInfo != null) {
+ chargingStation.stationInfo.firmwareStatus = OCPP16FirmwareStatus.Installing
+ }
if (
chargingStation.stationInfo?.firmwareUpgrade?.failureStatus ===
OCPP16FirmwareStatus.InstallationFailed
}
if (
uiServerConfiguration.authentication?.enabled !== true &&
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- !isLoopback(uiServerConfiguration.options!.host!)
+ !isLoopback(uiServerConfiguration.options?.host ?? '')
) {
const logMsg = `Non loopback address in '${ConfigurationSection.uiServer}' configuration section without authentication enabled. This is not recommended`
logger.warn(`${UIServerFactory.logPrefix()} ${logMsg}`)
if (
Configuration.getConfigurationData()?.['supervisionURLs' as keyof ConfigurationData] != null
) {
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- Configuration.getConfigurationData()!.supervisionUrls = Configuration.getConfigurationData()![
- 'supervisionURLs' as keyof ConfigurationData
- ] as string | string[]
+ const configData = Configuration.getConfigurationData()
+ if (configData != null) {
+ configData.supervisionUrls = configData['supervisionURLs' as keyof ConfigurationData] as
+ | string
+ | string[]
+ }
}
return Configuration.getConfigurationData()?.supervisionUrls
}
Configuration.getConfigurationData()?.performanceStorage?.type === StorageType.SQLITE) &&
Configuration.getConfigurationData()?.performanceStorage?.uri != null && {
uri: buildPerformanceUriFilePath(
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- new URL(Configuration.getConfigurationData()!.performanceStorage!.uri!).pathname
+ new URL(Configuration.getConfigurationData()?.performanceStorage?.uri ?? '').pathname
),
}),
}
if (has(ConfigurationSection.uiServer, Configuration.getConfigurationData())) {
uiServerConfiguration = mergeDeepRight<UIServerConfiguration, Partial<UIServerConfiguration>>(
uiServerConfiguration,
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- Configuration.getConfigurationData()!.uiServer!
+ Configuration.getConfigurationData()?.uiServer ?? defaultUIServerConfiguration
)
}
if (isCFEnvironment()) {
delete uiServerConfiguration.options?.host
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- uiServerConfiguration.options!.port = Number.parseInt(env.PORT!)
+ if (uiServerConfiguration.options != null) {
+ uiServerConfiguration.options.port = Number.parseInt(env.PORT ?? '')
+ }
}
return uiServerConfiguration
}
Configuration.warnDeprecatedConfigurationKey(key, section, msg)
}
// station template url(s) remapping
- Configuration.getConfigurationData()?.['stationTemplateURLs' as keyof ConfigurationData] !=
- null &&
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- (Configuration.getConfigurationData()!.stationTemplateUrls =
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- Configuration.getConfigurationData()![
+ if (
+ Configuration.getConfigurationData()?.['stationTemplateURLs' as keyof ConfigurationData] !=
+ null
+ ) {
+ const configData = Configuration.getConfigurationData()
+ if (configData != null) {
+ configData.stationTemplateUrls = configData[
'stationTemplateURLs' as keyof ConfigurationData
- ] as StationTemplateUrl[])
+ ] as StationTemplateUrl[]
+ }
+ }
Configuration.getConfigurationData()?.stationTemplateUrls.forEach(
(stationTemplateUrl: StationTemplateUrl) => {
if (stationTemplateUrl['numberOfStation' as keyof StationTemplateUrl] != null) {
return watch(Configuration.configurationFile, (event, filename): void => {
if (
!Configuration.configurationFileReloading &&
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
- filename!.trim().length > 0 &&
+ (filename?.trim().length ?? 0) > 0 &&
event === 'change'
) {
Configuration.configurationFileReloading = true