From ebe64c903c62b00cecf248f568938ff46400aed1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Fri, 27 Mar 2026 20:54:42 +0100 Subject: [PATCH] refactor: align intermediate variable naming with codebase conventions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Systematic rename of 24 variables to follow established patterns: - connector → connectorStatus for ConnectorStatus values (8 decls + params) - Stats → Statistics: workerScriptStats, strategyStats, cacheStats (5) - Config → Configuration: newConfig, authConfig, logConfig, configData (7) - entry → descriptive names: ipRateLimitEntry, authCacheEntry, rateLimitEntry, variableGroupEntry, pairedBoundsEntry (6) - Fix variable shadowing in OCPP20ServiceUtils.startPeriodicMeterValues by naming outer setup variable initialConnectorStatus --- .../ocpp/2.0/OCPP20IncomingRequestService.ts | 6 +- .../ocpp/2.0/OCPP20ServiceUtils.ts | 16 +++--- .../ocpp/2.0/OCPP20VariableManager.ts | 8 +-- src/charging-station/ocpp/OCPPServiceUtils.ts | 56 +++++++++---------- .../ocpp/auth/cache/InMemoryAuthCache.ts | 46 ++++++++------- .../ocpp/auth/services/OCPPAuthServiceImpl.ts | 18 +++--- .../ocpp/auth/strategies/LocalAuthStrategy.ts | 4 +- .../auth/strategies/RemoteAuthStrategy.ts | 4 +- .../ocpp/auth/utils/AuthValidators.ts | 33 ++++++----- .../ui-server/UIServerSecurity.ts | 8 +-- .../ui-server/mcp/MCPTools.ts | 6 +- src/utils/Configuration.ts | 40 ++++++------- src/worker/WorkerAbstract.ts | 6 +- 13 files changed, 130 insertions(+), 121 deletions(-) diff --git a/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts b/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts index 7f88d8fe..ed17e2d6 100644 --- a/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts +++ b/src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts @@ -882,9 +882,9 @@ export class OCPP20IncomingRequestService extends OCPPIncomingRequestService { }) } if (r.attributeStatus === GetVariableStatusEnumType.Accepted) { - const entry = grouped.get(key) - if (entry) { - entry.attributes.push({ + const variableGroupEntry = grouped.get(key) + if (variableGroupEntry) { + variableGroupEntry.attributes.push({ type: r.attributeType ?? AttributeEnumType.Actual, value: r.attributeValue, }) diff --git a/src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts b/src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts index 1f5ee248..f2e4d29f 100644 --- a/src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts +++ b/src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts @@ -569,8 +569,8 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils { connectorId: number, interval: number ): void { - const connector = chargingStation.getConnectorStatus(connectorId) - if (connector == null) { + const initialConnectorStatus = chargingStation.getConnectorStatus(connectorId) + if (initialConnectorStatus == null) { logger.error( `${chargingStation.logPrefix()} ${moduleName}.startPeriodicMeterValues: Connector ${connectorId.toString()} not found` ) @@ -582,13 +582,13 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils { ) return } - if (connector.transactionMeterValuesSetInterval != null) { + if (initialConnectorStatus.transactionMeterValuesSetInterval != null) { logger.warn( `${chargingStation.logPrefix()} ${moduleName}.startPeriodicMeterValues: TxUpdatedInterval already started, stopping first` ) OCPP20ServiceUtils.stopPeriodicMeterValues(chargingStation, connectorId) } - connector.transactionMeterValuesSetInterval = setInterval(() => { + initialConnectorStatus.transactionMeterValuesSetInterval = setInterval(() => { const connectorStatus = chargingStation.getConnectorStatus(connectorId) if (connectorStatus?.transactionStarted === true && connectorStatus.transactionId != null) { if ( @@ -710,10 +710,10 @@ export class OCPP20ServiceUtils extends OCPPServiceUtils { chargingStation: ChargingStation, connectorId: number ): void { - const connector = chargingStation.getConnectorStatus(connectorId) - if (connector?.transactionMeterValuesSetInterval != null) { - clearInterval(connector.transactionMeterValuesSetInterval) - delete connector.transactionMeterValuesSetInterval + const connectorStatus = chargingStation.getConnectorStatus(connectorId) + if (connectorStatus?.transactionMeterValuesSetInterval != null) { + clearInterval(connectorStatus.transactionMeterValuesSetInterval) + delete connectorStatus.transactionMeterValuesSetInterval logger.info( `${chargingStation.logPrefix()} ${moduleName}.stopPeriodicMeterValues: TxUpdatedInterval stopped` ) diff --git a/src/charging-station/ocpp/2.0/OCPP20VariableManager.ts b/src/charging-station/ocpp/2.0/OCPP20VariableManager.ts index 3acba831..4717498f 100644 --- a/src/charging-station/ocpp/2.0/OCPP20VariableManager.ts +++ b/src/charging-station/ocpp/2.0/OCPP20VariableManager.ts @@ -141,13 +141,13 @@ export class OCPP20VariableManager { variableData.component.instance, variableData.variable.name ) - const entry = pairedBounds.get(varKey) ?? {} + const pairedBoundsEntry = pairedBounds.get(varKey) ?? {} if (resolvedAttr === AttributeEnumType.MinSet) { - entry.minValue = variableData.attributeValue + pairedBoundsEntry.minValue = variableData.attributeValue } else { - entry.maxValue = variableData.attributeValue + pairedBoundsEntry.maxValue = variableData.attributeValue } - pairedBounds.set(varKey, entry) + pairedBounds.set(varKey, pairedBoundsEntry) } // Pre-apply coherent MinSet/MaxSet pairs so per-item cross-check sees paired values diff --git a/src/charging-station/ocpp/OCPPServiceUtils.ts b/src/charging-station/ocpp/OCPPServiceUtils.ts index 8beae8f6..d9d38c92 100644 --- a/src/charging-station/ocpp/OCPPServiceUtils.ts +++ b/src/charging-station/ocpp/OCPPServiceUtils.ts @@ -807,7 +807,7 @@ const validateSocMeasurandValue = ( socMaximumValue: number, debug: boolean ): void => { - const connector = chargingStation.getConnectorStatus(connectorId) + const connectorStatus = chargingStation.getConnectorStatus(connectorId) if ( convertToInt(sampledValue.value) > socMaximumValue || convertToInt(sampledValue.value) < socMinimumValue || @@ -817,7 +817,7 @@ const validateSocMeasurandValue = ( `${chargingStation.logPrefix()} ${moduleName}.validateSocMeasurandValue: MeterValues measurand ${ sampledValue.measurand ?? MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - }: connector id ${connectorId.toString()}, transaction id ${connector?.transactionId?.toString()}, value: ${socMinimumValue.toString()}/${sampledValue.value.toString()}/${socMaximumValue.toString()}` + }: connector id ${connectorId.toString()}, transaction id ${connectorStatus?.transactionId?.toString()}, value: ${socMinimumValue.toString()}/${sampledValue.value.toString()}/${socMaximumValue.toString()}` ) } } @@ -1030,21 +1030,21 @@ const buildEnergyMeasurandValue = ( } const updateConnectorEnergyValues = ( - connector: ConnectorStatus | undefined, + connectorStatus: ConnectorStatus | undefined, energyValue: number ): void => { - if (connector != null) { + if (connectorStatus != null) { if ( - connector.energyActiveImportRegisterValue != null && - connector.energyActiveImportRegisterValue >= 0 && - connector.transactionEnergyActiveImportRegisterValue != null && - connector.transactionEnergyActiveImportRegisterValue >= 0 + connectorStatus.energyActiveImportRegisterValue != null && + connectorStatus.energyActiveImportRegisterValue >= 0 && + connectorStatus.transactionEnergyActiveImportRegisterValue != null && + connectorStatus.transactionEnergyActiveImportRegisterValue >= 0 ) { - connector.energyActiveImportRegisterValue += energyValue - connector.transactionEnergyActiveImportRegisterValue += energyValue + connectorStatus.energyActiveImportRegisterValue += energyValue + connectorStatus.transactionEnergyActiveImportRegisterValue += energyValue } else { - connector.energyActiveImportRegisterValue = 0 - connector.transactionEnergyActiveImportRegisterValue = 0 + connectorStatus.energyActiveImportRegisterValue = 0 + connectorStatus.transactionEnergyActiveImportRegisterValue = 0 } } } @@ -1060,12 +1060,12 @@ const validateEnergyMeasurandValue = ( debug: boolean ): void => { if (energyValue > maxValue || energyValue < minValue || debug) { - const connector = chargingStation.getConnectorStatus(connectorId) + const connectorStatus = chargingStation.getConnectorStatus(connectorId) logger.error( `${chargingStation.logPrefix()} ${moduleName}.validateEnergyMeasurandValue: MeterValues measurand ${ sampledValue.measurand ?? MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - }: connector id ${connectorId.toString()}, transaction id ${connector?.transactionId?.toString()}, value: ${minValue.toString()}/${energyValue.toString()}/${maxValue.toString()}, duration: ${interval.toString()}ms` + }: connector id ${connectorId.toString()}, transaction id ${connectorStatus?.transactionId?.toString()}, value: ${minValue.toString()}/${energyValue.toString()}/${maxValue.toString()}, duration: ${interval.toString()}ms` ) } } @@ -1276,7 +1276,7 @@ const buildPowerMeasurandValue = ( const validatePowerMeasurandValue = ( chargingStation: ChargingStation, connectorId: number, - connector: ConnectorStatus | undefined, + connectorStatus: ConnectorStatus | undefined, sampledValue: SampledValue, connectorMaximumPower: number, connectorMinimumPower: number, @@ -1291,7 +1291,7 @@ const validatePowerMeasurandValue = ( `${chargingStation.logPrefix()} ${moduleName}.validatePowerMeasurandValue: MeterValues measurand ${ sampledValue.measurand ?? MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - }: connector id ${connectorId.toString()}, transaction id ${connector?.transactionId?.toString()}, value: ${connectorMinimumPower.toString()}/${sampledValue.value.toString()}/${connectorMaximumPower.toString()}` + }: connector id ${connectorId.toString()}, transaction id ${connectorStatus?.transactionId?.toString()}, value: ${connectorMinimumPower.toString()}/${sampledValue.value.toString()}/${connectorMaximumPower.toString()}` ) } } @@ -1299,7 +1299,7 @@ const validatePowerMeasurandValue = ( const validateCurrentMeasurandValue = ( chargingStation: ChargingStation, connectorId: number, - connector: ConnectorStatus | undefined, + connectorStatus: ConnectorStatus | undefined, sampledValue: SampledValue, connectorMaximumAmperage: number, connectorMinimumAmperage: number, @@ -1314,7 +1314,7 @@ const validateCurrentMeasurandValue = ( `${chargingStation.logPrefix()} ${moduleName}.validateCurrentMeasurandValue: MeterValues measurand ${ sampledValue.measurand ?? MeterValueMeasurand.ENERGY_ACTIVE_IMPORT_REGISTER // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - }: connector id ${connectorId.toString()}, transaction id ${connector?.transactionId?.toString()}, value: ${connectorMinimumAmperage.toString()}/${sampledValue.value.toString()}/${connectorMaximumAmperage.toString()}` + }: connector id ${connectorId.toString()}, transaction id ${connectorStatus?.transactionId?.toString()}, value: ${connectorMinimumAmperage.toString()}/${sampledValue.value.toString()}/${connectorMaximumAmperage.toString()}` ) } } @@ -1322,7 +1322,7 @@ const validateCurrentMeasurandValue = ( const validateCurrentMeasurandPhaseValue = ( chargingStation: ChargingStation, connectorId: number, - connector: ConnectorStatus | undefined, + connectorStatus: ConnectorStatus | undefined, sampledValue: SampledValue, connectorMaximumAmperage: number, connectorMinimumAmperage: number, @@ -1340,7 +1340,7 @@ const validateCurrentMeasurandPhaseValue = ( // eslint-disable-next-line @typescript-eslint/restrict-template-expressions sampledValue.phase // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - }, connector id ${connectorId.toString()}, transaction id ${connector?.transactionId?.toString()}, value: ${connectorMinimumAmperage.toString()}/${sampledValue.value.toString()}/${connectorMaximumAmperage.toString()}` + }, connector id ${connectorId.toString()}, transaction id ${connectorStatus?.transactionId?.toString()}, value: ${connectorMinimumAmperage.toString()}/${sampledValue.value.toString()}/${connectorMaximumAmperage.toString()}` ) } } @@ -1563,7 +1563,7 @@ export const buildMeterValue = ( RequestCommand.METER_VALUES ) } - const connector = chargingStation.getConnectorStatus(connectorId) + const connectorStatus = chargingStation.getConnectorStatus(connectorId) const meterValue = buildEmptyMeterValue() as OCPP16MeterValue const buildVersionedSampledValue = ( sampledValueTemplate: SampledValueTemplate, @@ -1638,7 +1638,7 @@ export const buildMeterValue = ( validatePowerMeasurandValue( chargingStation, connectorId, - connector, + connectorStatus, meterValue.sampledValue[sampledValuesIndex], connectorMaximumPower / unitDivider, connectorMinimumPower / unitDivider, @@ -1667,7 +1667,7 @@ export const buildMeterValue = ( validatePowerMeasurandValue( chargingStation, connectorId, - connector, + connectorStatus, meterValue.sampledValue[sampledValuesPerPhaseIndex], connectorMaximumPowerPerPhase / unitDivider, connectorMinimumPowerPerPhase / unitDivider, @@ -1702,7 +1702,7 @@ export const buildMeterValue = ( validateCurrentMeasurandValue( chargingStation, connectorId, - connector, + connectorStatus, meterValue.sampledValue[sampledValuesIndex], connectorMaximumAmperage, connectorMinimumAmperage, @@ -1728,7 +1728,7 @@ export const buildMeterValue = ( validateCurrentMeasurandPhaseValue( chargingStation, connectorId, - connector, + connectorStatus, meterValue.sampledValue[sampledValuesPerPhaseIndex], connectorMaximumAmperage, connectorMinimumAmperage, @@ -1739,7 +1739,7 @@ export const buildMeterValue = ( // Energy.Active.Import.Register measurand (default) const energyMeasurand = buildEnergyMeasurandValue(chargingStation, connectorId, interval) if (energyMeasurand != null) { - updateConnectorEnergyValues(connector, energyMeasurand.value) + updateConnectorEnergyValues(connectorStatus, energyMeasurand.value) const unitDivider = energyMeasurand.template.unit === MeterValueUnit.KILO_WATT_HOUR ? 1000 : 1 const energySampledValue = buildVersionedSampledValue( @@ -1782,7 +1782,7 @@ export const buildMeterValue = ( RequestCommand.METER_VALUES ) } - const connector = chargingStation.getConnectorStatus(connectorId) + const connectorStatus = chargingStation.getConnectorStatus(connectorId) const meterValue = buildEmptyMeterValue() as OCPP20MeterValue const buildVersionedSampledValue = ( sampledValueTemplate: SampledValueTemplate, @@ -1849,7 +1849,7 @@ export const buildMeterValue = ( evseId ) if (energyMeasurand != null) { - updateConnectorEnergyValues(connector, energyMeasurand.value) + updateConnectorEnergyValues(connectorStatus, energyMeasurand.value) const unitDivider = energyMeasurand.template.unit === MeterValueUnit.KILO_WATT_HOUR ? 1000 : 1 const energySampledValue = buildVersionedSampledValue( diff --git a/src/charging-station/ocpp/auth/cache/InMemoryAuthCache.ts b/src/charging-station/ocpp/auth/cache/InMemoryAuthCache.ts index 26cdd333..aa6bbf4b 100644 --- a/src/charging-station/ocpp/auth/cache/InMemoryAuthCache.ts +++ b/src/charging-station/ocpp/auth/cache/InMemoryAuthCache.ts @@ -175,32 +175,32 @@ export class InMemoryAuthCache implements AuthCache { return undefined } - const entry = this.cache.get(identifier) + const authCacheEntry = this.cache.get(identifier) // Cache miss - if (!entry) { + if (!authCacheEntry) { this.stats.misses++ return undefined } // Check expiration const now = Date.now() - if (now >= entry.expiresAt) { + if (now >= authCacheEntry.expiresAt) { this.stats.expired++ // Transition to EXPIRED status instead of deleting (C10.FR.08) - entry.result = { ...entry.result, status: AuthorizationStatus.EXPIRED } + authCacheEntry.result = { ...authCacheEntry.result, status: AuthorizationStatus.EXPIRED } // Apply absolute lifetime cap to expired-transition TTL refresh (default-TTL entries only) - if (!entry.hasExplicitTtl) { - const absoluteDeadline = entry.createdAt + this.maxAbsoluteLifetimeMs + if (!authCacheEntry.hasExplicitTtl) { + const absoluteDeadline = authCacheEntry.createdAt + this.maxAbsoluteLifetimeMs if (absoluteDeadline > now) { - entry.expiresAt = Math.min(now + this.defaultTtl * 1000, absoluteDeadline) + authCacheEntry.expiresAt = Math.min(now + this.defaultTtl * 1000, absoluteDeadline) } } this.lruOrder.set(identifier, now) logger.debug( `${moduleName}: Expired entry transitioned to EXPIRED for identifier: ${truncateId(identifier)}` ) - return entry.result + return authCacheEntry.result } // Cache hit - update LRU order and reset TTL (C10.FR.08) @@ -209,12 +209,15 @@ export class InMemoryAuthCache implements AuthCache { // Reset TTL on access for default-TTL entries only; explicit TTL entries (e.g. CSMS // cacheExpiryDateTime) keep their original expiration per OCPP spec. - if (!entry.hasExplicitTtl && entry.createdAt + this.maxAbsoluteLifetimeMs > now) { - entry.expiresAt = now + this.defaultTtl * 1000 + if ( + !authCacheEntry.hasExplicitTtl && + authCacheEntry.createdAt + this.maxAbsoluteLifetimeMs > now + ) { + authCacheEntry.expiresAt = now + this.defaultTtl * 1000 } logger.debug(`${moduleName}: Cache hit for identifier: ${truncateId(identifier)}`) - return entry.result + return authCacheEntry.result } /** @@ -369,32 +372,32 @@ export class InMemoryAuthCache implements AuthCache { this.stats.rateLimitChecks++ const now = Date.now() - const entry = this.rateLimits.get(identifier) + const rateLimitEntry = this.rateLimits.get(identifier) // No existing entry - create one - if (!entry) { + if (!rateLimitEntry) { this.rateLimits.set(identifier, { count: 1, windowStart: now }) this.boundRateLimitsMap() return true } // Check if window has expired - const windowExpired = now - entry.windowStart >= this.rateLimit.windowMs + const windowExpired = now - rateLimitEntry.windowStart >= this.rateLimit.windowMs if (windowExpired) { // Reset window - entry.count = 1 - entry.windowStart = now + rateLimitEntry.count = 1 + rateLimitEntry.windowStart = now return true } // Within window - check count - if (entry.count >= this.rateLimit.maxRequests) { + if (rateLimitEntry.count >= this.rateLimit.maxRequests) { // Rate limit exceeded return false } // Increment count - entry.count++ + rateLimitEntry.count++ return true } @@ -425,8 +428,11 @@ export class InMemoryAuthCache implements AuthCache { let candidateTime = Number.POSITIVE_INFINITY for (const [identifier, accessTime] of this.lruOrder.entries()) { - const entry = this.cache.get(identifier) - if (entry?.result.status !== AuthorizationStatus.ACCEPTED && accessTime < candidateTime) { + const authCacheEntry = this.cache.get(identifier) + if ( + authCacheEntry?.result.status !== AuthorizationStatus.ACCEPTED && + accessTime < candidateTime + ) { candidateTime = accessTime candidateIdentifier = identifier } diff --git a/src/charging-station/ocpp/auth/services/OCPPAuthServiceImpl.ts b/src/charging-station/ocpp/auth/services/OCPPAuthServiceImpl.ts index 8420bc36..58e87650 100644 --- a/src/charging-station/ocpp/auth/services/OCPPAuthServiceImpl.ts +++ b/src/charging-station/ocpp/auth/services/OCPPAuthServiceImpl.ts @@ -369,21 +369,21 @@ export class OCPPAuthServiceImpl implements OCPPAuthService { : 0 // Get rate limiting stats from cache via remote strategy - let rateLimitStats: + let rateLimitStatistics: | undefined | { blockedRequests: number; rateLimitedIdentifiers: number; totalChecks: number } const remoteStrategy = this.strategies.get('remote') if (remoteStrategy?.getStats) { - const strategyStats = await remoteStrategy.getStats() - if ('cache' in strategyStats) { - const cacheStats = strategyStats.cache as { + const strategyStatistics = await remoteStrategy.getStats() + if ('cache' in strategyStatistics) { + const cacheStatistics = strategyStatistics.cache as { rateLimit?: { blockedRequests: number rateLimitedIdentifiers: number totalChecks: number } } - rateLimitStats = cacheStats.rateLimit + rateLimitStatistics = cacheStatistics.rateLimit } } @@ -393,7 +393,7 @@ export class OCPPAuthServiceImpl implements OCPPAuthService { failedAuth: this.metrics.failedAuth, lastUpdatedDate: this.metrics.lastReset, localUsageRate: Math.round(localUsageRate * 10000) / 100, - rateLimit: rateLimitStats, + rateLimit: rateLimitStatistics, remoteSuccessRate: Math.round(remoteSuccessRate * 10000) / 100, successfulAuth: this.metrics.successfulAuth, totalRequests: this.metrics.totalRequests, @@ -587,13 +587,13 @@ export class OCPPAuthServiceImpl implements OCPPAuthService { */ public updateConfiguration (config: Partial): void { // Merge new config with existing - const newConfig = { ...this.config, ...config } + const newConfiguration = { ...this.config, ...config } // Validate merged configuration - AuthConfigValidator.validate(newConfig) + AuthConfigValidator.validate(newConfiguration) // Apply validated configuration - this.config = newConfig + this.config = newConfiguration logger.info( `${this.chargingStation.logPrefix()} ${moduleName}.updateConfiguration: Authentication configuration updated` diff --git a/src/charging-station/ocpp/auth/strategies/LocalAuthStrategy.ts b/src/charging-station/ocpp/auth/strategies/LocalAuthStrategy.ts index d80f1a04..3f0b7bca 100644 --- a/src/charging-station/ocpp/auth/strategies/LocalAuthStrategy.ts +++ b/src/charging-station/ocpp/auth/strategies/LocalAuthStrategy.ts @@ -207,13 +207,13 @@ export class LocalAuthStrategy implements AuthStrategy { * @returns Strategy statistics including hit rates, request counts, and cache status */ public getStats (): JsonObject { - const cacheStats = this.authCache ? this.authCache.getStats() : null + const cacheStatistics = this.authCache ? this.authCache.getStats() : null return { ...this.stats, cacheHitRate: this.stats.totalRequests > 0 ? (this.stats.cacheHits / this.stats.totalRequests) * 100 : 0, - cacheStats, + cacheStatistics, hasAuthCache: !!this.authCache, hasLocalAuthListManager: !!this.localAuthListManager, isInitialized: this.isInitialized, diff --git a/src/charging-station/ocpp/auth/strategies/RemoteAuthStrategy.ts b/src/charging-station/ocpp/auth/strategies/RemoteAuthStrategy.ts index bae4ac19..f716257b 100644 --- a/src/charging-station/ocpp/auth/strategies/RemoteAuthStrategy.ts +++ b/src/charging-station/ocpp/auth/strategies/RemoteAuthStrategy.ts @@ -218,7 +218,7 @@ export class RemoteAuthStrategy implements AuthStrategy { * @returns Strategy statistics including success rates, response times, and error counts */ public async getStats (): Promise { - const cacheStats = this.authCache ? this.authCache.getStats() : null + const cacheStatistics = this.authCache ? this.authCache.getStats() : null let adapterAvailable = false if (this.adapter) { @@ -232,7 +232,7 @@ export class RemoteAuthStrategy implements AuthStrategy { return { ...this.stats, adapterAvailable, - cacheStats, + cacheStatistics, hasAdapter: this.adapter != null, hasAuthCache: !!this.authCache, isInitialized: this.isInitialized, diff --git a/src/charging-station/ocpp/auth/utils/AuthValidators.ts b/src/charging-station/ocpp/auth/utils/AuthValidators.ts index a8e18f10..250f1a17 100644 --- a/src/charging-station/ocpp/auth/utils/AuthValidators.ts +++ b/src/charging-station/ocpp/auth/utils/AuthValidators.ts @@ -101,40 +101,43 @@ function validateAuthConfiguration (config: unknown): boolean { return false } - const authConfig = config as AuthConfiguration + const authConfiguration = config as AuthConfiguration // Validate required boolean fields exist if ( - typeof authConfig.authorizationCacheEnabled !== 'boolean' || - typeof authConfig.localAuthListEnabled !== 'boolean' || - typeof authConfig.offlineAuthorizationEnabled !== 'boolean' || - typeof authConfig.allowOfflineTxForUnknownId !== 'boolean' || - typeof authConfig.localPreAuthorize !== 'boolean' || - typeof authConfig.certificateAuthEnabled !== 'boolean' + typeof authConfiguration.authorizationCacheEnabled !== 'boolean' || + typeof authConfiguration.localAuthListEnabled !== 'boolean' || + typeof authConfiguration.offlineAuthorizationEnabled !== 'boolean' || + typeof authConfiguration.allowOfflineTxForUnknownId !== 'boolean' || + typeof authConfiguration.localPreAuthorize !== 'boolean' || + typeof authConfiguration.certificateAuthEnabled !== 'boolean' ) { return false } // Validate authorization timeout (required, must be positive) - if (typeof authConfig.authorizationTimeout !== 'number' || authConfig.authorizationTimeout <= 0) { + if ( + typeof authConfiguration.authorizationTimeout !== 'number' || + authConfiguration.authorizationTimeout <= 0 + ) { return false } // Validate optional cache lifetime if provided if ( - authConfig.authorizationCacheLifetime !== undefined && - (typeof authConfig.authorizationCacheLifetime !== 'number' || - authConfig.authorizationCacheLifetime < 0) + authConfiguration.authorizationCacheLifetime !== undefined && + (typeof authConfiguration.authorizationCacheLifetime !== 'number' || + authConfiguration.authorizationCacheLifetime < 0) ) { return false } // Validate optional max cache entries if provided if ( - authConfig.maxCacheEntries !== undefined && - (typeof authConfig.maxCacheEntries !== 'number' || - authConfig.maxCacheEntries < 1 || - !Number.isInteger(authConfig.maxCacheEntries)) + authConfiguration.maxCacheEntries !== undefined && + (typeof authConfiguration.maxCacheEntries !== 'number' || + authConfiguration.maxCacheEntries < 1 || + !Number.isInteger(authConfiguration.maxCacheEntries)) ) { return false } diff --git a/src/charging-station/ui-server/UIServerSecurity.ts b/src/charging-station/ui-server/UIServerSecurity.ts index 6295cf54..fa5b9a83 100644 --- a/src/charging-station/ui-server/UIServerSecurity.ts +++ b/src/charging-station/ui-server/UIServerSecurity.ts @@ -68,9 +68,9 @@ export const createRateLimiter = ( } } - const entry = trackedIps.get(ipAddress) + const ipRateLimitEntry = trackedIps.get(ipAddress) - if (entry === undefined || now >= entry.resetTime) { + if (ipRateLimitEntry === undefined || now >= ipRateLimitEntry.resetTime) { trackedIps.set(ipAddress, { count: 1, resetTime: now + windowMs, @@ -78,8 +78,8 @@ export const createRateLimiter = ( return true } - if (entry.count < maxRequests) { - entry.count++ + if (ipRateLimitEntry.count < maxRequests) { + ipRateLimitEntry.count++ return true } diff --git a/src/charging-station/ui-server/mcp/MCPTools.ts b/src/charging-station/ui-server/mcp/MCPTools.ts index 22d5aef4..a31b49a5 100644 --- a/src/charging-station/ui-server/mcp/MCPTools.ts +++ b/src/charging-station/ui-server/mcp/MCPTools.ts @@ -12,14 +12,14 @@ const DEFAULT_TAIL_LINES = 200 const TAIL_BYTES = 65_536 const getLogFilePath = (configField: 'errorFile' | 'file', date?: string): string | undefined => { - const logConfig = Configuration.getConfigurationSection( + const logConfiguration = Configuration.getConfigurationSection( ConfigurationSection.log ) - const relativePath = logConfig[configField] + const relativePath = logConfiguration[configField] if (relativePath == null) { return undefined } - if (logConfig.rotate !== true) { + if (logConfiguration.rotate !== true) { return resolve(relativePath) } const now = new Date() diff --git a/src/utils/Configuration.ts b/src/utils/Configuration.ts index a3a16cfe..a7745520 100644 --- a/src/utils/Configuration.ts +++ b/src/utils/Configuration.ts @@ -178,11 +178,11 @@ export class Configuration { if ( Configuration.getConfigurationData()?.['supervisionURLs' as keyof ConfigurationData] != null ) { - const configData = Configuration.getConfigurationData() - if (configData != null) { - configData.supervisionUrls = configData['supervisionURLs' as keyof ConfigurationData] as - | string - | string[] + const configurationData = Configuration.getConfigurationData() + if (configurationData != null) { + configurationData.supervisionUrls = configurationData[ + 'supervisionURLs' as keyof ConfigurationData + ] as string | string[] } } return Configuration.getConfigurationData()?.supervisionUrls @@ -206,7 +206,7 @@ export class Configuration { } private static buildLogSection (): LogConfiguration { - const configData = Configuration.getConfigurationData() + const configurationData = Configuration.getConfigurationData() const deprecatedLogKeyMap: [keyof ConfigurationData, keyof LogConfiguration][] = [ ['logEnabled', 'enabled'], ['logFile', 'file'], @@ -221,14 +221,14 @@ export class Configuration { ] const deprecatedLogConfiguration: Record = {} for (const [deprecatedKey, newKey] of deprecatedLogKeyMap) { - if (has(deprecatedKey, configData)) { - deprecatedLogConfiguration[newKey] = configData?.[deprecatedKey] + if (has(deprecatedKey, configurationData)) { + deprecatedLogConfiguration[newKey] = configurationData?.[deprecatedKey] } } const logConfiguration: LogConfiguration = { ...defaultLogConfiguration, ...(deprecatedLogConfiguration as Partial), - ...(has(ConfigurationSection.log, configData) && configData?.log), + ...(has(ConfigurationSection.log, configurationData) && configurationData?.log), } return logConfiguration } @@ -290,7 +290,7 @@ export class Configuration { } private static buildWorkerSection (): WorkerConfiguration { - const configData = Configuration.getConfigurationData() + const configurationData = Configuration.getConfigurationData() const deprecatedWorkerKeyMap: [keyof ConfigurationData, keyof WorkerConfiguration][] = [ ['workerProcess', 'processType'], ['workerStartDelay', 'startDelay'], @@ -301,22 +301,22 @@ export class Configuration { ] const deprecatedWorkerConfiguration: Record = {} for (const [deprecatedKey, newKey] of deprecatedWorkerKeyMap) { - if (has(deprecatedKey, configData)) { - deprecatedWorkerConfiguration[newKey] = configData?.[deprecatedKey] + if (has(deprecatedKey, configurationData)) { + deprecatedWorkerConfiguration[newKey] = configurationData?.[deprecatedKey] } } - if (has('elementStartDelay', configData?.worker)) { + if (has('elementStartDelay', configurationData?.worker)) { // eslint-disable-next-line @typescript-eslint/no-deprecated -- intentional deprecated key migration - deprecatedWorkerConfiguration.elementAddDelay = configData?.worker?.elementStartDelay + deprecatedWorkerConfiguration.elementAddDelay = configurationData?.worker?.elementStartDelay } - if (configData != null) { + if (configurationData != null) { // eslint-disable-next-line @typescript-eslint/no-deprecated -- intentional deprecated key removal - delete configData.workerPoolStrategy + delete configurationData.workerPoolStrategy } const workerConfiguration: WorkerConfiguration = { ...defaultWorkerConfiguration, ...(deprecatedWorkerConfiguration as Partial), - ...(has(ConfigurationSection.worker, configData) && configData?.worker), + ...(has(ConfigurationSection.worker, configurationData) && configurationData?.worker), } if (workerConfiguration.processType != null) { checkWorkerProcessType(workerConfiguration.processType) @@ -483,9 +483,9 @@ export class Configuration { Configuration.getConfigurationData()?.['stationTemplateURLs' as keyof ConfigurationData] != null ) { - const configData = Configuration.getConfigurationData() - if (configData != null) { - configData.stationTemplateUrls = configData[ + const configurationData = Configuration.getConfigurationData() + if (configurationData != null) { + configurationData.stationTemplateUrls = configurationData[ 'stationTemplateURLs' as keyof ConfigurationData ] as StationTemplateUrl[] } diff --git a/src/worker/WorkerAbstract.ts b/src/worker/WorkerAbstract.ts index c63af4f4..a2946a1f 100644 --- a/src/worker/WorkerAbstract.ts +++ b/src/worker/WorkerAbstract.ts @@ -29,11 +29,11 @@ export abstract class WorkerAbstract if (workerScript.trim().length === 0) { throw new Error('Worker script is an empty string') } - const workerScriptStats = statSync(workerScript, { throwIfNoEntry: false }) - if (workerScriptStats == null) { + const workerScriptStatistics = statSync(workerScript, { throwIfNoEntry: false }) + if (workerScriptStatistics == null) { throw new Error(`Worker script file does not exist: '${workerScript}'`) } - if (!workerScriptStats.isFile()) { + if (!workerScriptStatistics.isFile()) { throw new Error(`Worker script is not a regular file: '${workerScript}'`) } this.workerScript = workerScript -- 2.43.0