iobroker.hassemu 1.3.2 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -25
- package/io-package.json +80 -80
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -147,42 +147,27 @@ Reverse DNS on a home LAN depends on your router/DHCP server and often fails. Th
|
|
|
147
147
|
---
|
|
148
148
|
|
|
149
149
|
## Changelog
|
|
150
|
-
### 1.3.
|
|
150
|
+
### 1.3.3 (2026-05-01)
|
|
151
|
+
- Documentation: rewrote release notes for v1.1.4–v1.3.2 in user-friendly style across all languages.
|
|
151
152
|
|
|
152
|
-
|
|
153
|
-
-
|
|
154
|
-
- Restore step now promotes a blank state-value (`''` left over from v1.2.0) to numeric `0`, so the dropdown actually shows the `0='---'` option as selected on first start after the upgrade.
|
|
153
|
+
### 1.3.2 (2026-04-30)
|
|
154
|
+
- Fix: dropdown default `---` now applied correctly on upgrades from older v1.1.x clients (was empty after migration).
|
|
155
155
|
|
|
156
156
|
### 1.3.1 (2026-04-30)
|
|
157
|
-
|
|
158
|
-
-
|
|
159
|
-
- Mode dropdown gains a numeric `0 = "---"` no-choice fallback (analogous to govee-smart's pattern). Existing displays keep their setting; new displays start at `0` and the resolver falls back to the landing page until a real choice is made.
|
|
157
|
+
- Fix: legacy v1.1.x clients without `mode`/`manualUrl` objects now get migrated correctly on first start.
|
|
158
|
+
- Mode dropdown gains a `0 = "---"` no-choice fallback — new displays start without a target until a real choice is made.
|
|
160
159
|
|
|
161
160
|
### 1.3.0 (2026-04-30)
|
|
162
|
-
|
|
163
|
-
-
|
|
164
|
-
- DRY refactor: shared `parseManualUrlWrite` helper between client + global config; FIFO-cap helper in WebServer; OAuth access-token TTL + lockout window/threshold are now named constants instead of magic numbers.
|
|
165
|
-
- Dead-code cleanup: `resolveBindToReachable`, `coerceUuid` strict-V4 parameter, `DEFAULT_REFRESH_DEBOUNCE_MS` export, internal `getMode`/`getManualUrl` test affordances — all removed; tests rewritten to assert observable behaviour.
|
|
166
|
-
- New `landing-page` test suite with XSS-escape coverage and 11-language fallback verification.
|
|
167
|
-
- Emulated Home Assistant version bumped from 2026.3.1 to 2026.4.0.
|
|
161
|
+
- Security: brute-force lockout on login (5 failed attempts → IP blocked for 15 min, successful login resets the counter).
|
|
162
|
+
- Emulated Home Assistant version bumped to 2026.4.0.
|
|
168
163
|
|
|
169
164
|
### 1.2.0 (2026-04-29)
|
|
170
|
-
|
|
171
|
-
-
|
|
172
|
-
- Master switch `global.enabled` syncs every display: on → all follow the global URL, off → each display picks up its own again.
|
|
165
|
+
- **Breaking:** Redirect target now configured via `mode` (dropdown) + `manualUrl` (free text) instead of the old `visUrl`. Existing setups auto-migrated.
|
|
166
|
+
- Master switch `global.enabled` syncs every display (on → all follow global URL, off → each display picks up its own).
|
|
173
167
|
- Idle displays without auth token are auto-removed after 30 days.
|
|
174
168
|
- Security hardening of the auth flow.
|
|
175
169
|
- `web` adapter declared as dependency.
|
|
176
170
|
|
|
177
|
-
### 1.1.6 (2026-04-28)
|
|
178
|
-
|
|
179
|
-
- Audit cleanup against the upstream `ioBroker.example/TypeScript` full standard:
|
|
180
|
-
- Test setup migrated: tests now live next to source as `src/lib/*.test.ts` and run directly via `ts-node/register`. Removed `tsconfig.test.json` + `build-test/`, added `test/mocharc.custom.json` + `test/mocha.setup.js` + `test/tsconfig.json` + `test/.eslintrc.json`
|
|
181
|
-
- `@types/node` rolled back from `^25.6.0` to `^20.19.24` so type defs match `engines.node: ">=20"`
|
|
182
|
-
- Dependabot now ignores major bumps for `@types/node`, `typescript`, `eslint`, `actions/checkout`, `actions/setup-node`
|
|
183
|
-
- `nyc` config + `coverage` script added
|
|
184
|
-
- Orphan `.github/auto-merge.yml` removed (active workflow is `automerge-dependabot.yml` using `gh pr merge`)
|
|
185
|
-
|
|
186
171
|
Older entries are in [CHANGELOG_OLD.md](CHANGELOG_OLD.md).
|
|
187
172
|
|
|
188
173
|
## Support
|
package/io-package.json
CHANGED
|
@@ -1,98 +1,98 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "hassemu",
|
|
4
|
-
"version": "1.3.
|
|
4
|
+
"version": "1.3.3",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.3.3": {
|
|
7
|
+
"en": "Documentation: rewrote release notes in user-friendly style across all languages.",
|
|
8
|
+
"de": "Dokumentation: Release-Notes in alle Sprachen User-orientiert neu geschrieben.",
|
|
9
|
+
"ru": "Документация: примечания к релизу переписаны в дружественном к пользователю стиле на всех языках.",
|
|
10
|
+
"pt": "Documentação: notas de release reescritas em estilo amigável ao usuário em todos os idiomas.",
|
|
11
|
+
"nl": "Documentatie: release-notes herschreven in gebruikersvriendelijke stijl in alle talen.",
|
|
12
|
+
"fr": "Documentation : notes de version réécrites dans un style adapté à l'utilisateur dans toutes les langues.",
|
|
13
|
+
"it": "Documentazione: note di release riscritte in stile user-friendly in tutte le lingue.",
|
|
14
|
+
"es": "Documentación: notas de versión reescritas en estilo amigable para el usuario en todos los idiomas.",
|
|
15
|
+
"pl": "Dokumentacja: notatki wydania przepisane w przyjaznym dla użytkownika stylu we wszystkich językach.",
|
|
16
|
+
"uk": "Документація: нотатки до релізу переписано у дружньому до користувача стилі усіма мовами.",
|
|
17
|
+
"zh-cn": "文档:所有语言的发布说明已重写为用户友好的风格。"
|
|
18
|
+
},
|
|
6
19
|
"1.3.2": {
|
|
7
|
-
"en": "
|
|
8
|
-
"de": "
|
|
9
|
-
"ru": "
|
|
10
|
-
"pt": "
|
|
11
|
-
"nl": "
|
|
12
|
-
"fr": "
|
|
13
|
-
"it": "
|
|
14
|
-
"es": "
|
|
15
|
-
"pl": "
|
|
16
|
-
"uk": "
|
|
17
|
-
"zh-cn": "
|
|
20
|
+
"en": "Fix: dropdown default `---` now applied correctly on upgrades from older v1.1.x clients (was empty after migration).",
|
|
21
|
+
"de": "Fix: Dropdown-Standard `---` wird bei Upgrades von älteren v1.1.x-Clients jetzt korrekt gesetzt (war nach der Migration leer).",
|
|
22
|
+
"ru": "Fix: значение по умолчанию `---` в dropdown теперь правильно применяется при обновлении со старых клиентов v1.1.x (было пустым после миграции).",
|
|
23
|
+
"pt": "Fix: valor padrão `---` do dropdown agora é aplicado corretamente em atualizações de clientes v1.1.x antigos (estava vazio após a migração).",
|
|
24
|
+
"nl": "Fix: dropdown-standaard `---` wordt nu correct toegepast bij upgrades van oudere v1.1.x-clients (was leeg na de migratie).",
|
|
25
|
+
"fr": "Fix : la valeur par défaut `---` du dropdown est désormais correctement appliquée lors des mises à niveau depuis les anciens clients v1.1.x (était vide après la migration).",
|
|
26
|
+
"it": "Fix: il valore predefinito `---` del dropdown ora viene applicato correttamente sugli aggiornamenti da client v1.1.x più vecchi (era vuoto dopo la migrazione).",
|
|
27
|
+
"es": "Fix: el valor predeterminado `---` del dropdown ahora se aplica correctamente en actualizaciones desde clientes v1.1.x antiguos (estaba vacío tras la migración).",
|
|
28
|
+
"pl": "Fix: wartość domyślna `---` w dropdown jest teraz poprawnie ustawiana przy aktualizacjach ze starszych klientów v1.1.x (była pusta po migracji).",
|
|
29
|
+
"uk": "Fix: значення за замовчуванням `---` у dropdown тепер коректно застосовується при оновленнях зі старих клієнтів v1.1.x (було порожнім після міграції).",
|
|
30
|
+
"zh-cn": "修复:从旧的 v1.1.x 客户端升级时,下拉框默认值 `---` 现在能正确显示(迁移后曾为空)。"
|
|
18
31
|
},
|
|
19
32
|
"1.3.1": {
|
|
20
|
-
"en": "
|
|
21
|
-
"de": "
|
|
22
|
-
"ru": "
|
|
23
|
-
"pt": "
|
|
24
|
-
"nl": "
|
|
25
|
-
"fr": "
|
|
26
|
-
"it": "
|
|
27
|
-
"es": "
|
|
28
|
-
"pl": "
|
|
29
|
-
"uk": "
|
|
30
|
-
"zh-cn": "
|
|
33
|
+
"en": "Fix: legacy v1.1.x clients without mode/manualUrl objects now get migrated correctly on first start.",
|
|
34
|
+
"de": "Fix: Legacy-v1.1.x-Clients ohne mode/manualUrl-Objekte werden beim ersten Start jetzt korrekt migriert.",
|
|
35
|
+
"ru": "Fix: устаревшие клиенты v1.1.x без объектов mode/manualUrl теперь корректно мигрируются при первом запуске.",
|
|
36
|
+
"pt": "Fix: clientes v1.1.x antigos sem objetos mode/manualUrl agora são migrados corretamente na primeira inicialização.",
|
|
37
|
+
"nl": "Fix: oude v1.1.x-clients zonder mode/manualUrl-objecten worden nu correct gemigreerd bij de eerste start.",
|
|
38
|
+
"fr": "Fix : les anciens clients v1.1.x sans objets mode/manualUrl sont désormais correctement migrés au premier démarrage.",
|
|
39
|
+
"it": "Fix: i client v1.1.x legacy senza oggetti mode/manualUrl ora vengono migrati correttamente al primo avvio.",
|
|
40
|
+
"es": "Fix: los clientes v1.1.x antiguos sin objetos mode/manualUrl ahora se migran correctamente en el primer inicio.",
|
|
41
|
+
"pl": "Fix: starsze klienty v1.1.x bez obiektów mode/manualUrl są teraz poprawnie migrowane przy pierwszym uruchomieniu.",
|
|
42
|
+
"uk": "Fix: застарілі клієнти v1.1.x без об'єктів mode/manualUrl тепер коректно мігрують при першому запуску.",
|
|
43
|
+
"zh-cn": "修复:缺少 mode/manualUrl 对象的旧版 v1.1.x 客户端现在能在首次启动时正确迁移。"
|
|
31
44
|
},
|
|
32
45
|
"1.3.0": {
|
|
33
|
-
"en": "Security: brute-force lockout on
|
|
34
|
-
"de": "Sicherheit:
|
|
35
|
-
"ru": "Безопасность: блокировка
|
|
36
|
-
"pt": "Segurança: bloqueio
|
|
37
|
-
"nl": "Beveiliging: brute-force
|
|
38
|
-
"fr": "
|
|
39
|
-
"it": "Sicurezza: blocco
|
|
40
|
-
"es": "Seguridad: bloqueo
|
|
41
|
-
"pl": "Bezpieczeństwo:
|
|
42
|
-
"uk": "Безпека:
|
|
43
|
-
"zh-cn": "
|
|
46
|
+
"en": "Security: brute-force lockout on login (5 failed attempts → IP blocked for 15 min). Emulated Home Assistant version bumped to 2026.4.0.",
|
|
47
|
+
"de": "Sicherheit: Brute-Force-Sperre beim Login (5 Fehlversuche → IP für 15 Min gesperrt). Emulierte Home-Assistant-Version auf 2026.4.0 erhöht.",
|
|
48
|
+
"ru": "Безопасность: блокировка от brute-force при входе (5 неудачных попыток → IP блокируется на 15 мин). Версия эмулируемого Home Assistant повышена до 2026.4.0.",
|
|
49
|
+
"pt": "Segurança: bloqueio brute-force no login (5 tentativas falhadas → IP bloqueado por 15 min). Versão emulada do Home Assistant atualizada para 2026.4.0.",
|
|
50
|
+
"nl": "Beveiliging: brute-force-blokkering bij login (5 mislukte pogingen → IP 15 min geblokkeerd). Geëmuleerde Home Assistant-versie naar 2026.4.0.",
|
|
51
|
+
"fr": "Sécurité : verrouillage brute-force sur la connexion (5 tentatives échouées → IP bloquée 15 min). Version Home Assistant émulée portée à 2026.4.0.",
|
|
52
|
+
"it": "Sicurezza: blocco brute-force al login (5 tentativi falliti → IP bloccato per 15 min). Versione Home Assistant emulata aggiornata a 2026.4.0.",
|
|
53
|
+
"es": "Seguridad: bloqueo brute-force al iniciar sesión (5 intentos fallidos → IP bloqueada 15 min). Versión emulada de Home Assistant actualizada a 2026.4.0.",
|
|
54
|
+
"pl": "Bezpieczeństwo: blokada brute-force przy logowaniu (5 nieudanych prób → IP zablokowane na 15 min). Wersja emulowanego Home Assistant podniesiona do 2026.4.0.",
|
|
55
|
+
"uk": "Безпека: блокування brute-force при вході (5 невдалих спроб → IP заблоковано на 15 хв). Версія емульованого Home Assistant оновлена до 2026.4.0.",
|
|
56
|
+
"zh-cn": "安全:登录暴力破解防护(5 次失败 → IP 阻断 15 分钟)。模拟的 Home Assistant 版本提升至 2026.4.0。"
|
|
44
57
|
},
|
|
45
58
|
"1.2.0": {
|
|
46
|
-
"en": "
|
|
47
|
-
"de": "
|
|
48
|
-
"ru": "
|
|
49
|
-
"pt": "
|
|
50
|
-
"nl": "
|
|
51
|
-
"fr": "
|
|
52
|
-
"it": "
|
|
53
|
-
"es": "
|
|
54
|
-
"pl": "
|
|
55
|
-
"uk": "
|
|
56
|
-
"zh-cn": "
|
|
59
|
+
"en": "Breaking: redirect target now configured via mode dropdown + manualUrl free text instead of the old visUrl. Existing setups auto-migrated.",
|
|
60
|
+
"de": "Breaking: Weiterleitungs-Ziel jetzt über mode-Dropdown + manualUrl-Freitext konfiguriert statt altem visUrl. Bestehende Setups werden automatisch migriert.",
|
|
61
|
+
"ru": "Breaking: цель перенаправления теперь настраивается через dropdown mode + свободный текст manualUrl вместо старого visUrl. Существующие настройки мигрируют автоматически.",
|
|
62
|
+
"pt": "Breaking: alvo de redirecionamento agora configurado via dropdown mode + texto livre manualUrl em vez do antigo visUrl. Configurações existentes são migradas automaticamente.",
|
|
63
|
+
"nl": "Breaking: redirect-doel nu via mode-dropdown + manualUrl-vrije tekst geconfigureerd in plaats van het oude visUrl. Bestaande setups worden automatisch gemigreerd.",
|
|
64
|
+
"fr": "Breaking : la cible de redirection se configure désormais via le dropdown mode + le texte libre manualUrl au lieu de l'ancien visUrl. Les configurations existantes sont migrées automatiquement.",
|
|
65
|
+
"it": "Breaking: obiettivo di redirect ora configurato tramite dropdown mode + testo libero manualUrl invece del vecchio visUrl. Le configurazioni esistenti vengono migrate automaticamente.",
|
|
66
|
+
"es": "Breaking: el destino de redirección ahora se configura mediante el dropdown mode + el texto libre manualUrl en lugar del antiguo visUrl. Las configuraciones existentes se migran automáticamente.",
|
|
67
|
+
"pl": "Breaking: cel przekierowania jest teraz konfigurowany przez dropdown mode + wolny tekst manualUrl zamiast starego visUrl. Istniejące konfiguracje są migrowane automatycznie.",
|
|
68
|
+
"uk": "Breaking: ціль перенаправлення тепер налаштовується через dropdown mode + вільний текст manualUrl замість старого visUrl. Існуючі налаштування мігрують автоматично.",
|
|
69
|
+
"zh-cn": "Breaking:重定向目标现在通过 mode 下拉框 + manualUrl 自由文本配置,取代旧的 visUrl。现有配置会自动迁移。"
|
|
57
70
|
},
|
|
58
71
|
"1.1.6": {
|
|
59
|
-
"en": "
|
|
60
|
-
"de": "
|
|
61
|
-
"ru": "
|
|
62
|
-
"pt": "Limpeza
|
|
63
|
-
"nl": "
|
|
64
|
-
"fr": "Nettoyage
|
|
65
|
-
"it": "
|
|
66
|
-
"es": "Limpieza
|
|
67
|
-
"pl": "
|
|
68
|
-
"uk": "
|
|
69
|
-
"zh-cn": "
|
|
72
|
+
"en": "Internal cleanup. No user-facing changes.",
|
|
73
|
+
"de": "Interne Bereinigung. Keine User-sichtbaren Änderungen.",
|
|
74
|
+
"ru": "Внутренняя очистка. Без видимых изменений для пользователя.",
|
|
75
|
+
"pt": "Limpeza interna. Sem alterações visíveis para o usuário.",
|
|
76
|
+
"nl": "Interne opschoning. Geen wijzigingen voor de gebruiker.",
|
|
77
|
+
"fr": "Nettoyage interne. Aucune modification visible pour l'utilisateur.",
|
|
78
|
+
"it": "Pulizia interna. Nessuna modifica visibile all'utente.",
|
|
79
|
+
"es": "Limpieza interna. Sin cambios visibles para el usuario.",
|
|
80
|
+
"pl": "Wewnętrzne porządki. Brak zmian widocznych dla użytkownika.",
|
|
81
|
+
"uk": "Внутрішнє прибирання. Без помітних для користувача змін.",
|
|
82
|
+
"zh-cn": "内部清理。对用户无可见变化。"
|
|
70
83
|
},
|
|
71
84
|
"1.1.5": {
|
|
72
|
-
"en": "
|
|
73
|
-
"de": "
|
|
74
|
-
"ru": "
|
|
75
|
-
"pt": "
|
|
76
|
-
"nl": "
|
|
77
|
-
"fr": "
|
|
78
|
-
"it": "
|
|
79
|
-
"es": "
|
|
80
|
-
"pl": "
|
|
81
|
-
"uk": "
|
|
82
|
-
"zh-cn": "
|
|
83
|
-
},
|
|
84
|
-
"1.1.4": {
|
|
85
|
-
"en": "Separate test-build output (`build-test/`) from production `build/` — `npm test` no longer risks leaving duplicated `build/src` + `build/test` trees in the published package. No runtime change.",
|
|
86
|
-
"de": "Separate Test-Building-Ausgang (`Building-Test/`) von der Produktion `Building/` — `npm-Test` nicht mehr Risiken verlassen duplizierte `Building/Src` + `Building/test` Bäume im veröffentlichten Paket. Keine Laufzeitänderung.",
|
|
87
|
-
"ru": "Отдельная продукция испытательной постройки (‘build-test/’) от производства ‘build/’ — ‘npm test’ больше не рискует оставить дублированные деревья ‘build/src’ + ‘build/test’ в опубликованном пакете. Никаких изменений.",
|
|
88
|
-
"pt": "Saída de construção de teste separada (`build-test/`) da produção `build/` — `npm test` já não corre o risco de deixar árvores duplicadas `build/src` + `build/test` no pacote publicado. Nenhuma mudança de tempo de execução.",
|
|
89
|
-
"nl": "Aparte test-build output van de productie Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build-Build- Geen verandering in de looptijd.",
|
|
90
|
-
"fr": "La sortie séparée de la construction d'essai (`build-test/`) de la production `build/` — `npm test` ne risque plus de laisser des arbres dupliqués `build/src` + `build/test` dans le paquet publié. Pas de changement d'exécution.",
|
|
91
|
-
"it": "Uscita separata di test-build (`build-test/`) dalla produzione `build/` — `npm test` non rischia più di lasciare duplicati `build/src` + `build/test` alberi nel pacchetto pubblicato. Nessun cambiamento di runtime.",
|
|
92
|
-
"es": "La producción separada de la producción de pruebas ( \" pruebas impresas \" ) de la producción \" , \" prueba npm \" ya no corre el riesgo de dejar árboles duplicados \" construidos/src \" + \" construidos/test \" en el paquete publicado. No hay cambio de horario.",
|
|
93
|
-
"pl": "Oddzielna produkcja testowa (\"build-test /\") z produkcji \"build /\" - \"npm test\" nie może już pozostawiać powielonych \"build / src\" + \"build / test\" drzew w opublikowanym pakiecie. Bez zmian.",
|
|
94
|
-
"uk": "Окремий тестово-будівельний вихід (`build-test/``) від виробництва `build/`` — `npm test’ не більше ризиків, що залишають дублікатом `build/src` + `build/test` дерев у опублікованому пакеті. Немає змін робочого часу.",
|
|
95
|
-
"zh-cn": "将试验-建设产出(`建设-测试/')与生产`建设/'——`npm测试 ' 分开,不再有将`建设/src ' +`建设/测试 ' 树木复制到已公布的成套材料的风险。 无运行时间变化 ."
|
|
85
|
+
"en": "Crash defense: process-level error handlers. Min js-controller restored to >=6.0.11.",
|
|
86
|
+
"de": "Crash-Schutz: process-level Error-Handler. Min js-controller zurück auf >=6.0.11.",
|
|
87
|
+
"ru": "Защита от сбоев: process-level обработчики ошибок. Мин. js-controller восстановлен на >=6.0.11.",
|
|
88
|
+
"pt": "Proteção contra falhas: handlers de erro process-level. Mín. js-controller restaurado para >=6.0.11.",
|
|
89
|
+
"nl": "Crashbescherming: process-level error-handlers. Min. js-controller hersteld op >=6.0.11.",
|
|
90
|
+
"fr": "Défense contre les crashs : handlers d'erreur process-level. Min js-controller rétabli à >=6.0.11.",
|
|
91
|
+
"it": "Difesa anti-crash: handler di errore process-level. Min js-controller ripristinato a >=6.0.11.",
|
|
92
|
+
"es": "Defensa contra fallos: handlers de error process-level. Mín. js-controller restaurado a >=6.0.11.",
|
|
93
|
+
"pl": "Ochrona przed crashem: handlery błędów process-level. Min. js-controller przywrócony do >=6.0.11.",
|
|
94
|
+
"uk": "Захист від збоїв: process-level обробники помилок. Мін. js-controller повернено на >=6.0.11.",
|
|
95
|
+
"zh-cn": "崩溃防护:process-level 错误处理器。最低 js-controller 恢复为 >=6.0.11。"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|
package/package.json
CHANGED