.DS_Store
node_modules
/dist
+/assets/config.ts
# Created by git for backups. To disable backups in git:
# $ git config --global mergetool.keepBackup false
## Project setup
+### Dependencies
+
```shell
corepack enable
corepack prepare pnpm@latest --activate
pnpm install
```
-The simulator UI server must be enabled, use WebSocket and disable authentication. The simulator main configuration file should have a `uiServer` section like this:
+### Configuration
+
+#### Simulator UI Server Configuration
+
+The simulator UI server must be enabled, use WebSocket transport type and have authentication disabled. The simulator main configuration file should have a `uiServer` section like this:
```json
"uiServer": {
See [here](./../../README.md#charging-stations-simulator-configuration) for more details.
+#### Web UI configuration
+
+Copy the configuration template [assets/config-template.ts](assets/config-template.ts) to `assets/config.ts`.
+
### Run
-#### Compiles and run for production
+#### Compiles for production
```shell
-pnpm start
+pnpm build
```
-#### Compiles and run for development
+#### Compiles and preview locally for production
+
+```shell
+pnpm preview
+```
+
+#### Compiles and run for production
```shell
-pnpm serve
+pnpm start
```
#### Try it out
1. With the top 2 buttons you can now stop and afterwards start the simulator and inspect the server console for the number of charging stations, e.g. with the default configuration: `Charging stations simulator ... started with 10 charging station(s)`
2. Each charging station is a row in the table below, try "Stop Charging Station" and refresh with the large blue button and see the status Started turns from Yes into No.
-### Compiles and minifies for production
+### Development
+
+#### Compiles and run for development
```shell
-pnpm build
+pnpm dev
+```
+
+#### Formats files
+
+```shell
+pnpm format
```
-### Lints files
+#### Lints and fixes files
```shell
-pnpm lint
+pnpm lint:fix
```
--- /dev/null
+import { AuthenticationType, type ConfigurationData, Protocol, ProtocolVersion } from '@/types'
+
+const configuration: ConfigurationData = {
+ uiServer: {
+ host: 'localhost',
+ port: 8080,
+ protocol: Protocol.UI,
+ version: ProtocolVersion['0.0.1'],
+ authentication: {
+ enabled: false,
+ type: AuthenticationType.BASIC_AUTH,
+ username: 'admin',
+ password: 'admin'
+ }
+ }
+}
+
+export default configuration
+++ /dev/null
-import type { ConfigurationData } from '@/types'
-
-const configuration: ConfigurationData = {
- uiServer: {
- host: 'localhost',
- port: 8080,
- protocol: 'ui0.0.1'
- }
-}
-
-export default configuration
import {
+ ApplicationProtocol,
ProcedureName,
type ProtocolResponse,
type RequestPayload,
type ResponsePayload,
ResponseStatus
} from '@/types'
+// @ts-expect-error: configuration file can be non existent
+// eslint-disable-next-line import/no-unresolved
import configuration from '@/assets/config'
type ResponseHandler = {
private openWS(): void {
this.ws = new WebSocket(
- `ws://${configuration.uiServer.host}:${configuration.uiServer.port}`,
- configuration.uiServer.protocol
+ `${configuration.uiServer.secure === true ? ApplicationProtocol.WSS : ApplicationProtocol.WS}://${configuration.uiServer.host}:${configuration.uiServer.port}`,
+ `${configuration.uiServer.protocol}${configuration.uiServer.version}`
)
this.ws.onmessage = this.responseHandler.bind(this)
this.ws.onerror = errorEvent => {
+import type { AuthenticationType, Protocol, ProtocolVersion } from './UIProtocol'
+
export type ConfigurationData = {
uiServer: UIServerConfigurationSection
}
type UIServerConfigurationSection = {
host: string
port: number
- protocol: string
- username?: string
- password?: string
+ secure?: boolean
+ protocol: Protocol
+ version: ProtocolVersion
+ authentication?: {
+ enabled: boolean
+ type: AuthenticationType
+ username?: string
+ password?: string
+ }
}
}
export enum ApplicationProtocol {
- HTTP = 'http',
- WS = 'ws'
+ WS = 'ws',
+ WSS = 'wss'
}
export enum ProtocolVersion {
'0.0.1' = '0.0.1'
}
+export enum AuthenticationType {
+ BASIC_AUTH = 'basic-auth'
+}
+
export type ProtocolRequest = [string, ProcedureName, RequestPayload]
export type ProtocolResponse = [string, ResponsePayload]
} from './ChargingStationType'
export type { ConfigurationData } from './ConfigurationType'
export {
+ ApplicationProtocol,
+ AuthenticationType,
ProcedureName,
+ Protocol,
type ProtocolResponse,
+ ProtocolVersion,
type RequestPayload,
type ResponsePayload,
ResponseStatus