@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.
Files changed (107) hide show
  1. package/NOTICE +56 -0
  2. package/PROPRIETARY-LICENSE.txt +157 -0
  3. package/README.md +105 -0
  4. package/TERMS-AND-CONDITIONS.md +311 -0
  5. package/advantech-read/advantech-read.html +775 -0
  6. package/advantech-read/advantech-read.js +449 -0
  7. package/advantech-write/advantech-write.html +413 -0
  8. package/advantech-write/advantech-write.js +338 -0
  9. package/bess-control/bess-control.html +569 -0
  10. package/bess-control/bess-control.js +541 -0
  11. package/bess-control/lib/allocation.js +149 -0
  12. package/bess-control/lib/batteries.js +86 -0
  13. package/bess-control/lib/helpers.js +157 -0
  14. package/bess-control/lib/messages.js +131 -0
  15. package/bess-control/lib/runtime.js +156 -0
  16. package/carlo-gavazzi/carlo-gavazzi.html +4327 -0
  17. package/carlo-gavazzi/carlo-gavazzi.js +3081 -0
  18. package/control-export/control-export.html +3644 -0
  19. package/control-export/control-export.js +2192 -0
  20. package/control-reactive/control-reactive.html +3136 -0
  21. package/control-reactive/control-reactive.js +2124 -0
  22. package/fronius-emulator/README.md +258 -0
  23. package/fronius-emulator/fronius-emulator.html +170 -0
  24. package/fronius-emulator/fronius-emulator.js +520 -0
  25. package/fronius-emulator/lib/binary-codec.js +65 -0
  26. package/fronius-emulator/lib/fronius-register-map.js +185 -0
  27. package/fronius-emulator/lib/modbus-parser.js +61 -0
  28. package/fronius-emulator/lib/modbus-tcp-server.js +224 -0
  29. package/fronius-emulator/lib/validation.js +206 -0
  30. package/fronius-emulator/lib/virtual-meter.js +132 -0
  31. package/fronius-read/fronius-read.html +3944 -0
  32. package/fronius-read/fronius-read.js +1466 -0
  33. package/fronius-read/lib/inverter-profiles.js +711 -0
  34. package/fronius-read/lib/sunspec-core.js +303 -0
  35. package/fronius-read/lib/sunspec-model-parsers.js +845 -0
  36. package/fronius-write/fronius-write.html +1789 -0
  37. package/fronius-write/fronius-write.js +2531 -0
  38. package/influxdb/influxdb.html +1077 -0
  39. package/influxdb/influxdb.js +1487 -0
  40. package/janitza/janitza.html +2562 -0
  41. package/janitza/janitza.js +1500 -0
  42. package/janitza/lib/janitza-profiles.js +371 -0
  43. package/lib/a3-test-server.js +199 -0
  44. package/lib/adam-6000-profiles.js +173 -0
  45. package/lib/licensing/constants.js +103 -0
  46. package/lib/licensing/device-id.js +251 -0
  47. package/lib/licensing/errors.js +21 -0
  48. package/lib/licensing/license-client.js +377 -0
  49. package/lib/licensing/license-state.js +50 -0
  50. package/lib/licensing/node-guard.js +150 -0
  51. package/lib/licensing/package-integrity.js +167 -0
  52. package/lib/licensing/package-integrity.json +513 -0
  53. package/lib/licensing/public-key.pem +3 -0
  54. package/lib/licensing/public-key.pem.example +2 -0
  55. package/lib/licensing/public-keys.js +18 -0
  56. package/lib/licensing/storage.js +63 -0
  57. package/lib/licensing/token-verifier.js +84 -0
  58. package/lib/numbers.js +26 -0
  59. package/license/atelier-license.html +88 -0
  60. package/license/atelier-license.js +170 -0
  61. package/modbus-tcp-discover/modbus-tcp-discover.html +190 -0
  62. package/modbus-tcp-discover/modbus-tcp-discover.js +706 -0
  63. package/multi-battery/multi-battery.html +649 -0
  64. package/multi-battery/multi-battery.js +668 -0
  65. package/multi-grid/multi-grid.html +745 -0
  66. package/multi-grid/multi-grid.js +1392 -0
  67. package/multi-inverter/lib/engine-core.js +237 -0
  68. package/multi-inverter/multi-inverter.html +2674 -0
  69. package/multi-inverter/multi-inverter.js +1393 -0
  70. package/package.json +109 -0
  71. package/phoenix-contact/lib/eem-ma370-advanced.js +175 -0
  72. package/phoenix-contact/lib/eem-ma370.js +138 -0
  73. package/phoenix-contact/lib/integrations.js +149 -0
  74. package/phoenix-contact/lib/phoenix-contact-profile.js +35030 -0
  75. package/phoenix-contact/phoenix-contact.html +840 -0
  76. package/phoenix-contact/phoenix-contact.js +679 -0
  77. package/pv-generator/pv-generator.html +284 -0
  78. package/pv-generator/pv-generator.js +387 -0
  79. package/pylontech-read/pylontech-read.html +763 -0
  80. package/pylontech-read/pylontech-read.js +518 -0
  81. package/pylontech-write/pylontech-write.html +405 -0
  82. package/pylontech-write/pylontech-write.js +546 -0
  83. package/scada-aggregator/lib/aggregate.js +72 -0
  84. package/scada-aggregator/lib/groups.js +39 -0
  85. package/scada-aggregator/scada-aggregator.html +108 -0
  86. package/scada-aggregator/scada-aggregator.js +117 -0
  87. package/scada-server/lib/aggregator-map.js +58 -0
  88. package/scada-server/lib/encoding.js +235 -0
  89. package/scada-server/lib/modbus-server.js +492 -0
  90. package/scada-server/lib/object-path.js +18 -0
  91. package/scada-server/lib/register-map.js +288 -0
  92. package/scada-server/scada-server.html +1419 -0
  93. package/scada-server/scada-server.js +704 -0
  94. package/scripts/check-syntax.js +66 -0
  95. package/scripts/package-integrity.js +46 -0
  96. package/scripts/package-release.js +116 -0
  97. package/scripts/run-tests.js +2178 -0
  98. package/scripts/tgz-integrity.js +74 -0
  99. package/sma-read/lib/sunspec-core.js +83 -0
  100. package/sma-read/lib/sunspec-model-parsers.js +853 -0
  101. package/sma-read/sma-read.html +659 -0
  102. package/sma-read/sma-read.js +458 -0
  103. package/sma-write/sma-write.html +105 -0
  104. package/sma-write/sma-write.js +270 -0
  105. package/victron-read/lib/mqtt-state.js +176 -0
  106. package/victron-read/victron-read.html +1074 -0
  107. 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
+ }
@@ -0,0 +1,3 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MCowBQYDK2VwAyEATofsYGtmdLZ2i04yOGs5OoMcPZMf/xqdk4zxbf7644c=
3
+ -----END PUBLIC KEY-----
@@ -0,0 +1,2 @@
1
+ # Replace this file with public-key.pem when the License Manager production
2
+ # Ed25519 public key is issued. Only the public key belongs in the npm package.