iobroker.eos-admin 7.10.2 → 7.10.4
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/INSTALL_TEST_V7.10.4.md +9 -0
- package/MERGE_UPDATE_README_V7.10.4.md +3 -0
- package/NEXOWATT_EOS_BUILD_INFO.json +16 -15
- package/NEXOWATT_EOS_PREBUILT_MANIFEST.json +17 -12
- package/PUBLISH_STABLE_V7.10.4.md +10 -0
- package/README.md +4 -4
- package/README_STABILITY_V7.10.4.md +12 -0
- package/RELEASE_ACCEPTANCE_V7.10.4.md +3 -0
- package/RELEASE_NOTES_V7.10.4.md +11 -0
- package/adminWww/css/eos-auto-update.css +4 -3
- package/adminWww/index.html +3 -2
- package/adminWww/js/eos-auto-update.js +127 -33
- package/adminWww/nexowatt-role-security.js +336 -0
- package/build/lib/eosRoleSecurity.js +310 -0
- package/build/main.js +5 -0
- package/io-package.json +10 -5
- package/package.json +17 -12
- package/src-admin/README.md +69 -0
- package/src-admin/nexowatt-role-security.js +336 -0
- package/tools/nexowatt-auto-update-placement-selftest.cjs +46 -0
- package/tools/nexowatt-merge-update-selftest.cjs +1 -1
- package/tools/nexowatt-role-security-selftest.cjs +43 -0
- package/tools/{nexowatt-stable-v7102-selftest.cjs → nexowatt-stable-v7103-selftest.cjs} +21 -11
- package/tools/nexowatt-validate-package.cjs +18 -9
- package/INSTALL_TEST_V7.10.2.md +0 -22
- package/MERGE_UPDATE_README_V7.10.2.md +0 -11
- package/PUBLISH_STABLE_V7.10.2.md +0 -21
- package/README_STABILITY_V7.10.2.md +0 -20
- package/RELEASE_ACCEPTANCE_V7.10.2.md +0 -13
- package/RELEASE_NOTES_V7.10.2.md +0 -11
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Installationstest 7.10.4
|
|
2
|
+
|
|
3
|
+
1. Version 7.10.4 in einem neuen Arbeitsordner veröffentlichen bzw. installieren.
|
|
4
|
+
2. EOS Admin mindestens 60 Sekunden ohne Start-/Stop-Schleife beobachten.
|
|
5
|
+
3. Als Administrator App-Center, Lizenz, Simulation, Benutzer/Rechte, Expertenmodus, ioBroker Admin und XTerm prüfen.
|
|
6
|
+
4. Als Installateur müssen diese Bereiche vollständig fehlen bzw. bei direktem Aufruf gesperrt sein.
|
|
7
|
+
5. Als Endkunde müssen Datenpunkte sichtbar, aber nicht beschreibbar sein; Benutzer/Rechte und Passwortverwaltung dürfen nicht erreichbar sein.
|
|
8
|
+
6. Backup-Instanz deaktivieren: der Navigationspunkt Sicherung muss verschwinden. Backup-Instanz aktivieren: der Punkt muss wieder erscheinen.
|
|
9
|
+
7. Systemeinstellungen öffnen: die Karte Automatische Adapter-Updates darf nur dort sichtbar sein.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# Merge-/Update-Hinweis 7.10.4
|
|
2
|
+
|
|
3
|
+
Den bisherigen Arbeitsordner vollständig ersetzen oder die Repository-ZIP in einen leeren Ordner entpacken. Nicht über eine ältere Version kopieren, weil veraltete Browser-Bundles, Rollen-Skripte oder Paket-Lifecycle-Einträge sonst bestehen bleiben können. Danach zuerst `npm publish --dry-run` ausführen.
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "7.10.
|
|
2
|
+
"version": "7.10.4",
|
|
3
3
|
"channel": "stable-latest",
|
|
4
|
-
"baseFrontend": "validated 7.10.
|
|
4
|
+
"baseFrontend": "validated 7.10.2 stable runtime with automatic adapter updates relocated into System Settings",
|
|
5
5
|
"runtimeEntry": "v84",
|
|
6
|
-
"releaseType": "stable-
|
|
7
|
-
"release": "stable-
|
|
8
|
-
"label": "v7-10-
|
|
6
|
+
"releaseType": "stable-system-settings-auto-update-placement",
|
|
7
|
+
"release": "stable-system-settings-auto-update-placement",
|
|
8
|
+
"label": "v7-10-4",
|
|
9
9
|
"notes": [
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
10
|
+
"Retains the validated 7.10.2 restart-loop and package-completeness fixes.",
|
|
11
|
+
"The automatic NexoWatt adapter update card is no longer mounted in the normal overview or module pages.",
|
|
12
|
+
"The update control is mounted only inside the administrator System Settings dialog opened with the wrench button.",
|
|
13
|
+
"A dedicated placement selftest prevents the card from returning to global page content."
|
|
14
14
|
],
|
|
15
15
|
"changes": [
|
|
16
|
-
"
|
|
17
|
-
"Added
|
|
18
|
-
"
|
|
19
|
-
"Added
|
|
20
|
-
"Guaranteed build/lib/eosRequestSecurity.js is compiled and packaged before release."
|
|
16
|
+
"Moved Automatic Adapter Updates from the normal page content into System Settings.",
|
|
17
|
+
"Added a dedicated auto-update cache key so browsers cannot keep the old global placement script.",
|
|
18
|
+
"Kept backend update policy, state storage and delayed startup reconciliation unchanged.",
|
|
19
|
+
"Added source/build drift and placement guards for the auto-update UI."
|
|
21
20
|
],
|
|
22
21
|
"brandingCacheVersion": 7101,
|
|
23
22
|
"shellCacheVersion": 7101,
|
|
24
23
|
"nativeShellVersion": 7101,
|
|
25
24
|
"shellCacheTag": "7101",
|
|
26
|
-
"repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-
|
|
25
|
+
"repositoryEntry": "nexowatt-eos-admin-repository-entry-v7-10-4.json",
|
|
26
|
+
"autoUpdateCacheVersion": 7103,
|
|
27
|
+
"autoUpdateCacheTag": "7103"
|
|
27
28
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"format": 1,
|
|
3
3
|
"package": "iobroker.eos-admin",
|
|
4
|
-
"version": "7.10.
|
|
4
|
+
"version": "7.10.4",
|
|
5
5
|
"algorithm": "sha256",
|
|
6
|
-
"fileCount":
|
|
6
|
+
"fileCount": 1391,
|
|
7
7
|
"trackedRoots": [
|
|
8
8
|
"src",
|
|
9
9
|
"build",
|
|
@@ -519,7 +519,7 @@
|
|
|
519
519
|
"adminWww/css/admin.css.map": "63cffcac00f528b795caf1374125620f465316273524aa7ed339d2ae1c00e840",
|
|
520
520
|
"adminWww/css/app.css": "a127b375efd87a6de99722b03b5532e1877578ba66295e1989c055a64497c668",
|
|
521
521
|
"adminWww/css/app.css.map": "5dc84ea65945c673c3d75d2ccbd258221eb09c79f61fff7b1326b7c37aea90c4",
|
|
522
|
-
"adminWww/css/eos-auto-update.css": "
|
|
522
|
+
"adminWww/css/eos-auto-update.css": "05c4602b50e45f4c181b2868cc1977f8538d5879a6b0b02c0410491cc2c9cbcd",
|
|
523
523
|
"adminWww/css/eos-ems-overview.css": "fe9278e76035b6b2b5cdde93668a0a720ca1276bd7ab54a077c8af6d0eede255",
|
|
524
524
|
"adminWww/css/images/layers-2x.png": "066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf",
|
|
525
525
|
"adminWww/css/images/layers.png": "1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6",
|
|
@@ -552,11 +552,11 @@
|
|
|
552
552
|
"adminWww/img/le.png": "ef5ebb7112926f646e781a326b639f56888fafe0891b9b000178091b4f8ed9dd",
|
|
553
553
|
"adminWww/img/logo.svg": "1167118074ff84d8cef82ad80c38609719dacfde9417126e46966c1ec986534b",
|
|
554
554
|
"adminWww/img/no-image.svg": "25fc382f4ad3a36f8a637cd966b9107368e1f11906d706102ad5f37db6f57f34",
|
|
555
|
-
"adminWww/index.html": "
|
|
555
|
+
"adminWww/index.html": "9dcbe4023a66ececd427066d57811c8610d2eb95e4d0a64aab4800a832563f7e",
|
|
556
556
|
"adminWww/js/adapter-settings.js": "fb2e538a3385899f7fd47275ec588051c735d8f778a44b89f40f5eb820a31dbc",
|
|
557
557
|
"adminWww/js/eos-account-management.js": "dbba398605b2391ac1a7ec97cf7eb84da7f929ea16bfb6761750cd700a687fbe",
|
|
558
558
|
"adminWww/js/eos-assistant.js": "be43f49fd5310d2962365035556c37109d4868856e874e1f964c4b2f05bb6beb",
|
|
559
|
-
"adminWww/js/eos-auto-update.js": "
|
|
559
|
+
"adminWww/js/eos-auto-update.js": "60b5d0bfd6600546868b815a3af35bcc9ce8853ce40b519cb6cbc53e07788021",
|
|
560
560
|
"adminWww/js/eos-basic-settings.js": "deb942d2a0d7385743b27ed1562ce19fead693582e9baa2c9eaccaa3aa401728",
|
|
561
561
|
"adminWww/js/eos-branding-sanitizer.js": "de6f30e7758d552f52a0c84f02861e24f290ef872957f7b58d80f873d66c934c",
|
|
562
562
|
"adminWww/js/eos-ems-overview.js": "ed5d81492b757628ddb2a5d4be4e3e7e7665c3a3a943f5ce15358140cd18630a",
|
|
@@ -740,6 +740,7 @@
|
|
|
740
740
|
"adminWww/logo512.png": "a7e6375e6f4e1f5e09f167af81eca69626e4baf4762a07e41b838bc4786f0519",
|
|
741
741
|
"adminWww/manifest.json": "bfa868e65ffed57405e0091cdb3250a6b9265ba3b0831ca3f14e77acb9f255d7",
|
|
742
742
|
"adminWww/mf-manifest.json": "737e829bad795bdc781cd820ea513d3e09345e23762e4054e1ece0c003160d3c",
|
|
743
|
+
"adminWww/nexowatt-role-security.js": "920868a8dd283b485f90c0946a4ded9cb9fbd1a4f95c5429fea9b1436feb74e1",
|
|
743
744
|
"adminWww/remoteEntry-v84.js": "3836e43036d446c7c549ca1e5b1211a452b50a2206bc197746840cc95e71f95d",
|
|
744
745
|
"adminWww/remoteEntry.js": "9e3c715c9adb33c77f0eeefbd80510f97ebe1b18d8f11d43a2332ce89cd35e20",
|
|
745
746
|
"adminWww/robots.txt": "90d24bc3bf698ac1e173739502298ccca72adf1f564fab05f484b8c48d1cadd2",
|
|
@@ -785,6 +786,7 @@
|
|
|
785
786
|
"build/lib/eosAutoUpdate.js.map": "d5ad4227eb6433921938c97b64ca781cde4c42a77682c1046dea9fda4d77b266",
|
|
786
787
|
"build/lib/eosRequestSecurity.js": "c9193759d0ca2f5221d31688b4ab3b0ec21aa2f4862443c0171e608adb9858a0",
|
|
787
788
|
"build/lib/eosRequestSecurity.js.map": "3e6512682f0d7a1169fcab9d3d167f95e02e38774f7e47688ce0320e1509c4d5",
|
|
789
|
+
"build/lib/eosRoleSecurity.js": "6e5e223c40b43d3eee003f4ab150099babd04f01b9629ccdf9d4d121a7e4f4f7",
|
|
788
790
|
"build/lib/objectFixes.js": "ce095d293991b45bd4bfdb4a256e33a2ba74556868f07040e04b666b0757016d",
|
|
789
791
|
"build/lib/objectFixes.js.map": "27f9d305b48ebc92e3ccd1b7a944bccec366a7a38c63e003bf164f03fe898790",
|
|
790
792
|
"build/lib/testPassword.js": "9d2d4fcbd892db0864fb09db2c2142e3743908d70c53fc644826f4a8f492cd93",
|
|
@@ -795,7 +797,7 @@
|
|
|
795
797
|
"build/lib/utils.js.map": "74238d0d82cc28d41c4f627b73793f6cda26b338ef1bd97916b6417783949e29",
|
|
796
798
|
"build/lib/web.js": "8de94dffdd7c70be6b537c111691c831116338b311f7569739de57f9a32e071f",
|
|
797
799
|
"build/lib/web.js.map": "5fb9f337f3a27c04bb4303cb61ffa5f0da857299a7d2890609eb5f55f24f1789",
|
|
798
|
-
"build/main.js": "
|
|
800
|
+
"build/main.js": "ed9f996f6240d2663a2b641e8965d42aeab75403efe2c2b0a772885f28b6c0b5",
|
|
799
801
|
"build/main.js.map": "1cd3887da9b3d4061c59b6ad497c536c6c9a79938b10bbddf7128a1e7930dfbd",
|
|
800
802
|
"public/404.html": "6c6458ba2bc49b0c27973293e461262bf697607a8e71ab716227553f6d7005eb",
|
|
801
803
|
"public/logTemplate.html": "fc371fc8e4d7ef57c0ca76a405508eced038523464ff65b6cae04dae6144fd54",
|
|
@@ -809,7 +811,7 @@
|
|
|
809
811
|
"src-admin/public/css/admin.css.map": "63cffcac00f528b795caf1374125620f465316273524aa7ed339d2ae1c00e840",
|
|
810
812
|
"src-admin/public/css/app.css": "a127b375efd87a6de99722b03b5532e1877578ba66295e1989c055a64497c668",
|
|
811
813
|
"src-admin/public/css/app.css.map": "5dc84ea65945c673c3d75d2ccbd258221eb09c79f61fff7b1326b7c37aea90c4",
|
|
812
|
-
"src-admin/public/css/eos-auto-update.css": "
|
|
814
|
+
"src-admin/public/css/eos-auto-update.css": "05c4602b50e45f4c181b2868cc1977f8538d5879a6b0b02c0410491cc2c9cbcd",
|
|
813
815
|
"src-admin/public/css/eos-ems-overview.css": "fe9278e76035b6b2b5cdde93668a0a720ca1276bd7ab54a077c8af6d0eede255",
|
|
814
816
|
"src-admin/public/css/images/layers-2x.png": "066daca850d8ffbef007af00b06eac0015728dee279c51f3cb6c716df7c42edf",
|
|
815
817
|
"src-admin/public/css/images/layers.png": "1dbbe9d028e292f36fcba8f8b3a28d5e8932754fc2215b9ac69e4cdecf5107c6",
|
|
@@ -843,7 +845,7 @@
|
|
|
843
845
|
"src-admin/public/js/adapter-settings.js": "fb2e538a3385899f7fd47275ec588051c735d8f778a44b89f40f5eb820a31dbc",
|
|
844
846
|
"src-admin/public/js/eos-account-management.js": "dbba398605b2391ac1a7ec97cf7eb84da7f929ea16bfb6761750cd700a687fbe",
|
|
845
847
|
"src-admin/public/js/eos-assistant.js": "be43f49fd5310d2962365035556c37109d4868856e874e1f964c4b2f05bb6beb",
|
|
846
|
-
"src-admin/public/js/eos-auto-update.js": "
|
|
848
|
+
"src-admin/public/js/eos-auto-update.js": "60b5d0bfd6600546868b815a3af35bcc9ce8853ce40b519cb6cbc53e07788021",
|
|
847
849
|
"src-admin/public/js/eos-basic-settings.js": "deb942d2a0d7385743b27ed1562ce19fead693582e9baa2c9eaccaa3aa401728",
|
|
848
850
|
"src-admin/public/js/eos-branding-sanitizer.js": "de6f30e7758d552f52a0c84f02861e24f290ef872957f7b58d80f873d66c934c",
|
|
849
851
|
"src-admin/public/js/eos-ems-overview.js": "ed5d81492b757628ddb2a5d4be4e3e7e7665c3a3a943f5ce15358140cd18630a",
|
|
@@ -1323,7 +1325,7 @@
|
|
|
1323
1325
|
"src-admin/src/tabs/Objects.tsx": "834773b07b613b96f58d053496ed1de0e0b8cbf987a3b33314c85e8495a836f6",
|
|
1324
1326
|
"src-admin/src/tabs/Users.tsx": "45ed37e57b66f7e23eb465aef9ad9db55613b40bf44530ab81d6206806de102d",
|
|
1325
1327
|
"src-admin/src/types.d.ts": "3cfac48af5f8416b55b89c0daca78499dbbd402c0b44cc661112b76953ba3344",
|
|
1326
|
-
"src-admin/src/version.json": "
|
|
1328
|
+
"src-admin/src/version.json": "47f62d99d6da117043311a6484e38f40fbfb096eb192478c618c0a3035df8cde",
|
|
1327
1329
|
"src/i18n/de.json": "85d4ecfedf15d78984922b05377063b808ae8c5a75944af323e72a2c3a483d50",
|
|
1328
1330
|
"src/i18n/en.json": "6a0156a1b026903821d395ef2ceef845e90531f323a218f97f5abefaabb46a23",
|
|
1329
1331
|
"src/i18n/es.json": "54369f8044dfa222779849d2f158eb100188a43816d6c42a64575122cb528a30",
|
|
@@ -1358,6 +1360,7 @@
|
|
|
1358
1360
|
"tools/nexowatt-account-password-flow-selftest.cjs": "8794de7a6743f83e9fbf22c71c3c0434211b4a6944068c6ecd57a6f119bedc4a",
|
|
1359
1361
|
"tools/nexowatt-apply-ems-overview.cjs": "520d84ce95b3e99f1f559728799f1d412d84e30c441283aa42fd188b17fd242e",
|
|
1360
1362
|
"tools/nexowatt-assistant-separation-selftest.cjs": "f7cd60b831e6e19f6c2381ac0996807001dcc3247dbe7dcc30d010498b5e82c3",
|
|
1363
|
+
"tools/nexowatt-auto-update-placement-selftest.cjs": "f9fb5e1b2065a70660bffdc62829210a2388259e4c0f32c77acf7ecfa1606110",
|
|
1361
1364
|
"tools/nexowatt-auto-update-selftest.cjs": "1c7500ca3f0264658aa778758dc14d10353dc3857ef7c9803591654cba9b13d5",
|
|
1362
1365
|
"tools/nexowatt-backend-runtime-selftest.cjs": "22eaeef2fe80c71af7e86db66e049612faf6285b47c69d9d446e2d1231d2c21f",
|
|
1363
1366
|
"tools/nexowatt-branding-selftest.cjs": "3aa00be3716fb5349c45ef761ddab639c51381a265ec086ddda45ecee89d39d5",
|
|
@@ -1377,7 +1380,7 @@
|
|
|
1377
1380
|
"tools/nexowatt-internal-reserve-selftest.cjs": "5d90e42b2f1d4aac1039fce14bf18a952e9c5665203e8caae112737c5dcd265e",
|
|
1378
1381
|
"tools/nexowatt-login-layout-selftest.cjs": "4d1aa1f58a8f117ab7485d883c75603df277043b838dcaa0de3143acb6d885ab",
|
|
1379
1382
|
"tools/nexowatt-manual-write-policy-selftest.cjs": "a41057610972d681120bf35e0321029facc08b098c79da9b131980f80bd3fdce",
|
|
1380
|
-
"tools/nexowatt-merge-update-selftest.cjs": "
|
|
1383
|
+
"tools/nexowatt-merge-update-selftest.cjs": "46d269abc9cfc64299823088824bde1739829d05aa2fdd21cd1528e499bb2381",
|
|
1381
1384
|
"tools/nexowatt-modern-ui-selftest.cjs": "e0caf8244ff5e3431052f9cb5e2b59a64a50c92ca37ec51e286200e1ed37edc0",
|
|
1382
1385
|
"tools/nexowatt-module-popup-selftest.cjs": "31f02e8cf0bfd61d7769e1095c93887a34cfbbd76a9805ef4931cea6dff53ddf",
|
|
1383
1386
|
"tools/nexowatt-native-shell-selftest.cjs": "13aabd3a19f0c0422bbc1c676718685b77c88a526167a7b511fa6c9ab2ac860c",
|
|
@@ -1391,17 +1394,19 @@
|
|
|
1391
1394
|
"tools/nexowatt-release-defaults-selftest.cjs": "3e3c96ca774200461978c546d1a937cbae18d7f11497ed84dda639c2358f6e16",
|
|
1392
1395
|
"tools/nexowatt-repair-eos-admin-update.cjs": "f28c1999b0f75139e582770ad649d17d11f9e909ac49d13c31be5fa5b36253e3",
|
|
1393
1396
|
"tools/nexowatt-role-access-selftest.cjs": "5d88eaeac77ff1460f28caca68a197b4cd820fbc3cf5194ff3bff036d4b20814",
|
|
1397
|
+
"tools/nexowatt-role-security-selftest.cjs": "d98b1eef1bbe7259a9015bcc7bca1b296a1fe4bb8df1a930e2e3f71c2665ddff",
|
|
1394
1398
|
"tools/nexowatt-runtime-cleanup-selftest.cjs": "8c5a5aaf51290436ceef40f7c5a28e602a428558582ee54bb94d57ed70cc3662",
|
|
1395
|
-
"tools/nexowatt-stability-check.cjs": "
|
|
1399
|
+
"tools/nexowatt-stability-check.cjs": "fb968bcaf388cbf2b8a61b7b4cf7b251970e97f914db6f2c90a74d73aa7ce18b",
|
|
1396
1400
|
"tools/nexowatt-stable-v7101-selftest.cjs": "817d09861ef29c52a67f64ec5b8f4ad4654ce7e6486eded786bb16f3c773eaf8",
|
|
1397
1401
|
"tools/nexowatt-stable-v7102-selftest.cjs": "75baab5f8069569ad4896e5018f3c5ccbbda2c2297aca5c5146bce94f9cf795d",
|
|
1402
|
+
"tools/nexowatt-stable-v7103-selftest.cjs": "db438580a443547ff7ceba821df940e59ba1e10105248653414a94a81fe3642e",
|
|
1398
1403
|
"tools/nexowatt-stable-v94-selftest.cjs": "5226881b3ad8918c67921ffb37716490f053ec88e7c0f24827a5eda7c75d4019",
|
|
1399
1404
|
"tools/nexowatt-stable-v95-selftest.cjs": "0b15fcd329eb2994e64c407ab04eaafab7c38c4688136c197bf9601e1c35ee07",
|
|
1400
1405
|
"tools/nexowatt-stable-v97-selftest.cjs": "4f50ad6e53b8de7eb045d56657cccd846883eacd8a877d51240d78153ba53d80",
|
|
1401
1406
|
"tools/nexowatt-sync-release-version.cjs": "2478d714533ece21a275071ef6e5467f73c2fa33d0a63d76f408dc048a86c6f6",
|
|
1402
1407
|
"tools/nexowatt-ui-overview-runtime-selftest.cjs": "838a8f44f4ba322424e35ebbb01e4a55bb9cc90b8625033086969114744386b4",
|
|
1403
1408
|
"tools/nexowatt-update-selftest.cjs": "c38c454135f98de683de8fa15fc4b9032063823f0f55fcfc8b675f551fd342f5",
|
|
1404
|
-
"tools/nexowatt-validate-package.cjs": "
|
|
1409
|
+
"tools/nexowatt-validate-package.cjs": "f918335d1add07777ee8998a66f207df7c30479aceec6c401ec10a72a59a98fe",
|
|
1405
1410
|
"tools/nexowatt-value-column-selftest.cjs": "29d0a9bbea05a87dcf8ee09c86cc81acb6c59e1e34801890768f5e342083871a",
|
|
1406
1411
|
"tools/nexowatt-version-sync-selftest.cjs": "65d7c8634b6d5581f337365e13a1a9432c7d47dbf5aebc237886730c32ba5e94",
|
|
1407
1412
|
"tsconfig.build.json": "d3a31263975a13de77b97af9ff246d89931f3abb594047be2739cf11378b97f5",
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# NPM-Veröffentlichung 7.10.4
|
|
2
|
+
|
|
3
|
+
Aus einer frisch entpackten Repository-ZIP ausführen:
|
|
4
|
+
|
|
5
|
+
```powershell
|
|
6
|
+
npm publish --dry-run
|
|
7
|
+
npm publish
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
Der Publish-Workflow ist dependency-frei und darf weder `tsc`, `tsx`, `npm install` noch einen verschachtelten `npm pack`-Prozess verlangen.
|
package/README.md
CHANGED
|
@@ -13,9 +13,9 @@ Standard-Port: 8081
|
|
|
13
13
|
|
|
14
14
|
Damit überschreibt der Adapter den offiziellen `admin`-Adapter nicht mehr. Die alte ioBroker-Admin-Oberfläche kann parallel vorhanden bleiben, während NexoWatt-Systeme über `eos-admin.0` die EOS-Oberfläche nutzen.
|
|
15
15
|
|
|
16
|
-
## Aktueller Stable-Verkaufskandidat 7.10.
|
|
16
|
+
## Aktueller Stable-Verkaufskandidat 7.10.4
|
|
17
17
|
|
|
18
|
-
Version 7.10.
|
|
18
|
+
Version 7.10.4 übernimmt den validierten und absturzfreien Stand 7.10.2. Die Einstellung **Automatische Adapter-Updates** liegt jetzt ausschließlich in den **Systemeinstellungen** hinter dem Schraubenschlüssel. Auf Übersicht, Module und allen anderen Hauptseiten wird die Karte nicht mehr angezeigt. Die restart-sichere Updateverwaltung, der verzögerte Repository-Abgleich und die vollständige Backend-Paketprüfung bleiben unverändert.
|
|
19
19
|
|
|
20
20
|
Verwaltete Installateur- und Endkundenkonten verwenden das Startpasswort `nexowatt`. Nach der ersten Anmeldung beziehungsweise nach einem Reset muss unmittelbar ein persönliches Passwort vergeben werden. Der Reset und die persönliche Passwortvergabe schreiben das reale ioBroker-Benutzerkennwort; EOS-Metadaten werden davon getrennt aktualisiert.
|
|
21
21
|
|
|
@@ -33,7 +33,7 @@ Minimaler Repository-Eintrag:
|
|
|
33
33
|
{
|
|
34
34
|
"eos-admin": {
|
|
35
35
|
"name": "eos-admin",
|
|
36
|
-
"version": "7.10.
|
|
36
|
+
"version": "7.10.4",
|
|
37
37
|
"title": "NexoWatt EOS Admin",
|
|
38
38
|
"desc": {
|
|
39
39
|
"de": "NexoWatt EOS Administrationsoberfläche als eigenständiger Adapter.",
|
|
@@ -141,7 +141,7 @@ npm publish --dry-run --tag latest
|
|
|
141
141
|
npm publish --tag latest
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
Die Version muss vor jedem erneuten Publish erhöht werden. Für 7.10.
|
|
144
|
+
Die Version muss vor jedem erneuten Publish erhöht werden. Für 7.10.4 wird direkt aus der vollständig geprüften Repository-ZIP veröffentlicht; `npm publish` benötigt dabei weiterhin weder `tsc` noch `tsx`.
|
|
145
145
|
|
|
146
146
|
## Lizenz
|
|
147
147
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# NexoWatt EOS Admin 7.10.4 – Stabilitäts- und Sicherheitsstand
|
|
2
|
+
|
|
3
|
+
Version 7.10.4 baut auf dem absturz- und publish-sicheren Stand 7.10.3 auf. Die automatische Update-Karte bleibt ausschließlich in den Systemeinstellungen hinter dem Schraubenschlüssel.
|
|
4
|
+
|
|
5
|
+
Zusätzlich gilt eine rollenbasierte Sicherheitsgrenze:
|
|
6
|
+
|
|
7
|
+
- Administrator: vollständiger Zugriff einschließlich App-Center, Lizenz, Simulation, Expertenmodus, Benutzer/Rechte, ioBroker Admin und XTerm.
|
|
8
|
+
- Installateur: technische Bedienoberfläche ohne App-Center, Lizenz, Simulation, Expertenmodus, Benutzer/Rechte, ioBroker Admin und XTerm.
|
|
9
|
+
- Endkunde: Cockpit, Smart Home und Datenpunkte mit Nur-Lesezugriff; keine Schreib-, Rechte-, Passwort- oder Expertenfunktionen.
|
|
10
|
+
- Sicherung: Navigation nur bei installierter und aktivierter Backup-Instanz.
|
|
11
|
+
|
|
12
|
+
Die Sperren werden nicht nur optisch, sondern zusätzlich im EOS-HTTP-Guard und über die Endkunden-ACLs durchgesetzt.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
# Release Acceptance 7.10.4
|
|
2
|
+
|
|
3
|
+
Akzeptiert, wenn Paketvalidierung, Stabilitätstests, Prebuilt-Manifest, Backend-Runtime, Rollen-Selbsttest und `npm publish --dry-run` erfolgreich sind. Zusätzlich müssen Administrator-, Installateur- und Endkundenrechte im Feldtest der dokumentierten Rollenmatrix entsprechen.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Release Notes 7.10.4
|
|
2
|
+
|
|
3
|
+
- App-Center, Lizenzverwaltung und Simulation auf Administratoren begrenzt.
|
|
4
|
+
- Expertenmodus und Expertenkopf für Installateur und Endkunde entfernt.
|
|
5
|
+
- Benutzer-, Gruppen-, Rechte- und Passwortverwaltung für Nicht-Administratoren gesperrt.
|
|
6
|
+
- ioBroker Admin und XTerm für Installateur und Endkunde ausgeblendet und serverseitig abgefangen.
|
|
7
|
+
- Endkunden-Datenpunkte sichtbar, aber nur lesbar; Schreibaufrufe werden blockiert.
|
|
8
|
+
- Sicherungsnavigation nur bei aktiver Backup-Instanz.
|
|
9
|
+
- Bereits bestehende privilegierte UI-Sitzungen werden bei Nicht-Administratoren nicht weiterverwendet.
|
|
10
|
+
- Update-Karte weiterhin ausschließlich unter Systemeinstellungen.
|
|
11
|
+
- Absturz-, Runtime- und dependency-freier NPM-Publish-Schutz aus 7.10.2/7.10.3 beibehalten.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/* NexoWatt EOS
|
|
2
|
-
.eos-nexowatt-auto-update{box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:28px;width:calc(100% - 32px);margin:
|
|
1
|
+
/* NexoWatt EOS stable auto-update settings card: visible only inside the System Settings dialog. */
|
|
2
|
+
.eos-nexowatt-auto-update{box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:28px;flex:none;width:calc(100% - 32px);margin:16px;padding:20px 24px;border:1px solid rgba(0,229,138,.28);border-radius:20px;background:linear-gradient(120deg,rgba(0,71,66,.62),rgba(4,25,39,.96) 52%,rgba(4,21,34,.98));color:#effbff;box-shadow:0 16px 36px rgba(0,0,0,.18)}
|
|
3
|
+
.eos-nexowatt-auto-update[data-context="system-settings"]{position:relative;z-index:1}
|
|
3
4
|
.eos-nexowatt-auto-update[data-enabled="false"]{border-color:rgba(117,145,160,.34);background:linear-gradient(120deg,rgba(31,54,65,.72),rgba(4,21,34,.98))}
|
|
4
|
-
.eos-nau-copy{min-width:0;flex:1}.eos-nau-eyebrow{display:block;margin-bottom:5px;color:#00e58a;font-size:.72rem;font-weight:900;letter-spacing:.13em;text-transform:uppercase}.eos-nau-copy h2{margin:0 0 6px;font-size:1.
|
|
5
|
+
.eos-nau-copy{min-width:0;flex:1}.eos-nau-eyebrow{display:block;margin-bottom:5px;color:#00e58a;font-size:.72rem;font-weight:900;letter-spacing:.13em;text-transform:uppercase}.eos-nau-copy h2{margin:0 0 6px;font-size:1.25rem;line-height:1.2}.eos-nau-copy p{max-width:960px;margin:0;color:#a9c2d0;font-size:.82rem;line-height:1.55}.eos-nau-meta{display:flex;flex-wrap:wrap;gap:8px 18px;margin-top:13px;color:#84a8ba;font-size:.72rem}.eos-nau-meta strong{color:#d9f6ee}.eos-nau-adapters{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.eos-nau-adapters span{padding:5px 9px;border:1px solid rgba(0,229,138,.24);border-radius:999px;background:rgba(0,229,138,.08);color:#b9f6db;font-size:.7rem;font-weight:800}.eos-nau-error{margin-top:10px;padding:8px 10px;border:1px solid rgba(255,183,77,.38);border-radius:9px;background:rgba(255,152,0,.09);color:#ffd18d;font-size:.72rem}.eos-nau-switch{display:grid;grid-template-columns:50px auto;grid-template-rows:auto auto;align-items:center;column-gap:10px;min-width:160px;cursor:pointer}.eos-nau-switch input{position:absolute;opacity:0;pointer-events:none}.eos-nau-track{grid-row:1/3;position:relative;width:50px;height:28px;border:1px solid rgba(130,161,176,.55);border-radius:999px;background:#273e4c;transition:.2s}.eos-nau-thumb{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#b6c8d1;box-shadow:0 3px 8px rgba(0,0,0,.28);transition:.2s}.eos-nau-switch input:checked+.eos-nau-track{border-color:#00e58a;background:rgba(0,229,138,.26)}.eos-nau-switch input:checked+.eos-nau-track .eos-nau-thumb{left:25px;background:#00e58a}.eos-nau-switch strong{align-self:end;font-size:.82rem}.eos-nau-switch small{align-self:start;color:#83a2b2;font-size:.67rem}.eos-nau-switch input:focus-visible+.eos-nau-track{outline:2px solid #4bdcff;outline-offset:3px}@media(max-width:760px){.eos-nexowatt-auto-update{align-items:flex-start;flex-direction:column}.eos-nau-switch{align-self:flex-end}}
|
package/adminWww/index.html
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
/>
|
|
39
39
|
<link rel="stylesheet" href="./css/nexowatt-native-shell.css?v=7101" />
|
|
40
40
|
<link rel="stylesheet" href="./css/eos-ems-overview.css?v=7101" />
|
|
41
|
-
<link rel="stylesheet" href="./css/eos-auto-update.css?v=
|
|
41
|
+
<link rel="stylesheet" href="./css/eos-auto-update.css?v=7103" />
|
|
42
42
|
<link
|
|
43
43
|
rel="manifest"
|
|
44
44
|
href="manifest.json"
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
<script defer src="./js/eos-role-ui.js?v=7101"></script>
|
|
170
170
|
<script defer src="./js/eos-ems-overview.js?v=7101"></script>
|
|
171
171
|
|
|
172
|
-
<script defer src="./js/eos-auto-update.js?v=
|
|
172
|
+
<script defer src="./js/eos-auto-update.js?v=7103"></script>
|
|
173
173
|
<script defer src="./js/eos-assistant.js?v=7101"></script>
|
|
174
174
|
</head>
|
|
175
175
|
<body>
|
|
@@ -177,5 +177,6 @@
|
|
|
177
177
|
<div id="root"></div>
|
|
178
178
|
<script defer src="static/js/nexowatt-stable-login.js?v=7101"></script>
|
|
179
179
|
<script defer src="static/js/nexowatt-stable-v7101.js?v=7101"></script>
|
|
180
|
+
<script defer src="./nexowatt-role-security.js?v=7104"></script>
|
|
180
181
|
</body>
|
|
181
182
|
</html>
|
|
@@ -1,78 +1,172 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
|
-
|
|
3
|
+
|
|
4
|
+
const VERSION = 'v7103-system-settings-only';
|
|
4
5
|
const ROOT_ID = 'eos-nexowatt-auto-update';
|
|
6
|
+
const SYSTEM_DIALOG_SELECTOR = '[role="dialog"][aria-labelledby="system-settings-dialog-title"]';
|
|
5
7
|
const script = document.currentScript;
|
|
6
8
|
const API = new URL('../nexowatt/updates/', script?.src || document.baseURI).href;
|
|
9
|
+
|
|
7
10
|
let busy = false;
|
|
8
11
|
let lastLoad = 0;
|
|
12
|
+
let latestStatus = null;
|
|
9
13
|
let pollTimer = 0;
|
|
10
14
|
|
|
11
15
|
const role = () => String(window.NEXOWATT_EOS_ACCESS_ROLE || 'admin').toLowerCase();
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
const esc = value =>
|
|
17
|
+
String(value ?? '').replace(/[&<>'"]/g, char =>
|
|
18
|
+
({ '&': '&', '<': '<', '>': '>', "'": ''', '"': '"' })[char],
|
|
19
|
+
);
|
|
20
|
+
const formatTime = value =>
|
|
21
|
+
value
|
|
22
|
+
? new Intl.DateTimeFormat(undefined, { dateStyle: 'short', timeStyle: 'medium' }).format(new Date(value))
|
|
23
|
+
: '–';
|
|
24
|
+
|
|
25
|
+
const getSystemSettingsMount = () => {
|
|
26
|
+
const dialog = document.querySelector(SYSTEM_DIALOG_SELECTOR);
|
|
27
|
+
if (!dialog) return null;
|
|
28
|
+
|
|
29
|
+
const content = dialog.querySelector('.MuiDialogContent-root');
|
|
30
|
+
if (!content) return null;
|
|
31
|
+
|
|
32
|
+
const appBar = Array.from(content.children).find(element => element.classList?.contains('MuiAppBar-root')) ||
|
|
33
|
+
content.querySelector('.MuiAppBar-root');
|
|
34
|
+
|
|
35
|
+
return { dialog, content, appBar };
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const systemSettingsActive = () => Boolean(getSystemSettingsMount());
|
|
15
39
|
|
|
16
40
|
const ensureRoot = () => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
41
|
+
const existing = document.getElementById(ROOT_ID);
|
|
42
|
+
if (role() !== 'admin') {
|
|
43
|
+
existing?.remove();
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const mount = getSystemSettingsMount();
|
|
48
|
+
if (!mount) {
|
|
49
|
+
existing?.remove();
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (existing && mount.content.contains(existing)) return existing;
|
|
54
|
+
existing?.remove();
|
|
55
|
+
|
|
56
|
+
const root = document.createElement('section');
|
|
21
57
|
root.id = ROOT_ID;
|
|
22
58
|
root.className = 'eos-nexowatt-auto-update';
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if (
|
|
59
|
+
root.dataset.context = 'system-settings';
|
|
60
|
+
root.setAttribute('data-eos-system-settings-only', 'true');
|
|
61
|
+
root.setAttribute('aria-label', 'NexoWatt Stable-Update-Einstellungen');
|
|
62
|
+
|
|
63
|
+
if (mount.appBar?.parentElement === mount.content) {
|
|
64
|
+
mount.content.insertBefore(root, mount.appBar.nextSibling);
|
|
65
|
+
} else {
|
|
66
|
+
mount.content.prepend(root);
|
|
67
|
+
}
|
|
28
68
|
return root;
|
|
29
69
|
};
|
|
30
70
|
|
|
31
71
|
const render = status => {
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
72
|
+
latestStatus = { ...(latestStatus || {}), ...(status || {}) };
|
|
73
|
+
const root = ensureRoot();
|
|
74
|
+
if (!root) return;
|
|
75
|
+
|
|
76
|
+
const enabled = latestStatus?.enabled !== false;
|
|
77
|
+
const managed = Array.isArray(latestStatus?.managedAdapters) ? latestStatus.managedAdapters : [];
|
|
78
|
+
const error = String(latestStatus?.error || '');
|
|
79
|
+
|
|
36
80
|
root.dataset.enabled = String(enabled);
|
|
37
|
-
root.innerHTML = `<div class="eos-nau-copy"><span class="eos-nau-eyebrow">NexoWatt Stable</span><h2>Automatische Adapter-Updates</h2><p>${enabled ? 'Installierte NexoWatt-Adapter werden automatisch aktualisiert, sobald im erkannten Stable-Repository eine neuere stabile Version verfügbar ist.' : 'Automatische NexoWatt-Updates sind deaktiviert. Vorherige ioBroker-Update-Richtlinien wurden wiederhergestellt.'}</p><div class="eos-nau-meta"><span>Repository: <strong>${esc(
|
|
81
|
+
root.innerHTML = `<div class="eos-nau-copy"><span class="eos-nau-eyebrow">NexoWatt Stable</span><h2>Automatische Adapter-Updates</h2><p>${enabled ? 'Installierte NexoWatt-Adapter werden automatisch aktualisiert, sobald im erkannten Stable-Repository eine neuere stabile Version verfügbar ist.' : 'Automatische NexoWatt-Updates sind deaktiviert. Vorherige ioBroker-Update-Richtlinien wurden wiederhergestellt.'}</p><div class="eos-nau-meta"><span>Repository: <strong>${esc(latestStatus?.repository || 'wird erkannt')}</strong></span><span>Letzter Abgleich: <strong>${esc(formatTime(latestStatus?.lastSync))}</strong></span><span>Richtlinie: <strong>alle neueren Stable-Versionen</strong></span></div>${managed.length ? `<div class="eos-nau-adapters">${managed.map(name => `<span>${esc(name)}</span>`).join('')}</div>` : ''}${error ? `<div class="eos-nau-error">${esc(error)}</div>` : ''}</div><label class="eos-nau-switch"><input type="checkbox" ${enabled ? 'checked' : ''} ${busy ? 'disabled' : ''}><span class="eos-nau-track"><span class="eos-nau-thumb"></span></span><strong>${enabled ? 'Aktiv' : 'Deaktiviert'}</strong><small>jederzeit änderbar</small></label>`;
|
|
38
82
|
root.querySelector('input')?.addEventListener('change', event => void save(Boolean(event.currentTarget.checked)));
|
|
39
83
|
};
|
|
40
84
|
|
|
41
85
|
const request = async (path, options = {}) => {
|
|
42
|
-
const response = await fetch(new URL(path, API), {
|
|
86
|
+
const response = await fetch(new URL(path, API), {
|
|
87
|
+
cache: 'no-store',
|
|
88
|
+
credentials: 'same-origin',
|
|
89
|
+
...options,
|
|
90
|
+
});
|
|
43
91
|
const data = await response.json().catch(() => ({}));
|
|
44
92
|
if (!response.ok) throw new Error(data.error || `HTTP ${response.status}`);
|
|
45
93
|
return data;
|
|
46
94
|
};
|
|
95
|
+
|
|
47
96
|
const load = async (force = false) => {
|
|
48
|
-
if (role() !== 'admin' || !
|
|
97
|
+
if (role() !== 'admin' || !systemSettingsActive()) {
|
|
98
|
+
ensureRoot();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
49
101
|
if (!force && Date.now() - lastLoad < 5000) return;
|
|
102
|
+
|
|
50
103
|
lastLoad = Date.now();
|
|
51
|
-
try {
|
|
52
|
-
|
|
104
|
+
try {
|
|
105
|
+
render(await request('status'));
|
|
106
|
+
} catch (error) {
|
|
107
|
+
render({ enabled: latestStatus?.enabled !== false, error: error?.message || error });
|
|
108
|
+
}
|
|
53
109
|
};
|
|
110
|
+
|
|
54
111
|
const save = async enabled => {
|
|
55
112
|
if (busy) return;
|
|
56
113
|
busy = true;
|
|
114
|
+
render({ enabled, error: '' });
|
|
115
|
+
|
|
57
116
|
try {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
117
|
+
latestStatus = await request('settings', {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json',
|
|
121
|
+
'X-NexoWatt-EOS-Auto-Update': '1',
|
|
122
|
+
},
|
|
123
|
+
body: JSON.stringify({ enabled }),
|
|
124
|
+
});
|
|
61
125
|
} catch (error) {
|
|
62
|
-
|
|
63
|
-
} finally {
|
|
126
|
+
latestStatus = { ...(latestStatus || {}), enabled: !enabled, error: error?.message || error };
|
|
127
|
+
} finally {
|
|
128
|
+
busy = false;
|
|
129
|
+
render(latestStatus || { enabled });
|
|
130
|
+
}
|
|
64
131
|
};
|
|
65
132
|
|
|
66
133
|
let scheduled = false;
|
|
67
|
-
const schedule = () => {
|
|
134
|
+
const schedule = () => {
|
|
135
|
+
if (scheduled) return;
|
|
136
|
+
scheduled = true;
|
|
137
|
+
requestAnimationFrame(() => {
|
|
138
|
+
scheduled = false;
|
|
139
|
+
void load();
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
|
|
68
143
|
const start = () => {
|
|
69
144
|
void load();
|
|
70
|
-
window.addEventListener('hashchange', () => {
|
|
145
|
+
window.addEventListener('hashchange', () => {
|
|
146
|
+
lastLoad = 0;
|
|
147
|
+
schedule();
|
|
148
|
+
});
|
|
71
149
|
window.addEventListener('nexowatt-eos-admin-socket-ready', schedule);
|
|
72
|
-
document.addEventListener('visibilitychange', () => {
|
|
73
|
-
|
|
150
|
+
document.addEventListener('visibilitychange', () => {
|
|
151
|
+
if (document.visibilityState === 'visible') schedule();
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
new MutationObserver(() => {
|
|
155
|
+
const root = document.getElementById(ROOT_ID);
|
|
156
|
+
const settingsOpen = systemSettingsActive();
|
|
157
|
+
if ((settingsOpen && !root) || (!settingsOpen && root)) schedule();
|
|
158
|
+
}).observe(document.documentElement, { childList: true, subtree: true });
|
|
159
|
+
|
|
74
160
|
pollTimer = window.setInterval(() => void load(true), 30000);
|
|
75
161
|
};
|
|
76
|
-
|
|
77
|
-
|
|
162
|
+
|
|
163
|
+
document.readyState === 'loading'
|
|
164
|
+
? document.addEventListener('DOMContentLoaded', start, { once: true })
|
|
165
|
+
: start();
|
|
166
|
+
|
|
167
|
+
window.NEXOWATT_EOS_AUTO_UPDATE_UI = Object.freeze({
|
|
168
|
+
version: VERSION,
|
|
169
|
+
refresh: load,
|
|
170
|
+
location: 'system-settings',
|
|
171
|
+
});
|
|
78
172
|
})();
|