@atelieruldetehnologii/node-red-custome-solutions 0.62.22
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/NOTICE +56 -0
- package/PROPRIETARY-LICENSE.txt +157 -0
- package/README.md +105 -0
- package/TERMS-AND-CONDITIONS.md +311 -0
- package/advantech-read/advantech-read.html +775 -0
- package/advantech-read/advantech-read.js +449 -0
- package/advantech-write/advantech-write.html +413 -0
- package/advantech-write/advantech-write.js +338 -0
- package/bess-control/bess-control.html +569 -0
- package/bess-control/bess-control.js +541 -0
- package/bess-control/lib/allocation.js +149 -0
- package/bess-control/lib/batteries.js +86 -0
- package/bess-control/lib/helpers.js +157 -0
- package/bess-control/lib/messages.js +131 -0
- package/bess-control/lib/runtime.js +156 -0
- package/carlo-gavazzi/carlo-gavazzi.html +4327 -0
- package/carlo-gavazzi/carlo-gavazzi.js +3081 -0
- package/control-export/control-export.html +3644 -0
- package/control-export/control-export.js +2192 -0
- package/control-reactive/control-reactive.html +3136 -0
- package/control-reactive/control-reactive.js +2124 -0
- package/fronius-emulator/README.md +258 -0
- package/fronius-emulator/fronius-emulator.html +170 -0
- package/fronius-emulator/fronius-emulator.js +520 -0
- package/fronius-emulator/lib/binary-codec.js +65 -0
- package/fronius-emulator/lib/fronius-register-map.js +185 -0
- package/fronius-emulator/lib/modbus-parser.js +61 -0
- package/fronius-emulator/lib/modbus-tcp-server.js +224 -0
- package/fronius-emulator/lib/validation.js +206 -0
- package/fronius-emulator/lib/virtual-meter.js +132 -0
- package/fronius-read/fronius-read.html +3944 -0
- package/fronius-read/fronius-read.js +1466 -0
- package/fronius-read/lib/inverter-profiles.js +711 -0
- package/fronius-read/lib/sunspec-core.js +303 -0
- package/fronius-read/lib/sunspec-model-parsers.js +845 -0
- package/fronius-write/fronius-write.html +1789 -0
- package/fronius-write/fronius-write.js +2531 -0
- package/influxdb/influxdb.html +1077 -0
- package/influxdb/influxdb.js +1487 -0
- package/janitza/janitza.html +2562 -0
- package/janitza/janitza.js +1500 -0
- package/janitza/lib/janitza-profiles.js +371 -0
- package/lib/a3-test-server.js +199 -0
- package/lib/adam-6000-profiles.js +173 -0
- package/lib/licensing/constants.js +103 -0
- package/lib/licensing/device-id.js +251 -0
- package/lib/licensing/errors.js +21 -0
- package/lib/licensing/license-client.js +377 -0
- package/lib/licensing/license-state.js +50 -0
- package/lib/licensing/node-guard.js +150 -0
- package/lib/licensing/package-integrity.js +167 -0
- package/lib/licensing/package-integrity.json +513 -0
- package/lib/licensing/public-key.pem +3 -0
- package/lib/licensing/public-key.pem.example +2 -0
- package/lib/licensing/public-keys.js +18 -0
- package/lib/licensing/storage.js +63 -0
- package/lib/licensing/token-verifier.js +84 -0
- package/lib/numbers.js +26 -0
- package/license/atelier-license.html +88 -0
- package/license/atelier-license.js +170 -0
- package/modbus-tcp-discover/modbus-tcp-discover.html +190 -0
- package/modbus-tcp-discover/modbus-tcp-discover.js +706 -0
- package/multi-battery/multi-battery.html +649 -0
- package/multi-battery/multi-battery.js +668 -0
- package/multi-grid/multi-grid.html +745 -0
- package/multi-grid/multi-grid.js +1392 -0
- package/multi-inverter/lib/engine-core.js +237 -0
- package/multi-inverter/multi-inverter.html +2674 -0
- package/multi-inverter/multi-inverter.js +1393 -0
- package/package.json +109 -0
- package/phoenix-contact/lib/eem-ma370-advanced.js +175 -0
- package/phoenix-contact/lib/eem-ma370.js +138 -0
- package/phoenix-contact/lib/integrations.js +149 -0
- package/phoenix-contact/lib/phoenix-contact-profile.js +35030 -0
- package/phoenix-contact/phoenix-contact.html +840 -0
- package/phoenix-contact/phoenix-contact.js +679 -0
- package/pv-generator/pv-generator.html +284 -0
- package/pv-generator/pv-generator.js +387 -0
- package/pylontech-read/pylontech-read.html +763 -0
- package/pylontech-read/pylontech-read.js +518 -0
- package/pylontech-write/pylontech-write.html +405 -0
- package/pylontech-write/pylontech-write.js +546 -0
- package/scada-aggregator/lib/aggregate.js +72 -0
- package/scada-aggregator/lib/groups.js +39 -0
- package/scada-aggregator/scada-aggregator.html +108 -0
- package/scada-aggregator/scada-aggregator.js +117 -0
- package/scada-server/lib/aggregator-map.js +58 -0
- package/scada-server/lib/encoding.js +235 -0
- package/scada-server/lib/modbus-server.js +492 -0
- package/scada-server/lib/object-path.js +18 -0
- package/scada-server/lib/register-map.js +288 -0
- package/scada-server/scada-server.html +1419 -0
- package/scada-server/scada-server.js +704 -0
- package/scripts/check-syntax.js +66 -0
- package/scripts/package-integrity.js +46 -0
- package/scripts/package-release.js +116 -0
- package/scripts/run-tests.js +2178 -0
- package/scripts/tgz-integrity.js +74 -0
- package/sma-read/lib/sunspec-core.js +83 -0
- package/sma-read/lib/sunspec-model-parsers.js +853 -0
- package/sma-read/sma-read.html +659 -0
- package/sma-read/sma-read.js +458 -0
- package/sma-write/sma-write.html +105 -0
- package/sma-write/sma-write.js +270 -0
- package/victron-read/lib/mqtt-state.js +176 -0
- package/victron-read/victron-read.html +1074 -0
- package/victron-read/victron-read.js +1222 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const crypto = require("crypto");
|
|
4
|
+
const EventEmitter = require("events");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const { PUBLIC_KEYS } = require("./public-keys");
|
|
8
|
+
|
|
9
|
+
const MANIFEST_PATH = "lib/licensing/package-integrity.json";
|
|
10
|
+
const VERIFY_INTERVAL_MS = 60 * 1000;
|
|
11
|
+
const EXCLUDED_DIRECTORIES = new Set([".git", ".release-staging", "node_modules", "test"]);
|
|
12
|
+
const PINNED_PUBLIC_KEY_FINGERPRINTS = Object.freeze({
|
|
13
|
+
v1: "f05ee732208b3b2911d522727f4f9389134bfd7a37c521f303bb69c6959c29a3"
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
function canonicalJson(value) {
|
|
17
|
+
if (Array.isArray(value)) return "[" + value.map(canonicalJson).join(",") + "]";
|
|
18
|
+
if (value && typeof value === "object") {
|
|
19
|
+
return "{" + Object.keys(value).sort().map(function (key) {
|
|
20
|
+
return JSON.stringify(key) + ":" + canonicalJson(value[key]);
|
|
21
|
+
}).join(",") + "}";
|
|
22
|
+
}
|
|
23
|
+
return JSON.stringify(value);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function safeRelativePath(value) {
|
|
27
|
+
const normalized = String(value || "").replace(/\\/g, "/");
|
|
28
|
+
if (!normalized || normalized.startsWith("/") || normalized.includes("\0")) return null;
|
|
29
|
+
const parts = normalized.split("/");
|
|
30
|
+
if (parts.some(function (part) { return !part || part === "." || part === ".."; })) return null;
|
|
31
|
+
return normalized;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function protectedPath(relative) {
|
|
35
|
+
return relative === "package.json" || relative === "lib/licensing/public-key.pem" || /\.(?:js|html)$/.test(relative);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function walkProtected(directory, root, files) {
|
|
39
|
+
fs.readdirSync(directory, { withFileTypes: true }).sort(function (a, b) { return a.name.localeCompare(b.name); }).forEach(function (entry) {
|
|
40
|
+
if (entry.isDirectory() && EXCLUDED_DIRECTORIES.has(entry.name)) return;
|
|
41
|
+
const absolute = path.join(directory, entry.name);
|
|
42
|
+
if (entry.isSymbolicLink()) throw new Error("symbolic link found in protected package: " + path.relative(root, absolute).replace(/\\/g, "/"));
|
|
43
|
+
if (entry.isDirectory()) { walkProtected(absolute, root, files); return; }
|
|
44
|
+
if (!entry.isFile()) return;
|
|
45
|
+
const relative = path.relative(root, absolute).replace(/\\/g, "/");
|
|
46
|
+
if (relative !== MANIFEST_PATH && protectedPath(relative)) files.push(relative);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function listProtectedPaths(packageRoot) {
|
|
51
|
+
const root = path.resolve(packageRoot);
|
|
52
|
+
const files = [];
|
|
53
|
+
walkProtected(root, root, files);
|
|
54
|
+
return files.sort();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function manifestPayload(manifest) {
|
|
58
|
+
return {
|
|
59
|
+
algorithm: manifest.algorithm,
|
|
60
|
+
files: manifest.files,
|
|
61
|
+
keyId: manifest.keyId,
|
|
62
|
+
package: manifest.package,
|
|
63
|
+
schemaVersion: manifest.schemaVersion,
|
|
64
|
+
signatureAlgorithm: manifest.signatureAlgorithm
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function publicKeyFingerprint(publicKey) {
|
|
69
|
+
const keyObject = publicKey && publicKey.type === "public" ? publicKey : crypto.createPublicKey(publicKey);
|
|
70
|
+
const der = keyObject.export({ format: "der", type: "spki" });
|
|
71
|
+
return crypto.createHash("sha256").update(der).digest("hex");
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
class PackageIntegrity extends EventEmitter {
|
|
75
|
+
constructor(options) {
|
|
76
|
+
super();
|
|
77
|
+
const settings = options || {};
|
|
78
|
+
this.packageRoot = path.resolve(settings.packageRoot || path.join(__dirname, "..", ".."));
|
|
79
|
+
this.publicKeys = settings.publicKeys || PUBLIC_KEYS;
|
|
80
|
+
this.publicKeyFingerprints = settings.publicKeyFingerprints || PINNED_PUBLIC_KEY_FINGERPRINTS;
|
|
81
|
+
this.intervalMs = settings.intervalMs === undefined ? VERIFY_INTERVAL_MS : Math.max(0, Number(settings.intervalMs) || 0);
|
|
82
|
+
this.state = "UNKNOWN";
|
|
83
|
+
this.lastError = "";
|
|
84
|
+
this.lastVerifiedAt = null;
|
|
85
|
+
this.timer = null;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
setState(state, error) {
|
|
89
|
+
const previous = this.state;
|
|
90
|
+
this.state = state;
|
|
91
|
+
this.lastError = error ? String(error.message || error) : "";
|
|
92
|
+
this.lastVerifiedAt = new Date().toISOString();
|
|
93
|
+
if (previous !== state) this.emit("state-changed", this.getStatus());
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
verifyNow() {
|
|
97
|
+
try {
|
|
98
|
+
const manifestFile = path.join(this.packageRoot, MANIFEST_PATH.replace(/\//g, path.sep));
|
|
99
|
+
const manifest = JSON.parse(fs.readFileSync(manifestFile, "utf8"));
|
|
100
|
+
if (manifest.schemaVersion !== 1 || manifest.algorithm !== "sha256" || manifest.signatureAlgorithm !== "Ed25519") {
|
|
101
|
+
throw new Error("unsupported integrity manifest");
|
|
102
|
+
}
|
|
103
|
+
if (!manifest.package || typeof manifest.package.name !== "string" || typeof manifest.package.version !== "string") {
|
|
104
|
+
throw new Error("invalid package identity in integrity manifest");
|
|
105
|
+
}
|
|
106
|
+
const keyId = String(manifest.keyId || "");
|
|
107
|
+
const publicKey = this.publicKeys[keyId];
|
|
108
|
+
if (!publicKey) throw new Error("unknown integrity signing key: " + keyId);
|
|
109
|
+
if (!this.publicKeyFingerprints[keyId] || publicKeyFingerprint(publicKey) !== this.publicKeyFingerprints[keyId]) {
|
|
110
|
+
throw new Error("integrity signing key does not match the pinned vendor key");
|
|
111
|
+
}
|
|
112
|
+
const signature = Buffer.from(String(manifest.signature || ""), "base64url");
|
|
113
|
+
const signed = Buffer.from(canonicalJson(manifestPayload(manifest)), "utf8");
|
|
114
|
+
if (!signature.length || !crypto.verify(null, signed, publicKey, signature)) throw new Error("invalid integrity manifest signature");
|
|
115
|
+
if (!Array.isArray(manifest.files) || !manifest.files.length) throw new Error("integrity manifest has no protected files");
|
|
116
|
+
|
|
117
|
+
const seen = new Set();
|
|
118
|
+
for (const entry of manifest.files) {
|
|
119
|
+
const relative = safeRelativePath(entry && entry.path);
|
|
120
|
+
if (!relative || relative === MANIFEST_PATH || seen.has(relative)) throw new Error("invalid protected file path");
|
|
121
|
+
seen.add(relative);
|
|
122
|
+
if (!/^[a-f0-9]{64}$/.test(String(entry.sha256 || "")) || !Number.isInteger(entry.size) || entry.size < 0) {
|
|
123
|
+
throw new Error("invalid integrity record for " + relative);
|
|
124
|
+
}
|
|
125
|
+
const absolute = path.resolve(this.packageRoot, relative.replace(/\//g, path.sep));
|
|
126
|
+
if (!absolute.startsWith(this.packageRoot + path.sep)) throw new Error("protected file escapes package root");
|
|
127
|
+
const bytes = fs.readFileSync(absolute);
|
|
128
|
+
if (bytes.length !== entry.size) throw new Error("protected file size changed: " + relative);
|
|
129
|
+
const digest = crypto.createHash("sha256").update(bytes).digest("hex");
|
|
130
|
+
if (digest !== entry.sha256) throw new Error("protected file hash changed: " + relative);
|
|
131
|
+
}
|
|
132
|
+
for (const relative of listProtectedPaths(this.packageRoot)) {
|
|
133
|
+
if (!seen.has(relative)) throw new Error("unsigned protected file found: " + relative);
|
|
134
|
+
}
|
|
135
|
+
this.setState("VALID");
|
|
136
|
+
return true;
|
|
137
|
+
} catch (error) {
|
|
138
|
+
this.setState("TAMPERED", error);
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
start() {
|
|
144
|
+
if (this.state === "UNKNOWN") this.verifyNow();
|
|
145
|
+
if (!this.timer && this.intervalMs) {
|
|
146
|
+
this.timer = setInterval(() => this.verifyNow(), this.intervalMs);
|
|
147
|
+
if (typeof this.timer.unref === "function") this.timer.unref();
|
|
148
|
+
}
|
|
149
|
+
return this;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
close() {
|
|
153
|
+
if (this.timer) clearInterval(this.timer);
|
|
154
|
+
this.timer = null;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
isValid() { return this.state === "VALID"; }
|
|
158
|
+
getStatus() { return { state: this.state, error: this.lastError, lastVerifiedAt: this.lastVerifiedAt }; }
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
let shared;
|
|
162
|
+
function getPackageIntegrity() {
|
|
163
|
+
if (!shared) shared = new PackageIntegrity().start();
|
|
164
|
+
return shared;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
module.exports = { MANIFEST_PATH, PINNED_PUBLIC_KEY_FINGERPRINTS, PackageIntegrity, canonicalJson, getPackageIntegrity, listProtectedPaths, manifestPayload, protectedPath, publicKeyFingerprint, safeRelativePath };
|
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
{
|
|
2
|
+
"algorithm": "sha256",
|
|
3
|
+
"files": [
|
|
4
|
+
{
|
|
5
|
+
"path": "advantech-read/advantech-read.html",
|
|
6
|
+
"sha256": "543a57ad08a4631edc41b3acd20df3213c42199b1d418e3fed892685f0713bb3",
|
|
7
|
+
"size": 41066
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"path": "advantech-read/advantech-read.js",
|
|
11
|
+
"sha256": "8f72ec4f12d4d9cf4e0a319c6b6a989f2d16fef04291947ff2a5655df147366d",
|
|
12
|
+
"size": 18457
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"path": "advantech-write/advantech-write.html",
|
|
16
|
+
"sha256": "4b5d9c4bc2ce3c9fe19c3b6a0fb31aaf923b3d5a602752ab68a6a26de1b4d568",
|
|
17
|
+
"size": 20238
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"path": "advantech-write/advantech-write.js",
|
|
21
|
+
"sha256": "350f64574387a710df7f750c20d8f8a295192272edcef650b5b430ef7bb35200",
|
|
22
|
+
"size": 13094
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"path": "bess-control/bess-control.html",
|
|
26
|
+
"sha256": "ca5484702d4fdb906e2d276ea7e99ca487e2aed81e99fa0b5ab06c4d9896bd36",
|
|
27
|
+
"size": 25519
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"path": "bess-control/bess-control.js",
|
|
31
|
+
"sha256": "c8bbe2f88d9d7e9776576d3bd45d42188ae3e8b6ed48ed5222db9f02034fd9a3",
|
|
32
|
+
"size": 18178
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"path": "bess-control/lib/allocation.js",
|
|
36
|
+
"sha256": "dbd6b70ef49f9834ea9b4ed15fc620adb32f51a5c8ff737a5652f3ddfd26678a",
|
|
37
|
+
"size": 2307
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"path": "bess-control/lib/batteries.js",
|
|
41
|
+
"sha256": "71f82de71c3e95c8418fc32708ec3631656a9e8b7320b835206eae0ba3c6f2f2",
|
|
42
|
+
"size": 2273
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"path": "bess-control/lib/helpers.js",
|
|
46
|
+
"sha256": "f377f8547051d9c8804e35235f23a85ded4993eb17f34e17de72dce2d6cd1a36",
|
|
47
|
+
"size": 2361
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"path": "bess-control/lib/messages.js",
|
|
51
|
+
"sha256": "9a9193e5a6a8c4510196b0790a1c70b336b5f1c514ffacc09e885f359c7caf62",
|
|
52
|
+
"size": 2607
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"path": "bess-control/lib/runtime.js",
|
|
56
|
+
"sha256": "45f61518612cc1c247d928730adc06ad921078c07b8be9b4cb32fbf22baad90f",
|
|
57
|
+
"size": 3302
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"path": "carlo-gavazzi/carlo-gavazzi.html",
|
|
61
|
+
"sha256": "195376b0ceaf8641c85ba4d5c27638e61b5012f8a84052a04687c757b34e604e",
|
|
62
|
+
"size": 77537
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"path": "carlo-gavazzi/carlo-gavazzi.js",
|
|
66
|
+
"sha256": "e2b04582398eb50ac4dd5b32c863cb1dcfd90e587646dedb094804251e283c80",
|
|
67
|
+
"size": 47864
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"path": "control-export/control-export.html",
|
|
71
|
+
"sha256": "653d5d8ab1ef4fdcf6c5771bf05eecba6f68ef37394180a362d78a8c151e151d",
|
|
72
|
+
"size": 92511
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"path": "control-export/control-export.js",
|
|
76
|
+
"sha256": "e7e62881bb9c5240802d48c3f90ce83ee2c0a9a9a7dcd0e33f70208ffc88150f",
|
|
77
|
+
"size": 80858
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"path": "control-reactive/control-reactive.html",
|
|
81
|
+
"sha256": "9e6f915d7d5ed923e750723e87c8fec23bbd48508569fbd644ad862afd388afd",
|
|
82
|
+
"size": 72145
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"path": "control-reactive/control-reactive.js",
|
|
86
|
+
"sha256": "a74607077c1e71b2e5e6d519a58a9fc68674026914fa90bfe5ce0de261b7579c",
|
|
87
|
+
"size": 52454
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"path": "fronius-emulator/fronius-emulator.html",
|
|
91
|
+
"sha256": "b6ed5d130c57925292d4fcdc642d6c777c7ec634c412cbbc8c92e453ea9f6b7d",
|
|
92
|
+
"size": 13554
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"path": "fronius-emulator/fronius-emulator.js",
|
|
96
|
+
"sha256": "5deb04e07b0654e000417f16573ec79a67981ba10f28a3899f28b274c21cb0bb",
|
|
97
|
+
"size": 24113
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"path": "fronius-emulator/lib/binary-codec.js",
|
|
101
|
+
"sha256": "2a41721175e07ca79b70490c85a05be457614cd9c76499762e4cfe7cc39ad117",
|
|
102
|
+
"size": 2410
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"path": "fronius-emulator/lib/fronius-register-map.js",
|
|
106
|
+
"sha256": "d18cef3eb55a76b0b65145e4e076c11249adc7e63313e9116b11855ff21da91f",
|
|
107
|
+
"size": 8091
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"path": "fronius-emulator/lib/modbus-parser.js",
|
|
111
|
+
"sha256": "8ea7477909010f2dc119222b11903537375ddbbc1932035f984f1ec2785adb78",
|
|
112
|
+
"size": 2262
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"path": "fronius-emulator/lib/modbus-tcp-server.js",
|
|
116
|
+
"sha256": "5506b3088757ce2e5fa7ddc69c8fc804900d7b69b7b83ab5ce9e8f989bf0d18c",
|
|
117
|
+
"size": 10707
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"path": "fronius-emulator/lib/validation.js",
|
|
121
|
+
"sha256": "35e5f612b98fe80b4a044c9ddf0f841ca72224948f1cd3c67747f1f099837d26",
|
|
122
|
+
"size": 10251
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"path": "fronius-emulator/lib/virtual-meter.js",
|
|
126
|
+
"sha256": "54f96fe232afe259ed2353fac014aec27e881976ecd814e8832b91486a40b678",
|
|
127
|
+
"size": 5603
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"path": "fronius-read/fronius-read.html",
|
|
131
|
+
"sha256": "b93e0e127a0b2d187b60fbb988e6acf2c4786907114b202b491b8199b7cb2340",
|
|
132
|
+
"size": 112153
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"path": "fronius-read/fronius-read.js",
|
|
136
|
+
"sha256": "872be940d719b96f5c61e30d5f88c8f62ef8cacea4493a9f8849c2b97906e02e",
|
|
137
|
+
"size": 55690
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"path": "fronius-read/lib/inverter-profiles.js",
|
|
141
|
+
"sha256": "622cfcf174b5655ce2d13784f849a27243a109f0fb236c6b2a41fbbedfc2d588",
|
|
142
|
+
"size": 11851
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"path": "fronius-read/lib/sunspec-core.js",
|
|
146
|
+
"sha256": "fb557de0f8cec20aaa8291fff011c20bed3cf12af46b2686d599d6834f97eec8",
|
|
147
|
+
"size": 4752
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"path": "fronius-read/lib/sunspec-model-parsers.js",
|
|
151
|
+
"sha256": "1aa897e7d1740ecb224c1a481bb653f3d026fdb58824937731c04d11cbc2f4de",
|
|
152
|
+
"size": 15576
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"path": "fronius-write/fronius-write.html",
|
|
156
|
+
"sha256": "f96263322628411ff2fb0389f7ce5c71c5e9492ba0c37a3adb7eb554f775260c",
|
|
157
|
+
"size": 43080
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"path": "fronius-write/fronius-write.js",
|
|
161
|
+
"sha256": "13ce9a2915ed2fbb477946ed83aed0b9b66bbd9875676fdfc9bd85dc6c0e4317",
|
|
162
|
+
"size": 51213
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"path": "influxdb/influxdb.html",
|
|
166
|
+
"sha256": "f0e6cf4f71981183e5ddb64b106ae781f64edc29e7e0964c18a866e9e1f67b9b",
|
|
167
|
+
"size": 33031
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"path": "influxdb/influxdb.js",
|
|
171
|
+
"sha256": "abc5d1f546cfd8f338f9e338521c324b27927170252444f214e879a7c811de0c",
|
|
172
|
+
"size": 35566
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"path": "janitza/janitza.html",
|
|
176
|
+
"sha256": "32d44a0206e2bc04b9dafc0c1ab03c661fe1140eca2efabb91e900c5d18c1dff",
|
|
177
|
+
"size": 65523
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"path": "janitza/janitza.js",
|
|
181
|
+
"sha256": "62dea92b7216f157a8aeceaba4cba15aa520acd0bb729a2f1edfb5ba10bdc4fb",
|
|
182
|
+
"size": 35074
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"path": "janitza/lib/janitza-profiles.js",
|
|
186
|
+
"sha256": "a76dafa01ed1b68e1348bf31a7a0eb686d95a2eb0b8b557f6e6b0da023b9032a",
|
|
187
|
+
"size": 10303
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"path": "lib/a3-test-server.js",
|
|
191
|
+
"sha256": "2ed51c99baeb2328712d72d807cafc3564deed63f6988162962f700b02ab3c44",
|
|
192
|
+
"size": 6109
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"path": "lib/adam-6000-profiles.js",
|
|
196
|
+
"sha256": "35a0e111a5ba2bce7d37d7dc57017d69d45f6b0c2bae375a3943a6d2c9210d0e",
|
|
197
|
+
"size": 5646
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"path": "lib/licensing/constants.js",
|
|
201
|
+
"sha256": "f7752d17200dacc6c6881a1eba2e4df28c09add374dcb668077fd65c2217e7fa",
|
|
202
|
+
"size": 4547
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"path": "lib/licensing/device-id.js",
|
|
206
|
+
"sha256": "7487544a05efac34c6f835ef4ceaa1f717a81b0297a86feaafb3c1ede5dca3e7",
|
|
207
|
+
"size": 11475
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"path": "lib/licensing/errors.js",
|
|
211
|
+
"sha256": "a6bf5abe03a856b56891e8073e031e86ae8fafae2bb0b740609a3eaa876c8a25",
|
|
212
|
+
"size": 563
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"path": "lib/licensing/license-client.js",
|
|
216
|
+
"sha256": "c035077bbfec6e1a509721f459952fba51b80d67b82b6c1442bcd2a010a1ba82",
|
|
217
|
+
"size": 18281
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
"path": "lib/licensing/license-state.js",
|
|
221
|
+
"sha256": "43d464111568eca3a2a20a6d1f3246fe09d3446162549bb68878008d20a08adb",
|
|
222
|
+
"size": 2235
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"path": "lib/licensing/node-guard.js",
|
|
226
|
+
"sha256": "d002533e9c701aea8f9e29c8654b78e87a8d763742db3a4cf13c7526d9f11448",
|
|
227
|
+
"size": 6017
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"path": "lib/licensing/package-integrity.js",
|
|
231
|
+
"sha256": "11226bd91b12fe93d392e0a8739ef816fab5cb1fefdfeb878fd661d314f09d5b",
|
|
232
|
+
"size": 7901
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"path": "lib/licensing/public-key.pem",
|
|
236
|
+
"sha256": "85b3a12e29cc988190056a27324b41d4ce7cbed099a0a3df8136c37c48d7a773",
|
|
237
|
+
"size": 113
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"path": "lib/licensing/public-keys.js",
|
|
241
|
+
"sha256": "ff74f60b01c4c6653914d522dfa8af104f57f326419a7b5f5092f007afb42109",
|
|
242
|
+
"size": 518
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"path": "lib/licensing/storage.js",
|
|
246
|
+
"sha256": "ba71d9a7ddd89db5fa7ac855977bee20038dbb2441cd700d3b225fc90b59bed8",
|
|
247
|
+
"size": 2746
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"path": "lib/licensing/token-verifier.js",
|
|
251
|
+
"sha256": "20226d2217b53d06950ce8b47ca828d64cbc4a36013acc7996066444fd0e2cd8",
|
|
252
|
+
"size": 3873
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
"path": "lib/numbers.js",
|
|
256
|
+
"sha256": "db0a0cb7a2e58bbec7e27888d17cb7859f43c358d361171e99f3a627247964db",
|
|
257
|
+
"size": 626
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"path": "license/atelier-license.html",
|
|
261
|
+
"sha256": "5477cdde3acc6cbad756df9d4a5208ffbf59f8630c9f7c66b1f3378b3577745d",
|
|
262
|
+
"size": 6502
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"path": "license/atelier-license.js",
|
|
266
|
+
"sha256": "4fdd59094b66358d5c2620bd5d854b85cc166f6c04fa3a17195d61078b914725",
|
|
267
|
+
"size": 9661
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"path": "modbus-tcp-discover/modbus-tcp-discover.html",
|
|
271
|
+
"sha256": "ebf7d3f41a55df9c7567d52a93350ae0435746555d0569960ec36de95bccf8c6",
|
|
272
|
+
"size": 19446
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"path": "modbus-tcp-discover/modbus-tcp-discover.js",
|
|
276
|
+
"sha256": "b109dc3dffb56e3cbc692e6ec03a6b40d4dbd19f015b94e39c7abe9bcbad0f40",
|
|
277
|
+
"size": 39214
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
"path": "multi-battery/multi-battery.html",
|
|
281
|
+
"sha256": "91b95f8796865470b44e852d28236fce4e6bfdaec5338c07b6da6272f491ac3d",
|
|
282
|
+
"size": 26750
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"path": "multi-battery/multi-battery.js",
|
|
286
|
+
"sha256": "10e4fe50d524c0bcb4e96fa501ae98362239f97cae1f80d8cd7c701c80019132",
|
|
287
|
+
"size": 23815
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
"path": "multi-grid/multi-grid.html",
|
|
291
|
+
"sha256": "5a8354316b29f717423da77165f600a7a85aa1c71f4d34cc87f9355245b1991f",
|
|
292
|
+
"size": 35937
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
"path": "multi-grid/multi-grid.js",
|
|
296
|
+
"sha256": "44ebf6ec2743c6703f3919871519ff1ac7e240029b005e5f19218decac319c0b",
|
|
297
|
+
"size": 50362
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"path": "multi-inverter/lib/engine-core.js",
|
|
301
|
+
"sha256": "812e30acc126b330c4f514c4b3ae21b035cfbf080eafa1fb4515a4ecb4d2db4e",
|
|
302
|
+
"size": 6530
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"path": "multi-inverter/multi-inverter.html",
|
|
306
|
+
"sha256": "a14e6469eec6c15ffd6f6d141f204eec954376664f2cf2827f5012a9f974b340",
|
|
307
|
+
"size": 64089
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"path": "multi-inverter/multi-inverter.js",
|
|
311
|
+
"sha256": "daa060b74ed9513e92382dd709274b223d465f9b4c224e1cfa1ca0fd4dccec69",
|
|
312
|
+
"size": 58086
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"path": "package.json",
|
|
316
|
+
"sha256": "58d6636bc0b91d112f86dff65609156dcb748dc6bf9b671c33bc16094735c3d6",
|
|
317
|
+
"size": 3657
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
"path": "phoenix-contact/lib/eem-ma370-advanced.js",
|
|
321
|
+
"sha256": "ba5c7de3b5380d43e81dcaec876348ae0e6d5824011f063fe16b42c2ac1df306",
|
|
322
|
+
"size": 8926
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"path": "phoenix-contact/lib/eem-ma370.js",
|
|
326
|
+
"sha256": "a3d7896473026b64b7ce0b3e1c5003797567bc4a60c9db11971befbc98dba659",
|
|
327
|
+
"size": 4754
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"path": "phoenix-contact/lib/integrations.js",
|
|
331
|
+
"sha256": "6275dc0f3c58b831bad9b6a493a6d5a1333e508fafbd70977c863df66e10fecb",
|
|
332
|
+
"size": 5393
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"path": "phoenix-contact/lib/phoenix-contact-profile.js",
|
|
336
|
+
"sha256": "1725971290308497b7a5f2892ea0970c5db032b48fd1d0d80f7b82df9d98d9b1",
|
|
337
|
+
"size": 1136495
|
|
338
|
+
},
|
|
339
|
+
{
|
|
340
|
+
"path": "phoenix-contact/phoenix-contact.html",
|
|
341
|
+
"sha256": "356582e3a626e4f208e772999f1f74e0916d8c5da808bdf3935d89bfbc39136e",
|
|
342
|
+
"size": 318937
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"path": "phoenix-contact/phoenix-contact.js",
|
|
346
|
+
"sha256": "005c3553160d7f2d08c4313cb19929befc809a7b2969d311f8385d55675b2f06",
|
|
347
|
+
"size": 27130
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"path": "pv-generator/pv-generator.html",
|
|
351
|
+
"sha256": "31d0d1e977856bf7d7cfe575188a639abf69e05676f1ae9dba5c99464387163d",
|
|
352
|
+
"size": 11341
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"path": "pv-generator/pv-generator.js",
|
|
356
|
+
"sha256": "3fd5b246cc90b5e471c7e5693dff1038b20146475e9349048e7b49edc2de53fd",
|
|
357
|
+
"size": 13163
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
"path": "pylontech-read/pylontech-read.html",
|
|
361
|
+
"sha256": "803f58439625ccff38c9899dfa8c23c592afc38a956bfaaac7bfb70dad05c39e",
|
|
362
|
+
"size": 29639
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"path": "pylontech-read/pylontech-read.js",
|
|
366
|
+
"sha256": "0e429e6283db6d44b0322e2464e8761949e4ae83a895015bc658da40b5a82a0e",
|
|
367
|
+
"size": 20870
|
|
368
|
+
},
|
|
369
|
+
{
|
|
370
|
+
"path": "pylontech-write/pylontech-write.html",
|
|
371
|
+
"sha256": "63ec3ed5a3eb012d3288b49b2becc83f2cf2e93a2c2b9ba4c6efbb3a0454a91e",
|
|
372
|
+
"size": 10990
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"path": "pylontech-write/pylontech-write.js",
|
|
376
|
+
"sha256": "83b4f2b8db967b99406991fabb0e2410a3730d54aa255c627a9ea52460870a88",
|
|
377
|
+
"size": 11294
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
"path": "scada-aggregator/lib/aggregate.js",
|
|
381
|
+
"sha256": "96c905cab825a1d6707dede5e58f66099cff0e8450b3667b10eb1ca076c19d7e",
|
|
382
|
+
"size": 3978
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"path": "scada-aggregator/lib/groups.js",
|
|
386
|
+
"sha256": "cc2cf5096778104034183858653fe0302effcfbc950f5d5220845275143bf144",
|
|
387
|
+
"size": 1321
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"path": "scada-aggregator/scada-aggregator.html",
|
|
391
|
+
"sha256": "c82b4c52f74aab4762851c86274021de36f9daaf52ad950d0142b316c2c7d7c4",
|
|
392
|
+
"size": 10028
|
|
393
|
+
},
|
|
394
|
+
{
|
|
395
|
+
"path": "scada-aggregator/scada-aggregator.js",
|
|
396
|
+
"sha256": "28a585f542ee8ae47f04a0dd36978e43d2715557ce04414905de38ab40d266e4",
|
|
397
|
+
"size": 7381
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
"path": "scada-server/lib/aggregator-map.js",
|
|
401
|
+
"sha256": "43a50fe2a3c35924ab13f6d6e378a69daf6c0e76a61269be6a87f2e7122cd192",
|
|
402
|
+
"size": 4447
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"path": "scada-server/lib/encoding.js",
|
|
406
|
+
"sha256": "9d237644cdde4914fea04a8c2b5fcca3a17884f711ca96722dce4642e34e00b8",
|
|
407
|
+
"size": 4156
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"path": "scada-server/lib/modbus-server.js",
|
|
411
|
+
"sha256": "33b2f3f19b19a0b551c1352b1914ebda44f7ea89cc008cda51df59e517d9131b",
|
|
412
|
+
"size": 16436
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
"path": "scada-server/lib/object-path.js",
|
|
416
|
+
"sha256": "abb7bdc86a645bc8afc05b98e59119d3be95f84590cc6dd582400d3af9763bef",
|
|
417
|
+
"size": 284
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
"path": "scada-server/lib/register-map.js",
|
|
421
|
+
"sha256": "7c0e02aca619d4367428ed9e2b84caf5abd63969b31fc0e2bf844f4308ea56f8",
|
|
422
|
+
"size": 6171
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
"path": "scada-server/scada-server.html",
|
|
426
|
+
"sha256": "33ab01ddfe386e81179660c69cfc3ad564e468d3ad193542e27bb1cecdfe32f9",
|
|
427
|
+
"size": 65389
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
"path": "scada-server/scada-server.js",
|
|
431
|
+
"sha256": "25175b6d187e569e2a323f61a0f996a3303cd273d8c8682be38305206956d93d",
|
|
432
|
+
"size": 31756
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"path": "scripts/check-syntax.js",
|
|
436
|
+
"sha256": "d01f9a664994c410ddfce79adbca103cda68e5c029f2a3d1bb92a64f470e22ec",
|
|
437
|
+
"size": 1799
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
"path": "scripts/package-integrity.js",
|
|
441
|
+
"sha256": "8ebdb3d7774badb419c1e5925f23ce68a84c53c13bc88811c658bb6042d986a0",
|
|
442
|
+
"size": 2498
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"path": "scripts/package-release.js",
|
|
446
|
+
"sha256": "4aba3f423fd8ebfc51759a629463229779e510cae3a47978380173812d5b964e",
|
|
447
|
+
"size": 6056
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
"path": "scripts/run-tests.js",
|
|
451
|
+
"sha256": "c7df58290575aa435a94206a1806e4c6557d86990bca87297c66eb1b20cf5b2e",
|
|
452
|
+
"size": 89934
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
"path": "scripts/tgz-integrity.js",
|
|
456
|
+
"sha256": "6a74578ca51d3dfbca71e463f739894a16ed102c8eab588aa2937e7e8e5d296d",
|
|
457
|
+
"size": 5194
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"path": "sma-read/lib/sunspec-core.js",
|
|
461
|
+
"sha256": "4aa61854d6f7d36f3ebafb75ee85d6aca79c805acb6874d99a8b6502fee9aab8",
|
|
462
|
+
"size": 2902
|
|
463
|
+
},
|
|
464
|
+
{
|
|
465
|
+
"path": "sma-read/lib/sunspec-model-parsers.js",
|
|
466
|
+
"sha256": "f29411199054f2066fabaecfde1dd0a33fdac326cf276d9cb0b87dd329a0ffe2",
|
|
467
|
+
"size": 15584
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
"path": "sma-read/sma-read.html",
|
|
471
|
+
"sha256": "f7243ea2d67ad5fdb91cccbc949666aa3d393dabd0c80581f201d92a98b8ee8a",
|
|
472
|
+
"size": 43844
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"path": "sma-read/sma-read.js",
|
|
476
|
+
"sha256": "f95ee1260edf80121b48dce9d257bc5aaa9a5be9c0429a58d02d27d408fae48a",
|
|
477
|
+
"size": 22616
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"path": "sma-write/sma-write.html",
|
|
481
|
+
"sha256": "8ca473a5c6cad9ec9e32ea8a4fbf58528a048e418499849842303d1cfedafcf4",
|
|
482
|
+
"size": 7839
|
|
483
|
+
},
|
|
484
|
+
{
|
|
485
|
+
"path": "sma-write/sma-write.js",
|
|
486
|
+
"sha256": "a56035ea7e9b7cb5582ae7d61fbf785f37566b141deefd9d3c5b35aca1c11256",
|
|
487
|
+
"size": 12817
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
"path": "victron-read/lib/mqtt-state.js",
|
|
491
|
+
"sha256": "54abefd7b678b750b8e901baf37a1d7ef34ebf127a03cb295208a4742f1d5852",
|
|
492
|
+
"size": 6240
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
"path": "victron-read/victron-read.html",
|
|
496
|
+
"sha256": "6fd3655d3f4bbe08354dfd229598dfe2be8c8a7e37503011f3ae00cd0bfbf1ee",
|
|
497
|
+
"size": 52004
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
"path": "victron-read/victron-read.js",
|
|
501
|
+
"sha256": "10df7d62c3a6fa39975c5911c634e548368876c74c960dda15ca7fa56bf71623",
|
|
502
|
+
"size": 43042
|
|
503
|
+
}
|
|
504
|
+
],
|
|
505
|
+
"keyId": "v1",
|
|
506
|
+
"package": {
|
|
507
|
+
"name": "@atelieruldetehnologii/node-red-custome-solutions",
|
|
508
|
+
"version": "0.62.22"
|
|
509
|
+
},
|
|
510
|
+
"schemaVersion": 1,
|
|
511
|
+
"signatureAlgorithm": "Ed25519",
|
|
512
|
+
"signature": "q7JNydrOI_3md8NLqxyYaTVP_KxzAQgMjEgDHFYjTtm4ZHLeB9lDkcEP51tJUOx5Whn4zvS4Orn5zmqJCbvNCA"
|
|
513
|
+
}
|