@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/dist/chargy.d.ts CHANGED
@@ -85,6 +85,22 @@ export declare class Chargy {
85
85
  private readTarString;
86
86
  private readTarOctal;
87
87
  DetectAndConvertContentFormat(FileInfos: Array<chargyInterfaces.IFileInfo>): Promise<chargeTransparencyRecord.IChargeTransparencyRecord | chargeTransparencyLiveLink.IChargeTransparencyLiveLink | simpleURL.IURL | publicKeyInfo.IPublicKey | publicKeyInfo.IPublicKeyLookup | chargyInterfaces.ISessionCryptoResult>;
88
+ /**
89
+ * The signed meter values a live link carries, parsed and verified with the
90
+ * public keys of the very same document, as an ordinary charge transparency
91
+ * record.
92
+ *
93
+ * A live link is not turned into one: it describes a charging session that
94
+ * is still running, a charge transparency record a collection of finished
95
+ * ones, and an application shows the two differently. The meter values are
96
+ * an optional part of the live link view, so they are only produced when
97
+ * they are asked for.
98
+ *
99
+ * Returns undefined when the live link carries no meter values yet, or none
100
+ * that are understood here.
101
+ */
102
+ TryToParseLiveLinkMeterValues(LiveLink: chargeTransparencyLiveLink.IChargeTransparencyLiveLink): Promise<chargeTransparencyRecord.IChargeTransparencyRecord | undefined>;
103
+ private collectLiveLinkMeterValueKeys;
88
104
  private processChargeTransparencyRecord;
89
105
  private hasInplausibleChargingSessionTotalEnergyMeasurement;
90
106
  private isInplausibleChargingSessionTotalEnergy;
@@ -1 +1 @@
1
- {"version":3,"file":"chargy.d.ts","sourceRoot":"","sources":["../src/chargy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chargy.d.ts","sourceRoot":"","sources":["../src/chargy.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,8 @@ export declare const ChargeTransparencyLiveLinkContext = "https://open.charging.
4
4
  export declare function IsAChargeTransparencyLiveLink(data: unknown): data is IChargeTransparencyLiveLink;
5
5
  export interface IChargeTransparencyLiveLink extends chargyLib.JSONObject {
6
6
  "@context": typeof ChargeTransparencyLiveLinkContext;
7
- /** ISO 8601 timestamp */
8
- timestamp?: string | null;
7
+ /** ISO 8601 creation timestamp */
8
+ created?: string | null;
9
9
  /** Multi-language description */
10
10
  description?: chargyLib.I18NString;
11
11
  /** URLs to images / logos */
@@ -15,7 +15,7 @@ export interface IChargeTransparencyLiveLink extends chargyLib.JSONObject {
15
15
  /** Technical connector data */
16
16
  connector?: IConnector;
17
17
  /** Available transport methods for live data */
18
- transports?: Transport[];
18
+ liveTransports?: Transport[];
19
19
  /** Digital signatures (currently empty or extendable) */
20
20
  signatures?: chargyInterfaces.ISignature[];
21
21
  }
@@ -35,6 +35,15 @@ export interface ITransport {
35
35
  }
36
36
  export interface TransportHTTPS extends ITransport {
37
37
  type: "https";
38
+ /**
39
+ * How often to ask for the document again, in seconds.
40
+ *
41
+ * This belongs to https alone: a websocket or a server-sent event stream
42
+ * delivers a new document when there is one, and if either ever needs a
43
+ * period of its own it will mean something else than asking again. Absent
44
+ * means: do not poll.
45
+ */
46
+ refresh?: number;
38
47
  }
39
48
  export interface TransportHTTPSSE extends ITransport {
40
49
  type: "httpSSE";
@@ -1 +1 @@
1
- {"version":3,"file":"IChargeTransparencyLiveLink.d.ts","sourceRoot":"","sources":["../../src/interfaces/IChargeTransparencyLiveLink.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,gBAAgB,MAAO,oBAAoB,CAAA;AACvD,OAAO,KAAK,SAAS,MAAc,aAAa,CAAA;AAGhD,eAAO,MAAM,iCAAiC,0EAA0E,CAAC;AA2CzH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,2BAA2B,CAchG;AAQD,MAAM,WAAW,2BAA4B,SAAQ,SAAS,CAAC,UAAU;IAErE,UAAU,EAAE,OAAO,iCAAiC,CAAC;IAErD,yBAAyB;IACzB,SAAS,CAAC,EAAM,MAAM,GAAC,IAAI,CAAC;IAE5B,iCAAiC;IACjC,WAAW,CAAC,EAAI,SAAS,CAAC,UAAU,CAAC;IAErC,6BAA6B;IAC7B,SAAS,CAAC,EAAM,MAAM,EAAE,CAAC;IAEzB,kDAAkD;IAClD,WAAW,CAAC,EAAI,gBAAgB,CAAC,YAAY,CAAC;IAE9C,+BAA+B;IAC/B,SAAS,CAAC,EAAM,UAAU,CAAC;IAE3B,gDAAgD;IAChD,UAAU,CAAC,EAAK,SAAS,EAAE,CAAC;IAE5B,yDAAyD;IACzD,UAAU,CAAC,EAAK,gBAAgB,CAAC,UAAU,EAAE,CAAC;CAEjD;AAED,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAc,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAgB,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAa,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAc,MAAM,CAAC;CACjC;AAID,sDAAsD;AACtD,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,gBAAgB,GAChB,kBAAkB,CAAC;AAGvB,MAAM,WAAW,UAAU;IACvB,GAAG,CAAC,EAAG,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,GAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,cAAmB,SAAQ,UAAU;IAClD,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,gBAAmB,SAAQ,UAAU;IAClD,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,IAAI,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAoB,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAc,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAgB,MAAM,CAAC;CACjC;AAED,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACvB,mBAAmB,EAAI,MAAM,CAAC;IAC9B,QAAQ,EAAe,MAAM,CAAC;CACjC"}
1
+ {"version":3,"file":"IChargeTransparencyLiveLink.d.ts","sourceRoot":"","sources":["../../src/interfaces/IChargeTransparencyLiveLink.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,gBAAgB,MAAO,oBAAoB,CAAA;AACvD,OAAO,KAAK,SAAS,MAAc,aAAa,CAAA;AAGhD,eAAO,MAAM,iCAAiC,0EAA0E,CAAC;AAoDzH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,2BAA2B,CAchG;AAQD,MAAM,WAAW,2BAA4B,SAAQ,SAAS,CAAC,UAAU;IAErE,UAAU,EAAE,OAAO,iCAAiC,CAAC;IAErD,kCAAkC;IAClC,OAAO,CAAC,EAAQ,MAAM,GAAC,IAAI,CAAC;IAE5B,iCAAiC;IACjC,WAAW,CAAC,EAAI,SAAS,CAAC,UAAU,CAAC;IAErC,6BAA6B;IAC7B,SAAS,CAAC,EAAM,MAAM,EAAE,CAAC;IAEzB,kDAAkD;IAClD,WAAW,CAAC,EAAI,gBAAgB,CAAC,YAAY,CAAC;IAE9C,+BAA+B;IAC/B,SAAS,CAAC,EAAM,UAAU,CAAC;IAE3B,gDAAgD;IAChD,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAE7B,yDAAyD;IACzD,UAAU,CAAC,EAAK,gBAAgB,CAAC,UAAU,EAAE,CAAC;CAEjD;AAED,4BAA4B;AAC5B,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,EAAc,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAgB,MAAM,CAAC;IAC9B,SAAS,CAAC,EAAa,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAc,MAAM,CAAC;CACjC;AAID,sDAAsD;AACtD,MAAM,MAAM,SAAS,GACjB,cAAc,GACd,gBAAgB,GAChB,kBAAkB,CAAC;AAGvB,MAAM,WAAW,UAAU;IACvB,GAAG,CAAC,EAAG,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,GAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,cAAmB,SAAQ,UAAU;IAClD,IAAI,EAAE,OAAO,CAAC;IAEd;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAmB,SAAQ,UAAU;IAClD,IAAI,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IAClD,IAAI,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC1B,GAAG,EAAoB,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAc,MAAM,CAAC;IAC9B,MAAM,CAAC,EAAgB,MAAM,CAAC;CACjC;AAED,iDAAiD;AACjD,MAAM,WAAW,UAAU;IACvB,mBAAmB,EAAI,MAAM,CAAC;IAC9B,QAAQ,EAAe,MAAM,CAAC;CACjC"}
@@ -6447,6 +6447,25 @@ var OCMF = class {
6447
6447
  )
6448
6448
  );
6449
6449
  }
6450
+ //#region (private) validateOCMFSignatureWithAnyOf(OCMFJSONDocument, PublicKeys, PublicKeyEncoding?)
6451
+ // Tries the document against every candidate key and keeps the first
6452
+ // signature that verifies. Without this a session whose start and end
6453
+ // values are signed by a different key than its intermediate values could
6454
+ // never validate as a whole.
6455
+ async validateOCMFSignatureWithAnyOf(OCMFJSONDocument, PublicKeys, PublicKeyEncoding) {
6456
+ const candidates = Array.isArray(PublicKeys) ? PublicKeys : [PublicKeys];
6457
+ let lastResult = "Unvalidated" /* Unvalidated */;
6458
+ for (const publicKey of candidates) {
6459
+ OCMFJSONDocument.validationStatus = "Unvalidated" /* Unvalidated */;
6460
+ OCMFJSONDocument.validationErrors = void 0;
6461
+ OCMFJSONDocument.publicKey = void 0;
6462
+ lastResult = await this.validateOCMFSignature(OCMFJSONDocument, publicKey, PublicKeyEncoding);
6463
+ if (lastResult === "ValidSignature" /* ValidSignature */)
6464
+ return lastResult;
6465
+ }
6466
+ return lastResult;
6467
+ }
6468
+ //#endregion
6450
6469
  //#region (private) validateOCMFSignature(OCMFJSONDocument, PublicKey, PublicKeyEncoding?)
6451
6470
  async validateOCMFSignature(OCMFJSONDocument, PublicKey, PublicKeyEncoding) {
6452
6471
  try {
@@ -6759,7 +6778,9 @@ var OCMF = class {
6759
6778
  signature: ocmfSignature,
6760
6779
  hashAlgorithm,
6761
6780
  hashValue,
6762
- publicKey: PublicKey,
6781
+ // With several candidates the key is only known once one of
6782
+ // them has verified, so it is left to the validation step.
6783
+ publicKey: Array.isArray(PublicKey) ? void 0 : PublicKey,
6763
6784
  publicKeyEncoding: PublicKeyEncoding,
6764
6785
  validationStatus: validationStatus ?? (PublicKey != null ? "Unvalidated" /* Unvalidated */ : "PublicKeyNotFound" /* PublicKeyNotFound */)
6765
6786
  };
@@ -6799,7 +6820,7 @@ var OCMF = class {
6799
6820
  ocmfJSONDocument.validationStatus = "InvalidSignature" /* InvalidSignature */;
6800
6821
  }
6801
6822
  if (PublicKey != null && ocmfJSONDocument.validationStatus === "Unvalidated" /* Unvalidated */)
6802
- await this.validateOCMFSignature(
6823
+ await this.validateOCMFSignatureWithAnyOf(
6803
6824
  ocmfJSONDocument,
6804
6825
  PublicKey,
6805
6826
  PublicKeyEncoding
@@ -6869,7 +6890,7 @@ var OCMF = class {
6869
6890
  if (PublicKey != null) {
6870
6891
  for (const ocmfJSONDocument of ocmfJSONDocumentGroup)
6871
6892
  if (ocmfJSONDocument.validationStatus === "Unvalidated" /* Unvalidated */)
6872
- await this.validateOCMFSignature(ocmfJSONDocument, PublicKey);
6893
+ await this.validateOCMFSignatureWithAnyOf(ocmfJSONDocument, PublicKey);
6873
6894
  }
6874
6895
  if (ocmfJSONDocumentGroup[0]) {
6875
6896
  switch (ocmfJSONDocumentGroup[0].payload.FV) {
@@ -10258,12 +10279,15 @@ function isTransport(data) {
10258
10279
  if (type !== "https" && type !== "httpSSE" && type !== "websocket") {
10259
10280
  return false;
10260
10281
  }
10282
+ if (type === "https" && data["refresh"] !== void 0 && typeof data["refresh"] !== "number") {
10283
+ return false;
10284
+ }
10261
10285
  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"]));
10262
10286
  }
10263
10287
  function IsAChargeTransparencyLiveLink(data) {
10264
10288
  if (!isMandatoryJSONObject(data))
10265
10289
  return false;
10266
- return data["@context"] === ChargeTransparencyLiveLinkContext && (data["timestamp"] === void 0 || data["timestamp"] === null || typeof data["timestamp"] === "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["transports"] === void 0 || Array.isArray(data["transports"]) && data["transports"].every(isTransport)) && (data["signatures"] === void 0 || Array.isArray(data["signatures"]));
10290
+ 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"]));
10267
10291
  }
10268
10292
  function isTOTPConfig(data) {
10269
10293
  return isObject(data) && typeof data["initialSharedSecret"] === "string" && typeof data["timeStep"] === "number";
@@ -11440,7 +11464,7 @@ var Chargy = class {
11440
11464
  throw new Error("Parsed JSON content is not a JSON object!");
11441
11465
  const JSONContext = JSONContent["@context"];
11442
11466
  if (IsAChargeTransparencyLiveLink(JSONContent)) {
11443
- JSONContent.timestamp ??= (/* @__PURE__ */ new Date()).toISOString();
11467
+ JSONContent.created ??= (/* @__PURE__ */ new Date()).toISOString();
11444
11468
  processedFile.result = JSONContent;
11445
11469
  } else if (JSONContent["format"] === "ptb")
11446
11470
  processedFile.result = await new PTB(this).TryToParsePTBContainer(JSONContent);
@@ -11573,6 +11597,72 @@ var Chargy = class {
11573
11597
  };
11574
11598
  }
11575
11599
  //#endregion
11600
+ //#region TryToParseLiveLinkMeterValues(LiveLink)
11601
+ /**
11602
+ * The signed meter values a live link carries, parsed and verified with the
11603
+ * public keys of the very same document, as an ordinary charge transparency
11604
+ * record.
11605
+ *
11606
+ * A live link is not turned into one: it describes a charging session that
11607
+ * is still running, a charge transparency record a collection of finished
11608
+ * ones, and an application shows the two differently. The meter values are
11609
+ * an optional part of the live link view, so they are only produced when
11610
+ * they are asked for.
11611
+ *
11612
+ * Returns undefined when the live link carries no meter values yet, or none
11613
+ * that are understood here.
11614
+ */
11615
+ async TryToParseLiveLinkMeterValues(LiveLink) {
11616
+ const signedMeterValues = asJSONObject(LiveLink["signedMeterValues"]);
11617
+ if (signedMeterValues === void 0)
11618
+ return void 0;
11619
+ const encodings = signedMeterValues["encodings"];
11620
+ const values = signedMeterValues["values"];
11621
+ if (!Array.isArray(encodings) || encodings[0] !== "OCMF" || !Array.isArray(values) || values.length === 0 || !values.every((value) => typeof value === "string" && value !== "")) {
11622
+ return void 0;
11623
+ }
11624
+ const publicKeys = this.collectLiveLinkMeterValueKeys(LiveLink);
11625
+ const ctr = await new OCMF(this).TryToParseOCMFDocuments(
11626
+ values,
11627
+ publicKeys.length > 0 ? publicKeys : void 0,
11628
+ "hex"
11629
+ );
11630
+ if (!IsAChargeTransparencyRecord(ctr))
11631
+ return void 0;
11632
+ const verifiedCTR = await this.processChargeTransparencyRecord(ctr);
11633
+ return IsAChargeTransparencyRecord(verifiedCTR) ? verifiedCTR : void 0;
11634
+ }
11635
+ //#endregion
11636
+ //#region (private) collectLiveLinkMeterValueKeys(LiveLink)
11637
+ // Every public key of the document that is allowed to sign meter values.
11638
+ // A charging session is regularly signed by more than one of them: the
11639
+ // meter signs its start and end values, the operator the intermediate ones.
11640
+ collectLiveLinkMeterValueKeys(LiveLink) {
11641
+ const publicKeys = new Array();
11642
+ const collectFrom = (candidates) => {
11643
+ if (!Array.isArray(candidates))
11644
+ return;
11645
+ for (const candidate of candidates) {
11646
+ const entry = asJSONObject(candidate);
11647
+ const value = asString(entry?.["value"]);
11648
+ const keyUsage = entry?.["keyUsage"];
11649
+ const encodings = entry?.["encodings"];
11650
+ if (value === void 0 || value === "")
11651
+ continue;
11652
+ if (Array.isArray(encodings) && encodings[encodings.length - 1] !== "hex")
11653
+ continue;
11654
+ if (Array.isArray(keyUsage) && !keyUsage.some((usage) => usage === "signMeterValues" || usage === "signEnergyMeterValues"))
11655
+ continue;
11656
+ publicKeys.push(value);
11657
+ }
11658
+ };
11659
+ const chargingStation = asJSONObject(LiveLink["chargingStation"]);
11660
+ const evse = asJSONObject(chargingStation?.["EVSE"]);
11661
+ collectFrom(asJSONObject(LiveLink["chargingStationOperator"])?.["publicKeys"]);
11662
+ collectFrom(asJSONObject(evse?.["energyMeter"])?.["publicKeys"]);
11663
+ return publicKeys;
11664
+ }
11665
+ //#endregion
11576
11666
  //#region (private) processChargeTransparencyRecord(CTR)
11577
11667
  async processChargeTransparencyRecord(CTR) {
11578
11668
  if (!IsAChargeTransparencyRecord(CTR))