feat: ensure charging station add op return its station info
[e-mobility-charging-stations-simulator.git] / src / types / ChargingStationWorker.ts
index f016d8ffba7f980cf4ddb77d6222a5c236005676..c6fd0af2afdb84bb83cd354a4e00f8a3369d85c8 100644 (file)
@@ -1,22 +1,83 @@
-import { WorkerData, WorkerMessage, WorkerMessageEvents } from './Worker';
+import type { WebSocket } from 'ws'
+
+import { type WorkerData, type WorkerMessage, WorkerMessageEvents } from '../worker/index.js'
+import type { ChargingStationAutomaticTransactionGeneratorConfiguration } from './AutomaticTransactionGenerator.js'
+import { ChargingStationEvents } from './ChargingStationEvents.js'
+import type { ChargingStationInfo } from './ChargingStationInfo.js'
+import type { ChargingStationOcppConfiguration } from './ChargingStationOcppConfiguration.js'
+import type { ConnectorStatus } from './ConnectorStatus.js'
+import type { EvseStatus } from './Evse.js'
+import type { JsonObject } from './JsonType.js'
+import type { BootNotificationResponse } from './ocpp/Responses.js'
+import type { Statistics } from './Statistics.js'
+
+export interface ChargingStationOptions extends JsonObject {
+  supervisionUrls?: string | string[]
+  persistentConfiguration?: boolean
+  autoStart?: boolean
+  autoRegister?: boolean
+  enableStatistics?: boolean
+  ocppStrictCompliance?: boolean
+  stopTransactionsOnStopped?: boolean
+}
 
 export interface ChargingStationWorkerData extends WorkerData {
-  index: number;
-  templateFile: string;
+  index: number
+  templateFile: string
+  options?: ChargingStationOptions
+}
+
+export type EvseStatusWorkerType = Omit<EvseStatus, 'connectors'> & {
+  connectors?: ConnectorStatus[]
 }
 
-enum InternalChargingStationWorkerMessageEvents {
-  PERFORMANCE_STATISTICS = 'performanceStatistics'
+export interface ChargingStationData extends WorkerData {
+  started: boolean
+  stationInfo: ChargingStationInfo
+  connectors: ConnectorStatus[]
+  evses: EvseStatusWorkerType[]
+  ocppConfiguration: ChargingStationOcppConfiguration
+  supervisionUrl: string
+  wsState?:
+  | typeof WebSocket.CONNECTING
+  | typeof WebSocket.OPEN
+  | typeof WebSocket.CLOSING
+  | typeof WebSocket.CLOSED
+  bootNotificationResponse?: BootNotificationResponse
+  automaticTransactionGenerator?: ChargingStationAutomaticTransactionGeneratorConfiguration
 }
 
-export type ChargingStationWorkerMessageEvents = WorkerMessageEvents | InternalChargingStationWorkerMessageEvents;
+enum ChargingStationMessageEvents {
+  performanceStatistics = 'performanceStatistics'
+}
 
 export const ChargingStationWorkerMessageEvents = {
   ...WorkerMessageEvents,
-  ...InternalChargingStationWorkerMessageEvents
-};
+  ...ChargingStationEvents,
+  ...ChargingStationMessageEvents
+} as const
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+export type ChargingStationWorkerMessageEvents =
+  | WorkerMessageEvents
+  | ChargingStationEvents
+  | ChargingStationMessageEvents
+
+export interface ChargingStationWorkerEventError extends WorkerData {
+  event: WorkerMessageEvents
+  name: string
+  message: string
+  stack?: string
+}
 
+export type ChargingStationWorkerMessageData =
+  | ChargingStationInfo
+  | ChargingStationData
+  | Statistics
+  | ChargingStationWorkerEventError
 
-export interface ChargingStationWorkerMessage extends Omit<WorkerMessage, 'id'> {
-  id: ChargingStationWorkerMessageEvents;
+export type ChargingStationWorkerMessage<T extends ChargingStationWorkerMessageData> = Omit<
+WorkerMessage<T>,
+'event'
+> & {
+  event: ChargingStationWorkerMessageEvents
 }