]> Piment Noir Git Repositories - e-mobility-charging-stations-simulator.git/commit
refactor(ocpp): remove as-unknown-as double-casts from request/response dispatch...
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Sun, 12 Jul 2026 19:54:24 +0000 (21:54 +0200)
committerGitHub <noreply@github.com>
Sun, 12 Jul 2026 19:54:24 +0000 (21:54 +0200)
commit4dd00cea03b44026542d2914fdd0f48afa84fb26
tree358c749bcd6f01b588e6104ba58f8b5dcccb44ea
parentbc003ccca94105bb04f45f8f044e07ec8e4fb351
refactor(ocpp): remove as-unknown-as double-casts from request/response dispatch (#2003)

Give each builder its precise input contract instead of laundering casts
through phantom generics or JsonType:

- buildRequestPayload drops its unsound <Request> generic and returns honest
  JsonType; each dispatch branch narrows with a single cast at a genuine
  JsonType boundary.
- Builder inputs (StatusNotificationOptions, OCPP20TransactionEventOptions,
  SignCertificateOptions) are JsonObject subtypes; StatusNotification build
  validates connectorStatus via the shared isOCPP20ConnectorStatus guard.
- Handler bridges (toRequestHandler/toResponseHandler) use a single cast that
  preserves the handler's async identity, fixing an unawaited-handler
  regression from a plain wrapper defeating isAsyncFunction.
- CAT-C string-to-enum narrowing becomes a type guard / typed Record.

Closes #1968
19 files changed:
src/charging-station/ChargingStation.ts
src/charging-station/broadcast-channel/ChargingStationWorkerBroadcastChannel.ts
src/charging-station/ocpp/1.6/OCPP16IncomingRequestService.ts
src/charging-station/ocpp/1.6/OCPP16RequestService.ts
src/charging-station/ocpp/1.6/OCPP16ResponseService.ts
src/charging-station/ocpp/1.6/OCPP16ServiceUtils.ts
src/charging-station/ocpp/2.0/OCPP20IncomingRequestService.ts
src/charging-station/ocpp/2.0/OCPP20RequestService.ts
src/charging-station/ocpp/2.0/OCPP20ResponseService.ts
src/charging-station/ocpp/2.0/OCPP20ServiceUtils.ts
src/charging-station/ocpp/OCPPConnectorStatusOperations.ts
src/charging-station/ocpp/OCPPIncomingRequestService.ts
src/charging-station/ocpp/OCPPResponseService.ts
src/charging-station/ocpp/auth/types/AuthTypes.ts
src/types/index.ts
src/types/ocpp/2.0/Transaction.ts
src/types/ocpp/Requests.ts
tests/charging-station/ocpp/2.0/OCPP20ServiceUtils-StatusNotification.test.ts
tests/charging-station/ocpp/OCPPConnectorStatusOperations.test.ts