@open-charging-cloud/chargy-core 0.12.1 → 0.13.0
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.
- package/CHANGELOG.md +44 -0
- package/README.md +1 -1
- package/dist/OCMF.d.ts +3 -1
- package/dist/OCMF.d.ts.map +1 -1
- package/dist/browser/index.js +95 -5
- package/dist/browser/index.js.map +1 -1
- package/dist/chargy.d.ts +16 -0
- package/dist/chargy.d.ts.map +1 -1
- package/dist/interfaces/IChargeTransparencyLiveLink.d.ts +12 -3
- package/dist/interfaces/IChargeTransparencyLiveLink.d.ts.map +1 -1
- package/dist/node/index.js +95 -5
- package/dist/node/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,50 @@ While the version number is below 1.0.0, breaking changes are released in minor
|
|
|
7
7
|
versions and are always listed first below.
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
## [0.13.0] - 2026-08-28
|
|
11
|
+
|
|
12
|
+
### Breaking
|
|
13
|
+
|
|
14
|
+
- **`IChargeTransparencyLiveLink.timestamp` is now `created`, and
|
|
15
|
+
`transports` is now `liveTransports`.** The names now say what the properties
|
|
16
|
+
are: the timestamp records when the link was created rather than some
|
|
17
|
+
unspecified event, and the transports are the ones carrying the live data,
|
|
18
|
+
which distinguishes them from any other transport a document may come to
|
|
19
|
+
describe. `IsAChargeTransparencyLiveLink()` validates the new names, and a
|
|
20
|
+
live link without a `created` timestamp gets the current UTC time in that
|
|
21
|
+
property instead. There is no fallback to the old names: a document still
|
|
22
|
+
using `timestamp` or `transports` is accepted by the type guard, because both
|
|
23
|
+
properties are optional, but the values are ignored. Consuming code reading
|
|
24
|
+
either property has to be updated, and so do stored documents.
|
|
25
|
+
|
|
26
|
+
### Added
|
|
27
|
+
|
|
28
|
+
- **`Chargy.TryToParseLiveLinkMeterValues()`** turns the `signedMeterValues` of
|
|
29
|
+
a charge transparency live link into a verified charge transparency record.
|
|
30
|
+
Until now that property was never read: the meter values were not parsed, not
|
|
31
|
+
verified and not displayed anywhere. They are fed through the OCMF parser
|
|
32
|
+
together with the public keys the very same document carries, and through the
|
|
33
|
+
same verification every other record goes through. The live link itself stays
|
|
34
|
+
a live link - it describes a session that is still running, a record a
|
|
35
|
+
collection of finished ones - so the meter values are produced on demand and
|
|
36
|
+
shown next to it rather than in its place. Returns `undefined` when a live
|
|
37
|
+
link carries no meter values yet, which is the normal state of the first
|
|
38
|
+
document of a series.
|
|
39
|
+
|
|
40
|
+
- **An https transport may say how often to ask for the document again.**
|
|
41
|
+
`TransportHTTPS.refresh` is a number of seconds, and
|
|
42
|
+
`IsAChargeTransparencyLiveLink()` validates it. It belongs to https alone: a
|
|
43
|
+
websocket or a server-sent event stream delivers a new document when there is
|
|
44
|
+
one. Its absence means: do not poll.
|
|
45
|
+
|
|
46
|
+
- **`OCMF.TryToParseOCMFDocuments()` and `TryToParseOCMFDocument()` accept an
|
|
47
|
+
array of public keys.** A single key stays valid and behaves as before. This
|
|
48
|
+
is needed because a session is regularly signed by more than one key: many
|
|
49
|
+
meters sign their start and end values with a different key than the
|
|
50
|
+
intermediate ones, and an operator may hold several keys at once while
|
|
51
|
+
rotating them. Each document is tried against every candidate and keeps the
|
|
52
|
+
first signature that verifies.
|
|
53
|
+
|
|
10
54
|
## [0.12.0] - 2026-08-15
|
|
11
55
|
|
|
12
56
|
### Breaking
|
package/README.md
CHANGED
package/dist/OCMF.d.ts
CHANGED
|
@@ -191,15 +191,17 @@ export interface IOCMFChargeTransparencyRecord extends chargeTransparencyRecord.
|
|
|
191
191
|
ocmf?: IOCMFCTRExtensions | undefined;
|
|
192
192
|
chargingSessions?: Array<IOCMFChargingSession> | undefined;
|
|
193
193
|
}
|
|
194
|
+
export type OCMFPublicKeys = string | publicKeyInfoType.IPublicKeyXY | Array<string | publicKeyInfoType.IPublicKeyXY>;
|
|
194
195
|
export declare class OCMF {
|
|
195
196
|
private readonly chargy;
|
|
196
197
|
constructor(chargy: Chargy);
|
|
197
198
|
private tryToParseOCMFv1_0;
|
|
198
199
|
private AddValidationError;
|
|
200
|
+
private validateOCMFSignatureWithAnyOf;
|
|
199
201
|
private validateOCMFSignature;
|
|
200
202
|
private parseOCMFJSONDocuments;
|
|
201
203
|
TryToParseOCMFDocument(OCMFDocument: string, PublicKey?: string | publicKeyInfoType.IPublicKeyXY, PublicKeyEncoding?: string, ContainerInfos?: chargyInterfaces.IContainerInfos): Promise<chargeTransparencyRecord.IChargeTransparencyRecord | chargyInterfaces.ISessionCryptoResult>;
|
|
202
|
-
TryToParseOCMFDocuments(OCMFDocuments: string[], PublicKey?:
|
|
204
|
+
TryToParseOCMFDocuments(OCMFDocuments: string[], PublicKey?: OCMFPublicKeys, PublicKeyEncoding?: string, ContainerInfos?: chargyInterfaces.IContainerInfos): Promise<chargeTransparencyRecord.IChargeTransparencyRecord | chargyInterfaces.ISessionCryptoResult>;
|
|
203
205
|
private convertToISO8601;
|
|
204
206
|
}
|
|
205
207
|
//# sourceMappingURL=OCMF.d.ts.map
|
package/dist/OCMF.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OCMF.d.ts","sourceRoot":"","sources":["../src/OCMF.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OCMF.d.ts","sourceRoot":"","sources":["../src/OCMF.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/index.js
CHANGED
|
@@ -8242,6 +8242,25 @@ var OCMF = class {
|
|
|
8242
8242
|
)
|
|
8243
8243
|
);
|
|
8244
8244
|
}
|
|
8245
|
+
//#region (private) validateOCMFSignatureWithAnyOf(OCMFJSONDocument, PublicKeys, PublicKeyEncoding?)
|
|
8246
|
+
// Tries the document against every candidate key and keeps the first
|
|
8247
|
+
// signature that verifies. Without this a session whose start and end
|
|
8248
|
+
// values are signed by a different key than its intermediate values could
|
|
8249
|
+
// never validate as a whole.
|
|
8250
|
+
async validateOCMFSignatureWithAnyOf(OCMFJSONDocument, PublicKeys, PublicKeyEncoding) {
|
|
8251
|
+
const candidates = Array.isArray(PublicKeys) ? PublicKeys : [PublicKeys];
|
|
8252
|
+
let lastResult = "Unvalidated" /* Unvalidated */;
|
|
8253
|
+
for (const publicKey of candidates) {
|
|
8254
|
+
OCMFJSONDocument.validationStatus = "Unvalidated" /* Unvalidated */;
|
|
8255
|
+
OCMFJSONDocument.validationErrors = void 0;
|
|
8256
|
+
OCMFJSONDocument.publicKey = void 0;
|
|
8257
|
+
lastResult = await this.validateOCMFSignature(OCMFJSONDocument, publicKey, PublicKeyEncoding);
|
|
8258
|
+
if (lastResult === "ValidSignature" /* ValidSignature */)
|
|
8259
|
+
return lastResult;
|
|
8260
|
+
}
|
|
8261
|
+
return lastResult;
|
|
8262
|
+
}
|
|
8263
|
+
//#endregion
|
|
8245
8264
|
//#region (private) validateOCMFSignature(OCMFJSONDocument, PublicKey, PublicKeyEncoding?)
|
|
8246
8265
|
async validateOCMFSignature(OCMFJSONDocument, PublicKey, PublicKeyEncoding) {
|
|
8247
8266
|
try {
|
|
@@ -8554,7 +8573,9 @@ var OCMF = class {
|
|
|
8554
8573
|
signature: ocmfSignature,
|
|
8555
8574
|
hashAlgorithm,
|
|
8556
8575
|
hashValue,
|
|
8557
|
-
|
|
8576
|
+
// With several candidates the key is only known once one of
|
|
8577
|
+
// them has verified, so it is left to the validation step.
|
|
8578
|
+
publicKey: Array.isArray(PublicKey) ? void 0 : PublicKey,
|
|
8558
8579
|
publicKeyEncoding: PublicKeyEncoding,
|
|
8559
8580
|
validationStatus: validationStatus ?? (PublicKey != null ? "Unvalidated" /* Unvalidated */ : "PublicKeyNotFound" /* PublicKeyNotFound */)
|
|
8560
8581
|
};
|
|
@@ -8594,7 +8615,7 @@ var OCMF = class {
|
|
|
8594
8615
|
ocmfJSONDocument.validationStatus = "InvalidSignature" /* InvalidSignature */;
|
|
8595
8616
|
}
|
|
8596
8617
|
if (PublicKey != null && ocmfJSONDocument.validationStatus === "Unvalidated" /* Unvalidated */)
|
|
8597
|
-
await this.
|
|
8618
|
+
await this.validateOCMFSignatureWithAnyOf(
|
|
8598
8619
|
ocmfJSONDocument,
|
|
8599
8620
|
PublicKey,
|
|
8600
8621
|
PublicKeyEncoding
|
|
@@ -8664,7 +8685,7 @@ var OCMF = class {
|
|
|
8664
8685
|
if (PublicKey != null) {
|
|
8665
8686
|
for (const ocmfJSONDocument of ocmfJSONDocumentGroup)
|
|
8666
8687
|
if (ocmfJSONDocument.validationStatus === "Unvalidated" /* Unvalidated */)
|
|
8667
|
-
await this.
|
|
8688
|
+
await this.validateOCMFSignatureWithAnyOf(ocmfJSONDocument, PublicKey);
|
|
8668
8689
|
}
|
|
8669
8690
|
if (ocmfJSONDocumentGroup[0]) {
|
|
8670
8691
|
switch (ocmfJSONDocumentGroup[0].payload.FV) {
|
|
@@ -12056,12 +12077,15 @@ function isTransport(data) {
|
|
|
12056
12077
|
if (type !== "https" && type !== "httpSSE" && type !== "websocket") {
|
|
12057
12078
|
return false;
|
|
12058
12079
|
}
|
|
12080
|
+
if (type === "https" && data["refresh"] !== void 0 && typeof data["refresh"] !== "number") {
|
|
12081
|
+
return false;
|
|
12082
|
+
}
|
|
12059
12083
|
return (data["url"] === void 0 || typeof data["url"] === "string") && (data["urls"] === void 0 || Array.isArray(data["urls"]) && data["urls"].every(isTransportURL)) && (data["totp"] === void 0 || isTOTPConfig(data["totp"]));
|
|
12060
12084
|
}
|
|
12061
12085
|
function IsAChargeTransparencyLiveLink(data) {
|
|
12062
12086
|
if (!isMandatoryJSONObject(data))
|
|
12063
12087
|
return false;
|
|
12064
|
-
return data["@context"] === ChargeTransparencyLiveLinkContext && (data["
|
|
12088
|
+
return data["@context"] === ChargeTransparencyLiveLinkContext && (data["created"] === void 0 || data["created"] === null || typeof data["created"] === "string") && (data["description"] === void 0 || isI18NString(data["description"])) && (data["imageURLs"] === void 0 || Array.isArray(data["imageURLs"]) && data["imageURLs"].every((value) => typeof value === "string")) && (data["geoLocation"] === void 0 || isGeoLocation(data["geoLocation"])) && (data["connector"] === void 0 || isConnector(data["connector"])) && (data["liveTransports"] === void 0 || Array.isArray(data["liveTransports"]) && data["liveTransports"].every(isTransport)) && (data["signatures"] === void 0 || Array.isArray(data["signatures"]));
|
|
12065
12089
|
}
|
|
12066
12090
|
function isTOTPConfig(data) {
|
|
12067
12091
|
return isObject(data) && typeof data["initialSharedSecret"] === "string" && typeof data["timeStep"] === "number";
|
|
@@ -13241,7 +13265,7 @@ var Chargy = class {
|
|
|
13241
13265
|
throw new Error("Parsed JSON content is not a JSON object!");
|
|
13242
13266
|
const JSONContext = JSONContent["@context"];
|
|
13243
13267
|
if (IsAChargeTransparencyLiveLink(JSONContent)) {
|
|
13244
|
-
JSONContent.
|
|
13268
|
+
JSONContent.created ??= (/* @__PURE__ */ new Date()).toISOString();
|
|
13245
13269
|
processedFile.result = JSONContent;
|
|
13246
13270
|
} else if (JSONContent["format"] === "ptb")
|
|
13247
13271
|
processedFile.result = await new PTB(this).TryToParsePTBContainer(JSONContent);
|
|
@@ -13374,6 +13398,72 @@ var Chargy = class {
|
|
|
13374
13398
|
};
|
|
13375
13399
|
}
|
|
13376
13400
|
//#endregion
|
|
13401
|
+
//#region TryToParseLiveLinkMeterValues(LiveLink)
|
|
13402
|
+
/**
|
|
13403
|
+
* The signed meter values a live link carries, parsed and verified with the
|
|
13404
|
+
* public keys of the very same document, as an ordinary charge transparency
|
|
13405
|
+
* record.
|
|
13406
|
+
*
|
|
13407
|
+
* A live link is not turned into one: it describes a charging session that
|
|
13408
|
+
* is still running, a charge transparency record a collection of finished
|
|
13409
|
+
* ones, and an application shows the two differently. The meter values are
|
|
13410
|
+
* an optional part of the live link view, so they are only produced when
|
|
13411
|
+
* they are asked for.
|
|
13412
|
+
*
|
|
13413
|
+
* Returns undefined when the live link carries no meter values yet, or none
|
|
13414
|
+
* that are understood here.
|
|
13415
|
+
*/
|
|
13416
|
+
async TryToParseLiveLinkMeterValues(LiveLink) {
|
|
13417
|
+
const signedMeterValues = asJSONObject(LiveLink["signedMeterValues"]);
|
|
13418
|
+
if (signedMeterValues === void 0)
|
|
13419
|
+
return void 0;
|
|
13420
|
+
const encodings = signedMeterValues["encodings"];
|
|
13421
|
+
const values = signedMeterValues["values"];
|
|
13422
|
+
if (!Array.isArray(encodings) || encodings[0] !== "OCMF" || !Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string" && value !== "")) {
|
|
13423
|
+
return void 0;
|
|
13424
|
+
}
|
|
13425
|
+
const publicKeys = this.collectLiveLinkMeterValueKeys(LiveLink);
|
|
13426
|
+
const ctr = await new OCMF(this).TryToParseOCMFDocuments(
|
|
13427
|
+
values,
|
|
13428
|
+
publicKeys.length > 0 ? publicKeys : void 0,
|
|
13429
|
+
"hex"
|
|
13430
|
+
);
|
|
13431
|
+
if (!IsAChargeTransparencyRecord(ctr))
|
|
13432
|
+
return void 0;
|
|
13433
|
+
const verifiedCTR = await this.processChargeTransparencyRecord(ctr);
|
|
13434
|
+
return IsAChargeTransparencyRecord(verifiedCTR) ? verifiedCTR : void 0;
|
|
13435
|
+
}
|
|
13436
|
+
//#endregion
|
|
13437
|
+
//#region (private) collectLiveLinkMeterValueKeys(LiveLink)
|
|
13438
|
+
// Every public key of the document that is allowed to sign meter values.
|
|
13439
|
+
// A charging session is regularly signed by more than one of them: the
|
|
13440
|
+
// meter signs its start and end values, the operator the intermediate ones.
|
|
13441
|
+
collectLiveLinkMeterValueKeys(LiveLink) {
|
|
13442
|
+
const publicKeys = new Array();
|
|
13443
|
+
const collectFrom = (candidates) => {
|
|
13444
|
+
if (!Array.isArray(candidates))
|
|
13445
|
+
return;
|
|
13446
|
+
for (const candidate of candidates) {
|
|
13447
|
+
const entry = asJSONObject(candidate);
|
|
13448
|
+
const value = asString(entry?.["value"]);
|
|
13449
|
+
const keyUsage = entry?.["keyUsage"];
|
|
13450
|
+
const encodings = entry?.["encodings"];
|
|
13451
|
+
if (value === void 0 || value === "")
|
|
13452
|
+
continue;
|
|
13453
|
+
if (Array.isArray(encodings) && encodings[encodings.length - 1] !== "hex")
|
|
13454
|
+
continue;
|
|
13455
|
+
if (Array.isArray(keyUsage) && !keyUsage.some((usage) => usage === "signMeterValues" || usage === "signEnergyMeterValues"))
|
|
13456
|
+
continue;
|
|
13457
|
+
publicKeys.push(value);
|
|
13458
|
+
}
|
|
13459
|
+
};
|
|
13460
|
+
const chargingStation = asJSONObject(LiveLink["chargingStation"]);
|
|
13461
|
+
const evse = asJSONObject(chargingStation?.["EVSE"]);
|
|
13462
|
+
collectFrom(asJSONObject(LiveLink["chargingStationOperator"])?.["publicKeys"]);
|
|
13463
|
+
collectFrom(asJSONObject(evse?.["energyMeter"])?.["publicKeys"]);
|
|
13464
|
+
return publicKeys;
|
|
13465
|
+
}
|
|
13466
|
+
//#endregion
|
|
13377
13467
|
//#region (private) processChargeTransparencyRecord(CTR)
|
|
13378
13468
|
async processChargeTransparencyRecord(CTR) {
|
|
13379
13469
|
if (!IsAChargeTransparencyRecord(CTR))
|