feat: ensure charging station add op return its station info
[e-mobility-charging-stations-simulator.git] / src / types / ChargingStationWorker.ts
index 4cbe8ba7069706ea6080f41b2560705ed39c5f10..c6fd0af2afdb84bb83cd354a4e00f8a3369d85c8 100644 (file)
@@ -1,44 +1,83 @@
-import type ChargingStationInfo from './ChargingStationInfo';
-import type { ConnectorStatus } from './ConnectorStatus';
-import type { JsonObject } from './JsonType';
-import type { BootNotificationResponse } from './ocpp/Responses';
-import type Statistics from './Statistics';
-import { WorkerData, WorkerMessage, WorkerMessageEvents } from './Worker';
-
-export interface ChargingStationWorkerOptions extends JsonObject {
-  elementStartDelay?: number;
+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;
-  chargingStationWorkerOptions?: ChargingStationWorkerOptions;
+  index: number
+  templateFile: string
+  options?: ChargingStationOptions
+}
+
+export type EvseStatusWorkerType = Omit<EvseStatus, 'connectors'> & {
+  connectors?: ConnectorStatus[]
 }
 
 export interface ChargingStationData extends WorkerData {
-  stationInfo: ChargingStationInfo;
-  started: boolean;
-  bootNotificationResponse: BootNotificationResponse;
-  connectors: ConnectorStatus[];
+  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
 }
 
 enum ChargingStationMessageEvents {
-  STARTED = 'started',
-  STOPPED = 'stopped',
-  UPDATED = 'updated',
-  PERFORMANCE_STATISTICS = 'performanceStatistics',
+  performanceStatistics = 'performanceStatistics'
 }
 
-export type ChargingStationWorkerMessageEvents = WorkerMessageEvents | ChargingStationMessageEvents;
-
 export const ChargingStationWorkerMessageEvents = {
   ...WorkerMessageEvents,
-  ...ChargingStationMessageEvents,
-};
+  ...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 = ChargingStationData | Statistics;
+export type ChargingStationWorkerMessageData =
+  | ChargingStationInfo
+  | ChargingStationData
+  | Statistics
+  | ChargingStationWorkerEventError
 
-export interface ChargingStationWorkerMessage<T extends WorkerData>
-  extends Omit<WorkerMessage<T>, 'id'> {
-  id: ChargingStationWorkerMessageEvents;
+export type ChargingStationWorkerMessage<T extends ChargingStationWorkerMessageData> = Omit<
+WorkerMessage<T>,
+'event'
+> & {
+  event: ChargingStationWorkerMessageEvents
 }