iobroker.eos-admin 7.9.45 → 7.9.47
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/adminWww/index.html +5 -5
- package/adminWww/js/eos-branding.js +5 -5
- package/adminWww/js/eos-security-ui.js +5 -5
- package/build/lib/web.js +1 -1
- package/build/main.js +16 -5
- package/io-package.json +8 -4
- package/package.json +1 -1
package/adminWww/index.html
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
rel="stylesheet"
|
|
32
32
|
href="css/leaflet.css"
|
|
33
33
|
/>
|
|
34
|
-
<link rel="stylesheet" href="./css/eos-branding.css?v=
|
|
34
|
+
<link rel="stylesheet" href="./css/eos-branding.css?v=47" />
|
|
35
35
|
<link
|
|
36
36
|
rel="manifest"
|
|
37
37
|
href="manifest.json"
|
|
@@ -154,10 +154,10 @@
|
|
|
154
154
|
<script type="module" crossorigin src="./assets/index-CQZugZ1z.js"></script>
|
|
155
155
|
<link rel="modulepreload" crossorigin href="./assets/preload-helper-BDBacUwf.js">
|
|
156
156
|
<link rel="modulepreload" crossorigin href="./assets/iobroker_admin__mf_v__runtimeInit__mf_v__-g2X2zhAf.js">
|
|
157
|
-
<script defer src="./js/eos-branding.js?v=
|
|
158
|
-
<script defer src="./js/eos-security-ui.js?v=
|
|
159
|
-
<script defer src="./js/eos-assistant.js?v=
|
|
160
|
-
<script defer src="./js/eos-objects-state-tools.js?v=
|
|
157
|
+
<script defer src="./js/eos-branding.js?v=47"></script>
|
|
158
|
+
<script defer src="./js/eos-security-ui.js?v=47"></script>
|
|
159
|
+
<script defer src="./js/eos-assistant.js?v=47"></script>
|
|
160
|
+
<script defer src="./js/eos-objects-state-tools.js?v=47"></script>
|
|
161
161
|
</head>
|
|
162
162
|
<body>
|
|
163
163
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
window.NEXOWATT_EOS_UI_VERSION = '
|
|
4
|
+
window.NEXOWATT_EOS_UI_VERSION = 'v47-delete-logquiet-fix';
|
|
5
5
|
|
|
6
6
|
const BRAND = 'NexoWatt EOS';
|
|
7
7
|
const EOS_MEANING = 'Energy Operation System';
|
|
@@ -308,7 +308,7 @@
|
|
|
308
308
|
];
|
|
309
309
|
|
|
310
310
|
const normalizeSecurityPolicy = policy => {
|
|
311
|
-
//
|
|
311
|
+
// v47: delete protection is fixed to EOS core adapters. Dynamic policy entries
|
|
312
312
|
// from older settings are ignored, otherwise normal Dienste can be blocked.
|
|
313
313
|
const protectedAdapters = new Set(CORE_PROTECTED_ADAPTERS);
|
|
314
314
|
const isAdmin = !!(policy?.isAdmin || policy?.isAdminGroup || policy?.isEosAdminGroup || policy?.isAdministrator);
|
|
@@ -410,7 +410,7 @@
|
|
|
410
410
|
};
|
|
411
411
|
|
|
412
412
|
const unlockDeleteControls = () => safe(() => {
|
|
413
|
-
//
|
|
413
|
+
// v47: clean up classes/attributes created by older EOS delete guards. We do not
|
|
414
414
|
// install capture listeners anymore; React handlers enforce the core protection list.
|
|
415
415
|
document.querySelectorAll('#app-paper .eos-protected-delete-control, #app-paper .eos-security-hidden-delete, #app-paper [data-eos-delete-guard-bound="true"]').forEach(control => {
|
|
416
416
|
control.classList.remove('eos-protected-delete-control', 'eos-security-hidden-delete');
|
|
@@ -426,7 +426,7 @@
|
|
|
426
426
|
});
|
|
427
427
|
|
|
428
428
|
const lockDeleteControls = container => {
|
|
429
|
-
//
|
|
429
|
+
// v47: Intentionally no DOM click blocking. Stale capture listeners and disabled
|
|
430
430
|
// attributes were the reason normal services could not be deleted via trash icon.
|
|
431
431
|
unlockDeleteControls();
|
|
432
432
|
};
|
|
@@ -478,7 +478,7 @@
|
|
|
478
478
|
});
|
|
479
479
|
|
|
480
480
|
const protectDeleteDialogs = () => {
|
|
481
|
-
//
|
|
481
|
+
// v47: Do not disable delete confirmation dialogs in the DOM. The delete command
|
|
482
482
|
// guard is handled in React and keeps the fixed EOS core list protected.
|
|
483
483
|
unlockDeleteControls();
|
|
484
484
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
(() => {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const VERSION = '
|
|
4
|
+
const VERSION = 'v47-delete-logquiet-fix';
|
|
5
5
|
const LEGACY_ADMIN = 'admin';
|
|
6
6
|
const LEGACY_ADMIN_INSTANCE = 'admin.0';
|
|
7
7
|
const CORE_PROTECTED_ADAPTERS = ['admin', 'eos-admin', 'backitup', 'nexowatt-devices', 'nexowatt-device', 'nexowatt-dev', 'nexowatt-ui'];
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
|
|
66
66
|
const isAdminUser = () => !!(state.policy?.isAdmin || state.policy?.isEosAdminGroup || state.policy?.isAdministrator);
|
|
67
67
|
const protectedAdapters = () => {
|
|
68
|
-
//
|
|
68
|
+
// v47: hard delete protection only for EOS core adapters. Dynamic/stale
|
|
69
69
|
// policy entries must never block ordinary installed adapters.
|
|
70
70
|
return new Set([LEGACY_ADMIN, ...CORE_PROTECTED_ADAPTERS].map(normalizeAdapter).filter(Boolean));
|
|
71
71
|
};
|
|
@@ -148,7 +148,7 @@
|
|
|
148
148
|
};
|
|
149
149
|
|
|
150
150
|
const releaseDeleteControls = () => {
|
|
151
|
-
//
|
|
151
|
+
// v47: undo markers from older EOS DOM guards. Only touch controls that were
|
|
152
152
|
// marked by EOS scripts, not native Admin disabled states.
|
|
153
153
|
document.querySelectorAll('.eos-security-hidden-delete, .eos-protected-delete-control, [data-eos-security-locked-delete="true"]').forEach(control => {
|
|
154
154
|
control.classList?.remove('eos-security-hidden-delete', 'eos-protected-delete-control');
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
};
|
|
164
164
|
|
|
165
165
|
const hideProtectedDeleteControls = () => {
|
|
166
|
-
//
|
|
166
|
+
// v47: Do not hide or capture trash buttons in the DOM. The shipped React
|
|
167
167
|
// source/bundles already block protected EOS core adapters before executing
|
|
168
168
|
// the ioBroker del command. DOM blocking caused stale/virtualized rows to make
|
|
169
169
|
// normal services undeletable.
|
|
@@ -302,7 +302,7 @@
|
|
|
302
302
|
state.observer.observe(document.documentElement, { childList: true, subtree: true });
|
|
303
303
|
};
|
|
304
304
|
|
|
305
|
-
//
|
|
305
|
+
// v47: No global capture listener for delete buttons. Protected adapter deletion is
|
|
306
306
|
// handled in the React delete handlers; global DOM interception broke normal Dienste.
|
|
307
307
|
|
|
308
308
|
const start = () => {
|
package/build/lib/web.js
CHANGED
|
@@ -412,7 +412,7 @@ class Web {
|
|
|
412
412
|
return [...groups].sort();
|
|
413
413
|
}
|
|
414
414
|
getEosProtectedAdapterNames() {
|
|
415
|
-
//
|
|
415
|
+
// v47: frontend delete protection is core-only. Ignore old eosProtectedAdapters
|
|
416
416
|
// settings so normal installed adapters/instances remain deletable.
|
|
417
417
|
return [...new Set(CORE_PROTECTED_ADAPTER_NAMES)].sort();
|
|
418
418
|
}
|
package/build/main.js
CHANGED
|
@@ -164,6 +164,8 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
164
164
|
eosSecurityDebounce = null;
|
|
165
165
|
/** Avoid concurrent policy writes while the guard corrects objects. */
|
|
166
166
|
eosSecurityRunning = false;
|
|
167
|
+
/** v47: stale delete-lock cleanup is a one-shot migration, not a repeating guard. */
|
|
168
|
+
eosDeleteLockRepairFinished = false;
|
|
167
169
|
constructor(options = {}) {
|
|
168
170
|
options = {
|
|
169
171
|
...options,
|
|
@@ -816,7 +818,7 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
816
818
|
return configured || DEFAULT_LEGACY_ADMIN_LOCK_BIND;
|
|
817
819
|
}
|
|
818
820
|
getProtectedAdapterNames() {
|
|
819
|
-
//
|
|
821
|
+
// v47: delete protection is intentionally limited to the fixed EOS core list.
|
|
820
822
|
// Older installations may have stored additional entries in eosProtectedAdapters;
|
|
821
823
|
// those must not make ordinary runtime adapters undeletable in Dienste/Module.
|
|
822
824
|
const result = new Set([LEGACY_ADMIN_ADAPTER_NAME, ...CORE_PROTECTED_ADAPTER_NAMES]);
|
|
@@ -881,9 +883,15 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
881
883
|
.replace(/^system\.adapter\./, '')
|
|
882
884
|
.replace(/\.\d+$/, '');
|
|
883
885
|
const isProtected = protectedAdapters.has(adapter);
|
|
886
|
+
// v47: never "repair" the fixed protected core adapters here. On some systems
|
|
887
|
+
// ioBroker or another guard restores their delete flags immediately, which created
|
|
888
|
+
// a repair/reapply loop and filled the log every debounce cycle.
|
|
889
|
+
if (isProtected) {
|
|
890
|
+
return false;
|
|
891
|
+
}
|
|
884
892
|
let changed = false;
|
|
885
893
|
obj.common = obj.common || {};
|
|
886
|
-
// v45: old builds could leave common.dontDelete/common.nondeletable on normal
|
|
894
|
+
// v45/v47: old builds could leave common.dontDelete/common.nondeletable on normal
|
|
887
895
|
// adapter or instance objects. Those flags block ioBroker del even if the UI allows it.
|
|
888
896
|
if (obj.common.dontDelete === true) {
|
|
889
897
|
delete obj.common.dontDelete;
|
|
@@ -936,7 +944,7 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
936
944
|
}
|
|
937
945
|
}
|
|
938
946
|
if (changed) {
|
|
939
|
-
this.log.
|
|
947
|
+
this.log.debug(`EOS delete guard repaired stale delete locks on ${changed} adapter/instance object(s)`);
|
|
940
948
|
}
|
|
941
949
|
}
|
|
942
950
|
|
|
@@ -971,7 +979,7 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
971
979
|
this.log.warn(`Cannot protect instances of adapter "${adapter}": ${e instanceof Error ? e.message : e}`);
|
|
972
980
|
}
|
|
973
981
|
if (changed) {
|
|
974
|
-
this.log.
|
|
982
|
+
this.log.debug(`EOS ACL/UI delete guard applied to adapter "${adapter}"`);
|
|
975
983
|
}
|
|
976
984
|
}
|
|
977
985
|
async ensureLegacyAdminLocked() {
|
|
@@ -1015,7 +1023,10 @@ class Admin extends adapter_core_1.Adapter {
|
|
|
1015
1023
|
try {
|
|
1016
1024
|
await this.ensureLegacyAdminLocked();
|
|
1017
1025
|
await this.ensureLegacyAdminVisibleOnlyToAdmins();
|
|
1018
|
-
|
|
1026
|
+
if (!this.eosDeleteLockRepairFinished) {
|
|
1027
|
+
this.eosDeleteLockRepairFinished = true;
|
|
1028
|
+
await this.repairStaleAdapterDeleteLocks();
|
|
1029
|
+
}
|
|
1019
1030
|
if (this.config.eosProtectAdapterDeletion !== false) {
|
|
1020
1031
|
for (const adapter of this.getProtectedAdapterNames()) {
|
|
1021
1032
|
await this.ensureProtectedAdapter(adapter);
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "eos-admin",
|
|
4
|
-
"version": "7.9.
|
|
4
|
+
"version": "7.9.47",
|
|
5
5
|
"titleLang": {
|
|
6
6
|
"en": "NexoWatt EOS Admin",
|
|
7
7
|
"de": "NexoWatt EOS Admin",
|
|
@@ -18,6 +18,10 @@
|
|
|
18
18
|
"connectionType": "local",
|
|
19
19
|
"dataSource": "push",
|
|
20
20
|
"news": {
|
|
21
|
+
"7.9.47": {
|
|
22
|
+
"en": "Quiet delete guard fix: stale delete-lock repair runs once and skips protected core adapters, preventing repeated log entries while service deletion remains functional.",
|
|
23
|
+
"de": "Leiser Delete-Guard-Fix: Reparatur alter Löschsperren läuft nur einmal und überspringt geschützte Core-Adapter, wodurch wiederholte Logeinträge verhindert werden; Dienste löschen bleibt funktionsfähig."
|
|
24
|
+
},
|
|
21
25
|
"7.9.44": {
|
|
22
26
|
"en": "Fix service/instance delete button: core-only protection, stale lock repair, guarded DOM scope.",
|
|
23
27
|
"de": "Fix für Dienste/Instanzen löschen: Schutz nur für EOS-Core, Reparatur alter Locks, enger DOM-Schutz."
|
|
@@ -243,7 +247,7 @@
|
|
|
243
247
|
"icon": "admin.svg",
|
|
244
248
|
"messagebox": true,
|
|
245
249
|
"enabled": true,
|
|
246
|
-
"extIcon": "https://unpkg.com/iobroker.eos-admin@7.9.
|
|
250
|
+
"extIcon": "https://unpkg.com/iobroker.eos-admin@7.9.47/admin/admin.svg",
|
|
247
251
|
"keywords": [
|
|
248
252
|
"NexoWatt",
|
|
249
253
|
"EOS",
|
|
@@ -254,7 +258,7 @@
|
|
|
254
258
|
"licensed"
|
|
255
259
|
],
|
|
256
260
|
"compact": true,
|
|
257
|
-
"readme": "https://unpkg.com/iobroker.eos-admin@7.9.
|
|
261
|
+
"readme": "https://unpkg.com/iobroker.eos-admin@7.9.47/README.md",
|
|
258
262
|
"authors": [
|
|
259
263
|
"bluefox <bluefox@ccu.io>",
|
|
260
264
|
"hobbyquaker <hq@ccu.io>"
|
|
@@ -323,7 +327,7 @@
|
|
|
323
327
|
"nondeletable": false,
|
|
324
328
|
"allowAdapterUpdate": true,
|
|
325
329
|
"allowAdapterDelete": false,
|
|
326
|
-
"meta": "https://unpkg.com/iobroker.eos-admin@7.9.
|
|
330
|
+
"meta": "https://unpkg.com/iobroker.eos-admin@7.9.47/io-package.json",
|
|
327
331
|
"npmPackage": "iobroker.eos-admin",
|
|
328
332
|
"packetName": "iobroker.eos-admin"
|
|
329
333
|
},
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.eos-admin",
|
|
3
3
|
"description": "NexoWatt EOS Admin interface with reliable repository update mapping and technical log preservation.",
|
|
4
|
-
"version": "7.9.
|
|
4
|
+
"version": "7.9.47",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"bluefox <dogafox@gmail.com>",
|
|
7
7
|
"apollon77",
|