@open-charging-cloud/chargy-core 0.6.2 → 0.6.3
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/README.md +1 -1
- package/dist/browser/index.js +96 -84
- package/dist/browser/index.js.map +1 -1
- package/dist/chargy.d.ts +9 -8
- package/dist/chargy.d.ts.map +1 -1
- package/dist/node/index.js +96 -84
- package/dist/node/index.js.map +1 -1
- package/package.json +1 -1
package/dist/chargy.d.ts
CHANGED
|
@@ -50,24 +50,25 @@ export declare class Chargy {
|
|
|
50
50
|
currentCTR: chargeTransparencyRecord.IChargeTransparencyRecord;
|
|
51
51
|
internalCTR: chargeTransparencyRecord.IChargeTransparencyRecord;
|
|
52
52
|
constructor(i18n: chargyInterfaces.I18NDictionary, UILanguages: chargyInterfaces.LanguageStrings, elliptic: EllipticModule, moment: MomentModule, asn1: Asn1Module, base32Decode: Base32Decode, ShowPKIDetails: chargyInterfaces.ShowPKIDetailsFunction, validationRules?: chargyInterfaces.IValidationRules);
|
|
53
|
-
|
|
54
|
-
private
|
|
55
|
-
private
|
|
56
|
-
private CompleteMultilanguageText;
|
|
53
|
+
private fileNameWithoutExtension;
|
|
54
|
+
private tryExtractChargeTransparencyTextFromURL;
|
|
55
|
+
private tryExtractSignedDataTextFromXML;
|
|
57
56
|
private PublicKeyIdFromFileName;
|
|
58
57
|
private TryToParseDERPublicKey;
|
|
59
58
|
private IsHexEncodedPublicKeyFile;
|
|
60
59
|
private TryToGetDERPublicKeyHEX;
|
|
61
60
|
private isSupportedQRCodeImageFile;
|
|
62
|
-
private fileNameWithoutExtension;
|
|
63
|
-
private textFileNameForQRCodeContent;
|
|
64
|
-
private tryExtractChargeTransparencyTextFromURL;
|
|
65
|
-
private tryExtractSignedDataTextFromXML;
|
|
66
61
|
private expandQRCodeImageFiles;
|
|
62
|
+
private textFileNameForQRCodeContent;
|
|
63
|
+
SetUILanguages(UILanguages: chargyInterfaces.LanguageStrings): void;
|
|
64
|
+
private NormalizeUILanguages;
|
|
65
|
+
private FindBestMultilanguageText;
|
|
66
|
+
private CompleteMultilanguageText;
|
|
67
67
|
GetLocalizedMessage(Text: string): string;
|
|
68
68
|
GetMultilanguageText(Text: string): chargyInterfaces.IMultilanguageText;
|
|
69
69
|
GetLocalizedMessageWithParameter(Text: string, Parameter: string | number): string;
|
|
70
70
|
GetMultilanguageTextWithParameter(Text: string, Parameter: string | number): chargyInterfaces.IMultilanguageText;
|
|
71
|
+
getLocalizedText(data: chargyInterfaces.IMultilanguageText | undefined): string | undefined;
|
|
71
72
|
GetChargingPool: chargyInterfaces.GetChargingPoolFunc;
|
|
72
73
|
GetChargingStation: chargyInterfaces.GetChargingStationFunc;
|
|
73
74
|
GetEVSE: chargyInterfaces.GetEVSEFunc;
|
package/dist/chargy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chargy.d.ts","sourceRoot":"","sources":["../src/chargy.ts"],"names":[],"mappings":"AA+BA,OAAO,KAAK,gBAAgB,MAAqB,+BAA+B,CAAA;AAChF,OAAO,KAAK,wBAAwB,MAAa,wCAAwC,CAAA;AACzF,OAAO,KAAK,0BAA0B,MAAW,0CAA0C,CAAA;AAC3F,OAAO,KAAK,aAAa,MAAwB,6BAA6B,CAAA;AAM9E,OAAO,KAAK,MAAM,MAA+B,QAAQ,CAAC;AAS1D,KAAK,WAAW,GAAG;IACf,MAAM,IAAI,WAAW,CAAC;IACtB,GAAG,IAAI,WAAW,CAAC;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC/B,GAAG,CAAC,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC;IACtC,KAAK,IAAI,WAAW,CAAC;IACrB,GAAG,IAAI,WAAW,CAAC;IACnB,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,WAAW,CAAC;CACvC,CAAC;AAEF,KAAK,UAAU,GAAG;IACd,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;CACrE,CAAC;AAiBF,KAAK,UAAU,GAAG;IACd,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,KAAK,UAAU,CAAC;CAC3E,CAAC;AAEF,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,KAAK,WAAW,CAAC;AAEjH,MAAM,MAAM,eAAe,GAAG;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IACxB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;CAClG,CAAC;AAEF,KAAK,cAAc,GAAG;IAClB,EAAE,EAAE,KAAK,KAAK,EAAE,MAAM,KAAK,aAAa,CAAC;CAC5C,CAAC;AAEF,KAAK,YAAY,GAAG,OAAO,MAAM,CAAC;AAElC,qBAAa,MAAM;IAIf,SAAiB,IAAI,EAAc,gBAAgB,CAAC,cAAc,CAAC;IAClD,WAAW,EAAO,gBAAgB,CAAC,eAAe,CAAC;IACpE,SAAiB,QAAQ,EAAU,cAAc,CAAC;IAClD,SAAiB,MAAM,EAAY,YAAY,CAAC;IAChD,SAAiB,IAAI,EAAc,UAAU,CAAC;IAC9C,SAAiB,YAAY,EAAM,YAAY,CAAC;IAChD,SAAiB,cAAc,EAAI,gBAAgB,CAAC,sBAAsB,CAAC;IAC3E,SAAiB,eAAe,EAAG,gBAAgB,CAAC,gBAAgB,CAAC;IAErE,OAAO,CAAC,wBAAwB,CAA2D;IAC3F,OAAO,CAAC,aAAa,CAA2D;IAChF,OAAO,CAAC,gBAAgB,CAA2D;IACnF,OAAO,CAAC,KAAK,CAA2D;IACxE,OAAO,CAAC,MAAM,CAA2D;IACzE,OAAO,CAAC,gBAAgB,CAAmE;IAEnF,UAAU,EAAwB,wBAAwB,CAAC,yBAAyB,CAAC;IACrF,WAAW,EAAuB,wBAAwB,CAAC,yBAAyB,CAAC;gBAIjF,IAAI,EAAc,gBAAgB,CAAC,cAAc,EACjD,WAAW,EAAO,gBAAgB,CAAC,eAAe,EAClD,QAAQ,EAAU,cAAc,EAChC,MAAM,EAAY,YAAY,EAC9B,IAAI,EAAc,UAAU,EAC5B,YAAY,EAAM,YAAY,EAC9B,cAAc,EAAI,gBAAgB,CAAC,sBAAsB,EACzD,eAAe,GAAG,gBAAgB,CAAC,gBAA8E;
|
|
1
|
+
{"version":3,"file":"chargy.d.ts","sourceRoot":"","sources":["../src/chargy.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.js
CHANGED
|
@@ -16224,39 +16224,53 @@ var Chargy = class {
|
|
|
16224
16224
|
this.showPKIDetails = ShowPKIDetails;
|
|
16225
16225
|
this.validationRules = validationRules;
|
|
16226
16226
|
}
|
|
16227
|
-
|
|
16228
|
-
|
|
16227
|
+
fileNameWithoutExtension(fileName) {
|
|
16228
|
+
const lastSeparator = Math.max(fileName.lastIndexOf("/"), fileName.lastIndexOf("\\"));
|
|
16229
|
+
const lastDot = fileName.lastIndexOf(".");
|
|
16230
|
+
if (lastDot > lastSeparator)
|
|
16231
|
+
return fileName.substring(0, lastDot);
|
|
16232
|
+
return fileName;
|
|
16229
16233
|
}
|
|
16230
|
-
|
|
16231
|
-
|
|
16232
|
-
|
|
16233
|
-
|
|
16234
|
-
|
|
16235
|
-
|
|
16234
|
+
tryExtractChargeTransparencyTextFromURL(qrText) {
|
|
16235
|
+
if (!qrText.startsWith("http://") && !qrText.startsWith("https://"))
|
|
16236
|
+
return qrText;
|
|
16237
|
+
try {
|
|
16238
|
+
const url = new URL(qrText);
|
|
16239
|
+
const candidates = [
|
|
16240
|
+
url.hash.startsWith("#") ? url.hash.substring(1) : url.hash,
|
|
16241
|
+
url.searchParams.get("data"),
|
|
16242
|
+
url.searchParams.get("content"),
|
|
16243
|
+
url.searchParams.get("ctr"),
|
|
16244
|
+
url.searchParams.get("record"),
|
|
16245
|
+
url.searchParams.get("payload"),
|
|
16246
|
+
url.searchParams.get("q")
|
|
16247
|
+
];
|
|
16248
|
+
for (const candidate of candidates) {
|
|
16249
|
+
const decodedCandidate = candidate != null ? decodeURIComponent(candidate).trim() : "";
|
|
16250
|
+
if (decodedCandidate.startsWith("<?xml") || decodedCandidate.startsWith("<values") || decodedCandidate.startsWith("{") || decodedCandidate.startsWith("[") || decodedCandidate.startsWith("OCMF") || decodedCandidate.startsWith("AP;")) {
|
|
16251
|
+
return decodedCandidate;
|
|
16252
|
+
}
|
|
16236
16253
|
}
|
|
16254
|
+
} catch {
|
|
16255
|
+
console.log("Invalid URL in QR code: " + qrText);
|
|
16237
16256
|
}
|
|
16238
|
-
return
|
|
16257
|
+
return qrText;
|
|
16239
16258
|
}
|
|
16240
|
-
|
|
16241
|
-
|
|
16242
|
-
|
|
16243
|
-
|
|
16244
|
-
|
|
16259
|
+
tryExtractSignedDataTextFromXML(qrText) {
|
|
16260
|
+
const trimmedQRCodeText = qrText.trim();
|
|
16261
|
+
if (!trimmedQRCodeText.startsWith("<?xml") && !trimmedQRCodeText.startsWith("<"))
|
|
16262
|
+
return qrText;
|
|
16263
|
+
try {
|
|
16264
|
+
const xmlDocument = new DOMParser().parseFromString(trimmedQRCodeText, "text/xml");
|
|
16265
|
+
const signedDataValues = getElementsByLocalName(xmlDocument, "signedData").filter((signedData) => (signedData.getAttribute("format") ?? "").trim().toLowerCase() === "alfen").map((signedData) => signedData.textContent.trim()).filter((signedData) => signedData.startsWith("AP;"));
|
|
16266
|
+
if (signedDataValues.length > 0)
|
|
16267
|
+
return signedDataValues.join("\n");
|
|
16268
|
+
} catch {
|
|
16269
|
+
console.log("Error parsing XML content from QR code: " + qrText);
|
|
16245
16270
|
}
|
|
16246
|
-
|
|
16247
|
-
if (english !== void 0)
|
|
16248
|
-
return english;
|
|
16249
|
-
return Object.values(Text).find((value) => value !== void 0);
|
|
16250
|
-
}
|
|
16251
|
-
CompleteMultilanguageText(Text, fallbackText) {
|
|
16252
|
-
const result = {
|
|
16253
|
-
...Text ?? {}
|
|
16254
|
-
};
|
|
16255
|
-
const fallback = this.FindBestMultilanguageText(result) ?? fallbackText;
|
|
16256
|
-
for (const language of this.uiLanguages)
|
|
16257
|
-
result[language] ??= fallback;
|
|
16258
|
-
return result;
|
|
16271
|
+
return qrText;
|
|
16259
16272
|
}
|
|
16273
|
+
//#region Public key methods...
|
|
16260
16274
|
PublicKeyIdFromFileName(fileName) {
|
|
16261
16275
|
return (fileName.includes(".") ? fileName.substring(0, fileName.indexOf(".")) : fileName).replace(/[-_]?public[-_]?key/i, "");
|
|
16262
16276
|
}
|
|
@@ -16339,66 +16353,13 @@ var Chargy = class {
|
|
|
16339
16353
|
return textContent.replace(/\s+/g, "");
|
|
16340
16354
|
return void 0;
|
|
16341
16355
|
}
|
|
16356
|
+
//#endregion
|
|
16357
|
+
//#region QR code image files...
|
|
16342
16358
|
isSupportedQRCodeImageFile(fileInfo, mimeType) {
|
|
16343
16359
|
const mimeTypeToCheck = (mimeType ?? fileInfo.type ?? "").toLowerCase();
|
|
16344
16360
|
const fileName = fileInfo.name.toLowerCase();
|
|
16345
16361
|
return mimeTypeToCheck === "image/png" || mimeTypeToCheck === "image/jpeg" || mimeTypeToCheck === "image/jpg" || mimeTypeToCheck === "image/gif" || mimeTypeToCheck === "image/webp" || mimeTypeToCheck === "image/bmp" || mimeTypeToCheck === "image/svg+xml" || fileName.endsWith(".png") || fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".gif") || fileName.endsWith(".webp") || fileName.endsWith(".bmp") || fileName.endsWith(".svg");
|
|
16346
16362
|
}
|
|
16347
|
-
fileNameWithoutExtension(fileName) {
|
|
16348
|
-
const lastSeparator = Math.max(fileName.lastIndexOf("/"), fileName.lastIndexOf("\\"));
|
|
16349
|
-
const lastDot = fileName.lastIndexOf(".");
|
|
16350
|
-
if (lastDot > lastSeparator)
|
|
16351
|
-
return fileName.substring(0, lastDot);
|
|
16352
|
-
return fileName;
|
|
16353
|
-
}
|
|
16354
|
-
textFileNameForQRCodeContent(fileName, qrText) {
|
|
16355
|
-
const trimmedQRCodeText = qrText.trimStart();
|
|
16356
|
-
const baseFileName = this.fileNameWithoutExtension(fileName);
|
|
16357
|
-
if (trimmedQRCodeText.startsWith("<?xml") || trimmedQRCodeText.startsWith("<"))
|
|
16358
|
-
return baseFileName + ".xml";
|
|
16359
|
-
if (trimmedQRCodeText.startsWith("{") || trimmedQRCodeText.startsWith("["))
|
|
16360
|
-
return baseFileName + ".json";
|
|
16361
|
-
return baseFileName + ".txt";
|
|
16362
|
-
}
|
|
16363
|
-
tryExtractChargeTransparencyTextFromURL(qrText) {
|
|
16364
|
-
if (!qrText.startsWith("http://") && !qrText.startsWith("https://"))
|
|
16365
|
-
return qrText;
|
|
16366
|
-
try {
|
|
16367
|
-
const url = new URL(qrText);
|
|
16368
|
-
const candidates = [
|
|
16369
|
-
url.hash.startsWith("#") ? url.hash.substring(1) : url.hash,
|
|
16370
|
-
url.searchParams.get("data"),
|
|
16371
|
-
url.searchParams.get("content"),
|
|
16372
|
-
url.searchParams.get("ctr"),
|
|
16373
|
-
url.searchParams.get("record"),
|
|
16374
|
-
url.searchParams.get("payload"),
|
|
16375
|
-
url.searchParams.get("q")
|
|
16376
|
-
];
|
|
16377
|
-
for (const candidate of candidates) {
|
|
16378
|
-
const decodedCandidate = candidate != null ? decodeURIComponent(candidate).trim() : "";
|
|
16379
|
-
if (decodedCandidate.startsWith("<?xml") || decodedCandidate.startsWith("<values") || decodedCandidate.startsWith("{") || decodedCandidate.startsWith("[") || decodedCandidate.startsWith("OCMF") || decodedCandidate.startsWith("AP;")) {
|
|
16380
|
-
return decodedCandidate;
|
|
16381
|
-
}
|
|
16382
|
-
}
|
|
16383
|
-
} catch {
|
|
16384
|
-
console.log("Invalid URL in QR code: " + qrText);
|
|
16385
|
-
}
|
|
16386
|
-
return qrText;
|
|
16387
|
-
}
|
|
16388
|
-
tryExtractSignedDataTextFromXML(qrText) {
|
|
16389
|
-
const trimmedQRCodeText = qrText.trim();
|
|
16390
|
-
if (!trimmedQRCodeText.startsWith("<?xml") && !trimmedQRCodeText.startsWith("<"))
|
|
16391
|
-
return qrText;
|
|
16392
|
-
try {
|
|
16393
|
-
const xmlDocument = new DOMParser().parseFromString(trimmedQRCodeText, "text/xml");
|
|
16394
|
-
const signedDataValues = getElementsByLocalName(xmlDocument, "signedData").filter((signedData) => (signedData.getAttribute("format") ?? "").trim().toLowerCase() === "alfen").map((signedData) => signedData.textContent.trim()).filter((signedData) => signedData.startsWith("AP;"));
|
|
16395
|
-
if (signedDataValues.length > 0)
|
|
16396
|
-
return signedDataValues.join("\n");
|
|
16397
|
-
} catch {
|
|
16398
|
-
console.log("Error parsing XML content from QR code: " + qrText);
|
|
16399
|
-
}
|
|
16400
|
-
return qrText;
|
|
16401
|
-
}
|
|
16402
16363
|
async expandQRCodeImageFiles(FileInfos) {
|
|
16403
16364
|
const expandedFileInfos = new Array();
|
|
16404
16365
|
for (const fileInfo of FileInfos) {
|
|
@@ -16430,7 +16391,50 @@ var Chargy = class {
|
|
|
16430
16391
|
}
|
|
16431
16392
|
return expandedFileInfos;
|
|
16432
16393
|
}
|
|
16433
|
-
|
|
16394
|
+
textFileNameForQRCodeContent(fileName, qrText) {
|
|
16395
|
+
const trimmedQRCodeText = qrText.trimStart();
|
|
16396
|
+
const baseFileName = this.fileNameWithoutExtension(fileName);
|
|
16397
|
+
if (trimmedQRCodeText.startsWith("<?xml") || trimmedQRCodeText.startsWith("<"))
|
|
16398
|
+
return baseFileName + ".xml";
|
|
16399
|
+
if (trimmedQRCodeText.startsWith("{") || trimmedQRCodeText.startsWith("["))
|
|
16400
|
+
return baseFileName + ".json";
|
|
16401
|
+
return baseFileName + ".txt";
|
|
16402
|
+
}
|
|
16403
|
+
//#endregion
|
|
16404
|
+
//#region i18n...
|
|
16405
|
+
SetUILanguages(UILanguages) {
|
|
16406
|
+
this.uiLanguages = this.NormalizeUILanguages(UILanguages);
|
|
16407
|
+
}
|
|
16408
|
+
NormalizeUILanguages(UILanguages) {
|
|
16409
|
+
const languages = new Array();
|
|
16410
|
+
for (const language of UILanguages) {
|
|
16411
|
+
const normalized = language.trim();
|
|
16412
|
+
if (normalized.length > 0 && !languages.includes(normalized)) {
|
|
16413
|
+
languages.push(normalized);
|
|
16414
|
+
}
|
|
16415
|
+
}
|
|
16416
|
+
return languages.length > 0 ? languages : ["en"];
|
|
16417
|
+
}
|
|
16418
|
+
FindBestMultilanguageText(Text) {
|
|
16419
|
+
for (const language of this.uiLanguages) {
|
|
16420
|
+
const localLanguage = Text[language];
|
|
16421
|
+
if (localLanguage !== void 0)
|
|
16422
|
+
return localLanguage;
|
|
16423
|
+
}
|
|
16424
|
+
const english = Text["en"];
|
|
16425
|
+
if (english !== void 0)
|
|
16426
|
+
return english;
|
|
16427
|
+
return Object.values(Text).find((value) => value !== void 0);
|
|
16428
|
+
}
|
|
16429
|
+
CompleteMultilanguageText(Text, fallbackText) {
|
|
16430
|
+
const result = {
|
|
16431
|
+
...Text ?? {}
|
|
16432
|
+
};
|
|
16433
|
+
const fallback = this.FindBestMultilanguageText(result) ?? fallbackText;
|
|
16434
|
+
for (const language of this.uiLanguages)
|
|
16435
|
+
result[language] ??= fallback;
|
|
16436
|
+
return result;
|
|
16437
|
+
}
|
|
16434
16438
|
GetLocalizedMessage(Text) {
|
|
16435
16439
|
const multiLanguage = this.i18n[Text];
|
|
16436
16440
|
if (multiLanguage !== void 0) {
|
|
@@ -16464,6 +16468,14 @@ var Chargy = class {
|
|
|
16464
16468
|
}
|
|
16465
16469
|
return this.CompleteMultilanguageText(parameterizedText, Text.replace("%p", String(Parameter)));
|
|
16466
16470
|
}
|
|
16471
|
+
getLocalizedText(data) {
|
|
16472
|
+
if (data == null)
|
|
16473
|
+
return void 0;
|
|
16474
|
+
const bestLanguage = this.FindBestMultilanguageText(data);
|
|
16475
|
+
if (bestLanguage == null)
|
|
16476
|
+
return void 0;
|
|
16477
|
+
return data[bestLanguage];
|
|
16478
|
+
}
|
|
16467
16479
|
//#endregion
|
|
16468
16480
|
//#region GetDevices...
|
|
16469
16481
|
GetChargingPool = (Id) => {
|
|
@@ -16695,7 +16707,6 @@ var Chargy = class {
|
|
|
16695
16707
|
} while (archiveFound);
|
|
16696
16708
|
return expandedFileInfos;
|
|
16697
16709
|
}
|
|
16698
|
-
//#endregion
|
|
16699
16710
|
async extractArchive(fileName, data, mimeType) {
|
|
16700
16711
|
const archiveData = this.toUint8Array(data);
|
|
16701
16712
|
if (mimeType === "application/zip")
|
|
@@ -16834,6 +16845,7 @@ var Chargy = class {
|
|
|
16834
16845
|
const value = this.readTarString(data, offset, length).replace(/\0/g, "").trim();
|
|
16835
16846
|
return value.length > 0 ? parseInt(value, 8) : 0;
|
|
16836
16847
|
}
|
|
16848
|
+
//#endregion
|
|
16837
16849
|
//#region DetectAndConvertContentFormat(FileInfos)
|
|
16838
16850
|
async DetectAndConvertContentFormat(FileInfos) {
|
|
16839
16851
|
if (FileInfos.length == 0) return {
|