iobroker.admin 7.7.2 → 7.7.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.
Files changed (133) hide show
  1. package/README.md +42 -8
  2. package/admin/admin.png +0 -0
  3. package/admin/i18n/de.json +1 -1
  4. package/admin/i18n/es.json +1 -1
  5. package/admin/i18n/fr.json +1 -1
  6. package/admin/i18n/it.json +1 -1
  7. package/admin/i18n/nl.json +1 -1
  8. package/admin/i18n/pl.json +1 -1
  9. package/admin/i18n/pt.json +1 -1
  10. package/admin/i18n/ru.json +1 -1
  11. package/admin/i18n/uk.json +1 -1
  12. package/admin/i18n/zh-cn.json +1 -1
  13. package/admin/jsonConfig.json5 +1 -2
  14. package/adminWww/assets/{AdapterUpdateDialog-DHGhgEEq.js → AdapterUpdateDialog-BQUTMe7v.js} +1 -1
  15. package/adminWww/assets/Adapters-KuMqwfzU.js +9 -0
  16. package/adminWww/assets/Config-LH40Fzyp.js +1 -0
  17. package/adminWww/assets/CustomModal-UQ6ICKdg.js +1 -0
  18. package/adminWww/assets/CustomTab-CE2qvngn.js +1 -0
  19. package/adminWww/assets/DefaultPropsProvider-BxjOYH1h.js +30 -0
  20. package/adminWww/assets/EasyMode-XXQKZmWs.js +1 -0
  21. package/adminWww/assets/{Enums-BSICIhWI.js → Enums-Ddmi-fYo.js} +3 -3
  22. package/adminWww/assets/{Fields-C3JkTmfP.js → Fields-CQNdUYkd.js} +1 -1
  23. package/adminWww/assets/{Files-DK85-COY.js → Files-DgOiCRiN.js} +2 -2
  24. package/adminWww/assets/FilledInput-B9JSi0Ta.js +2 -0
  25. package/adminWww/assets/Hosts-BgDpLhdl.js +121 -0
  26. package/adminWww/assets/Instances-DikJwBl0.js +2 -0
  27. package/adminWww/assets/Intro-vxIHtYzr.js +2 -0
  28. package/adminWww/assets/Logs-DZUWTbJn.js +1 -0
  29. package/adminWww/assets/Objects-Dm1_4aGR.js +60 -0
  30. package/adminWww/assets/{State-BqfD2ABf.js → State-CrcWiBdx.js} +1 -1
  31. package/adminWww/assets/TextField-j-uewRwI.js +138 -0
  32. package/adminWww/assets/ThemeProvider-DHntAcOp.js +29 -0
  33. package/adminWww/assets/Users-GcWjwa7A.js +1 -0
  34. package/adminWww/assets/ace-1DqSbvTN.js +985 -0
  35. package/adminWww/assets/{bootstrap-BYQTdf9r.js → bootstrap-B3ZI_-0g.js} +112 -112
  36. package/adminWww/assets/{createSvgIcon-Bh3KWtyp.js → createSvgIcon-Ds12z7B3.js} +1 -1
  37. package/adminWww/assets/emotion-cache.browser.esm-BgJfNZJN.js +1 -0
  38. package/adminWww/assets/emotion-react.browser.esm-CBtpmfsG.js +8 -0
  39. package/adminWww/assets/emotion-serialize.esm-Q4o_CgeF.js +1 -0
  40. package/adminWww/assets/emotion-styled.browser.esm-BeD8nBzN.js +1 -0
  41. package/adminWww/assets/emotion-use-insertion-effect-with-fallbacks.browser.esm-BIy6Leuu.js +1 -0
  42. package/adminWww/assets/geosearch.module-B6h9BuIR.js +1 -0
  43. package/adminWww/assets/hostInit-fzxL8JAx.js +1 -1
  44. package/adminWww/assets/iconBase-BAOnvyiQ.js +1 -0
  45. package/adminWww/assets/{index-Qa7Q_Dz5.js → index-BOnh7es7.js} +1 -1
  46. package/adminWww/assets/{index-B1ITPhEY.js → index-BSfwmoAE.js} +3 -3
  47. package/adminWww/assets/{index-rKfs-rCa.js → index-BVgYaw7t.js} +1 -1
  48. package/adminWww/assets/{index-D--ojYan.js → index-C9i3HTsG.js} +1 -1
  49. package/adminWww/assets/{index-wN1ZlPSW.js → index-CELb-gCK.js} +2 -2
  50. package/adminWww/assets/{index-DPDg2YA0.js → index-CU6eZCem.js} +1 -1
  51. package/adminWww/assets/{index-DTGUg51P.js → index-DZ0MncEz.js} +2 -2
  52. package/adminWww/assets/index-Dg-s3k0-.js +10 -0
  53. package/adminWww/assets/index-tS5iCAF7.js +55 -0
  54. package/adminWww/assets/{iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BOKYvG_W.js → iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-CXogaIXO.js} +1 -1
  55. package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-h9SMNPLU.js → iobroker_admin__loadShare__leaflet__loadShare__-DIpcqFbm.js} +1 -1
  56. package/adminWww/assets/{iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BnsS7SOQ.js → iobroker_admin__loadShare__prop_mf_2_types__loadShare__-pDONiJUe.js} +1 -1
  57. package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js → iobroker_admin__loadShare__react__loadShare__-CuzHmAOj.js} +1 -1
  58. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CHE4rLsT.js +5 -0
  59. package/adminWww/assets/leaflet-src-BRBM-1HK.js +4 -0
  60. package/adminWww/assets/{sentry-H_UdJ2zx.js → sentry-B6yHtsbd.js} +1 -1
  61. package/adminWww/assets/{zh-cn-vvAC9zpl.js → zh-cn-heTcsLnU.js} +13 -13
  62. package/adminWww/img/admin.png +0 -0
  63. package/adminWww/index.html +2 -2
  64. package/adminWww/mf-manifest.json +1 -1
  65. package/adminWww/remoteEntry.js +2 -2
  66. package/build/i18n/de.json +18 -0
  67. package/build/i18n/es.json +18 -0
  68. package/build/i18n/fr.json +18 -0
  69. package/build/i18n/it.json +18 -0
  70. package/build/i18n/nl.json +18 -0
  71. package/build/i18n/pl.json +18 -0
  72. package/build/i18n/pt.json +18 -0
  73. package/build/i18n/ru.json +18 -0
  74. package/build/i18n/uk.json +18 -0
  75. package/build/i18n/zh-cn.json +18 -0
  76. package/build/lib/DockerManager.js +1315 -0
  77. package/build/lib/DockerManager.js.map +1 -0
  78. package/build/lib/dockerManager.types.js +3 -0
  79. package/build/lib/dockerManager.types.js.map +1 -0
  80. package/{build-backend → build}/lib/testPassword.js +1 -1
  81. package/{build-backend → build}/lib/testPassword.js.map +1 -1
  82. package/{build-backend → build}/lib/translations.js +16 -1
  83. package/build/lib/translations.js.map +1 -0
  84. package/{build-backend → build}/main.js +58 -5
  85. package/build/main.js.map +1 -0
  86. package/io-package.json +14 -14
  87. package/package.json +7 -7
  88. package/adminWww/assets/Adapters-CgSIajcF.js +0 -7
  89. package/adminWww/assets/Config-BQSl4bfA.js +0 -1
  90. package/adminWww/assets/CustomModal-DNMTLv4y.js +0 -1
  91. package/adminWww/assets/CustomTab-Bl8S8QZW.js +0 -1
  92. package/adminWww/assets/DefaultPropsProvider-u5xB1Fxz.js +0 -30
  93. package/adminWww/assets/EasyMode-xDbqrply.js +0 -1
  94. package/adminWww/assets/FilledInput-CysG4ax_.js +0 -2
  95. package/adminWww/assets/Hosts-qIsB4Gub.js +0 -121
  96. package/adminWww/assets/Instances-BA_DCzs8.js +0 -2
  97. package/adminWww/assets/Intro-00oh6SLw.js +0 -2
  98. package/adminWww/assets/Logs-Cvpgh-zN.js +0 -1
  99. package/adminWww/assets/Objects-Dp71iotS.js +0 -60
  100. package/adminWww/assets/Tabs-sxfWgN0b.js +0 -138
  101. package/adminWww/assets/Users-CDcWqTfZ.js +0 -1
  102. package/adminWww/assets/ace-BG5WYul1.js +0 -985
  103. package/adminWww/assets/blueGrey-DYsiMDOn.js +0 -29
  104. package/adminWww/assets/emotion-cache.browser.esm-B8BFze5o.js +0 -1
  105. package/adminWww/assets/emotion-react.browser.esm-BCDt9NrH.js +0 -8
  106. package/adminWww/assets/emotion-serialize.esm-BUa21YfQ.js +0 -1
  107. package/adminWww/assets/emotion-styled.browser.esm-CyFqGgyG.js +0 -1
  108. package/adminWww/assets/emotion-utils.browser.esm-pglN4_eI.js +0 -1
  109. package/adminWww/assets/geosearch.module-DH4NhiPj.js +0 -1
  110. package/adminWww/assets/iconBase-C3vi24ZE.js +0 -1
  111. package/adminWww/assets/index-D3IAEXXP.js +0 -10
  112. package/adminWww/assets/index-qcIeekse.js +0 -55
  113. package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CTkuGOOk.js +0 -5
  114. package/adminWww/assets/leaflet-src-A2ZHl6nF.js +0 -4
  115. package/build-backend/i18n/de.json +0 -18
  116. package/build-backend/i18n/es.json +0 -18
  117. package/build-backend/i18n/fr.json +0 -18
  118. package/build-backend/i18n/it.json +0 -18
  119. package/build-backend/i18n/nl.json +0 -18
  120. package/build-backend/i18n/pl.json +0 -18
  121. package/build-backend/i18n/pt.json +0 -18
  122. package/build-backend/i18n/ru.json +0 -18
  123. package/build-backend/i18n/uk.json +0 -18
  124. package/build-backend/i18n/zh-cn.json +0 -18
  125. package/build-backend/lib/translations.js.map +0 -1
  126. package/build-backend/main.js.map +0 -1
  127. /package/{build-backend → build}/i18n/en.json +0 -0
  128. /package/{build-backend → build}/lib/checkLinuxPass.js +0 -0
  129. /package/{build-backend → build}/lib/checkLinuxPass.js.map +0 -0
  130. /package/{build-backend → build}/lib/utils.js +0 -0
  131. /package/{build-backend → build}/lib/utils.js.map +0 -0
  132. /package/{build-backend → build}/lib/web.js +0 -0
  133. /package/{build-backend → build}/lib/web.js.map +0 -0
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "No se puede cambiar la contraseña para \"%s\": %s",
3
- "Cannot change password for %s:": "No se puede cambiar la contraseña del usuario \"%s\". Intente hacerlo manualmente.\nAbra la CLI, inicie sesión como usuario con derechos de root/sudo e ingrese:",
4
- "Empty password isn't allowed": "No se permite contraseña vacía",
5
- "Enter your new password by prompt.": "Ingrese su nueva contraseña cuando se le solicite.",
6
- "Minimal length is 6 chars": "La longitud mínima es de 6 caracteres.",
7
- "New password": "Nueva contraseña",
8
- "Offline message": "Instrucciones sobre cómo cambiar la contraseña. Abra la CLI, inicie sesión como usuario con derechos de root/sudo e ingrese:\n\"sudo passwd %s\"\nIngrese su nueva contraseña cuando se le solicite.",
9
- "Password and password repeat are not equal": "La contraseña y la repetición de contraseña no son iguales",
10
- "Password is too short (min 6 chars)": "La contraseña es demasiado corta (mínimo 6 caracteres)",
11
- "Password repeat": "Repetición de contraseña",
12
- "Password successfully changed for \"%s\"": "La contraseña para \"%s\" se cambió correctamente",
13
- "Set password": "Establecer contraseña",
14
- "The password for user \"%s\" was successfully changed": "La contraseña del usuario \"%s\" se cambió correctamente",
15
- "This message is no more actual and was generated by other instance start": "Este mensaje ya no es actual y fue generado por otra instancia de inicio.",
16
- "User \"%s\" has well known password. We suggest to change it.": "El usuario \"%s\" tiene una contraseña conocida. Le sugerimos cambiarla.",
17
- "User: %s": "Usuario: %s"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "Impossible de changer le mot de passe pour « %s » : %s",
3
- "Cannot change password for %s:": "Le mot de passe de l'utilisateur « %s » ne peut pas être modifié. Veuillez essayer de le faire manuellement.\nOuvrez la CLI, connectez-vous en tant qu'utilisateur avec les droits root/sudo et saisissez :",
4
- "Empty password isn't allowed": "Un mot de passe vide n'est pas autorisé",
5
- "Enter your new password by prompt.": "Entrez votre nouveau mot de passe lorsque vous y êtes invité.",
6
- "Minimal length is 6 chars": "La longueur minimale est de 6 caractères",
7
- "New password": "Nouveau mot de passe",
8
- "Offline message": "Instructions pour changer le mot de passe. Ouvrez la CLI, connectez-vous en tant qu'utilisateur avec les droits root/sudo et saisissez :\n\"sudo passwd %s\"\nSaisissez votre nouveau mot de passe lorsque vous y êtes invité.",
9
- "Password and password repeat are not equal": "Le mot de passe et la répétition du mot de passe ne sont pas égaux",
10
- "Password is too short (min 6 chars)": "Le mot de passe est trop court (au moins 6 caractères)",
11
- "Password repeat": "Répéter le mot de passe",
12
- "Password successfully changed for \"%s\"": "Mot de passe modifié avec succès pour « %s »",
13
- "Set password": "Définir un mot de passe",
14
- "The password for user \"%s\" was successfully changed": "Le mot de passe de l'utilisateur « %s » a été modifié avec succès",
15
- "This message is no more actual and was generated by other instance start": "Ce message n'est plus d'actualité et a été généré par une autre instance",
16
- "User \"%s\" has well known password. We suggest to change it.": "L'utilisateur « %s » possède un mot de passe bien connu. Nous vous suggérons de le modifier.",
17
- "User: %s": "Utilisateur : %s"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "Impossibile modificare la password per \"%s\": %s",
3
- "Cannot change password for %s:": "La password per l'utente \"%s\" non può essere modificata. Prova a farlo manualmente.\nApri CLI, accedi come utente con diritti root/sudo e inserisci:",
4
- "Empty password isn't allowed": "Non è consentita la password vuota",
5
- "Enter your new password by prompt.": "Inserisci la nuova password quando richiesto.",
6
- "Minimal length is 6 chars": "La lunghezza minima è di 6 caratteri",
7
- "New password": "Nuova password",
8
- "Offline message": "Istruzioni su come cambiare password. Apri CLI, accedi come utente con diritti root/sudo e inserisci:\n\"sudo passwd %s\"\nInserisci la tua nuova password quando richiesto.",
9
- "Password and password repeat are not equal": "La password e la ripetizione della password non sono uguali",
10
- "Password is too short (min 6 chars)": "La password è troppo corta (min 6 caratteri)",
11
- "Password repeat": "Ripetizione password",
12
- "Password successfully changed for \"%s\"": "Password modificata con successo per \"%s\"",
13
- "Set password": "Imposta password",
14
- "The password for user \"%s\" was successfully changed": "La password per l'utente \"%s\" è stata modificata con successo",
15
- "This message is no more actual and was generated by other instance start": "Questo messaggio non è più attuale ed è stato generato da un'altra istanza di avvio",
16
- "User \"%s\" has well known password. We suggest to change it.": "L'utente \"%s\" ha una password ben nota. Ti consigliamo di cambiarla.",
17
- "User: %s": "Utente: %s"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "Kan wachtwoord voor \"%s\" niet wijzigen: %s",
3
- "Cannot change password for %s:": "Het wachtwoord voor gebruiker \"%s\" kan niet worden gewijzigd. Probeer het handmatig.\nOpen CLI, log in als gebruiker met root/sudo-rechten en voer in:",
4
- "Empty password isn't allowed": "Een leeg wachtwoord is niet toegestaan",
5
- "Enter your new password by prompt.": "Voer uw nieuwe wachtwoord in als daarom wordt gevraagd.",
6
- "Minimal length is 6 chars": "Minimale lengte is 6 tekens",
7
- "New password": "Nieuw wachtwoord",
8
- "Offline message": "Instructies voor het wijzigen van het wachtwoord. Open CLI, log in als gebruiker met root/sudo rechten en voer in:\n\"sudo passwd %s\"\nVoer uw nieuwe wachtwoord in bij de prompt.",
9
- "Password and password repeat are not equal": "Wachtwoord en wachtwoordherhaling zijn niet gelijk",
10
- "Password is too short (min 6 chars)": "Wachtwoord is te kort (minimaal 6 tekens)",
11
- "Password repeat": "Wachtwoord herhalen",
12
- "Password successfully changed for \"%s\"": "Wachtwoord succesvol gewijzigd voor \"%s\"",
13
- "Set password": "Wachtwoord instellen",
14
- "The password for user \"%s\" was successfully changed": "Het wachtwoord voor gebruiker \"%s\" is succesvol gewijzigd",
15
- "This message is no more actual and was generated by other instance start": "Dit bericht is niet meer actueel en is gegenereerd door een ander exemplaar",
16
- "User \"%s\" has well known password. We suggest to change it.": "Gebruiker \"%s\" heeft een bekend wachtwoord. Wij raden aan om dit te wijzigen.",
17
- "User: %s": "Gebruiker: %s"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "Nie można zmienić hasła dla „%s”: %s",
3
- "Cannot change password for %s:": "Hasła użytkownika „%s” nie można zmienić. Spróbuj zrobić to ręcznie.\nOtwórz CLI, zaloguj się jako użytkownik z uprawnieniami root/sudo i wprowadź:",
4
- "Empty password isn't allowed": "Puste hasło nie jest dozwolone",
5
- "Enter your new password by prompt.": "Wprowadź nowe hasło po wyświetleniu monitu.",
6
- "Minimal length is 6 chars": "Minimalna długość to 6 znaków",
7
- "New password": "Nowe hasło",
8
- "Offline message": "Instrukcja zmiany hasła. Otwórz CLI, zaloguj się jako użytkownik z uprawnieniami root/sudo i wpisz:\n\"sudo passwd %s\"\nWprowadź nowe hasło po wyświetleniu monitu.",
9
- "Password and password repeat are not equal": "Hasło i powtórzenie hasła nie są równe",
10
- "Password is too short (min 6 chars)": "Hasło jest za krótkie (min. 6 znaków)",
11
- "Password repeat": "Powtórz hasło",
12
- "Password successfully changed for \"%s\"": "Hasło dla \"%s\" zostało pomyślnie zmienione",
13
- "Set password": "Ustaw hasło",
14
- "The password for user \"%s\" was successfully changed": "Hasło użytkownika „%s” zostało pomyślnie zmienione",
15
- "This message is no more actual and was generated by other instance start": "Ta wiadomość nie jest już aktualna i została wygenerowana przez uruchomienie innej instancji",
16
- "User \"%s\" has well known password. We suggest to change it.": "Użytkownik \"%s\" ma dobrze znane hasło. Sugerujemy jego zmianę.",
17
- "User: %s": "Użytkownik: %s"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "Não é possível alterar a senha para \"%s\": %s",
3
- "Cannot change password for %s:": "A senha do usuário \"%s\" não pode ser alterada. Tente fazer isso manualmente.\nAbra o CLI, faça login como usuário com direitos root/sudo e digite:",
4
- "Empty password isn't allowed": "Não é permitida uma senha vazia",
5
- "Enter your new password by prompt.": "Digite sua nova senha quando solicitado.",
6
- "Minimal length is 6 chars": "O comprimento mínimo é de 6 caracteres",
7
- "New password": "Nova Senha",
8
- "Offline message": "Instruções sobre como alterar a senha. Abra o CLI, faça login como usuário com direitos root/sudo e digite:\n\"sudo passwd %s\"\nDigite sua nova senha por prompt.",
9
- "Password and password repeat are not equal": "Senha e repetição de senha não são iguais",
10
- "Password is too short (min 6 chars)": "A senha é muito curta (mínimo de 6 caracteres)",
11
- "Password repeat": "Repetição de senha",
12
- "Password successfully changed for \"%s\"": "A senha foi alterada com sucesso para \"%s\"",
13
- "Set password": "Definir senha",
14
- "The password for user \"%s\" was successfully changed": "A senha do usuário \"%s\" foi alterada com sucesso",
15
- "This message is no more actual and was generated by other instance start": "Esta mensagem não é mais atual e foi gerada por outra instância inicial",
16
- "User \"%s\" has well known password. We suggest to change it.": "O usuário \"%s\" tem uma senha bem conhecida. Sugerimos alterá-la.",
17
- "User: %s": "Usuários"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "Невозможно изменить пароль для \"%s\": %s",
3
- "Cannot change password for %s:": "Пароль пользователя \"%s\" не может быть изменен. Попробуйте сделать это вручную.\nОткройте CLI, войдите как пользователь с правами root/sudo и введите:",
4
- "Empty password isn't allowed": "Пустой пароль не допускается.",
5
- "Enter your new password by prompt.": "Введите новый пароль по запросу.",
6
- "Minimal length is 6 chars": "Минимальная длина — 6 символов.",
7
- "New password": "Новый пароль",
8
- "Offline message": "Инструкция по смене пароля. Откройте CLI, войдите как пользователь с правами root/sudo и введите:\n\"sudo passwd %s\"\nВведите новый пароль по запросу.",
9
- "Password and password repeat are not equal": "Пароль и повтор пароля не равны",
10
- "Password is too short (min 6 chars)": "Пароль слишком короткий (минимум 6 символов)",
11
- "Password repeat": "Повторите пароль",
12
- "Password successfully changed for \"%s\"": "Пароль успешно изменен для \"%s\"",
13
- "Set password": "Установить пароль",
14
- "The password for user \"%s\" was successfully changed": "Пароль для пользователя \"%s\" был успешно изменен",
15
- "This message is no more actual and was generated by other instance start": "Это сообщение больше не актуально и было сгенерировано при запуске другого экземпляра",
16
- "User \"%s\" has well known password. We suggest to change it.": "Операционная система, похоже, использует известный стандартный пароль для системного пользователя \"%s\". В целях безопасности мы рекомендуем его изменить.",
17
- "User: %s": "Пользователь: %s"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "Неможливо змінити пароль для \"%s\": %s",
3
- "Cannot change password for %s:": "Пароль користувача \"%s\" не можна змінити. Будь ласка, спробуйте зробити це вручну.\nВідкрийте CLI, увійдіть як користувач із правами root/sudo та введіть:",
4
- "Empty password isn't allowed": "Порожній пароль заборонено",
5
- "Enter your new password by prompt.": "Введіть свій новий пароль після підказки.",
6
- "Minimal length is 6 chars": "Мінімальна довжина – 6 символів",
7
- "New password": "Новий пароль",
8
- "Offline message": "Інструкція як змінити пароль. Відкрийте CLI, увійдіть як користувач із правами root/sudo та введіть:\n\"sudo passwd %s\"\nВведіть свій новий пароль після підказки.",
9
- "Password and password repeat are not equal": "Пароль і повтор пароля не однакові",
10
- "Password is too short (min 6 chars)": "Пароль занадто короткий (мінімум 6 символів)",
11
- "Password repeat": "Повторення пароля",
12
- "Password successfully changed for \"%s\"": "Пароль для \"%s\" успішно змінено",
13
- "Set password": "Встановити пароль",
14
- "The password for user \"%s\" was successfully changed": "Пароль користувача \"%s\" успішно змінено",
15
- "This message is no more actual and was generated by other instance start": "Це повідомлення більше не є актуальним і було згенероване запуском іншого екземпляра",
16
- "User \"%s\" has well known password. We suggest to change it.": "Користувач \"%s\" має добре відомий пароль. Пропонуємо змінити.",
17
- "User: %s": "Користувач: %s"
18
- }
@@ -1,18 +0,0 @@
1
- {
2
- "Cannot change password for \"%s\": %s": "无法更改“%s”的密码:%s",
3
- "Cannot change password for %s:": "无法更改用户“%s”的密码。请尝试手动更改。\n打开 CLI,以具有 root/sudo 权限的用户身份登录并输入:",
4
- "Empty password isn't allowed": "不允许使用空密码",
5
- "Enter your new password by prompt.": "根据提示输入您的新密码。",
6
- "Minimal length is 6 chars": "最小长度为 6 个字符",
7
- "New password": "新密码",
8
- "Offline message": "更改密码的说明。打开 CLI,以具有 root/sudo 权限的用户身份登录并输入:\n“sudo passwd %s”\n根据提示输入新密码。",
9
- "Password and password repeat are not equal": "密码与密码重复不相等",
10
- "Password is too short (min 6 chars)": "密码太短(至少 6 个字符)",
11
- "Password repeat": "密码重复",
12
- "Password successfully changed for \"%s\"": "已成功更改“%s”的密码",
13
- "Set password": "设置密码",
14
- "The password for user \"%s\" was successfully changed": "用户“%s”的密码已成功更改",
15
- "This message is no more actual and was generated by other instance start": "此消息不再是实际消息并且是由其他实例启动生成的",
16
- "User \"%s\" has well known password. We suggest to change it.": "用户“%s”的密码众所周知。我们建议更改它。",
17
- "User: %s": "用户:%s"
18
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"translations.js","sourceRoot":"","sources":["../../src/lib/translations.ts"],"names":[],"mappings":";;AA4BA,oDAOC;AAxBD,MAAM,UAAU,GAAuC;IACnD,EAAE,EAAE,wEAAwE;IAC5E,EAAE,EAAE,kFAAkF;IACtF,EAAE,EAAE,0EAA0E;IAC9E,EAAE,EAAE,iFAAiF;IACrF,EAAE,EAAE,gFAAgF;IACpF,EAAE,EAAE,gFAAgF;IACpF,EAAE,EAAE,iFAAiF;IACrF,EAAE,EAAE,8EAA8E;IAClF,EAAE,EAAE,iFAAiF;IACrF,EAAE,EAAE,oEAAoE;IACxE,OAAO,EAAE,qDAAqD;CACjE,CAAC;AAEF;;GAEG;AACH,SAAgB,oBAAoB,CAAC,OAA6B;IAC9D,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IAEhE,OAAO,UAAU,CAAC,IAAI,CAAC;SAClB,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC;SAC5B,OAAO,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SAC9C,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["interface AdapterUpdateOptions {\n /** Language to translate text to */\n lang: ioBroker.Languages;\n /** The adapter to update */\n adapter: string;\n /** The installed version */\n installedVersion: string;\n /** The new available version */\n newVersion: string;\n}\n\nconst updateText: Record<ioBroker.Languages, string> = {\n en: 'Adapter %adapter can be updated from %installedVersion to %newVersion.',\n de: 'Adapter %adapter kann von %installedVersion auf %newVersion aktualisiert werden.',\n ru: 'Адаптер %adapter может быть обновлен с %installedVersion до %newVersion.',\n pt: 'O adaptador %adapter pode ser atualizado de %installedVersion para %newVersion.',\n nl: 'Adapter %adapter kan worden bijgewerkt van %installedVersion naar %newVersion.',\n fr: \"L'adaptateur %adapter peut être mis à jour de %installedVersion à %newVersion.\",\n it: \"L'adattatore %adapter può essere aggiornato da %installedVersion a %newVersion.\",\n es: 'El adaptador %adapter puede actualizarse de %installedVersion a %newVersion.',\n pl: 'Adapter %adapter może zostać zaktualizowany z %installedVersion do %newVersion.',\n uk: 'Адаптер %adapter можна оновити з %installedVersion до %newVersion.',\n 'zh-cn': '适配器 %adapter 可以从 %installedVersion 升级到 %newVersion。',\n};\n\n/**\n * Get text for a message about adapter update in given language\n */\nexport function getAdapterUpdateText(options: AdapterUpdateOptions): string {\n const { lang, adapter, installedVersion, newVersion } = options;\n\n return updateText[lang]\n .replace('%adapter', adapter)\n .replace('%installedVersion', installedVersion)\n .replace('%newVersion', newVersion);\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Admin backend\n *\n * Controls Adapter-Processes\n *\n * Copyright 2014-2025 Denis Haev <dogafox@gmail.com>,\n * MIT License\n *\n */\n\nimport * as semver from 'semver';\nimport axios from 'axios';\nimport { readFileSync, existsSync } from 'node:fs';\nimport { platform } from 'node:os';\nimport { join } from 'node:path';\nimport { randomBytes } from 'node:crypto';\n\nimport { Adapter, type AdapterOptions, commonTools, controllerDir, I18n } from '@iobroker/adapter-core';\nimport { SocketAdmin, type Server, type Store, type SocketSettings } from '@iobroker/socket-classes';\nimport { SocketIO } from '@iobroker/ws-server';\nimport { getAdapterUpdateText } from './lib/translations';\nimport Web, { type AdminAdapterConfig } from './lib/web';\nimport { checkWellKnownPasswords, setLinuxPassword } from './lib/checkLinuxPass';\n\nconst adapterName = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), { encoding: 'utf-8' }))\n .name.split('.')\n .pop();\n\nconst { getInstalledInfo } = commonTools;\n\nconst ONE_HOUR_MS = 3_600_000;\nconst ERROR_PERMISSION = 'permissionError';\n\nconst CURRENT_MAX_MAJOR_NODEJS = 20;\nconst CURRENT_MAX_MAJOR_NPM = 8;\n\nlet socket: SocketAdmin;\nlet webServer: Web;\nlet lastRepoUpdate: number;\n\n// Cache of objects\nlet objects: Record<string, ioBroker.Object> = {};\nconst secret = 'Zgfr56gFe87jJOM'; // Will be generated by first start\nlet systemLanguage: ioBroker.Languages = 'en';\n\ninterface UpdateInfo {\n /** Current available version in repository */\n availableVersion: string;\n /** Current installed version */\n installedVersion: string;\n}\n\ninterface NodeVersionInformation {\n /** Node.js version */\n version: string;\n /** npm version */\n npm: string;\n}\n\ninterface WellKnownUserPassword {\n login: string;\n password: string;\n result?: boolean;\n}\n\ninterface NewsMessage {\n id: string;\n 'date-start': string;\n 'date-end': string;\n created: string;\n 'node-version': string;\n 'npm-version': string;\n conditions: Record<string, string>;\n os: string;\n repo: string;\n uuid: string;\n 'number-of-objects': string;\n 'objects-db-type': string;\n class: string;\n title: ioBroker.Translated;\n content: ioBroker.Translated;\n}\n\nclass Admin extends Adapter {\n declare public config: AdminAdapterConfig;\n\n /** secret used for the socket connection */\n public secret: string;\n\n /** Timer to update repository */\n private timerRepo: NodeJS.Timeout;\n\n private updaterTimeout: NodeJS.Timeout;\n\n private ratingTimeout: NodeJS.Timeout;\n\n private timerNews: NodeJS.Timeout;\n\n private _tasks: ioBroker.AnyObject[];\n\n private changedPasswords: WellKnownUserPassword[] = [];\n\n constructor(options: Partial<AdapterOptions> = {}) {\n options = {\n ...options,\n name: adapterName, // adapter name\n logTransporter: true, // receive the logs\n systemConfig: true,\n install: () => void null,\n };\n\n super(options as AdapterOptions);\n\n this.on('objectChange', this.onObjectChange);\n this.on('stateChange', this.onStateChange);\n this.on('ready', this.onReady);\n this.on('message', this.onMessage);\n this.on('unload', this.onUnload);\n this.on('fileChange', this.onFileChange);\n this.on('log', this.onLog);\n }\n\n /**\n * Is called if a subscribed object changes\n *\n * @param id object ID that changed\n * @param obj the changed object value\n */\n onObjectChange = (id: string, obj: ioBroker.Object | null | undefined): void => {\n if (obj) {\n objects[id] = obj as ioBroker.StateObject;\n\n if (id === 'system.config' && !this.config.language) {\n if (obj.common?.language) {\n systemLanguage = obj.common.language;\n if (webServer) {\n webServer.setLanguage(systemLanguage);\n }\n }\n }\n\n if (id === 'system.repositories' || id.match(/^system\\.adapter\\.[^.]+$/)) {\n if (this.updaterTimeout) {\n clearTimeout(this.updaterTimeout);\n }\n this.updaterTimeout = setTimeout(() => {\n this.updaterTimeout = null;\n void this.writeUpdateInfo();\n }, 5_000);\n }\n } else {\n // console.log('objectDeleted: ' + id);\n if (objects[id]) {\n delete objects[id];\n }\n }\n\n // TODO Build in some threshold of messages\n socket?.objectChange(id, obj);\n };\n\n /**\n * Is called if a subscribed state was changed\n *\n * @param id state ID that changed\n * @param state the changed state value\n */\n onStateChange = (id: string, state: ioBroker.State | null | undefined): void => {\n if (id === `system.adapter.${this.namespace}.plugins.sentry.enabled`) {\n webServer.resetIndexHtml();\n }\n\n socket?.stateChange(id, state);\n };\n\n onFileChange = (id: string, fileName: string, size: number): void => {\n socket?.fileChange(id, fileName, size);\n };\n\n /**\n * Is called when databases are connected and adapter received configuration.\n */\n onReady = async (): Promise<void> => {\n const systemConfig = await this.getForeignObjectAsync('system.config');\n if (systemConfig) {\n systemConfig.native = systemConfig.native || {};\n if (this.config.language) {\n systemLanguage = this.config.language;\n } else if (systemConfig.common?.language) {\n systemLanguage = systemConfig.common.language;\n }\n I18n.init(__dirname, systemLanguage).catch(e => this.log.error(`Cannot init i18n: ${e}`));\n\n if (!systemConfig.native.secret) {\n randomBytes(24, (_ex, buf) => {\n this.secret = buf.toString('hex');\n this.extendForeignObject('system.config', { native: { secret: this.secret } }).catch(e =>\n this.log.error(`Cannot set secret: ${e}`),\n );\n this.init();\n });\n } else {\n this.secret = systemConfig.native.secret;\n this.init();\n }\n } else {\n this.secret = secret;\n this.log.error('Cannot find object system.config');\n }\n };\n\n /**\n * Some message was sent to this instance over the message box. Used by email, pushover, text2speech, ...\n * Using this method requires \"common.messagebox\" property to be set to true in io-package.json\n *\n * @param obj the message object\n */\n onMessage = (obj: ioBroker.Message): void => {\n if (!obj) {\n return;\n }\n if (obj.command === 'im') {\n // if not instance message\n socket.publishInstanceMessageAll(obj.from, obj.message.m, obj.message.s, obj.message.d);\n } else if (obj.command === 'checkFiles') {\n if (typeof obj.message === 'string') {\n if (obj.callback) {\n try {\n this.sendTo(obj.from, obj.command, { result: existsSync(obj.message) }, obj.callback);\n } catch (e) {\n this.sendTo(obj.from, obj.command, { error: e.message }, obj.callback);\n }\n }\n return;\n } else if (Array.isArray(obj.message)) {\n const result: Record<string, boolean> = {};\n for (let f = 0; f < obj.message.length; f++) {\n try {\n result[obj.message[f]] = existsSync(obj.message[f]);\n } catch (e) {\n result[obj.message[f]] = e.message;\n }\n }\n return obj.callback && this.sendTo(obj.from, obj.command, result, obj.callback);\n }\n } else if (obj.command === 'autocomplete') {\n // just for test\n return (\n obj.callback &&\n this.sendTo(\n obj.from,\n obj.command,\n [\n { value: 1, label: 'first' },\n { value: 2, label: 'second' },\n ],\n obj.callback,\n )\n );\n } else if (obj.command === 'selectSendTo') {\n this.log.info(`SelectSendTo: ${JSON.stringify(obj.message)}`);\n // just for test\n return (\n obj.callback &&\n this.sendTo(\n obj.from,\n obj.command,\n [\n { label: 'Afghanistan', value: 'AF' },\n { label: 'Åland Islands', value: 'AX' },\n { label: 'Albania', value: 'AL' },\n ],\n obj.callback,\n )\n );\n } else if (obj.command === 'url') {\n this.log.info(`url: ${JSON.stringify(obj.message)}`);\n // just for test\n return (\n obj.callback &&\n this.sendTo(obj.from, obj.command, { openUrl: obj.message._origin, saveConfig: true }, obj.callback)\n );\n } else if (obj.command.startsWith('admin:')) {\n return this.processNotificationsGui(obj);\n } else if (obj.command.startsWith('test:')) {\n // just for test\n this.log.info(`test: ${JSON.stringify(obj.message)}`);\n return;\n } else if (webServer?.processMessage(obj)) {\n return;\n }\n\n socket?.sendCommand(obj);\n };\n\n processNotificationsGui(obj: ioBroker.Message): void {\n if (obj.command === 'admin:getNotificationSchema') {\n const guiMessage: { login: string; password: string } = obj.message;\n const alreadyDone = this.changedPasswords.find(\n item => item.login === guiMessage.login && item.password === guiMessage.password,\n );\n let schema: any;\n if (alreadyDone?.result === true) {\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'staticText',\n text: I18n.getTranslatedObject(\n 'The password for user \"%s\" was successfully changed',\n guiMessage.login,\n ),\n style: { color: 'green' },\n sm: 12,\n },\n },\n };\n } else if (alreadyDone?.result === false) {\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'staticText',\n text: I18n.getTranslatedObject('Cannot change password for %s:', guiMessage.login),\n style: { color: 'orange' },\n sm: 12,\n },\n _info1: {\n newLine: true,\n type: 'staticText',\n text: `sudo passwd ${guiMessage.login}`,\n style: { fontFamilies: 'monospace', color: 'green', backgroundColor: 'black' },\n sm: 12,\n },\n _info3: {\n newLine: true,\n type: 'staticText',\n text: I18n.getTranslatedObject('Enter your new password by prompt.'),\n style: { fontFamilies: 'monospace', color: 'green', backgroundColor: 'black' },\n sm: 12,\n },\n },\n };\n } else if (alreadyDone) {\n // Ask user for new password and for password repeat\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'header',\n size: 5,\n text: I18n.getTranslatedObject(\n `User \"%s\" has well known password. We suggest to change it.`,\n guiMessage.login,\n ),\n style: { color: 'orange' },\n sm: 12,\n },\n password: {\n newLine: true,\n label: I18n.getTranslatedObject('New password'),\n type: 'password',\n help: I18n.getTranslatedObject('Minimal length is 6 chars'),\n visible: true,\n sm: 12,\n md: 6,\n },\n passwordRepeat: {\n label: I18n.getTranslatedObject('Password repeat'),\n type: 'password',\n visible: true,\n sm: 12,\n md: 6,\n },\n _send: {\n newLine: true,\n type: 'sendto',\n command: 'admin:setPassword',\n jsonData: `{ \"oldPassword\": \"${guiMessage.password}\", \"login\": \"${guiMessage.login}\", \"password\": \"$\\{data.password}\", \"passwordRepeat\": \"$\\{data.passwordRepeat}\" }`,\n label: I18n.getTranslatedObject('Set password'),\n disabled:\n '!data.password || !data.passwordRepeat || data.password.length < 6 || data.password !== data.passwordRepeat',\n sm: 6,\n md: 3,\n variant: 'contained',\n },\n },\n };\n } else {\n schema = {\n type: 'panel',\n items: {\n _info: {\n type: 'staticText',\n text: I18n.getTranslatedObject(\n 'This message is no more actual and was generated by other instance start',\n ),\n style: { color: 'grey' },\n sm: 12,\n },\n },\n };\n }\n\n this.sendTo(obj.from, obj.command, { schema }, obj.callback);\n } else if (obj.command === 'admin:setPassword') {\n // compare password and passwordRepeat\n const guiMessage: { login: string; password: string; passwordRepeat: string; oldPassword: string } =\n obj.message;\n // empty password isn't allowed\n if (!guiMessage.password) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject(\"Empty password isn't allowed\"),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else if (guiMessage.password !== guiMessage.passwordRepeat) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject('Password and password repeat are not equal'),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else if (guiMessage.password.length < 6) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject('Password is too short (min 6 chars)'),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else {\n void setLinuxPassword(guiMessage.login, guiMessage.oldPassword, guiMessage.password).then(result => {\n this.changedPasswords = this.changedPasswords.filter(\n item => item.password !== guiMessage.login && item.login !== guiMessage.oldPassword,\n );\n this.changedPasswords.push({\n login: guiMessage.login,\n password: guiMessage.oldPassword,\n result: result === true,\n });\n if (result === true) {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject(\n 'Password successfully changed for \"%s\"',\n guiMessage.login,\n ),\n refresh: true,\n },\n },\n obj.callback,\n );\n } else {\n this.sendTo(\n obj.from,\n obj.command,\n {\n command: {\n command: 'message',\n message: I18n.getTranslatedObject(\n `Cannot change password for \"%s\": %s`,\n guiMessage.login,\n result,\n ),\n style: { color: 'red' },\n refresh: true,\n },\n },\n obj.callback,\n );\n }\n });\n }\n }\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n *\n * @param callback Callback after unloading\n */\n onUnload = (callback: () => void): void => {\n if (this.timerRepo) {\n clearTimeout(this.timerRepo);\n this.timerRepo = null;\n }\n\n if (this.timerNews) {\n clearTimeout(this.timerNews);\n this.timerNews = null;\n }\n\n if (this.ratingTimeout) {\n clearTimeout(this.ratingTimeout);\n this.ratingTimeout = null;\n }\n\n if (this.updaterTimeout) {\n clearTimeout(this.updaterTimeout);\n this.updaterTimeout = null;\n }\n\n try {\n this.log.info(`terminating http${this.config.secure ? 's' : ''} server on port ${this.config.port}`);\n socket?.close();\n webServer.close();\n callback();\n } catch {\n callback();\n }\n };\n\n onLog = (obj: {\n /** Log message */\n message: string;\n /** origin */\n from: string;\n /** timestamp in ms */\n ts: number;\n /** Log message */\n severity: ioBroker.LogLevel;\n /** unique ID of the message */\n _id: number;\n }): void => socket?.sendLog(obj);\n\n async createUpdateInfo(): Promise<void> {\n const promises = [];\n // create a connected object and state\n const updatesNumberObj = objects[`${this.namespace}.info.updatesNumber`];\n\n if (!updatesNumberObj || !updatesNumberObj.common || updatesNumberObj.common.type !== 'number') {\n const obj: ioBroker.StateObject = {\n _id: 'info.updatesNumber',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'Number of adapters to update',\n de: 'Anzahl der zu aktualisierenden Adapter',\n ru: 'Количество адаптеров для обновления',\n pt: 'Número de adaptadores para atualizar',\n nl: 'Aantal adapters om te updaten',\n fr: \"Nombre d'adaptateurs à mettre à jour\",\n it: 'Numero di adattatori da aggiornare',\n es: 'Número de adaptadores para actualizar',\n pl: 'Liczba adapterów do aktualizacji',\n uk: 'Кількість адаптерів для оновлення',\n 'zh-cn': '要更新的适配器数量',\n },\n type: 'number',\n read: true,\n write: false,\n def: 0,\n },\n native: {},\n };\n\n await this.setObject(obj._id, obj);\n }\n\n const updatesListObj = objects[`${this.namespace}.info.updatesList`];\n\n if (!updatesListObj || !updatesListObj.common || updatesListObj.common.type !== 'string') {\n const obj: ioBroker.StateObject = {\n _id: 'info.updatesList',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'List of adapters to update',\n de: 'Liste der zu aktualisierenden Adapter',\n ru: 'Список адаптеров для обновления',\n pt: 'Lista de adaptadores para atualizar',\n nl: 'Lijst met adapters die moeten worden bijgewerkt',\n fr: 'Liste des adaptateurs à mettre à jour',\n it: 'Elenco degli adattatori da aggiornare',\n es: 'Lista de adaptadores para actualizar',\n pl: 'Lista adapterów do aktualizacji',\n uk: 'Список адаптерів для оновлення',\n 'zh-cn': '要更新的适配器列表',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n };\n\n await this.setObject(obj._id, obj);\n }\n\n const newUpdatesObj = objects[`${this.namespace}.info.newUpdates`];\n\n if (!newUpdatesObj || !newUpdatesObj.common || newUpdatesObj.common.type !== 'boolean') {\n const obj: ioBroker.StateObject = {\n _id: 'info.newUpdates',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'Indicator if new adapter updates are available',\n de: 'Anzeige, ob neue Adapter-Updates verfügbar sind',\n ru: 'Индикатор наличия новых обновлений адаптера',\n pt: 'Indicador se novas atualizações do adaptador estão disponíveis',\n nl: 'Indicator of er nieuwe adapter-updates beschikbaar zijn',\n fr: \"Indicateur si de nouvelles mises à jour de l'adaptateur sont disponibles\",\n it: \"Indicatore se sono disponibili nuovi aggiornamenti dell'adattatore\",\n es: 'Indicador si hay nuevas actualizaciones de adaptadores disponibles',\n pl: 'Wskaźnik, czy dostępne są nowe aktualizacje adaptera',\n uk: 'Індикатор наявності нових оновлень адаптера',\n 'zh-cn': '指示是否有新的适配器更新可用',\n },\n type: 'boolean',\n read: true,\n write: false,\n def: false,\n },\n native: {},\n };\n\n promises.push(this.setObjectAsync(obj._id, obj));\n }\n\n const updatesJsonObj = objects[`${this.namespace}.info.updatesJson`];\n\n if (!updatesJsonObj || !updatesJsonObj.common || updatesJsonObj.common.type !== 'string') {\n const obj: ioBroker.StateObject = {\n _id: 'info.updatesJson',\n type: 'state',\n common: {\n role: 'indicator.updates',\n name: {\n en: 'JSON string with adapter update information',\n de: 'JSON-String mit Adapteraktualisierungsinformationen',\n ru: 'Строка JSON с информацией об обновлении адаптера',\n pt: 'String JSON com informações de atualização do adaptador',\n nl: 'JSON-tekenreeks met adapter-update-informatie',\n fr: \"Chaîne JSON avec les informations de mise à jour de l'adaptateur\",\n it: \"Stringa JSON con informazioni sull'aggiornamento dell'adattatore\",\n es: 'Cadena JSON con información de actualización del adaptador',\n pl: 'Ciąg JSON z informacjami o aktualizacji adaptera',\n uk: 'Рядок JSON з інформацією про оновлення адаптера',\n 'zh-cn': '带有适配器更新信息的 JSON 字符串',\n },\n type: 'string',\n read: true,\n write: false,\n def: '{}',\n },\n native: {},\n };\n\n promises.push(this.setObjectAsync(obj._id, obj));\n }\n\n const lastUpdateCheckObj = objects[`${this.namespace}.info.lastUpdateCheck`];\n\n if (!lastUpdateCheckObj || !lastUpdateCheckObj.common || lastUpdateCheckObj.common.type !== 'number') {\n const obj: ioBroker.StateObject = {\n _id: 'info.lastUpdateCheck',\n type: 'state',\n common: {\n role: 'value.time',\n name: {\n en: 'Timestamp of last update check',\n de: 'Zeitstempel der letzten UpdatePrüfung',\n ru: 'Отметка времени последней проверки обнвлений',\n pt: 'Timestamp da última verificação de atualizaçã',\n nl: 'Tijdstempel van laatste updatecontrole',\n fr: 'Horodatage de la dernière vérificationde mise à jour',\n it: \"Timestamp dell'ultimo controllo di aggiornamento\",\n es: 'Marca de tiempo de la última verificación de actalización',\n pl: 'Znacznik czasu ostatniego sprawdzenia aktualizacji',\n uk: 'Відмітка часу останньої перевірки оновлень',\n 'zh-cn': '上次更新检查的时间戳',\n },\n type: 'number',\n read: true,\n write: false,\n def: 0,\n },\n native: {},\n };\n\n promises.push(this.setObjectAsync(obj._id, obj));\n }\n\n await Promise.all(promises);\n }\n\n upToDate(v1: string, v2: string): boolean {\n return semver.gt(v2, v1);\n }\n\n /**\n * Write the update information to the states\n */\n async writeUpdateInfo(\n /** current sources, if given */\n sources?: Record<string, ioBroker.RepositoryJsonAdapterContent>,\n ): Promise<void> {\n if (!objects['system.config'] || !objects['system.config'].common) {\n return this.log.warn('Repository cannot be read. Invalid \"system.config\" object.');\n }\n const activeRepo: string[] | string | undefined = (objects['system.config'] as ioBroker.SystemConfigObject)\n .common?.activeRepo;\n const systemRepos = objects['system.repositories'];\n\n if (!sources) {\n sources = {};\n\n // If multi-repo case. Actual case\n if (Array.isArray(activeRepo)) {\n if (systemRepos?.native?.repositories) {\n for (const repo of activeRepo) {\n if (systemRepos.native.repositories[repo]?.json) {\n Object.assign(sources, systemRepos.native.repositories[repo].json);\n } else {\n await this.setState('info.updatesNumber', 0, true);\n await this.setState('info.updatesList', '', true);\n await this.setState('info.newUpdates', false, true);\n await this.setState('info.updatesJson', '{}', true);\n await this.setState('info.lastUpdateCheck', Date.now(), true);\n if (systemRepos.native.repositories[repo]) {\n this.log.warn(`Repository cannot be read: Active repo - ${repo}`);\n } else {\n this.log.warn('No repository source configured');\n }\n }\n }\n }\n } else if (activeRepo && systemRepos?.native?.repositories?.[activeRepo]?.json) {\n // This is deprecated and must be deleted after a couple of years: BF 2025.02.07\n sources = systemRepos.native.repositories[activeRepo].json;\n }\n }\n\n if (!Object.keys(sources).length) {\n await this.setState('info.updatesNumber', 0, true);\n await this.setState('info.updatesList', '', true);\n await this.setState('info.newUpdates', false, true);\n await this.setState('info.updatesJson', '{}', true);\n await this.setState('info.lastUpdateCheck', Date.now(), true);\n if (Array.isArray(activeRepo)) {\n let found = false;\n if (systemRepos?.native?.repositories) {\n activeRepo.forEach(repo => {\n if (systemRepos.native.repositories[repo]) {\n this.log.warn(`Active repository \"${repo}\" cannot be read`);\n found = true;\n }\n });\n }\n if (!found) {\n this.log.warn(\n `No repository source configured. Possible values: ${\n systemRepos?.native?.repositories\n ? Object.keys(systemRepos.native.repositories).join(', ')\n : 'none'\n }. Active repo(s): \"${activeRepo.join('\", \"')}\"`,\n );\n }\n } else if (activeRepo && systemRepos?.native?.repositories?.[activeRepo]) {\n this.log.warn(`Repository cannot be read. Active repo: ${JSON.stringify(activeRepo)}`);\n } else {\n this.log.warn(\n `No repository source configured. Possible values: ${\n systemRepos?.native?.repositories\n ? Object.keys(systemRepos.native.repositories).join(', ')\n : 'none'\n }. Active repo: ${JSON.stringify(activeRepo)}`,\n );\n }\n return;\n }\n\n const installed = getInstalledInfo();\n const list: string[] = [];\n const updatesJson: Record<string, UpdateInfo> = {};\n let newUpdateIndicator = false;\n\n const state = await this.getStateAsync('info.updatesJson');\n let oldUpdates;\n if (typeof state?.val === 'string') {\n try {\n oldUpdates = JSON.parse(state.val) || {};\n } catch (e) {\n oldUpdates = {};\n this.log.warn(`Cannot parse info.updatesJson: ${e}`);\n }\n } else {\n oldUpdates = {};\n }\n\n Object.keys(sources).forEach(name => {\n try {\n if (installed[name]?.version && sources[name].version) {\n if (\n sources[name].version !== installed[name].version &&\n !this.upToDate(sources[name].version, installed[name].version)\n ) {\n // Check if updates are new or already known to user\n if (\n !oldUpdates ||\n !oldUpdates[name] ||\n oldUpdates[name].availableVersion !== sources[name].version\n ) {\n newUpdateIndicator = true;\n } // endIf\n updatesJson[name] = {\n availableVersion: sources[name].version,\n installedVersion: installed[name].version,\n };\n // remove the first part of the name\n const n = name.indexOf('.');\n list.push(n === -1 ? name : name.substring(n + 1));\n }\n }\n } catch (err) {\n this.log.warn(`Error on version check for ${name}: ${err}`);\n }\n });\n\n await this.setState('info.updatesNumber', list.length, true);\n await this.setState('info.updatesList', list.join(', '), true);\n await this.setState('info.newUpdates', newUpdateIndicator, true);\n await this.setState('info.updatesJson', JSON.stringify(updatesJson), true);\n await this.setState('info.lastUpdateCheck', Date.now(), true);\n\n if (!newUpdateIndicator) {\n return;\n }\n\n const textArr = [];\n for (const [adapter, updateInfo] of Object.entries(updatesJson)) {\n const text = getAdapterUpdateText({\n adapter,\n installedVersion: updateInfo.installedVersion,\n newVersion: updateInfo.availableVersion,\n lang: systemLanguage,\n });\n\n textArr.push(text);\n }\n\n await this.registerNotification('admin', 'adapterUpdates', textArr.join('\\n'));\n }\n\n initSocket(server: Server, store: Store): void {\n const settings: SocketSettings = {\n language: this.config.language,\n defaultUser: this.config.defaultUser,\n ttl: this.config.ttl,\n secure: this.config.secure,\n auth: this.config.auth,\n port: this.config.port,\n secret: this.secret,\n };\n\n socket = new SocketAdmin(settings, this, objects);\n socket.start(server, SocketIO, { store, oauth2Only: true, noBasicAuth: this.config.noBasicAuth });\n\n // subscribe on all object changes\n socket.subscribe('objectChange', '*');\n\n this.getForeignObjectAsync('system.meta.uuid')\n .then(async obj => {\n if (obj?.native) {\n try {\n await socket.updateRatings();\n } catch (error) {\n this.log.error(`Cannot fetch ratings: ${error}`);\n }\n }\n })\n .catch(error => this.log.error(`Cannot read UUID: ${error}`));\n }\n\n async applyRightsToObjects(pattern: string, types: string[] | string): Promise<number> {\n let len = 0;\n if (typeof types === 'object') {\n for (const type of types) {\n len += await this.applyRightsToObjects(pattern, type);\n }\n } else {\n try {\n const doc = await this.getObjectViewAsync('system', types, {\n startkey: `${pattern}.`,\n endkey: `${pattern}.\\u9999`,\n });\n\n this._tasks = this._tasks || [];\n\n for (const row of doc.rows) {\n const obj: ioBroker.AnyObject = row.value as ioBroker.AnyObject;\n if (!obj.acl || obj.acl.owner !== this.config.defaultUser) {\n obj.acl.owner = this.config.defaultUser;\n await this.setForeignObjectAsync(obj._id, obj);\n len++;\n }\n }\n } catch (e) {\n this.log.error(`Error applying rights to objects: ${e.message}`);\n }\n }\n return len;\n }\n\n async applyRights(): Promise<void> {\n this.config.accessAllowedConfigs = this.config.accessAllowedConfigs || [];\n this.config.accessAllowedTabs = this.config.accessAllowedTabs || [];\n let len = 0;\n for (const id of this.config.accessAllowedConfigs) {\n const obj = await this.getForeignObjectAsync(`system.adapter.${id}`);\n if (obj?.acl && obj.acl.owner !== this.config.defaultUser) {\n obj.acl.owner = this.config.defaultUser;\n await this.setForeignObjectAsync(`system.adapter.${id}`, obj);\n len++;\n }\n }\n\n for (const id of this.config.accessAllowedTabs) {\n if (id.startsWith('devices.')) {\n // change rights of all `alias.*`\n len += await this.applyRightsToObjects('alias', ['state', 'channel']);\n } else if (id.startsWith('javascript.')) {\n // change rights of all script.js.*\n len += await this.applyRightsToObjects('javascript', ['script', 'channel']);\n } else if (id.startsWith('fullcalendar.')) {\n // change rights of all fullcalendar.*\n len += await this.applyRightsToObjects('fullcalendar', ['schedule']);\n } else if (id.startsWith('scenes.')) {\n // change rights of all scenes.*\n len += await this.applyRightsToObjects('scenes', ['state', 'channel']);\n }\n }\n\n if (len) {\n this.log.info(`Updated ${len} objects`);\n }\n }\n\n /**\n * Read news from server and register them as notifications\n */\n async updateNews(): Promise<void> {\n if (this.timerNews) {\n clearTimeout(this.timerNews);\n this.timerNews = null;\n }\n\n this.checkNodeJsVersion().catch(e => this.log.warn(`Cannot check node.js versions: ${e}`));\n\n let oldNews: NewsMessage[];\n let newEtag;\n\n const oldEtag = (await this.getStateAsync('info.newsETag'))?.val;\n\n let etag;\n\n try {\n const res = await axios.get('https://iobroker.live/repo/news-hash.json', {\n timeout: 13_000,\n validateStatus: status => status < 400,\n });\n\n etag = res.data;\n } catch (e) {\n this.log.warn(`Cannot update news: ${e.response ? e.response.data : e.message || e.code}`);\n }\n\n let _newNews;\n\n if (etag && etag.hash !== oldEtag) {\n newEtag = etag.hash;\n\n try {\n const res = await axios.get('https://iobroker.live/repo/news.json', {\n timeout: 14_000,\n validateStatus: status => status < 400,\n });\n\n _newNews = res.data;\n } catch (e) {\n this.log.warn(`Cannot update news_: ${e.response ? e.response.data : e.message || e.code}`);\n }\n } else {\n newEtag = oldEtag;\n _newNews = [];\n }\n\n const newNews = Array.isArray(_newNews) ? _newNews : [];\n\n const newsState = await this.getStateAsync('info.newsFeed');\n\n try {\n oldNews = newsState?.val ? JSON.parse(newsState.val as string) : [];\n } catch {\n oldNews = [];\n }\n\n const originalOldNews = JSON.stringify(oldNews);\n\n const lastState = await this.getStateAsync('info.newsLastId');\n\n // find time of last ID\n let time = '';\n if (lastState?.val) {\n const item = oldNews.find(item => item.id === lastState.val);\n if (item) {\n time = item.created;\n }\n }\n\n try {\n // add all IDs newer than last seen\n newNews.forEach(item => {\n if (!lastState || !time || item.created > time) {\n if (!oldNews.find(it => it.created === item.created)) {\n oldNews.push(item);\n }\n }\n });\n\n oldNews.sort((a, b) => (a.created > b.created ? -1 : a.created < b.created ? 1 : 0));\n\n // delete news older than 3 months\n let i;\n for (i = oldNews.length - 1; i >= 0; i--) {\n if (Date.now() - new Date(oldNews[i].created).getTime() > 180 * 24 * 3_600_000) {\n oldNews.splice(i, 1);\n }\n }\n\n if (originalOldNews !== JSON.stringify(oldNews)) {\n await this.registerNewsNotifications(oldNews, lastState?.val as string);\n await this.setStateAsync('info.newsFeed', JSON.stringify(oldNews), true);\n }\n\n if (newEtag !== oldEtag) {\n await this.setStateAsync('info.newsETag', newEtag, true);\n }\n } catch (e) {\n this.log.error(`Cannot update news: ${e.message}`);\n }\n\n this.timerNews = setTimeout(() => this.updateNews(), 24 * ONE_HOUR_MS + 1);\n }\n\n /**\n * Add the news to the notification system\n *\n * @param messages sorted news\n * @param lastMessageId lastMessageId, all after this has already been seen\n */\n async registerNewsNotifications(messages: NewsMessage[], lastMessageId?: string): Promise<void> {\n const adapters = await this.getObjectViewAsync('system', 'adapter', {\n startkey: 'system.adapter.\\u0000',\n endkey: 'system.adapter.\\u9999',\n });\n\n const operatingSystem = platform();\n\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: 'system.adapter.\\u0000',\n endkey: 'system.adapter.\\u9999',\n });\n\n const activeRepo = (await this.getForeignObjectAsync('system.config'))?.common.activeRepo;\n const uuid = (await this.getForeignObjectAsync('system.meta.uuid'))?.native.uuid;\n const nodeVersion = process.version;\n const npmVersion = await this.getNpmVersion();\n\n const today = Date.now();\n for (const message of messages) {\n if (!message) {\n continue;\n }\n\n if (message.id === lastMessageId) {\n break;\n }\n let showIt = true;\n\n if (showIt && message['date-start'] && new Date(message['date-start']).getTime() > today) {\n showIt = false;\n } else if (showIt && message['date-end'] && new Date(message['date-end']).getTime() < today) {\n showIt = false;\n } else if (showIt && message.conditions && Object.keys(message.conditions).length > 0) {\n Object.keys(message.conditions).forEach(key => {\n if (showIt) {\n const adapter = adapters.rows.find(adapter => adapter.id === `system.adapter.${key}`);\n const condition = message.conditions[key];\n\n if (!adapter && condition !== '!installed') {\n showIt = false;\n } else if (adapter && condition === '!installed') {\n showIt = false;\n } else if (adapter && condition === 'active') {\n showIt = this.checkActive(key, instances);\n } else if (adapter && condition === '!active') {\n showIt = !this.checkActive(key, instances);\n } else if (adapter?.value) {\n showIt = this.checkConditions(condition, adapter.value.common.version);\n }\n }\n });\n }\n\n if (showIt && message['node-version']) {\n showIt = this.checkConditions(message['node-version'], nodeVersion);\n }\n if (showIt && message['npm-version']) {\n showIt = this.checkConditions(message['npm-version'], npmVersion);\n }\n if (showIt && message.os) {\n showIt = operatingSystem === message.os;\n }\n if (showIt && message.repo) {\n // If multi-repo\n if (Array.isArray(activeRepo)) {\n showIt = activeRepo.includes(message.repo);\n } else {\n showIt = activeRepo === message.repo;\n }\n }\n if (showIt && message.uuid) {\n if (Array.isArray(message.uuid)) {\n showIt = uuid && message.uuid.find(msgUuid => uuid === msgUuid);\n } else {\n showIt = !!(uuid && uuid === message.uuid);\n }\n }\n\n if (showIt && message['number-of-objects']) {\n const res = await this.getObjectListAsync({ include_docs: true });\n const noObjects = res.rows.length;\n\n showIt = eval(`${noObjects} ${message['number-of-objects']}`);\n }\n\n if (showIt && message['objects-db-type']) {\n const objectsDbType = await this.getObjectsDbType();\n\n if (!message['objects-db-type'].includes(objectsDbType)) {\n showIt = false;\n }\n }\n\n if (showIt) {\n this.log.info(`register notification ${message.class}`);\n await this.registerNotification(\n 'admin',\n `${message.class}News`,\n `${message.title.en}\\n${message.content.en}`,\n );\n }\n }\n }\n\n /**\n * Check if adapter is active\n *\n * @param adapterName name of the adapter\n * @param instances list of instances\n */\n checkActive(\n adapterName: string,\n instances: Awaited<ioBroker.GetObjectViewPromise<ioBroker.InstanceObject>>,\n ): boolean {\n return !!Object.keys(instances)\n .filter(id => id.startsWith(`adapter.system.${adapterName}.`))\n .find(id => instances.rows.find(row => id === row.id)?.value?.common.enabled);\n }\n\n /**\n * Check if conditions met\n *\n * @param condition condition to check\n * @param installedVersion installed version\n */\n checkConditions(condition: string, installedVersion: string): boolean {\n if (condition.startsWith('equals')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n return installedVersion === vers;\n }\n if (condition.startsWith('bigger') || condition.startsWith('greater')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n try {\n return semver.gt(vers, installedVersion);\n } catch {\n return false;\n }\n } else if (condition.startsWith('smaller')) {\n const vers = condition.substring(8, condition.length - 1).trim();\n try {\n return semver.lt(installedVersion, vers);\n } catch {\n return false;\n }\n } else if (condition.startsWith('between')) {\n const vers1 = condition.substring(8, condition.indexOf(',')).trim();\n const vers2 = condition.substring(condition.indexOf(',') + 1, condition.length - 1).trim();\n try {\n return semver.gte(installedVersion, vers1) && semver.lte(installedVersion, vers2);\n } catch {\n return false;\n }\n } else {\n return true;\n }\n }\n\n /**\n * Get the objects db type\n */\n async getObjectsDbType(): Promise<'jsonl' | 'file' | 'redis'> {\n const hostAlive = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!hostAlive?.val) {\n return 'jsonl';\n }\n const diagData = await this.sendToHostAsync(this.host, 'getDiagData', 'normal');\n // @ts-expect-error messages are special and cannot be typed easily\n return diagData.objectsType as 'jsonl' | 'file' | 'redis';\n }\n\n /**\n * Get current npm version from controller\n */\n async getNpmVersion(): Promise<string> {\n const hostAlive = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!hostAlive?.val) {\n throw new Error('Host is offline');\n }\n const hostInfo = await this.sendToHostAsync(this.host, 'getHostInfo', {});\n // @ts-expect-error messages are special and cannot be typed easily\n return hostInfo.NPM;\n }\n\n async checkNodeJsVersion(): Promise<void> {\n // allow only one admin instance to check the versions for every host\n if (this.instance !== 0) {\n const objs = await this.getObjectViewAsync('system', 'instance', {\n startkey: 'system.adapter.admin.',\n endkey: 'system.adapter.admin.\\u9999',\n });\n let min = null;\n // find the lowest active instance on the same host\n for (const row of objs.rows) {\n const obj = row.value;\n if (obj?.common.enabled && obj.common.host === this.host) {\n const instance = parseInt(row.id.split('.').pop());\n if (min === null || min < instance) {\n min = instance;\n }\n }\n }\n if (this.instance !== min) {\n return;\n }\n }\n\n const response = await axios<NodeVersionInformation[]>('https://nodejs.org/download/release/index.json');\n const result = {\n nodeNewest: '',\n nodeNewestNext: '',\n npmNewest: '',\n npmNewestNext: '',\n npmCurrent: '',\n nodeCurrent: process.version,\n };\n\n try {\n result.npmCurrent = await this.getNpmVersion();\n } catch (error) {\n this.log.warn(`Cannot get current npm version: ${error}`);\n }\n\n // https://nodejs.org/download/release/index.json\n // detect a new version of the same major version and new major version (that is allowed by ioBroker)\n try {\n const recommendedVersions = await this.getRecommendedVersions();\n // find newest suggested version\n const nodeNewestNext = response.data.find(item => item.version.startsWith(`v${recommendedVersions.node}.`));\n const nodeCurrentMajor = process.version.split('.')[0];\n const nodeNewest = response.data.find(item => item.version.startsWith(`${nodeCurrentMajor}.`));\n if (nodeNewestNext) {\n result.nodeNewestNext = nodeNewestNext.version;\n }\n if (nodeNewest) {\n result.nodeNewest = nodeNewest.version;\n }\n\n // find newest suggested version\n const npmNewestNext =\n nodeNewestNext || response.data.find(item => item.npm.startsWith(`${recommendedVersions.npm}.`));\n const npmNewest = response.data.find(item => item.version === process.version);\n if (npmNewestNext) {\n result.npmNewestNext = npmNewestNext.npm;\n }\n if (npmNewest) {\n result.npmNewest = npmNewest.npm;\n }\n\n const prefix = `system.host.${this.host}.versions`;\n\n await this.setForeignObjectNotExistsAsync(prefix, {\n type: 'channel',\n common: {\n name: {\n en: 'Node.js/Npm versions',\n de: 'Node.js/Npm Versionen',\n ru: 'Node.js/Npm версии',\n pt: 'Versões Node.js/Npm',\n nl: 'Node.js/Npm versions',\n fr: 'Node.js/Npm versions',\n it: 'Node.js/Npm versioni',\n es: 'Node.js/Npm versiones',\n pl: 'Wersja node.js/Npm',\n uk: 'Версії Node.js/Npm',\n 'zh-cn': '页: 1',\n },\n },\n native: {},\n });\n\n const states: ioBroker.SettableStateObject[] = [\n {\n _id: 'nodeCurrent',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Current node.js version',\n de: 'Aktuelle node.js Version',\n ru: 'Текущая версия node.js',\n pt: 'Versão atual do node.js',\n nl: 'Current Node',\n fr: 'Version actuelle node.js',\n it: 'Versione attuale node.js',\n es: 'Versión actual node.js',\n pl: 'Aktualna wersja.js',\n uk: 'Поточна версія вузла',\n 'zh-cn': '目前没有。',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'nodeNewest',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest node.js version',\n de: 'Neueste node.js Version',\n ru: 'Новейшая версия node.js',\n pt: 'Mais recente versão node.js',\n nl: 'Nieuwste node',\n fr: 'Nouvelle version node.js',\n it: 'Nuova versione node.js',\n es: 'Versión más reciente node.js',\n pl: 'Najnowsza wersja węzła.js',\n uk: 'Остання версія вузла',\n 'zh-cn': '最新版本',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'nodeNewestNext',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest next major node.js version',\n de: 'Neueste nächste große node.js Version',\n ru: 'Новейшая следующая версия node.js',\n pt: 'Mais nova versão principal node.js',\n nl: 'Nieuwste volgende grote node',\n fr: 'Nouvelle prochaine version node.js',\n it: 'Nuova versione principale node.js',\n es: 'Versión más reciente node.js',\n pl: 'Najnowsza wersja węzła.js',\n uk: 'Новейшая наступна версія вузла',\n 'zh-cn': '今后最新的重要内容。',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'npmCurrent',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Current npm version',\n de: 'Aktuelle Version',\n ru: 'Текущая версия npm',\n pt: 'Versão actual npm',\n nl: 'Current Npm versie',\n fr: 'Version actuelle npm',\n it: 'Versione npm attuale',\n es: 'Versión actual npm',\n pl: 'Aktualna wersja',\n uk: 'Поточна версія npm',\n 'zh-cn': '目前的印本',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'npmNewest',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest npm version',\n de: 'Neueste Version',\n ru: 'Новейшая версия npm',\n pt: 'Versão mais recente npm',\n nl: 'Newest Npm versie',\n fr: 'Nouvelle version npm',\n it: 'Nuova versione npm',\n es: 'Versión más reciente npm',\n pl: 'Wersja nowa',\n uk: 'Остання версія npm',\n 'zh-cn': '最新版本',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n {\n _id: 'npmNewestNext',\n type: 'state',\n common: {\n role: 'state',\n name: {\n en: 'Newest next major NPM version',\n de: 'Neueste nächste große NPM-Version',\n ru: 'Новейшая следующая крупная версия NPM',\n pt: 'Mais nova versão principal do NPM',\n nl: 'NPM',\n fr: 'La version la plus récente',\n it: 'Nuova versione NPM',\n es: 'Versión NPM más reciente',\n pl: 'Nowa wersja NPM',\n uk: 'Новейша наступна велика версія NPM',\n 'zh-cn': '下一次主要国家预防计划',\n },\n type: 'string',\n read: true,\n write: false,\n def: '',\n },\n native: {},\n },\n ];\n\n for (const state of states) {\n await this.setForeignObjectNotExistsAsync(`${prefix}.${state._id}`, state);\n }\n for (const [key, value] of Object.entries(result)) {\n await this.setForeignStateAsync(`${prefix}.${key}`, value.replace(/^v/, ''), true);\n }\n } catch {\n this.log.warn('Cannot check node.js/npm version');\n }\n }\n\n getData(callback: (adapter: typeof this) => void): void {\n this.log.info('requesting all objects');\n\n this.getObjectList({ include_docs: true }, (_err, res): void => {\n this.log.info('received all objects');\n if (res) {\n objects = {};\n let tmpPath = '';\n for (const row of res.rows) {\n objects[row.doc._id] = row.doc;\n if (row.doc.type === 'instance' && row.doc.common?.tmpPath) {\n if (tmpPath) {\n this.log.warn('tmpPath has multiple definitions!!');\n }\n tmpPath = row.doc.common.tmpPath;\n }\n }\n\n // Some adapters want access on specified tmp directory\n if (tmpPath) {\n this.config.tmpPath = tmpPath;\n this.config.tmpPathAllow = true;\n }\n\n void this.createUpdateInfo().then(() => this.writeUpdateInfo());\n }\n\n if (callback) {\n callback(this);\n }\n });\n }\n\n async checkRevokedVersions(repository: Record<string, ioBroker.RepositoryJsonAdapterContent>): Promise<void> {\n try {\n const adapters = Object.keys(repository);\n const instances = await this.getObjectViewAsync('system', 'instance', {\n startkey: 'system.adapter.',\n endkey: 'system.adapter.\\u9999',\n });\n\n for (const _adapter of adapters) {\n if (repository[_adapter].blockedVersions) {\n // read a current version\n if (Array.isArray(repository[_adapter].blockedVersions)) {\n const instance = instances.rows.find(\n item => item.value?.common.name === _adapter && item.value.common.enabled,\n );\n if (instance?.value?.common?.version) {\n for (let i = 0; i < repository[_adapter].blockedVersions.length; i++) {\n try {\n if (\n semver.satisfies(\n instance.value.common.version,\n repository[_adapter].blockedVersions[i],\n )\n ) {\n // stop all instances\n for (let k = 0; k < instances.rows.length; k++) {\n const obj = instances.rows[k].value;\n if (obj?.common.enabled && obj.common.name === _adapter) {\n obj.common.enabled = false;\n await this.setForeignObjectAsync(obj._id, obj);\n this.log.warn(\n `Instance ${obj._id.replace(\n 'system.adapter.',\n '',\n )} was disabled because blocked. Please update ${_adapter} to newer or available version`,\n );\n const hostAlive = await this.getForeignStateAsync(\n `system.host.${obj.common.host}.alive`,\n );\n if (hostAlive?.val) {\n this.sendToHost(obj.common.host, 'addNotification', {\n scope: 'system',\n category: 'accessErrors', // change to 'blocked' when js-controller 4.1. released\n instance: obj._id,\n message: `Instance version was blocked. Please check for updates and update before restarting the instance`,\n });\n } else {\n this.log.warn(\n `Cannot add notification to ${obj.common.host} as it is offline`,\n );\n }\n }\n }\n }\n } catch {\n this.log.error(\n `Cannot check revoked versions: ${repository[_adapter].blockedVersions[i]}`,\n );\n // ignore\n }\n }\n }\n } else {\n this.log.error(\n `Invalid blockedVersions for ${_adapter}: ${JSON.stringify(\n repository[_adapter].blockedVersions,\n )}. Expected array like [\"<= 3.17.4\"] or also [\"~3.14.0\", \"~3.15.0\", \"~3.16.0\"]`,\n );\n }\n }\n }\n } catch (e) {\n this.log.error(`Cannot check revoked versions: ${e}`);\n }\n }\n\n // update icons by all known default objects. Remove this function after 2 years (BF: 2021.04.20)\n updateIcons(): void {\n if (existsSync(`${controllerDir}/io-package.json`)) {\n const ioPackage = JSON.parse(\n readFileSync(join(controllerDir, 'io-package.json'), {\n encoding: 'utf-8',\n }),\n );\n\n ioPackage.objects.forEach(async (obj: ioBroker.AnyObject) => {\n if (obj.common?.icon && obj.common.icon.length > 50) {\n const cObj = await this.getForeignObjectAsync(obj._id);\n if (cObj?.common && (!cObj.common.icon || cObj.common.icon.length < 50)) {\n this.log.debug(`Update icon for ${cObj._id}`);\n cObj.common.icon = obj.common.icon;\n await this.setForeignObjectAsync(cObj._id, cObj);\n }\n }\n });\n }\n }\n\n restartRepoUpdate(): void {\n // start the next cycle\n if (this.config.autoUpdate) {\n if (this.timerRepo) {\n clearTimeout(this.timerRepo);\n this.timerRepo = null;\n }\n this.log.debug(\n `Next repo update on ${new Date(\n Date.now() + this.config.autoUpdate * ONE_HOUR_MS + 1,\n ).toLocaleString()}`,\n );\n this.timerRepo = setTimeout(\n async () => {\n this.timerRepo = null;\n await this.updateRegister();\n },\n this.config.autoUpdate * ONE_HOUR_MS + 1,\n );\n }\n }\n\n async getRecommendedVersions(): Promise<{ node: number; npm: number }> {\n // Check if the host running\n const hostAlive = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!hostAlive?.val) {\n return {\n node: CURRENT_MAX_MAJOR_NODEJS,\n npm: CURRENT_MAX_MAJOR_NPM,\n };\n }\n const repository: Record<string, ioBroker.RepositoryJsonAdapterContent> = (await this.sendToHostAsync(\n this.host,\n 'getRepository',\n {},\n )) as unknown as Record<string, ioBroker.RepositoryJsonAdapterContent>;\n const repoInfo: {\n repoTime: string;\n recommendedVersions: {\n nodeJsRecommended: number;\n npmRecommended: number;\n };\n } = repository?._repoInfo as unknown as {\n repoTime: string;\n recommendedVersions: {\n nodeJsRecommended: number;\n npmRecommended: number;\n };\n };\n\n if (repoInfo?.recommendedVersions) {\n return {\n node: repoInfo.recommendedVersions?.nodeJsRecommended,\n npm: repoInfo.recommendedVersions?.npmRecommended,\n };\n }\n return {\n node: CURRENT_MAX_MAJOR_NODEJS,\n npm: CURRENT_MAX_MAJOR_NPM,\n };\n }\n\n /**\n * Read repository information from active repository\n */\n async updateRegister(): Promise<void> {\n if (lastRepoUpdate && Date.now() - lastRepoUpdate < 3600000) {\n this.log.error('Automatic repository update is not allowed more than once an hour');\n this.restartRepoUpdate();\n return;\n }\n\n lastRepoUpdate = Date.now();\n\n try {\n const systemConfig = await this.getForeignObjectAsync('system.config');\n if (systemConfig?.common) {\n try {\n const repos = await this.getForeignObjectAsync('system.repositories');\n if (!repos || repos.ts === undefined) {\n // start the next cycle\n this.restartRepoUpdate();\n return;\n }\n\n // Check if repositories exist\n let exists = false;\n const active = systemConfig.common.activeRepo;\n\n // if repo is valid and actual\n if (Array.isArray(active)) {\n if (\n Date.now() < repos.ts + this.config.autoUpdate * ONE_HOUR_MS &&\n !active.find(repo => !repos?.native?.repositories?.[repo]?.json)\n ) {\n exists = true;\n }\n } else if (\n repos?.native?.repositories?.[active]?.json &&\n Date.now() < repos.ts + this.config.autoUpdate * ONE_HOUR_MS\n ) {\n exists = true;\n }\n if (!exists) {\n this.log.info('Request actual repository...');\n // first check if the host is running\n const aliveState = await this.getForeignStateAsync(`system.host.${this.host}.alive`);\n if (!aliveState?.val) {\n this.log.error('Host is not alive');\n // start the next cycle\n this.restartRepoUpdate();\n return;\n }\n\n // request repo from host\n this.sendToHost(\n this.host,\n 'getRepository',\n {\n repo: active,\n update: true,\n },\n _repository => {\n if (\n (typeof _repository === 'string' || _repository instanceof Error) &&\n _repository.toString().includes(ERROR_PERMISSION)\n ) {\n this.log.error('May not read \"getRepository\"');\n } else {\n this.log.info('Repository received successfully.');\n\n socket?.repoUpdated();\n this.checkRevokedVersions(\n _repository as unknown as Record<string, ioBroker.RepositoryJsonAdapterContent>,\n ).catch(e => this.log.error(`Cannot check revoked versions: ${e}`));\n }\n\n // start the next cycle\n this.restartRepoUpdate();\n },\n );\n } else if (this.config.autoUpdate) {\n let interval = repos.ts + this.config.autoUpdate * ONE_HOUR_MS - Date.now() + 1;\n if (interval > 0x7fffffff) {\n interval = 0x7fffffff;\n }\n this.log.debug(`Next repo update on ${new Date(Date.now() + interval).toLocaleString()}`);\n if (this.timerRepo) {\n clearTimeout(this.timerRepo);\n }\n this.timerRepo = setTimeout(async () => {\n this.timerRepo = null;\n await this.updateRegister();\n }, interval);\n }\n } catch (err) {\n this.log.error(`May not read \"system.repositories\": ${err}`);\n }\n }\n } catch {\n this.log.error('May not read \"system.config\"');\n }\n }\n\n // this function re-check if the common objects like '0_userdata.0' exist\n async checkCommonObjects(): Promise<void> {\n // try to find js-controller directory\n let objects: ioBroker.Object[];\n try {\n const dir = require.resolve('iobroker.js-controller/io-package.json').replace(/\\\\/g, '/');\n // dir is something like ./node_modules/iobroker.js-controller/build/cjs/main.js\n if (existsSync(dir)) {\n const data = JSON.parse(readFileSync(dir).toString());\n if (data.objects) {\n objects = data.objects;\n }\n }\n } catch {\n // ignore\n }\n if (objects) {\n for (let i = 0; i < objects.length; i++) {\n const obj = await this.getForeignObjectAsync(objects[i]._id);\n if (!obj) {\n await this.setForeignObjectAsync(objects[i]._id, objects[i]);\n }\n }\n } else {\n // check the meta-object 0_userdata.0 and create it if required\n let userData: ioBroker.MetaObject | null | undefined = await this.getForeignObjectAsync('0_userdata.0');\n if (!userData) {\n userData = {\n _id: '0_userdata.0',\n type: 'meta',\n common: {\n icon: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjRweCIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMjRweCI+DQogICAgPGcgZmlsbD0iY3VycmVudENvbG9yIj4NCiAgICAgICAgPHBhdGggZD0iTTE5LDV2MTRINVY1SDE5IE0xOSwzSDVDMy45LDMsMywzLjksMyw1djE0YzAsMS4xLDAuOSwyLDIsMmgxNGMxLjEsMCwyLTAuOSwyLTJWNUMyMSwzLjksMjAuMSwzLDE5LDNMMTksM3oiLz4NCiAgICAgICAgPHBhdGggZD0iTTE0LDE3SDd2LTJoN1YxN3ogTTE3LDEzSDd2LTJoMTBWMTN6IE0xNyw5SDdWN2gxMFY5eiIvPg0KICAgIDwvZz4NCjwvc3ZnPg==',\n name: {\n en: 'User objects and files root folder',\n de: 'Stammordner für Benutzerobjekte und Dateien',\n ru: 'Корневая папка пользовательских объектов и файлов',\n pt: 'Pasta raiz de objetos e arquivos do usuário',\n nl: 'Hoofdmap van objecten en bestanden van gebruikers',\n fr: 'Objets utilisateur et dossier racine des fichiers',\n it: \"Cartella principale di oggetti e file dell'utente\",\n es: 'Carpeta raíz de objetos y archivos de usuario',\n pl: 'Folder główny obiektów i plików użytkownika',\n uk: \"Коренева папка об'єктів користувача та файлів\",\n 'zh-cn': '用户对象和文件根文件夹',\n },\n desc: {\n en: 'Here you can upload your files or create your private objects and states',\n de: 'Hier können eigene Dateien hochgeladen oder private Objekte und Zustände erstellt werden',\n ru: 'Здесь вы можете загрузить свои файлы или создать свои личные объекты и состояния',\n pt: 'Aqui você pode enviar seus arquivos ou criar seus objetos e estados particulares',\n nl: 'Hier kunt u uw bestanden uploaden of uw privé-objecten en statussen maken',\n fr: 'Ici, vous pouvez télécharger vos fichiers ou créer vos objets et états privés',\n it: 'Qui puoi caricare i tuoi file o creare oggetti e stati privati',\n es: 'Aquí puede cargar sus archivos o crear sus objetos y estados privados',\n pl: 'Tutaj możesz przesyłać pliki lub tworzyć prywatne obiekty i stany',\n uk: \"Тут ви можете завантажити свої файли або створити свої приватні об'єкти та стани\",\n 'zh-cn': '在这里您可以上传文件或创建私有对象和状态',\n },\n type: 'meta.user',\n dontDelete: true,\n },\n acl: {\n owner: 'system.user.admin',\n ownerGroup: 'system.group.administrator',\n object: 1604,\n },\n } as ioBroker.MetaObject;\n\n await this.setForeignObject(userData._id, userData);\n }\n }\n }\n\n /**\n * Initialize the adapter\n */\n init(): void {\n this.config.defaultUser = this.config.defaultUser || 'admin';\n if (!this.config.defaultUser.match(/^system\\.user\\./)) {\n this.config.defaultUser = `system.user.${this.config.defaultUser}`;\n }\n\n this.checkCommonObjects().catch((e: Error) => this.log.warn(`Cannot check common objects: ${e?.message}`));\n\n this.getData(\n adapter => (webServer = new Web(adapter.config, adapter, this.initSocket.bind(this), { systemLanguage })),\n );\n\n if (\n this.config.accessApplyRights &&\n this.config.accessLimit &&\n !this.config.auth &&\n this.config.defaultUser !== 'system.user.admin'\n ) {\n this.applyRights().catch((e: Error) => this.log.warn(`Cannot apply rights: ${e?.message}`));\n }\n\n // By default, update repository every 24 hours\n if (this.config.autoUpdate === undefined || this.config.autoUpdate === null) {\n this.config.autoUpdate = 24;\n }\n\n // interval in hours\n this.config.autoUpdate = Number(this.config.autoUpdate) || 0;\n if (this.config.autoUpdate && this.config.autoUpdate < 4) {\n this.config.autoUpdate = 4; // only every 4 hours - it is a minimal update interval\n } else if (this.config.autoUpdate > 590) {\n // 0x7FFFFFFF / ONE_HOUR_MS = 596\n this.config.autoUpdate = 590; // max interval is 2147483647 milliseconds\n }\n\n // check info.connected\n void this.getObjectAsync('info.connected').then(obj => {\n if (!obj) {\n const packageJson = JSON.parse(readFileSync(`${__dirname}/../io-package.json`).toString('utf8'));\n const obj = packageJson.instanceObjects.find((o: ioBroker.AnyObject) => o._id === 'info.connected');\n if (obj) {\n return this.setObjectAsync(obj._id, obj);\n }\n }\n });\n\n if (this.config.autoUpdate) {\n void this.updateRegister().catch(e => this.log.error(`Cannot update repository: ${e}`));\n }\n\n void this.updateNews().catch(e => this.log.error(`Cannot update news: ${e}`));\n this.updateIcons();\n void this.validateUserData0().catch(e => this.log.error(`Cannot validate 0_userdata: ${e}`));\n void this.checkWellKnownPasswords().catch(e => this.log.error(`Cannot check well known passwords: ${e}`));\n this.subscribeForeignObjects(`system.adapter.${this.namespace}.plugins.sentry.enabled`);\n }\n\n /**\n * Create 0_userdata if it does not exist\n */\n async validateUserData0(): Promise<void> {\n let obj: ioBroker.MetaObject | null | undefined;\n try {\n obj = await this.getForeignObjectAsync('0_userdata.0');\n } catch {\n // ignore\n }\n if (!obj) {\n try {\n const ioContent = readFileSync(`${controllerDir}/io-package.json`).toString('utf8');\n const io = JSON.parse(ioContent);\n if (io.objects) {\n const userData: ioBroker.MetaObject | null = io.objects.find(\n (obj: ioBroker.AnyObject) => obj._id === '0_userdata.0',\n );\n if (userData) {\n await this.setForeignObjectAsync(userData._id, userData);\n this.log.info('Object 0_userdata.0 was re-created');\n }\n }\n } catch (e) {\n this.log.error(`Cannot read ${controllerDir}/io-package.json: ${e}`);\n }\n }\n }\n\n async checkWellKnownPasswords(): Promise<void> {\n if (process.platform !== 'linux') {\n return;\n }\n const found = await checkWellKnownPasswords();\n if (found) {\n this.changedPasswords = this.changedPasswords.filter(\n item => item.login !== found.login && item.password !== found.password,\n );\n this.changedPasswords.push(found);\n\n await this.registerNotification('admin', 'wellKnownPassword', I18n.translate('User: %s', found.login), {\n contextData: {\n admin: {\n notification: {\n login: found.login,\n password: found.password,\n offlineMessage: I18n.getTranslatedObject('Offline message', found.login),\n },\n },\n },\n });\n }\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n module.exports = (options: Partial<AdapterOptions> | undefined) => new Admin(options);\n} else {\n // otherwise start the instance directly\n (() => new Admin())();\n}\n"]}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes