@zetra/citrineos-util 1.8.3-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/dist/authorization/ApiAuthPlugin.d.ts +52 -0
  2. package/dist/authorization/ApiAuthPlugin.js +122 -0
  3. package/dist/authorization/ApiAuthPlugin.js.map +1 -0
  4. package/dist/authorization/OidcTokenProvider.d.ts +15 -0
  5. package/dist/authorization/OidcTokenProvider.js +47 -0
  6. package/dist/authorization/OidcTokenProvider.js.map +1 -0
  7. package/dist/authorization/index.d.ts +4 -0
  8. package/dist/authorization/index.js +8 -0
  9. package/dist/authorization/index.js.map +1 -0
  10. package/dist/authorization/provider/LocalByPassAuthProvider.d.ts +34 -0
  11. package/dist/authorization/provider/LocalByPassAuthProvider.js +62 -0
  12. package/dist/authorization/provider/LocalByPassAuthProvider.js.map +1 -0
  13. package/dist/authorization/provider/OIDCAuthProvider.d.ts +62 -0
  14. package/dist/authorization/provider/OIDCAuthProvider.js +173 -0
  15. package/dist/authorization/provider/OIDCAuthProvider.js.map +1 -0
  16. package/dist/authorization/rbac/RbacRulesLoader.d.ts +32 -0
  17. package/dist/authorization/rbac/RbacRulesLoader.js +105 -0
  18. package/dist/authorization/rbac/RbacRulesLoader.js.map +1 -0
  19. package/dist/authorization/rbac/UrlMatcher.d.ts +14 -0
  20. package/dist/authorization/rbac/UrlMatcher.js +44 -0
  21. package/dist/authorization/rbac/UrlMatcher.js.map +1 -0
  22. package/dist/authorizer/RealTimeAuthorizer.d.ts +28 -0
  23. package/dist/authorizer/RealTimeAuthorizer.js +152 -0
  24. package/dist/authorizer/RealTimeAuthorizer.js.map +1 -0
  25. package/dist/authorizer/index.d.ts +1 -0
  26. package/dist/authorizer/index.js +5 -0
  27. package/dist/authorizer/index.js.map +1 -0
  28. package/dist/cache/memory.d.ts +19 -0
  29. package/dist/cache/memory.js +147 -0
  30. package/dist/cache/memory.js.map +1 -0
  31. package/dist/cache/redis.d.ts +16 -0
  32. package/dist/cache/redis.js +120 -0
  33. package/dist/cache/redis.js.map +1 -0
  34. package/dist/certificate/CertificateAuthority.d.ts +38 -0
  35. package/dist/certificate/CertificateAuthority.js +233 -0
  36. package/dist/certificate/CertificateAuthority.js.map +1 -0
  37. package/dist/certificate/CertificateUtil.d.ts +60 -0
  38. package/dist/certificate/CertificateUtil.js +317 -0
  39. package/dist/certificate/CertificateUtil.js.map +1 -0
  40. package/dist/certificate/client/acme.d.ts +37 -0
  41. package/dist/certificate/client/acme.js +138 -0
  42. package/dist/certificate/client/acme.js.map +1 -0
  43. package/dist/certificate/client/hubject.d.ts +41 -0
  44. package/dist/certificate/client/hubject.js +221 -0
  45. package/dist/certificate/client/hubject.js.map +1 -0
  46. package/dist/certificate/client/interface.d.ts +12 -0
  47. package/dist/certificate/client/interface.js +5 -0
  48. package/dist/certificate/client/interface.js.map +1 -0
  49. package/dist/certificate/index.d.ts +2 -0
  50. package/dist/certificate/index.js +6 -0
  51. package/dist/certificate/index.js.map +1 -0
  52. package/dist/files/ftpServer.d.ts +4 -0
  53. package/dist/files/ftpServer.js +9 -0
  54. package/dist/files/ftpServer.js.map +1 -0
  55. package/dist/files/gcpCloudStorage.d.ts +39 -0
  56. package/dist/files/gcpCloudStorage.js +130 -0
  57. package/dist/files/gcpCloudStorage.js.map +1 -0
  58. package/dist/files/localStorage.d.ts +14 -0
  59. package/dist/files/localStorage.js +57 -0
  60. package/dist/files/localStorage.js.map +1 -0
  61. package/dist/files/s3Storage.d.ts +17 -0
  62. package/dist/files/s3Storage.js +118 -0
  63. package/dist/files/s3Storage.js.map +1 -0
  64. package/dist/index.d.ts +21 -0
  65. package/dist/index.js +25 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/networkconnection/WebsocketNetworkConnection.d.ts +135 -0
  68. package/dist/networkconnection/WebsocketNetworkConnection.js +474 -0
  69. package/dist/networkconnection/WebsocketNetworkConnection.js.map +1 -0
  70. package/dist/networkconnection/authenticator/Authenticator.d.ts +20 -0
  71. package/dist/networkconnection/authenticator/Authenticator.js +39 -0
  72. package/dist/networkconnection/authenticator/Authenticator.js.map +1 -0
  73. package/dist/networkconnection/authenticator/AuthenticatorFilter.d.ts +11 -0
  74. package/dist/networkconnection/authenticator/AuthenticatorFilter.js +30 -0
  75. package/dist/networkconnection/authenticator/AuthenticatorFilter.js.map +1 -0
  76. package/dist/networkconnection/authenticator/BasicAuthenticationFilter.d.ts +17 -0
  77. package/dist/networkconnection/authenticator/BasicAuthenticationFilter.js +51 -0
  78. package/dist/networkconnection/authenticator/BasicAuthenticationFilter.js.map +1 -0
  79. package/dist/networkconnection/authenticator/ConnectedStationFilter.d.ts +14 -0
  80. package/dist/networkconnection/authenticator/ConnectedStationFilter.js +25 -0
  81. package/dist/networkconnection/authenticator/ConnectedStationFilter.js.map +1 -0
  82. package/dist/networkconnection/authenticator/NetworkProfileFilter.d.ts +16 -0
  83. package/dist/networkconnection/authenticator/NetworkProfileFilter.js +84 -0
  84. package/dist/networkconnection/authenticator/NetworkProfileFilter.js.map +1 -0
  85. package/dist/networkconnection/authenticator/UnknownStationFilter.d.ts +16 -0
  86. package/dist/networkconnection/authenticator/UnknownStationFilter.js +25 -0
  87. package/dist/networkconnection/authenticator/UnknownStationFilter.js.map +1 -0
  88. package/dist/networkconnection/authenticator/errors/AuthenticationError.d.ts +6 -0
  89. package/dist/networkconnection/authenticator/errors/AuthenticationError.js +25 -0
  90. package/dist/networkconnection/authenticator/errors/AuthenticationError.js.map +1 -0
  91. package/dist/networkconnection/authenticator/errors/IUpgradeError.d.ts +9 -0
  92. package/dist/networkconnection/authenticator/errors/IUpgradeError.js +5 -0
  93. package/dist/networkconnection/authenticator/errors/IUpgradeError.js.map +1 -0
  94. package/dist/networkconnection/authenticator/errors/UnknownError.d.ts +6 -0
  95. package/dist/networkconnection/authenticator/errors/UnknownError.js +24 -0
  96. package/dist/networkconnection/authenticator/errors/UnknownError.js.map +1 -0
  97. package/dist/networkconnection/index.d.ts +5 -0
  98. package/dist/networkconnection/index.js +9 -0
  99. package/dist/networkconnection/index.js.map +1 -0
  100. package/dist/queue/index.d.ts +4 -0
  101. package/dist/queue/index.js +8 -0
  102. package/dist/queue/index.js.map +1 -0
  103. package/dist/queue/kafka/receiver.d.ts +35 -0
  104. package/dist/queue/kafka/receiver.js +179 -0
  105. package/dist/queue/kafka/receiver.js.map +1 -0
  106. package/dist/queue/kafka/sender.d.ts +53 -0
  107. package/dist/queue/kafka/sender.js +189 -0
  108. package/dist/queue/kafka/sender.js.map +1 -0
  109. package/dist/queue/rabbit-mq/receiver.d.ts +89 -0
  110. package/dist/queue/rabbit-mq/receiver.js +472 -0
  111. package/dist/queue/rabbit-mq/receiver.js.map +1 -0
  112. package/dist/queue/rabbit-mq/sender.d.ts +90 -0
  113. package/dist/queue/rabbit-mq/sender.js +251 -0
  114. package/dist/queue/rabbit-mq/sender.js.map +1 -0
  115. package/dist/security/SignedMeterValuesUtil.d.ts +44 -0
  116. package/dist/security/SignedMeterValuesUtil.js +135 -0
  117. package/dist/security/SignedMeterValuesUtil.js.map +1 -0
  118. package/dist/security/authentication.d.ts +2 -0
  119. package/dist/security/authentication.js +26 -0
  120. package/dist/security/authentication.js.map +1 -0
  121. package/dist/util/RequestOperations.d.ts +14 -0
  122. package/dist/util/RequestOperations.js +25 -0
  123. package/dist/util/RequestOperations.js.map +1 -0
  124. package/dist/util/StringOperations.d.ts +1 -0
  125. package/dist/util/StringOperations.js +8 -0
  126. package/dist/util/StringOperations.js.map +1 -0
  127. package/dist/util/emaidCheckDigitCalculator.d.ts +15 -0
  128. package/dist/util/emaidCheckDigitCalculator.js +179 -0
  129. package/dist/util/emaidCheckDigitCalculator.js.map +1 -0
  130. package/dist/util/idGenerator.d.ts +7 -0
  131. package/dist/util/idGenerator.js +10 -0
  132. package/dist/util/idGenerator.js.map +1 -0
  133. package/dist/util/parser.d.ts +31 -0
  134. package/dist/util/parser.js +60 -0
  135. package/dist/util/parser.js.map +1 -0
  136. package/dist/util/swagger.d.ts +5 -0
  137. package/dist/util/swagger.js +154 -0
  138. package/dist/util/swagger.js.map +1 -0
  139. package/dist/util/validator.d.ts +110 -0
  140. package/dist/util/validator.js +534 -0
  141. package/dist/util/validator.js.map +1 -0
  142. package/package.json +46 -0
@@ -0,0 +1,118 @@
1
+ // SPDX-FileCopyrightText: 2025 Contributors to the CitrineOS Project
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ import { CreateBucketCommand, GetObjectCommand, PutObjectCommand, S3Client, } from '@aws-sdk/client-s3';
5
+ import { Readable } from 'stream';
6
+ import { Logger } from 'tslog';
7
+ export class S3Storage {
8
+ _logger;
9
+ s3Client;
10
+ defaultBucketName;
11
+ configFileName;
12
+ configBucketName;
13
+ constructor(config, configFileName, configDir, logger) {
14
+ this.s3Client = new S3Client({
15
+ // Endpoint required for Minio
16
+ ...(config.endpoint ? { endpoint: config.endpoint } : {}),
17
+ // Region required for AWS S3
18
+ ...(config.region ? { region: config.region } : {}),
19
+ // Only set forcePathStyle to true for Minio, use default (false) for AWS S3
20
+ forcePathStyle: !!config?.s3ForcePathStyle,
21
+ // Add credentials if explicitly provided
22
+ ...(config.accessKeyId && config.secretAccessKey
23
+ ? {
24
+ credentials: {
25
+ accessKeyId: config.accessKeyId,
26
+ secretAccessKey: config.secretAccessKey,
27
+ },
28
+ }
29
+ : {}),
30
+ });
31
+ this.defaultBucketName = config.defaultBucketName;
32
+ this.configFileName = configFileName;
33
+ this.configBucketName = configDir;
34
+ this._logger = logger
35
+ ? logger.getSubLogger({ name: this.constructor.name })
36
+ : new Logger({ name: this.constructor.name });
37
+ }
38
+ async saveFile(fileName, content, filePath) {
39
+ const bucketName = filePath ? filePath : this.defaultBucketName;
40
+ const command = new PutObjectCommand({
41
+ Bucket: bucketName,
42
+ Key: fileName,
43
+ Body: content,
44
+ ContentType: 'application/octet-stream',
45
+ });
46
+ try {
47
+ const result = await this.s3Client.send(command);
48
+ if (result.$metadata.httpStatusCode !== 200) {
49
+ throw new Error(`Failed to upload file ${fileName}: ${result.$metadata.httpStatusCode}`);
50
+ }
51
+ else {
52
+ return fileName;
53
+ }
54
+ }
55
+ catch (error) {
56
+ if (error.name === 'NoSuchBucket' || error.$metadata?.httpStatusCode === 404) {
57
+ this._logger.warn(`Bucket "${bucketName}" not found. Creating it...`);
58
+ await this.createBucket(bucketName);
59
+ this._logger.info(`Bucket "${bucketName}" created. Retrying config save...`);
60
+ return await this.saveFile(fileName, content, filePath);
61
+ }
62
+ else {
63
+ this._logger.error('Error saving config to S3:', error);
64
+ throw error;
65
+ }
66
+ }
67
+ }
68
+ async getFile(id, filePath) {
69
+ const command = new GetObjectCommand({
70
+ Bucket: filePath ? filePath : this.defaultBucketName,
71
+ Key: id,
72
+ });
73
+ const { Body } = await this.s3Client.send(command);
74
+ if (!Body)
75
+ return;
76
+ return await S3Storage.streamToString(Body);
77
+ }
78
+ async fetchConfig() {
79
+ try {
80
+ const configString = await this.getFile(this.configFileName, this.configBucketName);
81
+ if (!configString)
82
+ return null;
83
+ return JSON.parse(configString);
84
+ }
85
+ catch (error) {
86
+ if (error.name === 'NoSuchKey' || error.$metadata?.httpStatusCode === 404) {
87
+ this._logger.warn('Config not found in S3.');
88
+ return null;
89
+ }
90
+ this._logger.error('Error fetching config from S3:', error);
91
+ throw error;
92
+ }
93
+ }
94
+ async saveConfig(config) {
95
+ await this.saveFile(this.configFileName, Buffer.from(JSON.stringify(config, null, 2)), this.configBucketName);
96
+ this._logger.info('Config saved to S3.');
97
+ }
98
+ async createBucket(bucket) {
99
+ try {
100
+ const command = new CreateBucketCommand({ Bucket: bucket });
101
+ await this.s3Client.send(command);
102
+ this._logger.info(`Bucket "${bucket}" created successfully.`);
103
+ }
104
+ catch (error) {
105
+ this._logger.error(`Failed to create bucket "${bucket}":`, error);
106
+ throw error;
107
+ }
108
+ }
109
+ static async streamToString(stream) {
110
+ return new Promise((resolve, reject) => {
111
+ const chunks = [];
112
+ stream.on('data', (chunk) => chunks.push(chunk));
113
+ stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
114
+ stream.on('error', reject);
115
+ });
116
+ }
117
+ }
118
+ //# sourceMappingURL=s3Storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"s3Storage.js","sourceRoot":"","sources":["../../src/files/s3Storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export { UnknownStationFilter } from './networkconnection/authenticator/UnknownStationFilter.js';
2
+ export { ConnectedStationFilter } from './networkconnection/authenticator/ConnectedStationFilter.js';
3
+ export { NetworkProfileFilter } from './networkconnection/authenticator/NetworkProfileFilter.js';
4
+ export { BasicAuthenticationFilter } from './networkconnection/authenticator/BasicAuthenticationFilter.js';
5
+ export * from './authorization/index.js';
6
+ export * from './authorizer/index.js';
7
+ export { MemoryCache } from './cache/memory.js';
8
+ export { RedisCache } from './cache/redis.js';
9
+ export { S3Storage } from './files/s3Storage.js';
10
+ export { GcpCloudStorage } from './files/gcpCloudStorage.js';
11
+ export { FtpServer } from './files/ftpServer.js';
12
+ export { LocalStorage } from './files/localStorage.js';
13
+ export * from './queue/index.js';
14
+ export * from './networkconnection/index.js';
15
+ export * from './certificate/index.js';
16
+ export { initSwagger } from './util/swagger.js';
17
+ export { getSizeOfRequest, getBatches, stringToSet } from './util/parser.js';
18
+ export { validateLanguageTag, validateChargingProfileType, validateIdToken, validateISO15693IdToken, validateISO14443IdToken, validateIdentifierStringIdToken, validateNoAuthorizationIdToken, type ValidationResult, validateASCIIContent, validateHTMLContent, validateURIContent, validateUTF8Content, validateMessageContent, validateMessageContentType, validatePEMEncodedCSR, } from './util/validator.js';
19
+ export { IdGenerator } from './util/idGenerator.js';
20
+ export { isValidPassword, generatePassword } from './security/authentication.js';
21
+ export { SignedMeterValuesUtil } from './security/SignedMeterValuesUtil.js';
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ // SPDX-FileCopyrightText: 2025 Contributors to the CitrineOS Project
2
+ //
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ export { UnknownStationFilter } from './networkconnection/authenticator/UnknownStationFilter.js';
5
+ export { ConnectedStationFilter } from './networkconnection/authenticator/ConnectedStationFilter.js';
6
+ export { NetworkProfileFilter } from './networkconnection/authenticator/NetworkProfileFilter.js';
7
+ export { BasicAuthenticationFilter } from './networkconnection/authenticator/BasicAuthenticationFilter.js';
8
+ export * from './authorization/index.js';
9
+ export * from './authorizer/index.js';
10
+ export { MemoryCache } from './cache/memory.js';
11
+ export { RedisCache } from './cache/redis.js';
12
+ export { S3Storage } from './files/s3Storage.js';
13
+ export { GcpCloudStorage } from './files/gcpCloudStorage.js';
14
+ export { FtpServer } from './files/ftpServer.js';
15
+ export { LocalStorage } from './files/localStorage.js';
16
+ export * from './queue/index.js';
17
+ export * from './networkconnection/index.js';
18
+ export * from './certificate/index.js';
19
+ export { initSwagger } from './util/swagger.js';
20
+ export { getSizeOfRequest, getBatches, stringToSet } from './util/parser.js';
21
+ export { validateLanguageTag, validateChargingProfileType, validateIdToken, validateISO15693IdToken, validateISO14443IdToken, validateIdentifierStringIdToken, validateNoAuthorizationIdToken, validateASCIIContent, validateHTMLContent, validateURIContent, validateUTF8Content, validateMessageContent, validateMessageContentType, validatePEMEncodedCSR, } from './util/validator.js';
22
+ export { IdGenerator } from './util/idGenerator.js';
23
+ export { isValidPassword, generatePassword } from './security/authentication.js';
24
+ export { SignedMeterValuesUtil } from './security/SignedMeterValuesUtil.js';
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,EAAE;AACF,sCAAsC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,sBAAsB,EAAE,MAAM,6DAA6D,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,2DAA2D,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,gEAAgE,CAAC;AAE3G,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,+BAA+B,EAC/B,8BAA8B,EAE9B,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC"}
@@ -0,0 +1,135 @@
1
+ import type { IAuthenticator, ICache, IMessageRouter, INetworkConnection, SystemConfig, WebsocketServerConfig } from '@citrineos/base';
2
+ import type { ILogObj } from 'tslog';
3
+ import { Logger } from 'tslog';
4
+ export declare class WebsocketNetworkConnection implements INetworkConnection {
5
+ protected _cache: ICache;
6
+ protected _config: SystemConfig;
7
+ protected _logger: Logger<ILogObj>;
8
+ private _identifierConnections;
9
+ private _httpServersMap;
10
+ private _authenticator;
11
+ private _router;
12
+ private _doesChargingStationExistByStationId?;
13
+ constructor(config: SystemConfig, cache: ICache, authenticator: IAuthenticator, router: IMessageRouter, logger?: Logger<ILogObj>, doesChargingStationExistByStationId?: (tenantId: number, stationId: string) => Promise<boolean>);
14
+ /**
15
+ * Send a message to the charging station specified by the identifier.
16
+ *
17
+ * @param {string} identifier - The identifier of the client.
18
+ * @param {string} message - The message to send.
19
+ * @return {void} rejects the promise if message fails to send, otherwise returns void.
20
+ */
21
+ sendMessage(identifier: string, message: string): Promise<void>;
22
+ bindNetworkHook(): (identifier: string, message: string) => Promise<void>;
23
+ disconnect(tenantId: number, stationId: string): Promise<boolean>;
24
+ shutdown(): Promise<void>;
25
+ /**
26
+ * Updates certificates for a specific server with the provided TLS key, certificate chain, and optional
27
+ * root CA.
28
+ *
29
+ * @param {string} serverId - The ID of the server to update.
30
+ * @param {string} tlsKey - The TLS key to set.
31
+ * @param {string} tlsCertificateChain - The TLS certificate chain to set.
32
+ * @param {string} [rootCA] - The root CA to set (optional).
33
+ * @return {void} void
34
+ */
35
+ updateTlsCertificates(serverId: string, tlsKey: string, tlsCertificateChain: string, rootCA?: string): void;
36
+ /**
37
+ * Dynamically adds a new websocket server at runtime and starts it.
38
+ *
39
+ * @param {WebsocketServerConfig} websocketServerConfig
40
+ * @returns {Promise<void>}
41
+ */
42
+ addWebsocketServer(websocketServerConfig: WebsocketServerConfig): Promise<void>;
43
+ private _onHttpRequest;
44
+ /**
45
+ * Method to validate websocket upgrade requests and pass them to the socket server.
46
+ *
47
+ * @param {IncomingMessage} req - The request object.
48
+ * @param {Duplex} socket - Websocket duplex stream.
49
+ * @param {Buffer} head - Websocket buffer.
50
+ * @param {WebSocketServer} wss - Websocket server.
51
+ * @param {WebsocketServerConfig} websocketServerConfig - websocket server config.
52
+ */
53
+ private _upgradeRequest;
54
+ /**
55
+ * Utility function to reject websocket upgrade requests with 500 status code.
56
+ * @param socket - Websocket duplex stream.
57
+ */
58
+ private _terminateConnectionInternalError;
59
+ /**
60
+ * Internal method to handle new client connection and ensures supported protocols are used.
61
+ *
62
+ * @param {Set<string>} protocols - The set of protocols to handle.
63
+ * @param {IncomingMessage} _req - The request object.
64
+ * @param {string} wsServerProtocol - The websocket server protocol.
65
+ * @return {boolean|string} - Returns the protocol version if successful, otherwise false.
66
+ */
67
+ private _handleProtocols;
68
+ /**
69
+ * Internal method to handle the connection event when a WebSocket connection is established.
70
+ * This happens after successful protocol exchange with client.
71
+ *
72
+ * @param {WebSocket} ws - The WebSocket object representing the connection.
73
+ * @param {WebsocketServerConfig} websocketServerConfig - The websocket server configuration.
74
+ * @param {number} pingInterval - The ping interval in seconds.
75
+ * @param {IncomingMessage} req - The request object associated with the connection.
76
+ * @return {void}
77
+ */
78
+ private _onConnection;
79
+ /**
80
+ * Internal method to register event listeners for the WebSocket connection.
81
+ *
82
+ * @param {string} identifier - The unique identifier of the connection, i.e. the combination of tenantId and stationId.
83
+ * @param {WebSocket} ws - The WebSocket object representing the connection.
84
+ * @param {number} pingInterval - The ping interval in seconds.
85
+ * @return {void} This function does not return anything.
86
+ */
87
+ private _registerWebsocketEvents;
88
+ /**
89
+ * Internal method to handle the incoming message from the websocket client.
90
+ *
91
+ * @param {string} identifier - The client identifier.
92
+ * @param {string} message - The incoming message from the client.
93
+ * @param {OCPPVersionType} protocol - The OCPP protocol version of the client, 'ocpp1.6' or 'ocpp2.0.1'.
94
+ * @return {void} This function does not return anything.
95
+ */
96
+ private _onMessage;
97
+ /**
98
+ * Internal method to handle the error event for the WebSocket server.
99
+ *
100
+ * @param {WebSocketServer} wss - The WebSocket server instance.
101
+ * @param {Error} error - The error object.
102
+ * @return {void} This function does not return anything.
103
+ */
104
+ private _onError;
105
+ /**
106
+ * Internal method to handle the event when the WebSocketServer is closed.
107
+ *
108
+ * @param {WebSocketServer} wss - The WebSocketServer instance.
109
+ * @return {void} This function does not return anything.
110
+ */
111
+ private _onClose;
112
+ /**
113
+ * Internal method to execute a ping operation on a WebSocket connection after a delay of 60 seconds.
114
+ *
115
+ * @param {string} identifier - The identifier of the client connection.
116
+ * @param {WebSocket} ws - The WebSocket connection to ping.
117
+ * @param {number} pingInterval - The ping interval in milliseconds.
118
+ * @return {void} This function does not return anything.
119
+ */
120
+ private _ping;
121
+ /**
122
+ *
123
+ * @param url Http upgrade request url used by charger
124
+ * @returns Charger identifier
125
+ */
126
+ private _getClientIdFromUrl;
127
+ /**
128
+ * Extract tenant id from the incoming upgrade request.
129
+ * Supported sources (in order): query `tenant`/`tenantId`, header `x-tenant-id`,
130
+ * path segment (second-last segment if URL is `/tenant/station`).
131
+ */
132
+ private _extractTenantIdFromRequest;
133
+ private _generateServerOptions;
134
+ private _createAndStartWebsocketServer;
135
+ }