@zetra/citrineos-certificates 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.
@@ -0,0 +1,429 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ // SPDX-FileCopyrightText: 2025 Contributors to the CitrineOS Project
11
+ //
12
+ // SPDX-License-Identifier: Apache-2.0
13
+ import { AbstractModule, AsHandler, ErrorCode, EventGroup, MessageOrigin, OCPP2_0_1, OCPP2_0_1_CallAction, OcppError, OCPPValidator, OCPPVersion, } from '@citrineos/base';
14
+ import { InstalledCertificate, sequelize, SequelizeOCPPMessageRepository } from '@citrineos/data';
15
+ import { CertificateAuthorityService, parseCSRForVerification, RabbitMqReceiver, RabbitMqSender, sendOCSPRequest, validatePEMEncodedCSR, WebsocketNetworkConnection, } from '@citrineos/util';
16
+ import { Crypto } from '@peculiar/webcrypto';
17
+ import jsrsasign from 'jsrsasign';
18
+ import * as pkijs from 'pkijs';
19
+ import { CertificationRequest } from 'pkijs';
20
+ import { InstallCertificateHelperService } from './installCertificateHelperService.js';
21
+ import { Logger } from 'tslog';
22
+ const cryptoEngine = new pkijs.CryptoEngine({
23
+ crypto: new Crypto(),
24
+ });
25
+ pkijs.setEngine('crypto', cryptoEngine);
26
+ /**
27
+ * Component that handles provisioning related messages.
28
+ */
29
+ export class CertificatesModule extends AbstractModule {
30
+ /**
31
+ * Fields
32
+ */
33
+ _requests = [];
34
+ _responses = [];
35
+ _deviceModelRepository;
36
+ _certificateRepository;
37
+ _installedCertificateRepository;
38
+ _installCertificateAttemptRepository;
39
+ _deleteCertificateAttemptRepository;
40
+ _ocppMessageRepository;
41
+ _certificateAuthorityService;
42
+ _fileStorage;
43
+ _installCertificateHelperService;
44
+ /**
45
+ * Constructor
46
+ */
47
+ /**
48
+ * This is the constructor function that initializes the {@link CertificatesModule}.
49
+ *
50
+ * @param {BootstrapConfig & SystemConfig} config - The `config` contains configuration settings for the module.
51
+ *
52
+ * @param {ICache} [cache] - The cache instance which is shared among the modules & Central System to pass information such as blacklisted actions or boot status.
53
+ *
54
+ * @param {IMessageSender} [sender] - The `sender` parameter is an optional parameter that represents an instance of the {@link IMessageSender} interface.
55
+ * It is used to send messages from the central system to external systems or devices. If no `sender` is provided, a default {@link RabbitMqSender} instance is created and used.
56
+ *
57
+ * @param {IMessageHandler} [handler] - The `handler` parameter is an optional parameter that represents an instance of the {@link IMessageHandler} interface.
58
+ * It is used to handle incoming messages and dispatch them to the appropriate methods or functions. If no `handler` is provided, a default {@link RabbitMqReceiver} instance is created and used.
59
+ *
60
+ * @param {IFileStorage} [fileStorage] - file storage for persisting certs
61
+ *
62
+ * @param {WebsocketNetworkConnection} [networkConnection] - network connection
63
+ *
64
+ * @param {Logger<ILogObj>} [logger] - The `logger` parameter is an optional parameter that represents an instance of {@link Logger<ILogObj>}.
65
+ * It is used to propagate system wide logger settings and will serve as the parent logger for any sub-component logging. If no `logger` is provided, a default {@link Logger<ILogObj>} instance is created and used.
66
+ *
67
+ * @param {IDeviceModelRepository} [deviceModelRepository] - An optional parameter of type {@link IDeviceModelRepository} which represents a repository for accessing and manipulating variable data.
68
+ * If no `deviceModelRepository` is provided, a default {@link sequelize.deviceModelRepository} instance is created and used.
69
+ *
70
+ * @param {ICertificateRepository} [certificateRepository] - An optional parameter of type {@link ICertificateRepository} which
71
+ * represents a repository for accessing and manipulating variable data.
72
+ * If no `deviceModelRepository` is provided, a default {@link sequelize.certificateRepository} instance is created and used.
73
+ *
74
+ * @param {IInstalledCertificateRepository} [installedCertificateRepository] - An optional parameter of type {@link IInstalledCertificateRepository} which
75
+ * represents a repository for accessing and manipulating installed certificate data.
76
+ * If no `installedCertificateRepository` is provided, a default {@link sequelize.InstalledCertificateRepository} instance is created and used.
77
+ *
78
+ * @param {IInstallCertificateAttemptRepository} [installCertificateAttemptRepository] - An optional parameter of type {@link IInstallCertificateAttemptRepository} which
79
+ * represents a repository for accessing and manipulating installed certificate attempt data.
80
+ * If no `installCertificateAttemptRepository` is provided, a default {@link sequelize.InstallCertificateAttemptRepository} instance is created and used.
81
+ *
82
+ * @param {IDeleteCertificateAttemptRepository} [deleteCertificateAttemptRepository] - An optional parameter of type {@link IDeleteCertificateAttemptRepository} which
83
+ * represents a repository for accessing and manipulating deleted certificate attempt data.
84
+ * If no `deleteCertificateAttemptRepository` is provided, a default {@link sequelize.DeleteCertificateAttemptRepository} instance is created and used.
85
+ *
86
+ * @param {IOCPPMessageRepository} [ocppMessageRepository] - repository to check ocpp messages
87
+ *
88
+ * @param {CertificateAuthorityService} [certificateAuthorityService] - An optional parameter of type {@link CertificateAuthorityService} which handles certificate authority operations.
89
+ *
90
+ * @param {InstallCertificateHelperService} [installCertificateHelperService] - helper service for installing certificates
91
+ */
92
+ constructor(config, cache, sender, handler, fileStorage, networkConnection, logger, ocppValidator, deviceModelRepository, certificateRepository, installedCertificateRepository, installCertificateAttemptRepository, deleteCertificateAttemptRepository, ocppMessageRepository, certificateAuthorityService, installCertificateHelperService) {
93
+ super(config, cache, handler || new RabbitMqReceiver(config, logger), sender || new RabbitMqSender(config, logger), EventGroup.Certificates, logger, ocppValidator);
94
+ this._requests = config.modules.certificates?.requests ?? [];
95
+ this._responses = config.modules.certificates?.responses ?? [];
96
+ this._fileStorage = fileStorage;
97
+ this._deviceModelRepository =
98
+ deviceModelRepository || new sequelize.SequelizeDeviceModelRepository(config, logger);
99
+ this._certificateRepository =
100
+ certificateRepository || new sequelize.SequelizeCertificateRepository(config, logger);
101
+ this._installedCertificateRepository =
102
+ installedCertificateRepository ||
103
+ new sequelize.SequelizeInstalledCertificateRepository(config, logger);
104
+ this._installCertificateAttemptRepository =
105
+ installCertificateAttemptRepository ||
106
+ new sequelize.SequelizeInstallCertificateAttemptRepository(config, logger);
107
+ this._deleteCertificateAttemptRepository =
108
+ deleteCertificateAttemptRepository ||
109
+ new sequelize.SequelizeDeleteCertificateAttemptRepository(config, logger);
110
+ this._ocppMessageRepository =
111
+ ocppMessageRepository || new SequelizeOCPPMessageRepository(config, this._logger);
112
+ this._certificateAuthorityService =
113
+ certificateAuthorityService || new CertificateAuthorityService(config, cache, this._logger);
114
+ this._installCertificateHelperService =
115
+ installCertificateHelperService ||
116
+ new InstallCertificateHelperService(this._certificateRepository, this._installedCertificateRepository, this._installCertificateAttemptRepository, this._deleteCertificateAttemptRepository, this._certificateAuthorityService, networkConnection, this._fileStorage, this._logger);
117
+ }
118
+ get certificateAuthorityService() {
119
+ return this._certificateAuthorityService;
120
+ }
121
+ get certificateRepository() {
122
+ return this._certificateRepository;
123
+ }
124
+ get installedCertificateRepository() {
125
+ return this._installedCertificateRepository;
126
+ }
127
+ get deleteCertificateAttemptRepository() {
128
+ return this._deleteCertificateAttemptRepository;
129
+ }
130
+ get installCertificateHelperService() {
131
+ return this._installCertificateHelperService;
132
+ }
133
+ /**
134
+ * Handle requests
135
+ */
136
+ async _handleGet15118EVCertificate(message, props) {
137
+ this._logger.debug('Get15118EVCertificate received:', message, props);
138
+ const request = message.payload;
139
+ try {
140
+ const exiResponse = await this._certificateAuthorityService.getSignedContractData(request.iso15118SchemaVersion, request.exiRequest);
141
+ await this.sendCallResultWithMessage(message, {
142
+ status: OCPP2_0_1.Iso15118EVCertificateStatusEnumType.Accepted,
143
+ exiResponse: exiResponse,
144
+ });
145
+ }
146
+ catch (error) {
147
+ await this.sendCallResultWithMessage(message, {
148
+ status: OCPP2_0_1.Iso15118EVCertificateStatusEnumType.Failed,
149
+ statusInfo: {
150
+ reasonCode: ErrorCode.GenericError,
151
+ additionalInfo: error instanceof Error ? error.message : undefined,
152
+ },
153
+ exiResponse: '',
154
+ });
155
+ }
156
+ }
157
+ async _handleGetCertificateStatus(message, props) {
158
+ this._logger.debug('GetCertificateStatusRequest received:', message, props);
159
+ const reqData = message.payload.ocspRequestData;
160
+ try {
161
+ const ocspRequest = new jsrsasign.KJUR.asn1.ocsp.Request({
162
+ alg: reqData.hashAlgorithm,
163
+ keyhash: reqData.issuerKeyHash,
164
+ namehash: reqData.issuerNameHash,
165
+ serial: reqData.serialNumber,
166
+ });
167
+ const ocspResponse = await sendOCSPRequest(ocspRequest, reqData.responderURL);
168
+ await this.sendCallResultWithMessage(message, {
169
+ status: OCPP2_0_1.GetCertificateStatusEnumType.Accepted,
170
+ ocspResponse: ocspResponse,
171
+ });
172
+ }
173
+ catch (error) {
174
+ this._logger.error(`GetCertificateStatus failed: ${error}`);
175
+ await this.sendCallResultWithMessage(message, {
176
+ status: OCPP2_0_1.GetCertificateStatusEnumType.Failed,
177
+ statusInfo: { reasonCode: ErrorCode.GenericError },
178
+ });
179
+ }
180
+ }
181
+ async _handleSignCertificate(message, props) {
182
+ this._logger.debug('Sign certificate request received:', message, props);
183
+ const tenantId = message.context.tenantId;
184
+ const stationId = message.context.stationId;
185
+ const csrString = message.payload.csr.replace(/\n/g, '');
186
+ const certificateType = message.payload.certificateType;
187
+ // Validate PEM format
188
+ const validationResult = validatePEMEncodedCSR(message.payload.csr);
189
+ if (!validationResult.isValid) {
190
+ this._logger.warn(`Invalid CSR format: ${validationResult.errorMessage}`);
191
+ await this.sendCallErrorWithMessage(message, new OcppError(message.context.correlationId, ErrorCode.FormatViolation, 'Invalid CSR format.'));
192
+ return;
193
+ }
194
+ // TODO OCTT Currently fails the CSMS on test case TC_A_14_CSMS if an invalid csr is rejected
195
+ // Despite explicitly saying in the protocol "The CSMS may do some checks on the CSR"
196
+ // So it is necessary to accept before checking the csr. when this is fixed, this line can be removed
197
+ // And the other sendCallResultWithMessage for SignCertificateResponse can be uncommented
198
+ await this.sendCallResultWithMessage(message, {
199
+ status: OCPP2_0_1.GenericStatusEnumType.Accepted,
200
+ });
201
+ let certificateChainPem;
202
+ try {
203
+ await this._verifySignCertRequest(csrString, tenantId, stationId, certificateType);
204
+ certificateChainPem = await this._certificateAuthorityService.getCertificateChain(csrString, stationId, certificateType);
205
+ }
206
+ catch (error) {
207
+ this._logger.error('Sign certificate failed:', error);
208
+ // TODO uncomment after OCTT issue is fixed
209
+ // this.sendCallResultWithMessage(message, {
210
+ // status: GenericStatusEnumType.Rejected,
211
+ // statusInfo: {
212
+ // reasonCode: ErrorCode.GenericError,
213
+ // additionalInfo: error instanceof Error ? error.message : undefined,
214
+ // },
215
+ // } as SignCertificateResponse);
216
+ return;
217
+ }
218
+ // TODO uncomment after OCTT issue is fixed
219
+ // this.sendCallResultWithMessage(message, {
220
+ // status: GenericStatusEnumType.Accepted,
221
+ // } as SignCertificateResponse);
222
+ await this.installCertificateHelperService.prepareToInstallCertificate(tenantId, stationId, certificateChainPem, certificateType);
223
+ await this.sendCall(stationId, tenantId, OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.CertificateSigned, {
224
+ certificateChain: certificateChainPem,
225
+ certificateType: certificateType,
226
+ });
227
+ }
228
+ /**
229
+ * Handle responses
230
+ */
231
+ async _handleCertificateSigned(message, props) {
232
+ this._logger.debug('CertificateSigned received:', message, props);
233
+ await this.installCertificateHelperService.finalizeInstalledCertificate(message.context.tenantId, message.context.stationId, message.payload.status);
234
+ // TODO: If rejected, retry and/or send to callbackUrl if originally part of a triggered refresh
235
+ // TODO: If accepted, revoke old certificate
236
+ }
237
+ async _handleDeleteCertificate(message, props) {
238
+ this._logger.debug('DeleteCertificate received:', message, props);
239
+ const tenantId = message.context.tenantId;
240
+ const stationId = message.context.stationId;
241
+ const existingPendingDeleteCertificateAttempt = await this.deleteCertificateAttemptRepository.readOnlyOneByQuery(tenantId, {
242
+ where: {
243
+ stationId,
244
+ status: null,
245
+ },
246
+ });
247
+ // should always be true
248
+ if (existingPendingDeleteCertificateAttempt) {
249
+ existingPendingDeleteCertificateAttempt.status = message.payload.status;
250
+ await existingPendingDeleteCertificateAttempt.save();
251
+ if (existingPendingDeleteCertificateAttempt.status ===
252
+ OCPP2_0_1.DeleteCertificateStatusEnumType.Accepted) {
253
+ const existingInstalledCertificates = await this.installedCertificateRepository.readAllByQuery(tenantId, {
254
+ where: {
255
+ stationId,
256
+ hashAlgorithm: existingPendingDeleteCertificateAttempt.hashAlgorithm,
257
+ issuerNameHash: existingPendingDeleteCertificateAttempt.issuerNameHash,
258
+ issuerKeyHash: existingPendingDeleteCertificateAttempt.issuerKeyHash,
259
+ serialNumber: existingPendingDeleteCertificateAttempt.serialNumber,
260
+ },
261
+ });
262
+ // should always be true
263
+ if (existingInstalledCertificates) {
264
+ for (const existingInstalledCertificate of existingInstalledCertificates) {
265
+ await existingInstalledCertificate.destroy();
266
+ }
267
+ }
268
+ }
269
+ }
270
+ }
271
+ async _handleGetInstalledCertificateIds(message, props) {
272
+ this._logger.debug('GetInstalledCertificateIds received:', message, props);
273
+ const tenantId = message.context.tenantId;
274
+ const stationId = message.context.stationId;
275
+ const correlationId = message.context.correlationId;
276
+ const certificateHashDataList = message.payload.certificateHashDataChain;
277
+ if (message.payload.status === OCPP2_0_1.GetInstalledCertificateStatusEnumType.NotFound) {
278
+ const request = await this._ocppMessageRepository.readOnlyOneByQuery(tenantId, {
279
+ where: {
280
+ stationId,
281
+ correlationId,
282
+ origin: MessageOrigin.ChargingStationManagementSystem,
283
+ },
284
+ });
285
+ if (request) {
286
+ // should always be true
287
+ const getInstalledCertificateIdsRequest = request
288
+ .message[3];
289
+ let certificateType;
290
+ if (getInstalledCertificateIdsRequest &&
291
+ getInstalledCertificateIdsRequest.certificateType) {
292
+ certificateType = getInstalledCertificateIdsRequest.certificateType;
293
+ }
294
+ if (certificateType) {
295
+ this._logger.debug(`GetInstalledCertificateIdsRequest sent to ${stationId} had certificateType: ${certificateType}. Cleaning up installed certificates of this type in DB if any.`);
296
+ await this.installedCertificateRepository.deleteAllByQuery(tenantId, {
297
+ where: {
298
+ stationId,
299
+ certificateType,
300
+ },
301
+ });
302
+ }
303
+ else {
304
+ this._logger.debug(`GetInstalledCertificateIdsRequest sent to ${stationId} had no certificateType. Cleaning up all installed certificates in DB if any.`);
305
+ await this.installedCertificateRepository.deleteAllByQuery(tenantId, {
306
+ where: {
307
+ stationId,
308
+ },
309
+ });
310
+ }
311
+ }
312
+ return;
313
+ }
314
+ if (certificateHashDataList && certificateHashDataList.length > 0) {
315
+ for (const certificateHashDataWrap of certificateHashDataList) {
316
+ const certificateHashData = certificateHashDataWrap.certificateHashData;
317
+ const certificateType = certificateHashDataWrap.certificateType;
318
+ let existingInstalledCertificate = await this._installedCertificateRepository.readOnlyOneByQuery(tenantId, {
319
+ where: {
320
+ stationId: stationId,
321
+ certificateType: certificateType,
322
+ },
323
+ });
324
+ if (existingInstalledCertificate) {
325
+ existingInstalledCertificate.hashAlgorithm = certificateHashData.hashAlgorithm;
326
+ existingInstalledCertificate.issuerNameHash = certificateHashData.issuerNameHash;
327
+ existingInstalledCertificate.issuerKeyHash = certificateHashData.issuerKeyHash;
328
+ existingInstalledCertificate.serialNumber = certificateHashData.serialNumber;
329
+ await existingInstalledCertificate.save();
330
+ this._logger.debug('Updated installed certificate record', existingInstalledCertificate);
331
+ }
332
+ else {
333
+ existingInstalledCertificate = new InstalledCertificate();
334
+ existingInstalledCertificate.hashAlgorithm = certificateHashData.hashAlgorithm;
335
+ existingInstalledCertificate.issuerNameHash = certificateHashData.issuerNameHash;
336
+ existingInstalledCertificate.issuerKeyHash = certificateHashData.issuerKeyHash;
337
+ existingInstalledCertificate.serialNumber = certificateHashData.serialNumber;
338
+ existingInstalledCertificate.stationId = stationId;
339
+ existingInstalledCertificate.certificateType = certificateType;
340
+ await existingInstalledCertificate.save();
341
+ this._logger.debug('Created new installed certificate record', existingInstalledCertificate);
342
+ }
343
+ }
344
+ }
345
+ }
346
+ async _handleInstallCertificate(message, props) {
347
+ this._logger.debug('InstallCertificate received:', message, props);
348
+ await this.installCertificateHelperService.finalizeInstalledCertificate(message.context.tenantId, message.context.stationId, message.payload.status);
349
+ }
350
+ async _verifySignCertRequest(csrString, tenantId, stationId, certificateType) {
351
+ // Verify certificate type
352
+ if (!certificateType ||
353
+ (certificateType !== OCPP2_0_1.CertificateSigningUseEnumType.V2GCertificate &&
354
+ certificateType !== OCPP2_0_1.CertificateSigningUseEnumType.ChargingStationCertificate)) {
355
+ throw new Error(`Unsupported certificate type: ${certificateType}`);
356
+ }
357
+ // Verify CSR
358
+ const csr = parseCSRForVerification(csrString);
359
+ this._logger.info(`Verifying CSR: ${JSON.stringify(csr)}`);
360
+ if (!(await csr.verify())) {
361
+ throw new Error('Verify the signature on this csr using its public key failed');
362
+ }
363
+ if (certificateType === OCPP2_0_1.CertificateSigningUseEnumType.ChargingStationCertificate) {
364
+ // Verify organization name match the one stored in the device model
365
+ const organizationName = await this._deviceModelRepository.readAllByQuerystring(tenantId, {
366
+ tenantId: tenantId,
367
+ stationId: stationId,
368
+ component_name: 'SecurityCtrlr',
369
+ variable_name: 'OrganizationName',
370
+ type: OCPP2_0_1.AttributeEnumType.Actual,
371
+ });
372
+ if (!organizationName || organizationName.length < 1) {
373
+ throw new Error('Expected organizationName not found in DB');
374
+ }
375
+ // Find organizationName (its key is '2.5.4.10') attribute in CSR
376
+ const organizationNameAttr = csr.subject.typesAndValues.find((attr) => attr.type === '2.5.4.10');
377
+ if (!organizationNameAttr) {
378
+ throw new Error('organizationName attribute not found in CSR');
379
+ }
380
+ if (organizationName[0].value !== organizationNameAttr.value.valueBlock.value) {
381
+ throw new Error(`Expect organizationName ${organizationName[0].value} but get ${organizationNameAttr.value} from the csr`);
382
+ }
383
+ }
384
+ this._logger.info(`Verified SignCertRequest for station ${stationId} successfully.`);
385
+ }
386
+ }
387
+ __decorate([
388
+ AsHandler(OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.Get15118EVCertificate),
389
+ __metadata("design:type", Function),
390
+ __metadata("design:paramtypes", [Object, Object]),
391
+ __metadata("design:returntype", Promise)
392
+ ], CertificatesModule.prototype, "_handleGet15118EVCertificate", null);
393
+ __decorate([
394
+ AsHandler(OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.GetCertificateStatus),
395
+ __metadata("design:type", Function),
396
+ __metadata("design:paramtypes", [Object, Object]),
397
+ __metadata("design:returntype", Promise)
398
+ ], CertificatesModule.prototype, "_handleGetCertificateStatus", null);
399
+ __decorate([
400
+ AsHandler(OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.SignCertificate),
401
+ __metadata("design:type", Function),
402
+ __metadata("design:paramtypes", [Object, Object]),
403
+ __metadata("design:returntype", Promise)
404
+ ], CertificatesModule.prototype, "_handleSignCertificate", null);
405
+ __decorate([
406
+ AsHandler(OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.CertificateSigned),
407
+ __metadata("design:type", Function),
408
+ __metadata("design:paramtypes", [Object, Object]),
409
+ __metadata("design:returntype", Promise)
410
+ ], CertificatesModule.prototype, "_handleCertificateSigned", null);
411
+ __decorate([
412
+ AsHandler(OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.DeleteCertificate),
413
+ __metadata("design:type", Function),
414
+ __metadata("design:paramtypes", [Object, Object]),
415
+ __metadata("design:returntype", Promise)
416
+ ], CertificatesModule.prototype, "_handleDeleteCertificate", null);
417
+ __decorate([
418
+ AsHandler(OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.GetInstalledCertificateIds),
419
+ __metadata("design:type", Function),
420
+ __metadata("design:paramtypes", [Object, Object]),
421
+ __metadata("design:returntype", Promise)
422
+ ], CertificatesModule.prototype, "_handleGetInstalledCertificateIds", null);
423
+ __decorate([
424
+ AsHandler(OCPPVersion.OCPP2_0_1, OCPP2_0_1_CallAction.InstallCertificate),
425
+ __metadata("design:type", Function),
426
+ __metadata("design:paramtypes", [Object, Object]),
427
+ __metadata("design:returntype", Promise)
428
+ ], CertificatesModule.prototype, "_handleInstallCertificate", null);
429
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module/module.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@zetra/citrineos-certificates",
3
+ "version": "1.8.3-fork.1",
4
+ "type": "module",
5
+ "description": "The certificates module for OCPP v2.0.1. This module is not intended to be used directly, but rather as a dependency for other modules.",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "scripts": {
12
+ "prepublish": "npx eslint",
13
+ "test": "echo \"Error: no test specified\" && exit 1"
14
+ },
15
+ "keywords": [
16
+ "ocpp",
17
+ "ocpp_v201"
18
+ ],
19
+ "license": "Apache-2.0",
20
+ "devDependencies": {
21
+ "@types/node-forge": "1.3.2"
22
+ },
23
+ "dependencies": {
24
+ "@zetra/citrineos-base": "1.8.3-fork.1",
25
+ "@zetra/citrineos-data": "1.8.3-fork.1",
26
+ "@zetra/citrineos-util": "1.8.3-fork.1"
27
+ }
28
+ }