@open-charging-cloud/chargy-core 0.14.1 → 0.14.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/CHANGELOG.md +20 -0
- package/README.md +1 -23
- package/dist/browser/index.js +16 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/interfaces/IChargeTransparencyLiveLink.d.ts +42 -0
- package/dist/interfaces/IChargeTransparencyLiveLink.d.ts.map +1 -1
- package/dist/node/index.js +16 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ 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.14.3] - 2026-09-05
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **An https transport can state the HTTP headers to send with it.**
|
|
15
|
+
`TransportHTTPS.customHeaders` names them - an API key the operator's endpoint
|
|
16
|
+
expects, a tenant selector - and a value is either the literal string to send
|
|
17
|
+
or an object naming a `valueProvider` that computes it per request, because a
|
|
18
|
+
one-time password would be stale the moment it was written into a document.
|
|
19
|
+
Version 1.0 defines that shape, not the providers: what `"TOTP"` means needs
|
|
20
|
+
an external profile, the same way the TOTP configuration does, and ChargyCore
|
|
21
|
+
computes no values.
|
|
22
|
+
|
|
23
|
+
Like `refresh`, the headers belong to `https` alone and are validated only
|
|
24
|
+
there; on the other two transports the property is unknown like any other.
|
|
25
|
+
`isCustomHeaders()`, `isCustomHeaderValue()` and
|
|
26
|
+
`isCustomHeaderValueProvider()` are exported for point-of-use filtering. What
|
|
27
|
+
HTTP itself requires of a name and a value is the sending client's business:
|
|
28
|
+
a document says what it wants sent, it does not get to write the request.
|
|
29
|
+
|
|
10
30
|
## [0.14.0] - 2026-08-30
|
|
11
31
|
|
|
12
32
|
### Added
|
package/README.md
CHANGED
|
@@ -140,28 +140,6 @@ Keeping these paths separate has several advantages:
|
|
|
140
140
|
When adding runtime-sensitive dependencies, avoid branching on runtime inside shared source code if that would make bundlers see both implementations. Prefer a small adapter under `src/` and let the build or conditional exports select the runtime-specific implementation.
|
|
141
141
|
|
|
142
142
|
|
|
143
|
-
### PDF.js Version Pin
|
|
144
|
-
|
|
145
|
-
> **`pdfjs-dist` is pinned to an exact version, currently `6.2.108`. Always run the PDF/A-3 test when raising it.**
|
|
146
|
-
|
|
147
|
-
It is the only dependency in `package.json` without a `^`, because PDF.js has shipped a silently breaking attachment API change within a minor release. Going from `6.0.227` to `6.2.108` changed `getDocument().getAttachments()` in two ways:
|
|
148
|
-
|
|
149
|
-
1. It resolves to a **`Map`** instead of a plain object. Reading the result with `Object.values()` yields an empty array for a `Map`, so every attachment is dropped.
|
|
150
|
-
2. Entries no longer carry the file bytes eagerly. `content` is only set when it happens to be loaded already, otherwise the payload has to be fetched via the new `getAttachmentContent(id)`.
|
|
151
|
-
|
|
152
|
-
Both are handled in `src/chargy.ts`, which iterates the `Map` and falls back to `getAttachmentContent()` whenever an entry has no inline `content`.
|
|
153
|
-
|
|
154
|
-
What makes this class of change dangerous is that it fails silently: nothing throws, so the `try`/`catch` around the call never fires. The embedded record simply disappears and verification then reports `InvalidSessionFormat` with *"No charge transparency records found!"*. `npm run typecheck` and `npm run lint` both stay green; only `tests/SAFE.tests.ts` ("SAFE Testdata 02 with XML namespace via PDF/A-3") detects it, by extracting a real embedded XML file from `tests/fixtures/SAFE/SAFE-Testdata-02_withXMLNamespace.pdf`.
|
|
155
|
-
|
|
156
|
-
So before changing the pin, always run:
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
npm run test:node -- tests/SAFE.tests.ts
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
Staying on an old version is not a safe default either — `6.0.227` was affected by [GHSA-hq66-cqwq-w95j](https://github.com/advisories/GHSA-hq66-cqwq-w95j) (high severity, arbitrary JavaScript execution when opening a malicious PDF), which is fixed in `6.2.108`.
|
|
163
|
-
|
|
164
|
-
|
|
165
143
|
## Development
|
|
166
144
|
|
|
167
145
|
```bash
|
|
@@ -207,7 +185,7 @@ npx playwright install chromium
|
|
|
207
185
|
## Publishing
|
|
208
186
|
|
|
209
187
|
```bash
|
|
210
|
-
npm version 0.14.
|
|
188
|
+
npm version 0.14.3 --no-git-tag-version
|
|
211
189
|
npm run verify
|
|
212
190
|
npm pack --dry-run
|
|
213
191
|
npm pack
|
package/dist/browser/index.js
CHANGED
|
@@ -12059,6 +12059,9 @@ __export(IChargeTransparencyLiveLink_exports, {
|
|
|
12059
12059
|
ChargeTransparencyLiveLinkContext: () => ChargeTransparencyLiveLinkContext,
|
|
12060
12060
|
IsAChargeTransparencyLiveLink: () => IsAChargeTransparencyLiveLink,
|
|
12061
12061
|
isConnector: () => isConnector,
|
|
12062
|
+
isCustomHeaderValue: () => isCustomHeaderValue,
|
|
12063
|
+
isCustomHeaderValueProvider: () => isCustomHeaderValueProvider,
|
|
12064
|
+
isCustomHeaders: () => isCustomHeaders,
|
|
12062
12065
|
isTransport: () => isTransport
|
|
12063
12066
|
});
|
|
12064
12067
|
var ChargeTransparencyLiveLinkContext = "https://open.charging.cloud/contexts/chargeTransparency/live/link/1.0";
|
|
@@ -12072,6 +12075,15 @@ function isTransportURL(data) {
|
|
|
12072
12075
|
return data.trim() !== "";
|
|
12073
12076
|
return isObject(data) && typeof data["url"] === "string" && (data["priority"] === void 0 || typeof data["priority"] === "number") && (data["weight"] === void 0 || typeof data["weight"] === "number");
|
|
12074
12077
|
}
|
|
12078
|
+
function isCustomHeaderValueProvider(data) {
|
|
12079
|
+
return isMandatoryJSONObject(data) && typeof data["valueProvider"] === "string" && (data["parameters"] === void 0 || isMandatoryJSONObject(data["parameters"]));
|
|
12080
|
+
}
|
|
12081
|
+
function isCustomHeaderValue(data) {
|
|
12082
|
+
return typeof data === "string" || isCustomHeaderValueProvider(data);
|
|
12083
|
+
}
|
|
12084
|
+
function isCustomHeaders(data) {
|
|
12085
|
+
return isMandatoryJSONObject(data) && Object.values(data).every(isCustomHeaderValue);
|
|
12086
|
+
}
|
|
12075
12087
|
function isTransport(data) {
|
|
12076
12088
|
if (!isObject(data))
|
|
12077
12089
|
return false;
|
|
@@ -12082,6 +12094,9 @@ function isTransport(data) {
|
|
|
12082
12094
|
if (type === "https" && data["refresh"] !== void 0 && typeof data["refresh"] !== "number") {
|
|
12083
12095
|
return false;
|
|
12084
12096
|
}
|
|
12097
|
+
if (type === "https" && data["customHeaders"] !== void 0 && !isCustomHeaders(data["customHeaders"])) {
|
|
12098
|
+
return false;
|
|
12099
|
+
}
|
|
12085
12100
|
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"]));
|
|
12086
12101
|
}
|
|
12087
12102
|
function IsAChargeTransparencyLiveLink(data) {
|
|
@@ -14119,6 +14134,6 @@ buffer/index.js:
|
|
|
14119
14134
|
*)
|
|
14120
14135
|
*/
|
|
14121
14136
|
|
|
14122
|
-
export { ACrypt, Alfen, AlfenCrypt01, BSMCrypt01, CanonicalJSONError, ChargeIT, ChargePoint, ChargePointCrypt01, IChargeTransparencyLiveLink_exports as ChargeTransparencyLiveLink, ChargeTransparencyLiveLinkContext, IChargeTransparencyRecord_exports as ChargeTransparencyRecord, Chargy, chargyInterfaces_exports as ChargyInterfaces, Clone, CloneCTR, ConcatenateBuffers, CreateDiv, CreateDiv2, CreateError, CreateWarning, CryptoAlgorithms, CryptoHashAlgorithms, DayOfWeek, DisplayPrefixes, EDL40, EDL40Crypt01, EDL40ValidationError, EDL40_OBIS, EDL40_SESSION_CONTEXT, EDL40_SIGNATURE_CONTEXT, EMHCrypt01, ErrorLevel, GDFCrypt01, IECCurves, IEncoding, InformationRelevance, InformationRelevanceToString, IsAChargeTransparencyLiveLink, IsAChargeTransparencyRecord, IsAPublicKey, IsAPublicKeyLookup, IsAPublicKeySignature, IsAPublicKeyXY, IsASessionCryptoResult, IsAURL, IsNullOrEmpty, IsValidURL, JSONSignatureVerificationStatus, MENNEKES_EDL40_OBIS, MENNEKES_EDL40_XMLNS, Mennekes, MennekesCrypt01, OBIS2Hex, OBIS2MeasurementName, OBIS_RegExpr, OCMF, OCMFBonnTariffParseError, OCMFTransactionTypes, OCMF_SIGNATURE_ALGORITHMS, OCMFv1_x, OCPI, OIDInfo, PCDF, PCDFCrypt01, PCDFParseError, PCDFValidationError, PCDF_FIELD_ORDER, PCDF_PREFIX, PTB, ParseJSON_LD, PublicKeyFormats, IPublicKeyInfo_exports as PublicKeyInfo, SAFEXML, SessionVerificationResult, SetHex, SetInt8, SetText, SetText_withLength, SetTimestamp, SetTimestamp32, SetUInt32, SetUInt32_withCode, SetUInt64, SetUInt64D, SignMessage, SignatureFormats, IURL_exports as SimpleURL, TimeStatusTypes, URLContext, UTC2human, VerificationResult, VerifyJSONMessageSignatures, WarningLevel, WhenNullOrEmpty, XMLContainer, asJSONArray, asJSONObject, asNumber, asString, base64ToBytes, buf2hex, buildEDL40Signature, buildIsaSignature, buildMennekesSignatureData, bytesToBase64, bytesToHex, canParseEDL40, canonicalJSONBytes, canonicalJSONStringify, cleanHex, closeFullscreen, collectDocumentPublicKeys, createCompatibleCurve, createHexString, createLegacyP192Curve, dateToMennekesLocalEpochSeconds, decodeSmlMessages, extractMennekesChargingProcesses, findEntryByObis, findGetListRes, firstKey, firstValue, generateSignatureKeyPair, getArrayElement, getArrayLikeElement, getDirectChildByLocalName, getDirectChildrenByLocalName, getElementsByLocalName, getFirstArrayElement, getInt16Bytes, getInt32Bytes, getInt64Bytes, getInt8Bytes, getLastArrayElement, getOCMFSignatureDisplay, getSignatureSuite, getTrimmedTextContent, hashFile, hex2bin, hex32, hexToArrayBuffer, hexToBytes, intFromBytes, isEncodedValue, isGeoLocation, isI18NString, isICryptoResult, isIFileInfo, isISessionCryptoResult1, isISessionCryptoResult2, isJSONLDObject, isMandatoryArrayOfStrings, isMandatoryBoolean, isMandatoryDecimal, isMandatoryJSONArray, isMandatoryJSONObject, isMandatoryNumber, isMandatoryString, isMandatoryURL, isOIDInfo, isObject, isOptionalArrayOfStrings, isOptionalDecimal, isOptionalJSONArray, isOptionalJSONArrayError, isOptionalJSONArrayOk, isOptionalJSONObject, isOptionalNumber, isOptionalString, isOptionalStringArray, isOptionalStringOrOIDInfo, isOptionalURL, isPCDFText, isPublicKeySubject, isString, isStringArray, isStringOrOIDInfo, isStringOrStringArray, isaListNameContext, jsonPrettyPrinter, measurementName2human, meterTimeZone, normalizePCDFPublicKeyHex, normalizeXMLText, ocmfBonnTariffToChargingTariff, openFullscreen, pad, parseAndVerifyJSONSignatures, parseDescription, parseEDL40, parseHexString, parseMennekesXMLDocument, parseNumber, parseOBIS, parseOCMFBonnTariffText, parsePCDFDocument, parsePCDFPublicKey, parsePCDFSignature, parseSmlTime, parseUTC, readQRCodeTextFromImage, readQRCodeTextFromImageData, readTLV, secp224k1, setUILocale, sha256, sha256____, sha384, sha384____, sha512, sha512____, signJSONMessage, signMessage, stripPCDFControlCharacters, stripTransport, time2human, timeZoneOffsetMinutes, toArrayBuffer, toSessionVerificationResults, toUint8Array, transformEDL40Status, tryParseOCMFBonnTariffText, unquotePCDFText, validatePCDFFields, verifyDocumentSignatures, verifyEDL40Document, verifyJSONMessageSignatureResults, verifyJSONMessageSignatures, verifyJSONSignature, verifyJSONSignatureResult, verifyPCDFDocument };
|
|
14137
|
+
export { ACrypt, Alfen, AlfenCrypt01, BSMCrypt01, CanonicalJSONError, ChargeIT, ChargePoint, ChargePointCrypt01, IChargeTransparencyLiveLink_exports as ChargeTransparencyLiveLink, ChargeTransparencyLiveLinkContext, IChargeTransparencyRecord_exports as ChargeTransparencyRecord, Chargy, chargyInterfaces_exports as ChargyInterfaces, Clone, CloneCTR, ConcatenateBuffers, CreateDiv, CreateDiv2, CreateError, CreateWarning, CryptoAlgorithms, CryptoHashAlgorithms, DayOfWeek, DisplayPrefixes, EDL40, EDL40Crypt01, EDL40ValidationError, EDL40_OBIS, EDL40_SESSION_CONTEXT, EDL40_SIGNATURE_CONTEXT, EMHCrypt01, ErrorLevel, GDFCrypt01, IECCurves, IEncoding, InformationRelevance, InformationRelevanceToString, IsAChargeTransparencyLiveLink, IsAChargeTransparencyRecord, IsAPublicKey, IsAPublicKeyLookup, IsAPublicKeySignature, IsAPublicKeyXY, IsASessionCryptoResult, IsAURL, IsNullOrEmpty, IsValidURL, JSONSignatureVerificationStatus, MENNEKES_EDL40_OBIS, MENNEKES_EDL40_XMLNS, Mennekes, MennekesCrypt01, OBIS2Hex, OBIS2MeasurementName, OBIS_RegExpr, OCMF, OCMFBonnTariffParseError, OCMFTransactionTypes, OCMF_SIGNATURE_ALGORITHMS, OCMFv1_x, OCPI, OIDInfo, PCDF, PCDFCrypt01, PCDFParseError, PCDFValidationError, PCDF_FIELD_ORDER, PCDF_PREFIX, PTB, ParseJSON_LD, PublicKeyFormats, IPublicKeyInfo_exports as PublicKeyInfo, SAFEXML, SessionVerificationResult, SetHex, SetInt8, SetText, SetText_withLength, SetTimestamp, SetTimestamp32, SetUInt32, SetUInt32_withCode, SetUInt64, SetUInt64D, SignMessage, SignatureFormats, IURL_exports as SimpleURL, TimeStatusTypes, URLContext, UTC2human, VerificationResult, VerifyJSONMessageSignatures, WarningLevel, WhenNullOrEmpty, XMLContainer, asJSONArray, asJSONObject, asNumber, asString, base64ToBytes, buf2hex, buildEDL40Signature, buildIsaSignature, buildMennekesSignatureData, bytesToBase64, bytesToHex, canParseEDL40, canonicalJSONBytes, canonicalJSONStringify, cleanHex, closeFullscreen, collectDocumentPublicKeys, createCompatibleCurve, createHexString, createLegacyP192Curve, dateToMennekesLocalEpochSeconds, decodeSmlMessages, extractMennekesChargingProcesses, findEntryByObis, findGetListRes, firstKey, firstValue, generateSignatureKeyPair, getArrayElement, getArrayLikeElement, getDirectChildByLocalName, getDirectChildrenByLocalName, getElementsByLocalName, getFirstArrayElement, getInt16Bytes, getInt32Bytes, getInt64Bytes, getInt8Bytes, getLastArrayElement, getOCMFSignatureDisplay, getSignatureSuite, getTrimmedTextContent, hashFile, hex2bin, hex32, hexToArrayBuffer, hexToBytes, intFromBytes, isCustomHeaderValue, isCustomHeaderValueProvider, isCustomHeaders, isEncodedValue, isGeoLocation, isI18NString, isICryptoResult, isIFileInfo, isISessionCryptoResult1, isISessionCryptoResult2, isJSONLDObject, isMandatoryArrayOfStrings, isMandatoryBoolean, isMandatoryDecimal, isMandatoryJSONArray, isMandatoryJSONObject, isMandatoryNumber, isMandatoryString, isMandatoryURL, isOIDInfo, isObject, isOptionalArrayOfStrings, isOptionalDecimal, isOptionalJSONArray, isOptionalJSONArrayError, isOptionalJSONArrayOk, isOptionalJSONObject, isOptionalNumber, isOptionalString, isOptionalStringArray, isOptionalStringOrOIDInfo, isOptionalURL, isPCDFText, isPublicKeySubject, isString, isStringArray, isStringOrOIDInfo, isStringOrStringArray, isaListNameContext, jsonPrettyPrinter, measurementName2human, meterTimeZone, normalizePCDFPublicKeyHex, normalizeXMLText, ocmfBonnTariffToChargingTariff, openFullscreen, pad, parseAndVerifyJSONSignatures, parseDescription, parseEDL40, parseHexString, parseMennekesXMLDocument, parseNumber, parseOBIS, parseOCMFBonnTariffText, parsePCDFDocument, parsePCDFPublicKey, parsePCDFSignature, parseSmlTime, parseUTC, readQRCodeTextFromImage, readQRCodeTextFromImageData, readTLV, secp224k1, setUILocale, sha256, sha256____, sha384, sha384____, sha512, sha512____, signJSONMessage, signMessage, stripPCDFControlCharacters, stripTransport, time2human, timeZoneOffsetMinutes, toArrayBuffer, toSessionVerificationResults, toUint8Array, transformEDL40Status, tryParseOCMFBonnTariffText, unquotePCDFText, validatePCDFFields, verifyDocumentSignatures, verifyEDL40Document, verifyJSONMessageSignatureResults, verifyJSONMessageSignatures, verifyJSONSignature, verifyJSONSignatureResult, verifyPCDFDocument };
|
|
14123
14138
|
//# sourceMappingURL=index.js.map
|
|
14124
14139
|
//# sourceMappingURL=index.js.map
|