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,121 +0,0 @@
1
- import{j as t,E as nt,J as ht,B as pt,F as dt}from"./DefaultPropsProvider-u5xB1Fxz.js";import{i as T,R as J}from"./iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js";import{I as y,i as o,a as f,p as H,aa as Y,U as B,ab as ct,w as $,D as X,E as ut,f as E,q as mt,s as xt,S as et,h as gt,g as ft,T as yt,e as vt}from"./bootstrap-BYQTdf9r.js";import{G as it}from"./iconBase-C3vi24ZE.js";import{A as bt}from"./AdapterUpdateDialog-DHGhgEEq.js";import{g as jt}from"./_commonjsHelpers-D6-XlEtG.js";import{C as Ct}from"./CustomModal-DNMTLv4y.js";import{a as St}from"./blueGrey-DYsiMDOn.js";import"./iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BnsS7SOQ.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-CTkuGOOk.js";import"./emotion-serialize.esm-BUa21YfQ.js";import"./iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BOKYvG_W.js";import"./ace-BG5WYul1.js";import"./FilledInput-CysG4ax_.js";import"./preload-helper-Dp1pzeXC.js";import"./iobroker_admin__loadShare__leaflet__loadShare__-h9SMNPLU.js";import"./extends-CF3RwP-h.js";import"./zh-cn-vvAC9zpl.js";import"./State-BqfD2ABf.js";import"./emotion-cache.browser.esm-B8BFze5o.js";function wt(c){return it({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"M16.293 9.293 12 13.586 7.707 9.293l-1.414 1.414L12 16.414l5.707-5.707z"},child:[]}]})(c)}function It(c){return it({attr:{viewBox:"0 0 24 24"},child:[{tag:"path",attr:{d:"m6.293 13.293 1.414 1.414L12 10.414l4.293 4.293 1.414-1.414L12 7.586z"},child:[]}]})(c)}var tt={exports:{}},kt=tt.exports;(function(c){(function(e){const s="(0?\\d+|0x[a-f0-9]+)",r={fourOctet:new RegExp(`^${s}\\.${s}\\.${s}\\.${s}$`,"i"),threeOctet:new RegExp(`^${s}\\.${s}\\.${s}$`,"i"),twoOctet:new RegExp(`^${s}\\.${s}$`,"i"),longValue:new RegExp(`^${s}$`,"i")},d=new RegExp("^0[0-7]+$","i"),b=new RegExp("^0x[a-f0-9]+$","i"),x="%[0-9a-z]{1,}",k="(?:[0-9a-f]+::?)+",F={zoneIndex:new RegExp(x,"i"),native:new RegExp(`^(::)?(${k})?([0-9a-f]+)?(::)?(${x})?$`,"i"),deprecatedTransitional:new RegExp(`^(?:::)(${s}\\.${s}\\.${s}\\.${s}(${x})?)$`,"i"),transitional:new RegExp(`^((?:${k})|(?:::)(?:${k})?)${s}\\.${s}\\.${s}\\.${s}(${x})?$`,"i")};function N(n,i){if(n.indexOf("::")!==n.lastIndexOf("::"))return null;let l=0,a=-1,h=(n.match(F.zoneIndex)||[])[0],p,C;for(h&&(h=h.substring(1),n=n.replace(/%.+$/,""));(a=n.indexOf(":",a+1))>=0;)l++;if(n.substr(0,2)==="::"&&l--,n.substr(-2,2)==="::"&&l--,l>i)return null;for(C=i-l,p=":";C--;)p+="0:";return n=n.replace("::",p),n[0]===":"&&(n=n.slice(1)),n[n.length-1]===":"&&(n=n.slice(0,-1)),i=function(){const R=n.split(":"),V=[];for(let W=0;W<R.length;W++)V.push(parseInt(R[W],16));return V}(),{parts:i,zoneId:h}}function _(n,i,l,a){if(n.length!==i.length)throw new Error("ipaddr: cannot match CIDR for objects with different lengths");let h=0,p;for(;a>0;){if(p=l-a,p<0&&(p=0),n[h]>>p!==i[h]>>p)return!1;a-=l,h+=1}return!0}function P(n){if(b.test(n))return parseInt(n,16);if(n[0]==="0"&&!isNaN(parseInt(n[1],10))){if(d.test(n))return parseInt(n,8);throw new Error(`ipaddr: cannot parse ${n} as octal`)}return parseInt(n,10)}function K(n,i){for(;n.length<i;)n=`0${n}`;return n}const m={};m.IPv4=function(){function n(i){if(i.length!==4)throw new Error("ipaddr: ipv4 octet count should be 4");let l,a;for(l=0;l<i.length;l++)if(a=i[l],!(0<=a&&a<=255))throw new Error("ipaddr: ipv4 octet should fit in 8 bits");this.octets=i}return n.prototype.SpecialRanges={unspecified:[[new n([0,0,0,0]),8]],broadcast:[[new n([255,255,255,255]),32]],multicast:[[new n([224,0,0,0]),4]],linkLocal:[[new n([169,254,0,0]),16]],loopback:[[new n([127,0,0,0]),8]],carrierGradeNat:[[new n([100,64,0,0]),10]],private:[[new n([10,0,0,0]),8],[new n([172,16,0,0]),12],[new n([192,168,0,0]),16]],reserved:[[new n([192,0,0,0]),24],[new n([192,0,2,0]),24],[new n([192,88,99,0]),24],[new n([198,18,0,0]),15],[new n([198,51,100,0]),24],[new n([203,0,113,0]),24],[new n([240,0,0,0]),4]],as112:[[new n([192,175,48,0]),24],[new n([192,31,196,0]),24]],amt:[[new n([192,52,193,0]),24]]},n.prototype.kind=function(){return"ipv4"},n.prototype.match=function(i,l){let a;if(l===void 0&&(a=i,i=a[0],l=a[1]),i.kind()!=="ipv4")throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");return _(this.octets,i.octets,8,l)},n.prototype.prefixLengthFromSubnetMask=function(){let i=0,l=!1;const a={0:8,128:7,192:6,224:5,240:4,248:3,252:2,254:1,255:0};let h,p,C;for(h=3;h>=0;h-=1)if(p=this.octets[h],p in a){if(C=a[p],l&&C!==0)return null;C!==8&&(l=!0),i+=C}else return null;return 32-i},n.prototype.range=function(){return m.subnetMatch(this,this.SpecialRanges)},n.prototype.toByteArray=function(){return this.octets.slice(0)},n.prototype.toIPv4MappedAddress=function(){return m.IPv6.parse(`::ffff:${this.toString()}`)},n.prototype.toNormalizedString=function(){return this.toString()},n.prototype.toString=function(){return this.octets.join(".")},n}(),m.IPv4.broadcastAddressFromCIDR=function(n){try{const i=this.parseCIDR(n),l=i[0].toByteArray(),a=this.subnetMaskFromPrefixLength(i[1]).toByteArray(),h=[];let p=0;for(;p<4;)h.push(parseInt(l[p],10)|parseInt(a[p],10)^255),p++;return new this(h)}catch{throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},m.IPv4.isIPv4=function(n){return this.parser(n)!==null},m.IPv4.isValid=function(n){try{return new this(this.parser(n)),!0}catch{return!1}},m.IPv4.isValidCIDR=function(n){try{return this.parseCIDR(n),!0}catch{return!1}},m.IPv4.isValidFourPartDecimal=function(n){return!!(m.IPv4.isValid(n)&&n.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/))},m.IPv4.networkAddressFromCIDR=function(n){let i,l,a,h,p;try{for(i=this.parseCIDR(n),a=i[0].toByteArray(),p=this.subnetMaskFromPrefixLength(i[1]).toByteArray(),h=[],l=0;l<4;)h.push(parseInt(a[l],10)&parseInt(p[l],10)),l++;return new this(h)}catch{throw new Error("ipaddr: the address does not have IPv4 CIDR format")}},m.IPv4.parse=function(n){const i=this.parser(n);if(i===null)throw new Error("ipaddr: string is not formatted like an IPv4 Address");return new this(i)},m.IPv4.parseCIDR=function(n){let i;if(i=n.match(/^(.+)\/(\d+)$/)){const l=parseInt(i[2]);if(l>=0&&l<=32){const a=[this.parse(i[1]),l];return Object.defineProperty(a,"toString",{value:function(){return this.join("/")}}),a}}throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range")},m.IPv4.parser=function(n){let i,l,a;if(i=n.match(r.fourOctet))return function(){const h=i.slice(1,6),p=[];for(let C=0;C<h.length;C++)l=h[C],p.push(P(l));return p}();if(i=n.match(r.longValue)){if(a=P(i[1]),a>4294967295||a<0)throw new Error("ipaddr: address outside defined range");return function(){const h=[];let p;for(p=0;p<=24;p+=8)h.push(a>>p&255);return h}().reverse()}else return(i=n.match(r.twoOctet))?function(){const h=i.slice(1,4),p=[];if(a=P(h[1]),a>16777215||a<0)throw new Error("ipaddr: address outside defined range");return p.push(P(h[0])),p.push(a>>16&255),p.push(a>>8&255),p.push(a&255),p}():(i=n.match(r.threeOctet))?function(){const h=i.slice(1,5),p=[];if(a=P(h[2]),a>65535||a<0)throw new Error("ipaddr: address outside defined range");return p.push(P(h[0])),p.push(P(h[1])),p.push(a>>8&255),p.push(a&255),p}():null},m.IPv4.subnetMaskFromPrefixLength=function(n){if(n=parseInt(n),n<0||n>32)throw new Error("ipaddr: invalid IPv4 prefix length");const i=[0,0,0,0];let l=0;const a=Math.floor(n/8);for(;l<a;)i[l]=255,l++;return a<4&&(i[a]=Math.pow(2,n%8)-1<<8-n%8),new this(i)},m.IPv6=function(){function n(i,l){let a,h;if(i.length===16)for(this.parts=[],a=0;a<=14;a+=2)this.parts.push(i[a]<<8|i[a+1]);else if(i.length===8)this.parts=i;else throw new Error("ipaddr: ipv6 part count should be 8 or 16");for(a=0;a<this.parts.length;a++)if(h=this.parts[a],!(0<=h&&h<=65535))throw new Error("ipaddr: ipv6 part should fit in 16 bits");l&&(this.zoneId=l)}return n.prototype.SpecialRanges={unspecified:[new n([0,0,0,0,0,0,0,0]),128],linkLocal:[new n([65152,0,0,0,0,0,0,0]),10],multicast:[new n([65280,0,0,0,0,0,0,0]),8],loopback:[new n([0,0,0,0,0,0,0,1]),128],uniqueLocal:[new n([64512,0,0,0,0,0,0,0]),7],ipv4Mapped:[new n([0,0,0,0,0,65535,0,0]),96],discard:[new n([256,0,0,0,0,0,0,0]),64],rfc6145:[new n([0,0,0,0,65535,0,0,0]),96],rfc6052:[new n([100,65435,0,0,0,0,0,0]),96],"6to4":[new n([8194,0,0,0,0,0,0,0]),16],teredo:[new n([8193,0,0,0,0,0,0,0]),32],benchmarking:[new n([8193,2,0,0,0,0,0,0]),48],amt:[new n([8193,3,0,0,0,0,0,0]),32],as112v6:[[new n([8193,4,274,0,0,0,0,0]),48],[new n([9760,79,32768,0,0,0,0,0]),48]],deprecated:[new n([8193,16,0,0,0,0,0,0]),28],orchid2:[new n([8193,32,0,0,0,0,0,0]),28],droneRemoteIdProtocolEntityTags:[new n([8193,48,0,0,0,0,0,0]),28],reserved:[[new n([8193,0,0,0,0,0,0,0]),23],[new n([8193,3512,0,0,0,0,0,0]),32]]},n.prototype.isIPv4MappedAddress=function(){return this.range()==="ipv4Mapped"},n.prototype.kind=function(){return"ipv6"},n.prototype.match=function(i,l){let a;if(l===void 0&&(a=i,i=a[0],l=a[1]),i.kind()!=="ipv6")throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");return _(this.parts,i.parts,16,l)},n.prototype.prefixLengthFromSubnetMask=function(){let i=0,l=!1;const a={0:16,32768:15,49152:14,57344:13,61440:12,63488:11,64512:10,65024:9,65280:8,65408:7,65472:6,65504:5,65520:4,65528:3,65532:2,65534:1,65535:0};let h,p;for(let C=7;C>=0;C-=1)if(h=this.parts[C],h in a){if(p=a[h],l&&p!==0)return null;p!==16&&(l=!0),i+=p}else return null;return 128-i},n.prototype.range=function(){return m.subnetMatch(this,this.SpecialRanges)},n.prototype.toByteArray=function(){let i;const l=[],a=this.parts;for(let h=0;h<a.length;h++)i=a[h],l.push(i>>8),l.push(i&255);return l},n.prototype.toFixedLengthString=function(){const i=function(){const a=[];for(let h=0;h<this.parts.length;h++)a.push(K(this.parts[h].toString(16),4));return a}.call(this).join(":");let l="";return this.zoneId&&(l=`%${this.zoneId}`),i+l},n.prototype.toIPv4Address=function(){if(!this.isIPv4MappedAddress())throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");const i=this.parts.slice(-2),l=i[0],a=i[1];return new m.IPv4([l>>8,l&255,a>>8,a&255])},n.prototype.toNormalizedString=function(){const i=function(){const a=[];for(let h=0;h<this.parts.length;h++)a.push(this.parts[h].toString(16));return a}.call(this).join(":");let l="";return this.zoneId&&(l=`%${this.zoneId}`),i+l},n.prototype.toRFC5952String=function(){const i=/((^|:)(0(:|$)){2,})/g,l=this.toNormalizedString();let a=0,h=-1,p;for(;p=i.exec(l);)p[0].length>h&&(a=p.index,h=p[0].length);return h<0?l:`${l.substring(0,a)}::${l.substring(a+h)}`},n.prototype.toString=function(){return this.toRFC5952String()},n}(),m.IPv6.broadcastAddressFromCIDR=function(n){try{const i=this.parseCIDR(n),l=i[0].toByteArray(),a=this.subnetMaskFromPrefixLength(i[1]).toByteArray(),h=[];let p=0;for(;p<16;)h.push(parseInt(l[p],10)|parseInt(a[p],10)^255),p++;return new this(h)}catch(i){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${i})`)}},m.IPv6.isIPv6=function(n){return this.parser(n)!==null},m.IPv6.isValid=function(n){if(typeof n=="string"&&n.indexOf(":")===-1)return!1;try{const i=this.parser(n);return new this(i.parts,i.zoneId),!0}catch{return!1}},m.IPv6.isValidCIDR=function(n){if(typeof n=="string"&&n.indexOf(":")===-1)return!1;try{return this.parseCIDR(n),!0}catch{return!1}},m.IPv6.networkAddressFromCIDR=function(n){let i,l,a,h,p;try{for(i=this.parseCIDR(n),a=i[0].toByteArray(),p=this.subnetMaskFromPrefixLength(i[1]).toByteArray(),h=[],l=0;l<16;)h.push(parseInt(a[l],10)&parseInt(p[l],10)),l++;return new this(h)}catch(C){throw new Error(`ipaddr: the address does not have IPv6 CIDR format (${C})`)}},m.IPv6.parse=function(n){const i=this.parser(n);if(i.parts===null)throw new Error("ipaddr: string is not formatted like an IPv6 Address");return new this(i.parts,i.zoneId)},m.IPv6.parseCIDR=function(n){let i,l,a;if((l=n.match(/^(.+)\/(\d+)$/))&&(i=parseInt(l[2]),i>=0&&i<=128))return a=[this.parse(l[1]),i],Object.defineProperty(a,"toString",{value:function(){return this.join("/")}}),a;throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range")},m.IPv6.parser=function(n){let i,l,a,h,p,C;if(a=n.match(F.deprecatedTransitional))return this.parser(`::ffff:${a[1]}`);if(F.native.test(n))return N(n,8);if((a=n.match(F.transitional))&&(C=a[6]||"",i=a[1],a[1].endsWith("::")||(i=i.slice(0,-1)),i=N(i+C,6),i.parts)){for(p=[parseInt(a[2]),parseInt(a[3]),parseInt(a[4]),parseInt(a[5])],l=0;l<p.length;l++)if(h=p[l],!(0<=h&&h<=255))return null;return i.parts.push(p[0]<<8|p[1]),i.parts.push(p[2]<<8|p[3]),{parts:i.parts,zoneId:i.zoneId}}return null},m.IPv6.subnetMaskFromPrefixLength=function(n){if(n=parseInt(n),n<0||n>128)throw new Error("ipaddr: invalid IPv6 prefix length");const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];let l=0;const a=Math.floor(n/8);for(;l<a;)i[l]=255,l++;return a<16&&(i[a]=Math.pow(2,n%8)-1<<8-n%8),new this(i)},m.fromByteArray=function(n){const i=n.length;if(i===4)return new m.IPv4(n);if(i===16)return new m.IPv6(n);throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address")},m.isValid=function(n){return m.IPv6.isValid(n)||m.IPv4.isValid(n)},m.isValidCIDR=function(n){return m.IPv6.isValidCIDR(n)||m.IPv4.isValidCIDR(n)},m.parse=function(n){if(m.IPv6.isValid(n))return m.IPv6.parse(n);if(m.IPv4.isValid(n))return m.IPv4.parse(n);throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format")},m.parseCIDR=function(n){try{return m.IPv6.parseCIDR(n)}catch{try{return m.IPv4.parseCIDR(n)}catch{throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format")}}},m.process=function(n){const i=this.parse(n);return i.kind()==="ipv6"&&i.isIPv4MappedAddress()?i.toIPv4Address():i},m.subnetMatch=function(n,i,l){let a,h,p,C;l==null&&(l="unicast");for(h in i)if(Object.prototype.hasOwnProperty.call(i,h)){for(p=i[h],p[0]&&!(p[0]instanceof Array)&&(p=[p]),a=0;a<p.length;a++)if(C=p[a],n.kind()===C[0].kind()&&n.match.apply(n,C))return h}return l},c.exports?c.exports=m:e.ipaddr=m})(kt)})(tt);var Tt=tt.exports;const st=jt(Tt);class Ft extends T.Component{updating=!1;textareaRef=J.createRef();link=`${window.location.protocol}//${window.location.host}/`;interval;startTimeout;constructor(e){super(e),this.state={response:null,error:null,starting:!0}}setUpdating(e){this.updating!==e&&(this.updating=e,this.props.onUpdating(e))}async findIpAddress(){var b,x,k,F;if((await this.props.socket.getObject(`system.adapter.${this.props.adminInstance}`)).common.host===this.props.hostId)return;const s=await this.props.socket.getObject(this.props.hostId),r=await this.props.socket.readBaseSettings(this.props.hostId);let d=(x=(b=r==null?void 0:r.config)==null?void 0:b.objects)==null?void 0:x.host;if(!(!d||d==="localhost")&&(d=st.parse(d).toString(),!!((F=(k=s==null?void 0:s.native)==null?void 0:k.hardware)!=null&&F.networkInterfaces)))for(const N of Object.values(s.native.hardware.networkInterfaces))N.find(_=>{try{const P=st.parseCIDR(_.cidr).toString();_.internal===!1&&d.match(P)&&(this.link=`${window.location.protocol}//${_.family==="IPv6"?`[${_.address}]`:_.address}:${window.location.port}`)}catch{}return!1})}async componentDidMount(){try{await this.findIpAddress()}catch(e){console.error(`Cannot find ip address: ${e.message}`)}try{await this.props.socket.upgradeController(this.props.hostId,this.props.version,parseInt(this.props.adminInstance.split(".").pop(),10))}catch(e){console.error(`Cannot update controller: ${e.message}`),this.setState({error:y.t("Not updatable"),starting:!1}),this.setUpdating(!1);return}this.setUpdating(!0),this.interval=setInterval(()=>this.checkStatus(),1e3),this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.setState({starting:!1})},1e4)}componentWillUnmount(){this.interval&&(clearInterval(this.interval),this.interval=null),this.startTimeout&&(clearTimeout(this.startTimeout),this.startTimeout=null)}async checkStatus(){console.log(`Request update status from: ${this.link}`);try{const s=await(await fetch(this.link)).text();console.log(`Received status: ${s}`);const r=JSON.parse(s);r!=null&&r.stderr&&(r.stderr=r.stderr.filter(d=>d.trim())),r&&!r.running&&r.success&&r.stdout?(r.stdout.push(""),r.stdout.push("---------------------------------------------------"),r.stdout.push(y.t("%s was successfully updated to %s","js-controller",this.props.version))):r!=null&&r.stdout&&(r.stdout.unshift(""),r.stdout.unshift("---------------------------------------------------"),r.stdout.unshift(y.t("updating %s to %s...","js-controller",this.props.version))),this.setState({response:r,error:null},()=>{r&&!r.running?(this.setUpdating(!1),this.interval&&(clearInterval(this.interval),this.interval=null)):r!=null&&r.running&&this.setUpdating(!0),this.textareaRef.current&&setTimeout(()=>this.textareaRef.current.scrollTop=this.textareaRef.current.scrollHeight,100)})}catch(e){this.state.starting||this.setState({error:e.toString()},()=>this.setUpdating(!1))}}render(){var e,s,r,d,b;return t.jsxs(o.Dialog,{onClose:(x,k)=>{k!=="escapeKeyDown"&&k!=="backdropClick"&&this.props.onClose()},open:!0,maxWidth:"lg",fullWidth:!0,children:[t.jsx(o.DialogTitle,{children:y.t("Updating %s...","js-controller")}),t.jsxs(o.DialogContent,{style:{height:400,padding:"0 20px",overflow:"hidden"},children:[(!this.state.response||this.state.response.running)&&!this.state.error?t.jsx(o.LinearProgress,{}):null,this.state.response||this.state.error?t.jsx("textarea",{ref:this.textareaRef,style:{width:"100%",height:"100%",resize:"none",background:this.props.themeType==="dark"?"#000":"#fff",color:this.props.themeType==="dark"?"#EEE":"#111",boxSizing:"border-box",fontFamily:"Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace",border:(e=this.state.response)!=null&&e.success?"2px solid green":this.state.error||this.state.response&&!this.state.response.running&&!this.state.response.success?"2px solid red":void 0},value:this.state.error?this.state.error:this.state.response.stderr&&this.state.response.stderr.length?this.state.response.stderr.join(`
2
- `):this.state.response.stdout.join(`
3
- `),readOnly:!0}):null]}),t.jsx(o.DialogActions,{children:t.jsx(o.Button,{id:"js-controller-updater-close",variant:"contained",disabled:this.state.starting||!this.state.error&&((s=this.state.response)==null?void 0:s.running),onClick:()=>{var x;(x=this.state.response)!=null&&x.success&&window.location.reload(),this.props.onClose()},color:(r=this.state.response)!=null&&r.success?"primary":"grey",startIcon:(d=this.state.response)!=null&&d.success?t.jsx(f.Refresh,{}):t.jsx(f.Close,{}),children:(b=this.state.response)!=null&&b.success?y.t("Reload"):y.t("Close")})})]})}}const u={root:{width:"100%",height:"auto",display:"flex",flexDirection:"column",overflow:"auto",padding:10},paper:{maxWidth:1e3},overflowHidden:{display:"flex",overflow:"hidden"},h2:c=>({p:"10px 7px",fontSize:25,fontWeight:300,borderRadius:"3px",background:"#4dabf5",color:c.palette.mode==="dark"?"black":"white"}),h22:c=>({p:0,m:0,fontSize:25,fontWeight:300,borderRadius:"3px",background:"#4dabf5",color:c.palette.mode==="dark"?"black":"white"}),standardText:{fontSize:15,margin:"10px 0","& > a":{textDecoration:"none",color:"#1e88e5"}},standardTextSmall:{fontSize:12,color:"black"},standardTextSmall2:{fontSize:12},pre:{whiteSpace:"pre-wrap",background:"#e4e3e3",padding:10,borderRadius:3,position:"relative"},copyButton:{color:"black",position:"absolute",right:10,top:4},accordionSummary:{background:"#4dabf5",borderRadius:"3px","& .MuiAccordionSummary-content":{m:0}},accordionDetails:{display:"flex",flexDirection:"column"},code:c=>({backgroundColor:c.palette.mode==="dark"?"#123456":"#93bbe7",p:"0 3px 0 3px"}),copyButtonSmall:{width:31,height:16}};function ot(c,e,s){const r=c.split(`
4
- `),d=[];let b=!1;for(let x=0;x<r.length;x++){const k=r[x].toLowerCase();k.startsWith("##")&&(b=k.includes(e.toLowerCase())&&(!s||!k.includes(s.toLowerCase()))),b||d.push(r[x])}return d.join(`
5
- `)}const Ot=({socket:c,hostId:e,version:s,onClose:r})=>{const[d,b]=T.useState(null),[x,k]=T.useState(""),[F,N]=T.useState(""),_=m=>{B.copyToClipboard(m),window.alert(y.t("Copied"))};T.useEffect(()=>{(!e||typeof e!="string")&&console.error(`Invalid hostId: "${e}" with type ${typeof e}`),(!x||!F)&&e&&typeof e=="string"&&c.getHostInfoShort(e).then(m=>{m.location&&m.location!==x&&k(m.location),m.os&&m.os!==F&&N(m.os),fetch(`https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${y.getLanguage()}/controller-upgrade.md`).then(n=>n.text()).then(n=>{const i=m.os||F,l=(m.location||x).replace(/\\/g,"/");i==="win32"?n=ot(n,"linux","windows"):n=ot(n,"windows","linux"),n=n.replace(/cd \/opt\/iobroker/g,`cd ${l}`),n=n.replace(/cd C:\\iobroker/g,`cd ${l}`),n=n.replace(/x\.y\.z/g,s);const a=n.split("<!-- copy"),h=[];a.forEach(p=>{if(p.includes("-->")){const C=p.split("-->");let R=C[0];const V=C[1];let W=!1;R.startsWith(" small")&&(R=R.replace(/^ {2}small /,""),W=!0),R=R.replace(/^\n\r/,"").replace(/^\n/,""),W?h.push(t.jsx(o.IconButton,{onClick:()=>_(R),children:t.jsx(H,{})},`b${h.length}`)):h.push(t.jsx(o.Button,{variant:"contained",onClick:()=>_(R),startIcon:t.jsx(H,{}),children:y.t("Copy to clipboard")},`b${h.length}`)),h.push(V)}else h.push(p)}),b(h)})}).catch(m=>window.alert(`Cannot get information about host "${e}": ${m}`))},[x,F,c,s,e]);const P=()=>t.jsx(t.Fragment,{children:d.map((m,n)=>typeof m=="object"?m:t.jsx(ct,{components:{em:({...i})=>t.jsx(o.IconButton,{style:u.copyButtonSmall,onClick:()=>_(i.children[0].toString()),children:t.jsx(H,{})}),a:({children:i,...l})=>t.jsx("a",{style:{color:"inherit"},...l,children:i}),code:({children:i,ref:l,...a})=>t.jsx(o.Box,{component:"code",sx:u.code,ref:l,...a,children:i})},children:m},`t_${n}`))}),K=()=>t.jsxs(o.Card,{style:u.root,children:[t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("Due to the different hardware and platforms under which ioBroker runs, the js-controller has to be updated manually. Further details can be found in the appropriate section.")}),t.jsx(o.Box,{component:"h2",sx:u.h2,children:y.t("General information for all platforms")}),t.jsxs(o.Box,{component:"div",sx:u.standardText,children:[y.t("For an update from js-controller 1.x to 2.x please always read the information at")," ",t.jsx("a",{href:"https://forum.iobroker.net/topic/26759/js-controller-2-jetzt-f%C3%BCr-alle-im-stable",target:"_blank",rel:"noreferrer",children:"forum"}),"."]}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("Otherwise please update the slaves first with an update of master-slave systems and the master last!")}),F!=="win32"&&t.jsxs(t.Fragment,{children:[t.jsx(o.Box,{component:"h2",sx:u.h2,children:y.t("Linux/macOS (new installer)")}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("This is the recommended option")}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("Please execute the following commands in an SSH shell (console):")}),t.jsxs("pre",{style:u.pre,children:[t.jsx(o.IconButton,{size:"small",onClick:()=>{window.alert(y.t("Copied")),_(`iob backup
6
- iob stop
7
- iob update
8
- iob upgrade self
9
- iob start`)},style:u.copyButton,children:t.jsx(H,{})}),t.jsx("div",{style:u.standardTextSmall,children:"iob backup"}),t.jsx("div",{style:u.standardTextSmall,children:"iob stop"}),t.jsx("div",{style:u.standardTextSmall,children:"iob update"}),t.jsx("div",{style:u.standardTextSmall,children:"iob fix"}),t.jsx("div",{style:u.standardTextSmall,children:"iob upgrade self"}),t.jsx("div",{style:u.standardTextSmall,children:"iob start"})]}),t.jsx("div",{style:u.standardTextSmall2,children:y.t("or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.")}),t.jsx("div",{style:u.standardTextSmall2,children:y.t("If the upgrade command displays Access Rights / Permission errors, then please use the install fixer")}),t.jsxs("pre",{style:u.pre,children:[t.jsx(o.IconButton,{size:"small",onClick:()=>{window.alert(y.t("Copied")),_("curl -sL https://iobroker.net/fix.sh | bash -")},style:u.copyButton,children:t.jsx(H,{})}),t.jsx("div",{style:u.standardTextSmall,children:"curl -sL https://iobroker.net/fix.sh | bash -"})]}),t.jsx("div",{style:u.standardTextSmall2,children:y.t("to fix these issues and upgrade command run again.")}),t.jsx(o.Box,{component:"h2",sx:u.h2,children:y.t("Linux/macOS (manually installed)")}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t('A manual installation usually takes place under root as user and therefore a "sudo" is necessary before the commands.')}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("Please execute the following commands in an SSH shell (console):")}),t.jsxs("pre",{style:u.pre,children:[t.jsx(o.IconButton,{size:"small",onClick:()=>{window.alert(y.t("Copied")),_(`cd ${x||"/opt/iobroker"}
10
- iob backup
11
- iob stop
12
- iob update
13
- iob fix
14
- iob upgrade self
15
- iob start
16
- `)},style:u.copyButton,children:t.jsx(H,{})}),t.jsxs("div",{style:u.standardTextSmall,children:["cd",x||"/opt/iobroker"]}),t.jsx("div",{style:u.standardTextSmall,children:"iob backup"}),t.jsx("div",{style:u.standardTextSmall,children:"iob stop"}),t.jsx("div",{style:u.standardTextSmall,children:"iob fix"}),t.jsx("div",{style:u.standardTextSmall,children:"iob update"}),t.jsx("div",{style:u.standardTextSmall,children:"iob upgrade self"}),t.jsx("div",{style:u.standardTextSmall,children:"iob start"})]}),t.jsx("div",{style:u.standardTextSmall2,children:y.t("or reboot server, then ioBroker should restart and you can be sure that all old processes were finished.")}),t.jsx("div",{style:u.standardTextSmall2,children:y.t('If the upgrade command displays permissions / permissions errors, fix them. Sometimes "sudo" is not enough and you have to run the installation as a real root (previously simply sudo su -).')})]}),F==="win32"&&t.jsxs(t.Fragment,{children:[t.jsx(o.Box,{component:"h2",sx:u.h2,children:y.t("Windows")}),t.jsxs(o.Box,{component:"div",sx:u.standardText,children:[y.t("For updating ioBroker on Windows, download the appropriate installer with the desired js-controller version from the download page "),t.jsx("a",{rel:"noreferrer",href:"https://www.iobroker.net/#en/download",target:"_blank",children:"https://www.iobroker.net/#en/download"}),y.t(" and make the update with it. With the Windows Installer, previously manually installed servers or installations from other operating systems can be migrated to Windows and updated.")]}),t.jsx(o.Box,{component:"h2",sx:u.h2,children:y.t("Windows (manually installed)")}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("A manual installation is done with administrator rights. Please start a cmd.exe command line window as an administrator (right-click on cmd.exe and execute as administrator) and execute the following commands:")}),t.jsxs("pre",{style:u.pre,children:[t.jsx(o.IconButton,{size:"small",onClick:()=>{window.alert(y.t("Copied")),_(`cd ${(x||"C:\\iobroker").replace(/\//g,"\\")}
17
- iob backup
18
- iob stop
19
- iob status
20
- iob update
21
- iob upgrade self
22
- `)},style:u.copyButton,children:t.jsx(H,{})}),t.jsxs("div",{style:u.standardTextSmall,children:["cd",(x||"C:\\iobroker").replace(/\//g,"\\")," ",x?null:y.t("(or where ioBroker was installed)")]}),t.jsx("div",{style:u.standardTextSmall,children:"iob backup"}),t.jsxs("div",{style:u.standardTextSmall,children:["iob stop",y.t("to stop the ioBroker service")]}),t.jsxs("div",{style:u.standardTextSmall,children:["iob status",y.t("to check if ioBroker has finished")]}),t.jsx("div",{style:u.standardTextSmall,children:"iob update"}),t.jsx("div",{style:u.standardTextSmall,children:"iob upgrade self"})]}),t.jsx("div",{style:u.standardTextSmall2,children:y.t("Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished.")})]}),t.jsxs(o.Accordion,{style:{paddingTop:14},children:[t.jsx(o.AccordionSummary,{sx:u.accordionSummary,expandIcon:t.jsx(f.ExpandMore,{}),children:t.jsx(o.Box,{component:"h2",sx:u.h22,children:y.t("Emergency Linux / macOS / Windows")})}),t.jsxs(o.AccordionDetails,{style:u.accordionDetails,children:[t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("(manual reinstallation, if somehow nothing works after the update)")}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t('On Windows first please call in the start menu under "ioBroker" the command line of the relevant ioBroker instance. The correct directory is then set automatically. On Linux or macOS please go to the ioBroker directory.')}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("Run npm install iobroker.js-controller there. A specific version can be installed using npm install iobroker.js-controller@x.y.z (replace x.y.z with the desired version).")}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("If there are problems with access rights when running on Linux the command has to be changed slightly:")}),t.jsx("div",{style:u.standardTextSmall2,children:y.t("For systems created with the new Linux installer:")}),t.jsxs("pre",{style:u.pre,children:[t.jsx(o.IconButton,{size:"small",onClick:()=>{window.alert(y.t("Copied")),_(`cd ${F==="win32"?(x||"C:\\iobroker").replace(/\//g,"\\"):x||"/opt/iobroker"}
23
- sudo -u iobroker -H npm install iobroker.js-controller`)},style:u.copyButton,children:t.jsx(H,{})}),t.jsxs("div",{style:u.standardTextSmall,children:["cd",F==="win32"?(x||"C:\\iobroker").replace(/\//g,"\\"):x||"/opt/iobroker"]}),t.jsx("div",{style:u.standardTextSmall,children:"sudo -u iobroker -H npm install iobroker.js-controller"})]}),t.jsx("div",{style:u.standardTextSmall2,children:y.t("For systems installed manually under Linux, prefix sudo or run as root.")}),t.jsx(o.Box,{component:"div",sx:u.standardText,children:y.t("This way is only necessary in very few cases and please consult the forum beforehand!")})]})]})]});return t.jsxs(o.Dialog,{onClose:()=>r(),open:!0,sx:{"& .MuiDialog-paper":u.paper},children:[t.jsx(o.DialogTitle,{children:y.t("js-controller upgrade instructions")}),t.jsx(o.DialogContent,{style:d?null:u.overflowHidden,dividers:!0,children:d?P():K()}),t.jsxs(o.DialogActions,{children:[t.jsx(o.Button,{id:"js-controller-dialog-changelog",variant:"contained",onClick:()=>{window.open(Y,"_blank")},color:"grey",startIcon:t.jsx(f.Description,{}),children:y.t("Show whole changelog")}),t.jsx(o.Button,{id:"js-controller-dialog-ok",variant:"contained",onClick:()=>r(),color:"primary",startIcon:t.jsx(f.Close,{}),children:y.t("Ok")})]})]})},A={paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:8},controlItem:{width:"calc(100% - 16px)",marginBottom:16,marginRight:8,marginLeft:8},RAM:{width:400,marginRight:8}};class _t extends T.Component{focusRef;constructor(e){super(e);const s=this.props.settings||{};this.state={memoryLimitMB:s.memoryLimitMB||0,hostname:s.hostname||"",statisticsInterval:s.statisticsInterval||15e3,checkDiskInterval:s.checkDiskInterval||3e5,instanceStartInterval:s.instanceStartInterval||2e3,compact:s.compact||!1,allowShellCommands:s.allowShellCommands||!1,memLimitWarn:s.memLimitWarn||100,memLimitError:s.memLimitError||50,noChmod:s.noChmod||!1},this.focusRef=T.createRef()}componentDidMount(){var e;(e=this.focusRef.current)==null||e.focus()}onChange(){this.props.onChange({memoryLimitMB:this.state.memoryLimitMB,hostname:this.state.hostname,statisticsInterval:this.state.statisticsInterval,checkDiskInterval:this.state.checkDiskInterval,noChmod:this.state.noChmod,instanceStartInterval:this.state.instanceStartInterval,compact:this.state.compact,allowShellCommands:this.state.allowShellCommands,memLimitWarn:this.state.memLimitWarn,memLimitError:this.state.memLimitError})}render(){return t.jsx(o.Paper,{style:A.paper,children:t.jsx(o.Grid2,{style:A.gridSettings,children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",label:this.props.t("Host name"),style:A.controlItem,value:this.state.hostname||this.props.currentHost.replace("system.host.",""),onChange:e=>this.setState({hostname:e.target.value},()=>this.onChange()),helperText:this.props.t("You can change the host name, but be aware, that all instances must be assigned anew")})}),t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",label:this.props.t("Check disk space interval"),style:A.controlItem,value:this.state.checkDiskInterval,type:"number",slotProps:{htmlInput:{min:1e3}},onChange:e=>this.setState({checkDiskInterval:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("How oft the disk will be checked. Do not set it to low, because it can affect system performance. Value is in ms")})}),t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",label:this.props.t("Instance statistics update interval"),style:A.controlItem,value:this.state.statisticsInterval,type:"number",slotProps:{htmlInput:{min:5e3}},onChange:e=>this.setState({statisticsInterval:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms")})}),t.jsxs(o.Grid2,{style:A.controlItem,children:[t.jsx(o.FormControlLabel,{control:t.jsx(o.Checkbox,{checked:this.state.compact,onChange:e=>this.setState({compact:e.target.checked},()=>this.onChange())}),label:this.props.t("Compact mode")}),t.jsx("div",{children:this.props.t("When enabled adapter instances can run in one or few processes to save RAM usage.")})]}),t.jsxs(o.Grid2,{style:A.controlItem,children:[t.jsx(o.FormControlLabel,{control:t.jsx(o.Checkbox,{checked:this.state.allowShellCommands,onChange:e=>this.setState({allowShellCommands:e.target.checked},()=>this.onChange())}),label:this.props.t("Allow shell's commands")}),t.jsx("div",{children:this.props.t('Allow execution of sendToHost("shell", "cli command")')})]}),t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",label:this.props.t("Limit RAM size for controller"),style:A.controlItem,value:this.state.memoryLimitMB,type:"number",onChange:e=>this.setState({memoryLimitMB:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})}),t.jsx(o.Grid2,{children:t.jsxs(o.Grid2,{container:!0,direction:"row",style:A.controlItem,children:[t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",label:this.props.t("Show warning im log if RAM less than"),style:A.RAM,value:this.state.memLimitWarn,type:"number",onChange:e=>this.setState({memLimitWarn:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})}),t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",label:this.props.t("Show error in log if RAM less than"),style:A.RAM,value:this.state.memLimitError,type:"number",onChange:e=>this.setState({memLimitError:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})})]})})]})})})}}const Bt=$()(_t),G={paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:8},controlItem:{width:"calc(100% - 16px)",marginBottom:16,marginRight:8,marginLeft:8}};class Dt extends T.Component{focusRef;constructor(e){super(e);const s=this.props.settings||{};this.state={enabled:s.enabled||!1,secure:s.secure||!0,password:""},s.password&&this.props.socket.decrypt(s.password).then(r=>this.setState({password:r})),this.focusRef=T.createRef()}componentDidMount(){var e;(e=this.focusRef.current)==null||e.focus()}onChange(){const e={enabled:this.state.enabled,secure:this.state.secure};this.state.password?this.props.socket.encrypt(this.state.password).then(s=>{e.password=s,this.props.onChange(e)}):this.props.onChange(e)}render(){return t.jsx(o.Paper,{style:G.paper,children:t.jsx("form",{style:G.form,noValidate:!0,autoComplete:"off",children:t.jsx(o.Grid2,{style:G.gridSettings,children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[t.jsxs(o.Grid2,{style:G.controlItem,children:[t.jsx(o.FormControlLabel,{control:t.jsx(o.Checkbox,{checked:this.state.enabled,onChange:e=>this.setState({enabled:e.target.checked},()=>this.onChange())}),label:this.props.t("Allow slave connections")}),t.jsx("div",{children:this.props.t("When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system.")})]}),t.jsxs(o.Grid2,{style:G.controlItem,children:[t.jsx(o.FormControlLabel,{control:t.jsx(o.Checkbox,{checked:this.state.secure,onChange:e=>this.setState({secure:e.target.checked},()=>this.onChange())}),label:this.props.t("With password")}),t.jsx("div",{children:this.props.t("Ask password by connection establishment")})]}),this.state.secure?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",label:this.props.t("Multi-host password"),style:G.controlItem,value:this.state.password,type:"password",slotProps:{input:{autoComplete:"new-password"},htmlInput:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({password:e.target.value},()=>this.onChange())})}):null]})})})})}}const Lt=$()(Dt),S={paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:8},controlItem:{width:400,marginBottom:16,marginRight:8,marginLeft:8},dangerZone:{backgroundColor:"rgba(255, 165, 0, 0.05)",border:"2px solid rgba(255, 165, 0)",marginBottom:8},dangerZoneHeader:{background:"rgba(255, 165, 0)",color:"#FFF",paddingLeft:16,paddingTop:4,paddingBottom:4,marginTop:-1,marginLeft:-1},warning:c=>({p:1,fontSize:14,color:c.palette.mode==="dark"?"#ffa500":"#b17200"})},Q={autoCompress:{sizeFactor:2,sizeFactorMinimumSize:25e3},throttleFS:{intervalMs:6e4,maxBufferedCommands:1e3}};class Pt extends T.Component{focusRef;constructor(e){super(e);const s=this.props.settings||{};s.options=s.options||{auth_pass:"",retry_max_delay:2e3,retry_max_count:19,db:0,family:0},s.backup=s.backup||{disabled:!1,files:24,hours:48,period:120,path:""},s.jsonlOptions=s.jsonlOptions||Q,s.jsonlOptions.autoCompress=s.jsonlOptions.autoCompress||Q.autoCompress,s.jsonlOptions.throttleFS=s.jsonlOptions.throttleFS||Q.throttleFS,this.state={type:s.type||"file",host:Array.isArray(s.host)?s.host.join(","):s.host||"127.0.0.1",port:s.port||9001,noFileCache:s.noFileCache||!1,dataDir:s.dataDir||"",connectTimeout:s.connectTimeout||2e3,writeFileInterval:s.writeFileInterval||5e3,options_auth_pass:s.options.auth_pass||s.pass||"",options_retry_max_delay:s.options.retry_max_delay||2e3,options_retry_max_count:s.options.retry_max_count||19,options_db:s.options.db||0,options_family:s.options.family||0,backup_disabled:s.backup.disabled||!1,backup_files:s.backup.files||24,backup_hours:s.backup.hours||48,backup_period:s.backup.period||120,backup_path:s.backup.path||"",jsonlOptions_autoCompress_sizeFactor:s.jsonlOptions.autoCompress.sizeFactor||2,jsonlOptions_autoCompress_sizeFactorMinimumSize:s.jsonlOptions.autoCompress.sizeFactorMinimumSize||25e3,jsonlOptions_throttleFS_intervalMs:s.jsonlOptions.throttleFS.intervalMs||6e4,jsonlOptions_throttleFS_maxBufferedCommands:s.jsonlOptions.throttleFS.maxBufferedCommands||100,textIP:Array.isArray(s.host)||!!(s.host||"").match(/[^.\d]/)||(s.host||"").includes(","),IPs:["0.0.0.0","127.0.0.1"],loading:!0,showWarningDialog:!1,toConfirmType:"",originalDBType:s.type||"file"},this.focusRef=T.createRef()}componentDidMount(){this.props.socket.getIpAddresses(this.props.currentHost).then(e=>{const s=[...e];s.includes("0.0.0.0")||s.push("0.0.0.0"),s.includes("127.0.0.1")||s.push("127.0.0.1");let r=!!this.state.host.match(/[^.\d]/)||(this.state.host||"").includes(",");!r&&!s.includes(this.state.host)&&(r=!0),this.setState({IPs:s,loading:!1,textIP:r},()=>this.focusRef.current&&this.focusRef.current.focus())})}onChange(){const e={type:this.state.type,host:this.state.host,port:parseInt(this.state.port,10),noFileCache:this.state.noFileCache,connectTimeout:parseInt(this.state.connectTimeout,10),writeFileInterval:parseInt(this.state.writeFileInterval,10),dataDir:this.state.dataDir,options:{auth_pass:this.state.options_auth_pass||null,retry_max_delay:parseInt(this.state.options_retry_max_delay,10),retry_max_count:parseInt(this.state.options_retry_max_count,10),db:parseInt(this.state.options_db,10),family:parseInt(this.state.options_family,10)},backup:{disabled:this.state.backup_disabled,files:parseInt(this.state.backup_files,10),hours:parseInt(this.state.backup_hours,10),period:parseInt(this.state.backup_period,10),path:this.state.backup_path},jsonlOptions:{autoCompress:{sizeFactor:parseInt(this.state.jsonlOptions_autoCompress_sizeFactor,10),sizeFactorMinimumSize:parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,10)},throttleFS:{intervalMs:parseInt(this.state.jsonlOptions_throttleFS_intervalMs,10),maxBufferedCommands:parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands,10)}}};e.jsonlOptions.autoCompress.sizeFactor<2&&(e.jsonlOptions.autoCompress.sizeFactor=2),e.jsonlOptions.autoCompress.sizeFactorMinimumSize<0&&(e.jsonlOptions.autoCompress.sizeFactorMinimumSize=0),e.jsonlOptions.throttleFS.intervalMs<0&&(e.jsonlOptions.throttleFS.intervalMs=0),e.jsonlOptions.throttleFS.maxBufferedCommands<0&&(e.jsonlOptions.throttleFS.maxBufferedCommands=0),this.props.onChange(e)}renderWarning(){return this.state.showWarningDialog?t.jsx(X,{title:this.props.t("Please confirm"),text:this.props.t("switch_db_note"),onClose:e=>{if(e){let s;this.state.toConfirmType==="redis"?s=6379:s=9001,this.setState({type:this.state.toConfirmType||"file",showWarningDialog:!1,port:s},()=>this.onChange())}else this.setState({showWarningDialog:!1})}}):null}render(){return t.jsxs(o.Paper,{style:S.paper,children:[this.state.loading?t.jsx(o.LinearProgress,{}):null,this.renderWarning(),t.jsxs(o.Grid2,{style:{...S.gridSettings,...S.dangerZone},children:[t.jsx("h3",{style:S.dangerZoneHeader,title:this.props.t("Invalid settings in these fields could lead to dead host"),children:this.props.t("Danger zone")}),t.jsx(o.Box,{component:"p",sx:S.warning,children:this.props.t("base_settings_hint")}),t.jsxs(o.Grid2,{container:!0,direction:"column",children:[t.jsx(o.Grid2,{children:t.jsx(o.Tooltip,{title:this.props.t("switch_db_note"),slotProps:{popper:{sx:{pointerEvents:"none"}}},children:t.jsxs(o.FormControl,{style:S.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Type")}),t.jsxs(o.Select,{variant:"standard",value:this.state.type,onChange:e=>{if(e.target.value!==this.state.originalDBType)this.setState({toConfirmType:e.target.value,showWarningDialog:!0});else{let s;e.target.value==="redis"?s=6379:s=9001,this.setState({type:e.target.value,port:s},()=>this.onChange())}},children:[t.jsx(o.MenuItem,{value:"jsonl",children:"JSON Lines"}),t.jsx(o.MenuItem,{value:"file",children:this.props.t("File")}),t.jsx(o.MenuItem,{value:"redis",children:"Redis"})]})]})})}),t.jsx(o.Grid2,{style:{paddingLeft:8},children:t.jsx(o.FormControlLabel,{control:t.jsx(o.Switch,{checked:this.state.textIP,onChange:e=>this.setState({textIP:e.target.checked},()=>this.onChange())}),label:this.props.t("IP is domain or more than one address")})}),t.jsx(o.Grid2,{children:this.state.textIP?t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.host,type:"text",onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),label:this.props.t("Bind IP address"),helperText:this.props.t("You can enter more than one address divided by comma")}):t.jsxs(o.FormControl,{style:S.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Bind IP address")}),t.jsx(o.Select,{variant:"standard",value:this.state.host,onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),children:this.state.IPs.map(e=>t.jsx(o.MenuItem,{value:e,children:e==="0.0.0.0"?`0.0.0.0 [${this.props.t("All addresses")}]`:e},e))})]})}),t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.port,type:"number",slotProps:{htmlInput:{min:1,max:65535}},onChange:e=>this.setState({port:e.target.value},()=>this.onChange()),label:this.props.t("Port")})}),this.state.type==="file"||this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.dataDir,helperText:this.props.t("Optional. Always relative to iobroker.js-controller/"),onChange:e=>this.setState({dataDir:e.target.value},()=>this.onChange()),label:this.props.t("Directory path")})}):null,t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.options_auth_pass,type:"password",helperText:this.props.t("Optional"),slotProps:{input:{autoComplete:"new-password"},htmlInput:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({options_auth_pass:e.target.value},()=>this.onChange()),label:this.state.type==="redis"?this.props.t("Redis password"):this.props.t("Connection password")})})]})]}),t.jsx(o.Grid2,{style:S.gridSettings,children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[this.state.type==="file"||this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.connectTimeout,helperText:this.props.t("ms"),type:"number",slotProps:{htmlInput:{min:200}},onChange:e=>this.setState({connectTimeout:e.target.value},()=>this.onChange()),label:this.props.t("Connect timeout")})}):null,this.state.type==="file"||this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{component:"fieldset",variant:"standard",style:S.controlItem,children:[t.jsx(o.FormGroup,{children:t.jsx(o.FormControlLabel,{control:t.jsx(o.Checkbox,{checked:this.state.noFileCache,onChange:e=>this.setState({noFileCache:e.target.checked},()=>this.onChange())}),label:this.props.t("No file cache")})}),t.jsx(o.FormHelperText,{children:this.props.t("Always read files from disk and do not cache them in RAM. Used for debugging.")})]})}):null,this.state.type==="file"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.writeFileInterval,helperText:this.props.t("How often the data from RAM will be saved on disk in ms"),type:"number",slotProps:{htmlInput:{min:200}},onChange:e=>this.setState({writeFileInterval:e.target.value},()=>this.onChange()),label:this.props.t("Store file interval")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.options_retry_max_delay,type:"number",helperText:this.props.t("Maximum delay between connection attempts"),onChange:e=>this.setState({options_retry_max_delay:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum delay")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.options_retry_max_count,type:"number",helperText:this.props.t("Maximum number of connection retries"),onChange:e=>this.setState({options_retry_max_count:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum count")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.options_db,type:"number",helperText:this.props.t("Used for sentinels"),onChange:e=>this.setState({options_db:e.target.value},()=>this.onChange()),label:this.props.t("DB number")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{style:S.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Family number")}),t.jsxs(o.Select,{variant:"standard",value:this.state.options_family,onChange:e=>this.setState({options_family:e.target.value},()=>this.onChange()),children:[t.jsx(o.MenuItem,{value:0,children:"auto"}),t.jsx(o.MenuItem,{value:4,children:"IPv4"}),t.jsx(o.MenuItem,{value:6,children:"IPv6"})]}),t.jsx(o.FormHelperText,{children:this.props.t("Used for sentinels")})]})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactor,type:"number",slotProps:{htmlInput:{min:2}},helperText:this.props.t("The JSONL DB is append-only and will contain unnecessary entries after a while."),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactor:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor")})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,type:"number",slotProps:{htmlInput:{min:0}},helperText:this.props.t("It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize"),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactorMinimumSize:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor minimum size")})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.jsonlOptions_throttleFS_intervalMs,type:"number",slotProps:{htmlInput:{min:0}},helperText:this.props.t("Write to the database file no more than every X milliseconds"),onChange:e=>this.setState({jsonlOptions_throttleFS_intervalMs:e.target.value},()=>this.onChange()),label:this.props.t("Minimal write interval")})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.jsonlOptions_throttleFS_maxBufferedCommands,type:"number",slotProps:{htmlInput:{min:0}},helperText:this.props.t("Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash"),onChange:e=>this.setState({jsonlOptions_throttleFS_maxBufferedCommands:e.target.value},()=>this.onChange()),label:this.props.t("Maximum changes before write")})}):null,this.state.type==="file"||this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{component:"fieldset",variant:"standard",style:S.controlItem,children:[t.jsx(o.FormGroup,{children:t.jsx(o.FormControlLabel,{control:t.jsx(o.Checkbox,{checked:this.state.backup_disabled,onChange:e=>this.setState({backup_disabled:e.target.checked},()=>this.onChange())}),label:this.props.t("No on-the-fly backup")})}),t.jsx(o.FormHelperText,{children:this.props.t("By every write the backup of object.json will be created.")})]})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.backup_files,type:"number",helperText:this.props.t("Minimal number of backup files, after the deletion will be executed according to the backup time settings"),onChange:e=>this.setState({backup_files:e.target.value},()=>this.onChange()),label:this.props.t("Number of files")})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.backup_hours,type:"number",helperText:this.props.t("All backups older than these hours will be deleted, but only if the number of files is greater than of the files number"),onChange:e=>this.setState({backup_hours:e.target.value},()=>this.onChange()),label:this.props.t("Backup hours")})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.backup_period,type:"number",helperText:this.props.t("By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0"),onChange:e=>this.setState({backup_period:e.target.value},()=>this.onChange()),label:this.props.t("How often")})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:S.controlItem,value:this.state.backup_path,helperText:this.props.t("Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place."),onChange:e=>this.setState({backup_path:e.target.value},()=>this.onChange()),label:this.props.t("Path")})}):null]})})]})}}const At=$()(Pt),w={paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:8},controlItem:{width:400,marginBottom:16,marginRight:8,marginLeft:8},dangerZone:{backgroundColor:"rgba(255, 165, 0, 0.05)",border:"2px solid rgba(255, 165, 0)",marginBottom:8},dangerZoneHeader:{background:"rgba(255, 165, 0)",color:"#FFF",paddingLeft:16,paddingTop:4,paddingBottom:4,marginTop:-1,marginLeft:-1},warning:c=>({p:1,fontSize:14,color:c.palette.mode==="dark"?"#ffa500":"#b17200"})},Z={autoCompress:{sizeFactor:2,sizeFactorMinimumSize:25e3},throttleFS:{intervalMs:6e4,maxBufferedCommands:1e3}};class Mt extends T.Component{focusRef;constructor(e){super(e);const s=this.props.settings||{};s.options=s.options||{auth_pass:"",retry_max_delay:2e3,retry_max_count:19,db:0,family:0},s.backup=s.backup||{disabled:!1,files:24,hours:48,period:120,path:""},s.jsonlOptions=s.jsonlOptions||Z,s.jsonlOptions.autoCompress=s.jsonlOptions.autoCompress||Z.autoCompress,s.jsonlOptions.throttleFS=s.jsonlOptions.throttleFS||Z.throttleFS,this.state={type:s.type||"file",host:Array.isArray(s.host)?s.host.join(","):s.host||"127.0.0.1",port:s.port||9e3,connectTimeout:s.connectTimeout||2e3,writeFileInterval:s.writeFileInterval||5e3,dataDir:s.dataDir||"",options_auth_pass:s.options.auth_pass||s.pass||"",options_retry_max_delay:s.options.retry_max_delay||2e3,options_retry_max_count:s.options.retry_max_count||19,options_db:s.options.db||0,options_family:s.options.family||0,backup_disabled:s.backup.disabled||!1,backup_files:s.backup.files||24,backup_hours:s.backup.hours||48,backup_period:s.backup.period||120,backup_path:s.backup.path||"",jsonlOptions_autoCompress_sizeFactor:s.jsonlOptions.autoCompress.sizeFactor||2,jsonlOptions_autoCompress_sizeFactorMinimumSize:s.jsonlOptions.autoCompress.sizeFactorMinimumSize||25e3,jsonlOptions_throttleFS_intervalMs:s.jsonlOptions.throttleFS.intervalMs||6e4,jsonlOptions_throttleFS_maxBufferedCommands:s.jsonlOptions.throttleFS.maxBufferedCommands||100,textIP:Array.isArray(s.host)||!!(s.host||"").match(/[^.\d]/)||(s.host||"").includes(","),IPs:["0.0.0.0","127.0.0.1"],loading:!0,showWarningDialog:!1,toConfirmType:"",originalDBType:s.type||"file",noFileCache:s.noFileCache||!1},this.focusRef=T.createRef()}componentDidMount(){this.props.socket.getIpAddresses(this.props.currentHost).then(e=>{const s=[...e];s.includes("0.0.0.0")||s.push("0.0.0.0"),s.includes("127.0.0.1")||s.push("127.0.0.1");let r=!!this.state.host.match(/[^.\d]/)||(this.state.host||"").includes(",");!r&&!s.includes(this.state.host)&&(r=!0),this.setState({IPs:s,loading:!1,textIP:r},()=>this.focusRef.current&&this.focusRef.current.focus())})}onChange(){const e={type:this.state.type,host:this.state.host,port:parseInt(this.state.port,10),noFileCache:this.state.noFileCache,connectTimeout:parseInt(this.state.connectTimeout,10),writeFileInterval:parseInt(this.state.writeFileInterval,10),dataDir:this.state.dataDir,options:{auth_pass:this.state.options_auth_pass||null,retry_max_delay:parseInt(this.state.options_retry_max_delay,10),retry_max_count:parseInt(this.state.options_retry_max_count,10),db:parseInt(this.state.options_db,10),family:parseInt(this.state.options_family,10)},backup:{disabled:this.state.backup_disabled,files:parseInt(this.state.backup_files,10),hours:parseInt(this.state.backup_hours,10),period:parseInt(this.state.backup_period,10),path:this.state.backup_path},jsonlOptions:{autoCompress:{sizeFactor:parseInt(this.state.jsonlOptions_autoCompress_sizeFactor,10),sizeFactorMinimumSize:parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,10)},throttleFS:{intervalMs:parseInt(this.state.jsonlOptions_throttleFS_intervalMs,10),maxBufferedCommands:parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands,10)}}};e.jsonlOptions.autoCompress.sizeFactor<2&&(e.jsonlOptions.autoCompress.sizeFactor=2),e.jsonlOptions.autoCompress.sizeFactorMinimumSize<0&&(e.jsonlOptions.autoCompress.sizeFactorMinimumSize=0),e.jsonlOptions.throttleFS.intervalMs<0&&(e.jsonlOptions.throttleFS.intervalMs=0),e.jsonlOptions.throttleFS.maxBufferedCommands<0&&(e.jsonlOptions.throttleFS.maxBufferedCommands=0),this.props.onChange(e)}renderWarning(){return this.state.showWarningDialog?t.jsx(X,{title:this.props.t("Please confirm"),text:this.props.t("switch_db_note"),onClose:e=>{if(e){let s;this.state.toConfirmType==="redis"?s=6379:s=9e3,this.setState({type:this.state.toConfirmType||"file",showWarningDialog:!1,port:s},()=>this.onChange())}else this.setState({showWarningDialog:!1})}}):null}render(){return t.jsxs(o.Paper,{style:w.paper,children:[this.state.loading?t.jsx(o.LinearProgress,{}):null,this.renderWarning(),t.jsxs(o.Grid2,{style:{...w.gridSettings,...w.dangerZone},children:[t.jsx("h3",{style:w.dangerZoneHeader,title:this.props.t("Invalid settings in these fields could lead to dead host"),children:this.props.t("Danger zone")}),t.jsx(o.Box,{component:"p",sx:w.warning,children:this.props.t("base_settings_hint")}),t.jsxs(o.Grid2,{container:!0,direction:"column",children:[t.jsx(o.Grid2,{children:t.jsx(o.Tooltip,{title:this.props.t("switch_db_note"),slotProps:{popper:{sx:{pointerEvents:"none"}}},children:t.jsxs(o.FormControl,{style:w.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Type")}),t.jsxs(o.Select,{variant:"standard",value:this.state.type,onChange:e=>{if(e.target.value!==this.state.originalDBType)this.setState({toConfirmType:e.target.value,showWarningDialog:!0});else{let s;e.target.value==="redis"?s=6379:s=9e3,this.setState({type:e.target.value,port:s},()=>this.onChange())}},children:[t.jsx(o.MenuItem,{value:"jsonl",children:"JSON Lines"}),t.jsx(o.MenuItem,{value:"file",children:this.props.t("File")}),t.jsx(o.MenuItem,{value:"redis",children:"Redis"})]})]})})}),t.jsx(o.Grid2,{style:{paddingLeft:8},children:t.jsx(o.FormControlLabel,{control:t.jsx(o.Switch,{checked:this.state.textIP,onChange:e=>this.setState({textIP:e.target.checked},()=>this.onChange())}),label:this.props.t("IP is domain or more than one address")})}),t.jsx(o.Grid2,{children:this.state.textIP?t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.host,type:"text",onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),label:this.props.t("Bind IP address"),helperText:this.props.t("You can enter more than one address divided by comma")}):t.jsxs(o.FormControl,{style:w.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Bind IP address")}),t.jsx(o.Select,{variant:"standard",value:this.state.host,onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),children:this.state.IPs.map(e=>t.jsx(o.MenuItem,{value:e,children:e==="0.0.0.0"?`0.0.0.0 [${this.props.t("All addresses")}]`:e},e))})]})}),t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.port,type:"number",slotProps:{htmlInput:{min:1,max:65535}},onChange:e=>this.setState({port:e.target.value},()=>this.onChange()),label:this.props.t("Port")})}),this.state.type==="file"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.dataDir,helperText:this.props.t("Optional. Always relative to iobroker.js-controller/"),onChange:e=>this.setState({dataDir:e.target.value},()=>this.onChange()),label:this.props.t("Directory path")})}):null,t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.options_auth_pass,type:"password",helperText:this.props.t("Optional"),slotProps:{input:{autoComplete:"new-password"},htmlInput:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({options_auth_pass:e.target.value},()=>this.onChange()),label:this.state.type==="redis"?this.props.t("Redis password"):this.props.t("Connection password")})})]})]}),t.jsx(o.Grid2,{style:w.gridSettings,children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[this.state.type==="file"||this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.connectTimeout,helperText:this.props.t("ms"),type:"number",slotProps:{htmlInput:{min:200}},onChange:e=>this.setState({connectTimeout:e.target.value},()=>this.onChange()),label:this.props.t("Connect timeout")})}):null,this.state.type==="file"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.writeFileInterval,helperText:this.props.t("How often the data from RAM will be saved on disk in ms"),type:"number",slotProps:{htmlInput:{min:200}},onChange:e=>this.setState({writeFileInterval:e.target.value},()=>this.onChange()),label:this.props.t("Store file interval")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.options_retry_max_delay,type:"number",helperText:this.props.t("Maximum delay between connection attempts"),onChange:e=>this.setState({options_retry_max_delay:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum delay")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.options_retry_max_count,type:"number",helperText:this.props.t("Maximum number of connection retries"),onChange:e=>this.setState({options_retry_max_count:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum count")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.options_db,type:"number",helperText:this.props.t("Used for sentinels"),onChange:e=>this.setState({options_db:e.target.value},()=>this.onChange()),label:this.props.t("DB number")})}):null,this.state.type==="redis"?t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{style:w.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Family number")}),t.jsxs(o.Select,{variant:"standard",value:this.state.options_family,onChange:e=>this.setState({options_family:e.target.value},()=>this.onChange()),children:[t.jsx(o.MenuItem,{value:0,children:"auto"}),t.jsx(o.MenuItem,{value:4,children:"IPv4"}),t.jsx(o.MenuItem,{value:6,children:"IPv6"})]}),t.jsx(o.FormHelperText,{children:this.props.t("Used for sentinels")})]})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactor,type:"number",slotProps:{htmlInput:{min:2}},helperText:this.props.t("The JSONL DB is append-only and will contain unnecessary entries after a while."),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactor:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor")})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,type:"number",slotProps:{htmlInput:{min:0}},helperText:this.props.t("It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize"),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactorMinimumSize:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor minimum size")})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.jsonlOptions_throttleFS_intervalMs,type:"number",slotProps:{htmlInput:{min:0}},helperText:this.props.t("Write to the database file no more than every X milliseconds"),onChange:e=>this.setState({jsonlOptions_throttleFS_intervalMs:e.target.value},()=>this.onChange()),label:this.props.t("Minimal write interval")})}):null,this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.jsonlOptions_throttleFS_maxBufferedCommands,type:"number",slotProps:{htmlInput:{min:0}},helperText:this.props.t("Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash"),onChange:e=>this.setState({jsonlOptions_throttleFS_maxBufferedCommands:e.target.value},()=>this.onChange()),label:this.props.t("Maximum changes before write")})}):null,this.state.type==="file"||this.state.type==="jsonl"?t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{component:"fieldset",style:w.controlItem,variant:"standard",children:[t.jsx(o.FormGroup,{children:t.jsx(o.FormControlLabel,{control:t.jsx(o.Checkbox,{checked:this.state.backup_disabled,onChange:e=>this.setState({backup_disabled:e.target.checked},()=>this.onChange())}),label:this.props.t("No on-the-fly backup")})}),t.jsx(o.FormHelperText,{children:this.props.t("By every write the backup of object.json will be created.")})]})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.backup_files,type:"number",helperText:this.props.t("Minimal number of backup files, after the deletion will be executed according to the backup time settings"),onChange:e=>this.setState({backup_files:e.target.value},()=>this.onChange()),label:this.props.t("Number of files")})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.backup_hours,type:"number",helperText:this.props.t("All backups older than these hours will be deleted, but only if the number of files is greater than of the files number"),onChange:e=>this.setState({backup_hours:e.target.value},()=>this.onChange()),label:this.props.t("Backup hours")})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.backup_period,type:"number",helperText:this.props.t("By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0"),onChange:e=>this.setState({backup_period:e.target.value},()=>this.onChange()),label:this.props.t("How often")})}):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:w.controlItem,value:this.state.backup_path,helperText:this.props.t("Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place."),onChange:e=>this.setState({backup_path:e.target.value},()=>this.onChange()),label:this.props.t("Path")})}):null]})})]})}}const Rt=$()(Mt),rt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAbCAYAAADMIInqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAiPSURBVFhH7Zd7UFTXGcDPvXffy8IusMsbQUEgoyiKD4pBnoKgVkoRX1WpNia2QZ2MzFTS2MykmlqiMzWJqSUxJq1KG0VrE0GxqSgSNVEx4SEaAeXNLrDsLvve2+/cvQusgIHWf2jymzns+b5zLvd+3/nOd75DoGEsWJDLaWvrXsXhcH/S3a0ODArynqfRDLRptfo6qVRcRdOGww8fftbGTv+/YNAB/v4ZsSrVQJHBYAunaVb5BBwOMri58farVI9eR+iejVVPakj8x8dn6cKWlv5zev3YxmMsFiRQqYyv8fleb+XnH2CenexQ2JCqqroLRiMKYHWIzyctLi680ujo4Aa93nDfbDZ72WxIYB/FQUMsbG5+VNHf/6DRrpu8kFeu3EnRaKzhrIxEIq5ZLhdHqdUXMior31+mVJ5fFhKiiBCLqXp2CrJaETKbyTxWnNSQtbWP5w4Pe3d30cWWln9+w4oMdXV/bw8K8tgLZoNkYZpeb5zLDE5yIJ7n7EZI8jtWRl5eLl91dn4azYqDxMZu4ldWVrqxaQMgIAnWK1lhkODgDLHNRuVqNIYMiJQ5Wq0JnCocsFjM/w4PD/ikqurop+zUUYHnY8xmIs9mIxI7O7V4QSDajJc8PEQfZ2fHXyguPhPa2KiLwXNJklLZbDf+wTw4Cr3rkUg8j5dDSYYOOyslRI8Ccs6FJP6J+XZizpz1+bduPf49M8pA0zKZ8N3U1NlvyeWuTYcOFTwlLToTGZmdcu9e9xGj0RZkzxXOEARtE4nIE/v2bdmVl7e+nVUzyGTpHKGQ+BCMXgOOG5FgKQr/tf4xPNxPUFPT8QKWeDzqlsn0rzEjsSMe+fCnCdtcFsG6DfscC0fwUZvPsp9PS3rbSoSHZ/k+eKBshAzPY8cZeDwSGnELHHJ51qyg6tWrUz5/+eW1j9jhESxevDn9xo3Gs3q9lcOqxkQm456fPj1g+fXrRyGbIHTsWAm1e/f7x1tbNauYCU+BJFE/JGRX3P9OByQgH/hpE8+XIEGE2K5kGRDKX3HL+foAWV9/qk0q5f8BDGWH7JhMNqTVWiGEbTsrKx9+uHPne80KRfrNmTPXrC0uLmXWw8HBg8dcqqtbPhgynrbKZLwTQUGibIR0yWFhnoVwqpjsYxCavaalarX6JVZE+/Z9tKS1td/JeD6f6AkOdi9FyPBmYKC0xh4BCDmMnwi6m1pk7hx8PYPQoNzfdSYujQ2MJCowUHQQPuJFCD+uXTc6sAJwUlAfgHO2InQZZ0SoI9JWt7frTzATwJEyGf/V3t6Lg3kFM2/ez1Lv3HlcajbbHe3pKap9553tkTk5aVZPz7RLSqU+kRkAKIq+BnljRXd3mQrLOEKOHy/PraioP6zXWwYjbLwRgPukkEL86SKnrUCI3S87bdTZs1dFNTX1boOhLEheMotl7O3v4cHfq1JdKMB9L6/0k52duhzcFwhI4+bNSTEkSTiVzFwuhywqKr/a32+aimU4blFUlL9XWFiQ9dSpqna12sA4nsslLYsXh0WXl79XjeXhBAdnHmps7PkVK07IAc6A2YSwhDM1ZpOTAxyUlFwSFxS8PVWpHIi3Wul4CO2EgQGLjB1mgPygjYz0nvbllye7CGJRBU1Tz2M9GA4RIGTmPEl/vxEyOrPtAfzb62XvSzuh0GZ6kO1rVKrzMxjhCcLCVkY0NPTU0rT9s/87B1CwqrzXBJk7C6V5ew2jlrOZmUm62tqSr7u6yg7BKmeFhMgVvr4SOCmGIgJyhItAIEjCfZp2GIX3KI3gTjFqGzIeg/8XlrHhQ+swZYqc7Y3Ez0+uFQqdcvXEILg6QiTP8v5c/wY2nlGtWZO/A380Bq8evOQvhYW7Rpzvu3Yd4BQVlTX39hp8WRVyc+Nvg4rxMIcTV2GxEEwEgAt0kHb+bO+PDZfLRb6+fr9pbm6AjYkjwJ7lpFJBTV9f2agREBW1NqK6urUWEiHDhCKA5tynvGf+VH7y9l1GduDvv0KPUBx4wN7k8uRUdsgJcADl4pLcAAcezMMtjl6wYAOTyYODV5506Pn8BGtW1o6ZzEPjIDd3j6tYnNzjeJ7LjTfHxm6cxQ474eGRCrdQx/sX0zxe4lfs0KhgB0CjO+Kos6r8nMG7znBIqNDO2EPQ3uC2V7h8+Q6nFcjKeoW4cuXuL3U6UyirgqsxaZNIRJW47+rK+8SxPaAIIq9evf9qQsJWp6MyJeVFF6Ew7ixCMfdwEwhi6yIjV8iOHn29381NeJudBtuE5lRWfvvuxo17IlgVKir6G7VkyUtbIA9B1ToBbIgmKOkBzozkHI/9xY9ZrRPEwoUb5l+/3nwN7gODHwz3fo1C4XpDpdLcNJstkLH5cZAIfwQJkZ2BjzHBZaWyLJ4VIXSTIXTNz+E+Ab6E2uJqQIDk47t3v33o7i71s9l4+X19RmYco1AIz3R1lWbifkzMhqVffNH0mSO5YSQSnkUs5pbDTbSZz+c/DxXic8Pfj/muLTAemDdGR6974/btlgJ8yxsfliaFQpIABjSxCuyAGSYTfRNWib02Pw1zvUQijtdoLsLet+Pnl36ktVX7C/aTxsWzcABzCqxbt2TP3LlTdkC1ph6e6Z8EanlIfLxrYrEoebjxmL6+8m9cXbmLoAgC/ej/Az/v4SG4A9Vd4nDjMf7+XtvCwhR/5XDwJWskoIdj0Ou0XO7Cap4NTu7Ozv61d0tLx4aamuZZUqlrUm+vjhmXSPidXC5V7evrfnrTprTzW7fmMEfIaCQnbxHX1bWt7OnRZXh6ypLUah0SiwUDRqPxWmCg/Nz8+aGnjxz5rXNdOgyIxpj2dvULcNOLV6sHRJ6erkip7CkJDQ06tX37j+/n5xc1dnRomLnPIgImFVASB3h7L4PwGt8pMB5GLYS+T/zgAPb3e8sPDmB/Jw34voKPREf730DoP5pKhvU07RMQAAAAAElFTkSuQmCC",g={paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"hidden",padding:8},gridSettings:c=>({height:`calc(100% - ${c.mixins.toolbar.minHeight}px)`,width:"100%",overflow:"auto"}),controlItem:{width:400,marginBottom:16,marginRight:8,marginLeft:8},delButton:{position:"absolute",top:2,right:48},addButton:{marginRight:8},buttonIcon:{height:24},headingIcon:{height:24,marginRight:8}};class zt extends T.Component{focusRef;constructor(e){super(e);const s=this.props.settings||{};s.transport=s.transport||{},Object.keys(s.transport).forEach(r=>{if(s.transport[r].type==="file"){const d=typeof s.transport[r].maxSize=="string"?s.transport[r].maxSize.includes("k")?.1:s.transport[r].maxSize.includes("g")?10:1:1;s.transport[r].maxSize=(parseInt(s.transport[r].maxSize,10)||0)*d,s.transport[r].level=s.transport[r].level||"",s.transport[r].maxFiles=s.transport[r].maxFiles||0}else s.transport[r].type==="syslog"?(s.transport[r].level=s.transport[r].level||"",s.transport[r].host=s.transport[r].host||"",s.transport[r].port=s.transport[r].port||0,s.transport[r].path=s.transport[r].path||"",s.transport[r].facility=s.transport[r].facility||"",s.transport[r].sysLogType=s.transport[r].sysLogType||"",s.transport[r].app_name=s.transport[r].app_name||"",s.transport[r].eol=s.transport[r].eol||""):s.transport[r].type==="http"?(s.transport[r].level=s.transport[r].level||"",s.transport[r].host=s.transport[r].host||"",s.transport[r].port=s.transport[r].port||0,s.transport[r].path=s.transport[r].path||"/",s.transport[r].auth=s.transport[r].auth||"None",s.transport[r].ssl=s.transport[r].ssl||!1):s.transport[r].type==="stream"?(s.transport[r].stream=s.transport[r].stream||"",s.transport[r].level=s.transport[r].level||"",s.transport[r].silent=s.transport[r].silent||!1,s.transport[r].eol=s.transport[r].eol||""):s.transport[r].type==="seq"&&(s.transport[r].level=s.transport[r].level||"",s.transport[r].serverUrl=s.transport[r].serverUrl||"",s.transport[r].apiKey=s.transport[r].apiKey||"",s.transport[r].eol=s.transport[r].eol||"")}),this.state={level:s.level||"info",maxDays:s.maxDays||7,noStdout:s.noStdout||!0,transport:s.transport||{},expanded:[]},this.focusRef=T.createRef()}componentDidMount(){var e;(e=this.focusRef.current)==null||e.focus()}onChange(){const e={level:this.state.level,maxDays:parseInt(this.state.maxDays,10),noStdout:this.state.noStdout,transport:{}};Object.keys(this.state.transport).forEach(s=>{e.transport[s]=JSON.parse(JSON.stringify(this.state.transport[s])),this.state.transport[s].type==="file"?(e.transport[s].maxSize=parseInt(e.transport[s].maxSize,10)||null,e.transport[s].maxSize&&(e.transport[s].maxSize=`${e.transport[s].maxSize.toString()}m`),e.transport[s].maxFiles=parseInt(e.transport[s].maxFiles,10)||null):this.state.transport[s].type==="syslog"?(e.transport[s].port||delete e.transport[s].port,e.transport[s].path||delete e.transport[s].path,e.transport[s].sysLogType||delete e.transport[s].sysLogType,e.transport[s].app_name||delete e.transport[s].app_name,e.transport[s].eol||delete e.transport[s].eol):this.state.transport[s].type==="http"?(e.transport[s].host=e.transport[s].host||"",e.transport[s].port=parseInt(e.transport[s].port,10)||80,e.transport[s].path=e.transport[s].path||"/",e.transport[s].auth=e.transport[s].auth||"",e.transport[s].ssl=e.transport[s].ssl||!1):this.state.transport[s].type==="stream"&&(e.transport[s].stream=e.transport[s].stream||"",e.transport[s].level=e.transport[s].level||"info",e.transport[s].silent=e.transport[s].silent||!1,e.transport[s].eol=e.transport[s].eol||"")}),this.props.onChange(e)}onDelete(e){const s=JSON.parse(JSON.stringify(this.state.transport));delete s[e],this.setState({transport:s},()=>this.onChange())}renderEnabled(e){return t.jsx(o.Grid2,{children:t.jsx(o.FormControlLabel,{style:g.controlItem,control:t.jsx(o.Checkbox,{checked:this.state.transport[e].enabled,onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].enabled=s.target.checked,this.setState({transport:r},()=>this.onChange())}}),label:this.props.t("Enabled")})})}renderLogLevel(e){return this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{style:g.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Level")}),t.jsxs(o.Select,{variant:"standard",value:this.state.transport[e].level||"_",renderValue:()=>this.state.transport[e].level||this.props.t("default"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].level=s.target.value==="_"?"":s.target.value,this.setState({transport:r},()=>this.onChange())},children:[t.jsx(o.MenuItem,{value:"_",children:this.props.t("default")}),t.jsx(o.MenuItem,{value:"silly",children:"silly"}),t.jsx(o.MenuItem,{value:"debug",children:"debug"}),t.jsx(o.MenuItem,{value:"info",children:"info"}),t.jsx(o.MenuItem,{value:"warn",children:"warn"}),t.jsx(o.MenuItem,{value:"error",children:"error"})]}),t.jsx(o.FormHelperText,{children:this.props.t("Level of messages that this transport should log (default: level set on parent logger)")})]})}):null}renderSyslog(e){return t.jsxs(o.Accordion,{expanded:this.state.expanded.includes(e),onChange:()=>{const s=[...this.state.expanded],r=s.indexOf(e);r===-1?s.push(e):s.splice(r,1),this.setState({expanded:s})},children:[t.jsxs(o.AccordionSummary,{expandIcon:t.jsx(f.ExpandMore,{}),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"},children:[t.jsx(f.Computer,{style:g.headingIcon}),t.jsx(o.Typography,{style:g.heading,children:e}),t.jsx(o.Fab,{size:"small",style:g.delButton,onClick:()=>this.onDelete(e),children:t.jsx(f.Delete,{})})]}),t.jsx(o.AccordionDetails,{children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].host,helperText:this.props.t("The host running syslogd, defaults to localhost"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].host=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("File name")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].port,type:"number",helperText:this.props.t("The port on the host that syslog is running on, defaults to syslogd's default port(514/UDP)."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].port=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Port")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{style:g.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Protocol")}),t.jsxs(o.Select,{variant:"standard",value:this.state.transport[e].protocol,onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].protocol=s.target.value,this.setState({transport:r},()=>this.onChange())},children:[t.jsx(o.MenuItem,{value:"udp4",children:"udp4"}),t.jsx(o.MenuItem,{value:"tcp4",children:"tcp4"}),t.jsx(o.MenuItem,{value:"unix",children:"unix"}),t.jsx(o.MenuItem,{value:"unix-connect",children:"unix-connect"})]})]})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].path,helperText:this.props.t("The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X)."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].path=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Path")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].facility,helperText:this.props.t("Syslog facility to use (Default: local0)."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].facility=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Facility")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].localhost,helperText:this.props.t("Host to indicate that log messages are coming from (Default: localhost)."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].localhost=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Log name")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].sysLogType,helperText:this.props.t("The type of the syslog protocol to use (Default: BSD)."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].sysLogType=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("SysLog Type")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].app_name,helperText:this.props.t("The name of the application (Default: process.title)."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].app_name=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Application name")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].eol,helperText:this.props.t("The end of line character to be added to the end of the message (Default: Message without modifications)."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].eol=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("End of line char")})}):null]})})]},e)}renderFile(e){return t.jsxs(o.Accordion,{expanded:this.state.expanded.includes(e),onChange:()=>{const s=[...this.state.expanded],r=s.indexOf(e);r===-1?s.push(e):s.splice(r,1),this.setState({expanded:s})},children:[t.jsxs(o.AccordionSummary,{style:{background:"rgba(128, 128, 128, 0.3)"},expandIcon:t.jsx(f.ExpandMore,{}),children:[t.jsx(f.InsertDriveFile,{style:g.headingIcon}),t.jsx(o.Typography,{style:g.heading,children:e}),t.jsx(o.Fab,{size:"small",style:g.delButton,onClick:()=>this.onDelete(e),children:t.jsx(f.Delete,{})})]}),t.jsx(o.AccordionDetails,{children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].filename,onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].filename=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("File name")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].fileext,onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].fileext=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("File extension")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].maxSize,type:"number",helperText:this.props.t("MB"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].maxSize=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Maximal size of one file")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].maxFiles,type:"number",onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].maxFiles=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Maximal number of files")})}):null]})})]},e)}renderHttp(e){return t.jsxs(o.Accordion,{expanded:this.state.expanded.includes(e),onChange:()=>{const s=[...this.state.expanded],r=s.indexOf(e);r===-1?s.push(e):s.splice(r,1),this.setState({expanded:s})},children:[t.jsxs(o.AccordionSummary,{expandIcon:t.jsx(f.ExpandMore,{}),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"},children:[t.jsx(f.Language,{style:g.headingIcon}),t.jsx(o.Typography,{style:g.heading,children:e}),t.jsx(o.Fab,{size:"small",style:g.delButton,onClick:()=>this.onDelete(e),children:t.jsx(f.Delete,{})})]}),t.jsx(o.AccordionDetails,{children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].host,helperText:this.props.t("Remote host of the HTTP logging endpoint"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].host=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Host")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].port,type:"number",helperText:this.props.t("Remote port of the HTTP logging endpoint"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].port=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Port")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].path,helperText:this.props.t("Remote URI of the HTTP logging endpoint"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].path=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Path")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].auth,helperText:this.props.t("An object representing the username and password for HTTP Basic Auth"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].auth=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Auth")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.FormControlLabel,{style:g.controlItem,control:t.jsx(o.Checkbox,{checked:this.state.transport[e].ssl,onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].ssl=s.target.checked,this.setState({transport:r},()=>this.onChange())}}),label:this.props.t("SSL")})}):null]})})]},e)}renderStream(e){return t.jsxs(o.Accordion,{expanded:this.state.expanded.includes(e),onChange:()=>{const s=[...this.state.expanded],r=s.indexOf(e);r===-1?s.push(e):s.splice(r,1),this.setState({expanded:s})},children:[t.jsxs(o.AccordionSummary,{expandIcon:t.jsx(f.ExpandMore,{}),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"},children:[t.jsx(f.Send,{style:g.headingIcon}),t.jsx(o.Typography,{style:g.heading,children:e}),t.jsx(o.Fab,{size:"small",style:g.delButton,onClick:()=>this.onDelete(e),children:t.jsx(f.Delete,{})})]}),t.jsx(o.AccordionDetails,{children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[this.renderEnabled(e),this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].stream,helperText:this.props.t("any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].stream=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("File name")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.FormControlLabel,{style:g.controlItem,control:t.jsx(o.Checkbox,{checked:this.state.transport[e].silent,onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].silent=s.target.checked,this.setState({transport:r},()=>this.onChange())}}),label:this.props.t("Silent")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].eol,helperText:this.props.t("Line-ending character to use. (default: os.EOL).)"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].eol=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("EOL")})}):null]})})]},e)}renderSEQ(e){return t.jsxs(o.Accordion,{expanded:this.state.expanded.includes(e),onChange:()=>{const s=[...this.state.expanded],r=s.indexOf(e);r===-1?s.push(e):s.splice(r,1),this.setState({expanded:s})},children:[t.jsxs(o.AccordionSummary,{expandIcon:t.jsx(f.ExpandMore,{}),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"},children:[t.jsx("img",{style:g.headingIcon,src:rt,alt:"seq"}),t.jsx(o.Typography,{style:g.heading,children:e}),t.jsx(o.Fab,{size:"small",style:g.delButton,onClick:()=>this.onDelete(e),children:t.jsx(f.Delete,{})})]}),t.jsx(o.AccordionDetails,{children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].serverUrl,helperText:this.props.t("The http(s) URL including port of the seq server. If you use HTTPS a real certificate is needed; self signed certs are ot accepted."),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].serverUrl=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("Server URL")})}):null,this.state.transport[e].enabled?t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.transport[e].apiKey,helperText:this.props.t("The apiKey of the seq system"),onChange:s=>{const r=JSON.parse(JSON.stringify(this.state.transport));r[e].apiKey=s.target.value,this.setState({transport:r},()=>this.onChange())},label:this.props.t("API key")})}):null]})})]},e)}findFreeName(e){for(let s=1;;s++)if(!Object.keys(this.state.transport).find(r=>r===e+s))return e+s}add(e){if(e==="file"){const s=this.findFreeName(e),r=JSON.parse(JSON.stringify(this.state.transport));r[s]={type:e,enabled:!0,filename:"log/iobroker",fileext:".log",maxSize:0,maxFiles:0},this.setState({transport:r},()=>this.onChange())}else if(e==="syslog"){const s=this.findFreeName(e),r=JSON.parse(JSON.stringify(this.state.transport));r[s]={type:e,enabled:!0,host:"127.0.0.1",port:0,protocol:"udp4",path:"",facility:"",localhost:"iobroker",sysLogType:"",app_name:"",eol:""},this.setState({transport:r},()=>this.onChange())}else if(e==="http"){const s=this.findFreeName(e),r=JSON.parse(JSON.stringify(this.state.transport));r[s]={type:e,enabled:!0,host:"127.0.0.1",port:80,path:"/",auth:"None",ssl:!1},this.setState({transport:r},()=>this.onChange())}else if(e==="stream"){const s=this.findFreeName(e),r=JSON.parse(JSON.stringify(this.state.transport));r[s]={type:e,enabled:!0,stream:"/dev/null",level:"info",silent:!1,eol:""},this.setState({transport:r},()=>this.onChange())}else if(e==="seq"){const s=this.findFreeName(e),r=JSON.parse(JSON.stringify(this.state.transport));r[s]={type:e,enabled:!0,level:"info",serverUrl:"http://IP:PORT",apiKey:""},this.setState({transport:r},()=>this.onChange())}}render(){return t.jsxs(o.Paper,{style:g.paper,children:[t.jsx(o.Grid2,{sx:g.gridSettings,children:t.jsxs(o.Grid2,{container:!0,direction:"column",children:[t.jsx(o.Grid2,{children:t.jsxs(o.FormControl,{style:g.controlItem,variant:"standard",children:[t.jsx(o.InputLabel,{children:this.props.t("Level")}),t.jsxs(o.Select,{variant:"standard",value:this.state.level,onChange:e=>this.setState({level:e.target.value},()=>this.onChange()),children:[t.jsx(o.MenuItem,{value:"silly",children:"silly"}),t.jsx(o.MenuItem,{value:"debug",children:"debug"}),t.jsx(o.MenuItem,{value:"info",children:"info"}),t.jsx(o.MenuItem,{value:"warn",children:"warn"}),t.jsx(o.MenuItem,{value:"error",children:"error"})]})]})}),t.jsx(o.Grid2,{children:t.jsx(o.TextField,{variant:"standard",style:g.controlItem,value:this.state.maxDays,helperText:this.props.t("Every day one file"),type:"number",onChange:e=>this.setState({maxDays:e.target.value},()=>this.onChange()),label:this.props.t("Maximum number of days")})}),t.jsx(o.Grid2,{children:t.jsx(o.FormControlLabel,{style:g.controlItem,control:t.jsx(o.Checkbox,{checked:this.state.noStdout,onChange:e=>this.setState({noStdout:e.target.checked},()=>this.onChange())}),label:this.props.t("No stdout outputs")})}),Object.keys(this.state.transport).map(e=>{switch(this.state.transport[e].type){case"syslog":return this.renderSyslog(e);case"file":return this.renderFile(e);case"http":return this.renderHttp(e);case"stream":return this.renderStream(e);case"seq":return this.renderSEQ(e);default:return null}})]})}),t.jsxs(o.Toolbar,{children:[t.jsxs(o.Button,{color:"grey",style:g.addButton,variant:"contained",onClick:()=>this.add("file"),startIcon:t.jsx(f.Add,{}),children:[t.jsx(f.InsertDriveFile,{style:g.buttonIcon}),this.props.t("File log")]}),t.jsxs(o.Button,{color:"grey",style:g.addButton,variant:"contained",onClick:()=>this.add("syslog"),startIcon:t.jsx(f.Add,{}),children:[t.jsx(f.Computer,{style:g.buttonIcon}),this.props.t("Syslog")]}),t.jsxs(o.Button,{color:"grey",style:g.addButton,variant:"contained",onClick:()=>this.add("http"),startIcon:t.jsx(f.Add,{}),children:[t.jsx(f.Language,{style:g.buttonIcon}),this.props.t("HTTP log")]}),t.jsxs(o.Button,{color:"grey",style:g.addButton,variant:"contained",onClick:()=>this.add("stream"),startIcon:t.jsx(f.Add,{}),children:[t.jsx(f.Send,{style:g.buttonIcon}),this.props.t("Stream log")]}),t.jsxs(o.Button,{color:"grey",style:g.addButton,variant:"contained",onClick:()=>this.add("seq"),startIcon:t.jsx(f.Add,{}),children:[t.jsx("img",{src:rt,style:g.buttonIcon,alt:"seq"}),this.props.t("SEQ log")]})]})]})}}const Ht=$()(zt),q={paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:8},title:{width:"100%",height:32},divWithoutTitle:{width:"100%",height:"calc(100% - 32px)",border:"2px solid #00000000"},error:{border:"2px solid #FF0000"}};class Et extends T.Component{constructor(e){super(e),this.state={settings:JSON.stringify(this.props.settings||{},null,2),error:!1}}onChange(e){const s={settings:e};try{const r=JSON.parse(e);this.state.error&&(s.error=!1),this.setState(s,()=>this.props.onChange(r))}catch{s.error=!0,this.setState(s)}}render(){return t.jsxs(o.Paper,{style:q.paper,children:[t.jsx("div",{style:q.title,children:this.props.t("For future use")}),t.jsx("div",{style:{...q.divWithoutTitle,...this.state.error?q.error:void 0},children:t.jsx(ut,{themeType:this.props.themeType,value:this.state.settings,onChange:e=>this.onChange(e)})})]})}}const $t=$()(Et),D={content:{height:500,overflow:"hidden"},tabPanel:c=>({width:"100%",height:`calc(100% - ${c.mixins.toolbar.minHeight}px)`,overflow:"auto"}),selected:c=>({color:c.palette.mode==="dark"?"#FFF !important":"#222 !important"})};class Nt extends T.Component{originalSettings;constructor(e){super(e),this.state={currentTab:0,hasChanges:[],currentHost:this.props.currentHost,loading:!0,confirmExit:!1,showRestart:!1,system:null,multihostService:null,objects:null,states:null,log:null,plugins:null,dnsResolution:"ipv4first",dataDir:"",saving:!1}}async componentDidMount(){await this.getSettings(this.state.currentHost)}renderDialogConfirm(){return this.state.confirmExit?t.jsx(X,{text:this.props.t("Discard unsaved changes?"),onClose:e=>this.setState({confirmExit:!1},()=>e&&this.props.onClose())}):null}renderRestartDialog(){return this.state.showRestart?t.jsx(X,{title:this.props.t("Please confirm"),text:t.jsxs(t.Fragment,{children:[t.jsx("div",{children:this.props.t("Restart works only if controller started as system service.")}),t.jsx("div",{children:this.props.t("Would you like to restart the controller for your changes to take effect?")})]}),ok:this.props.t("Restart"),cancel:this.props.t("No restart"),onClose:e=>this.setState({showRestart:!1},()=>{e&&this.props.socket.restartController(this.props.currentHost).then(()=>setTimeout(()=>window.location.reload(),500)).catch(s=>window.alert(`Cannot restart: ${s}`)),this.props.onClose()})}):null}async getSettings(e){const r=await this.props.socket.readBaseSettings(e||this.state.currentHost);r!=null&&r.config&&(this.originalSettings=E.clone(r.config),this.setState({loading:!1,system:r.config.system,multihostService:r.config.multihostService,objects:r.config.objects,states:r.config.states,log:r.config.log,plugins:r.config.plugins,dnsResolution:r.config.dnsResolution||"ipv4first",dataDir:r.config.dataDir}))}onSave(e){const s={system:this.state.system,multihostService:this.state.multihostService,objects:this.state.objects,states:this.state.states,log:this.state.log,plugins:this.state.plugins},r={...this.originalSettings,...s};this.setState({saving:!0},()=>{this.props.socket.writeBaseSettings(e||this.state.currentHost,r).then(()=>{this.originalSettings=JSON.parse(JSON.stringify(s)),this.setState({hasChanges:[],showRestart:!0,saving:!1})}).catch(d=>{window.alert(`Cannot save settings: ${d}`),this.setState({saving:!1})})})}updateSettings(e,s){const r=[...this.state.hasChanges],d=JSON.stringify(this.originalSettings[e])!==JSON.stringify(s),b=r.indexOf(e);d&&b===-1?r.push(e):!d&&b!==-1&&r.splice(b,1),this.setState({[e]:s,hasChanges:r})}renderSystem(){const e="system";return t.jsx(Bt,{settings:this.state[e],t:this.props.t,currentHost:this.props.currentHost,onChange:s=>this.updateSettings(e,s)})}renderMultihost(){const e="multihostService";return t.jsx(Lt,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:s=>this.updateSettings(e,s)})}renderObjects(){const e="objects";return t.jsx(At,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:s=>this.updateSettings(e,s)})}renderStates(){const e="states";return t.jsx(Rt,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:s=>this.updateSettings(e,s)})}renderLog(){return t.jsx(Ht,{settings:this.state.log,t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:s=>this.updateSettings("log",s)})}renderPlugins(){const e="plugins";return t.jsx($t,{settings:this.state[e],t:this.props.t,themeType:this.props.themeType,onChange:s=>this.updateSettings(e,s)})}render(){return t.jsxs(o.Dialog,{style:D.dialog,open:!0,onClose:()=>!1,fullWidth:!0,maxWidth:"xl","aria-labelledby":"base-settings-dialog-title",children:[t.jsxs(o.DialogTitle,{id:"base-settings-dialog-title",children:[this.props.t("Host Base Settings"),": ",this.props.currentHostName||this.props.currentHost]}),t.jsxs(o.DialogContent,{style:D.content,children:[t.jsx(o.AppBar,{position:"static",children:t.jsxs(o.Tabs,{value:this.state.currentTab,onChange:(e,s)=>this.setState({currentTab:s}),"aria-label":"system tabs",indicatorColor:"secondary",children:[t.jsx(o.Tab,{label:this.props.t("System"),id:"system-tab","aria-controls":"simple-tabpanel-0",sx:{"&.Mui-selected":D.selected}}),t.jsx(o.Tab,{label:this.props.t("Multi-host"),id:"multihost-tab",sx:{"&.Mui-selected":D.selected},"aria-controls":"simple-tabpanel-1"}),t.jsx(o.Tab,{label:this.props.t("Objects"),id:"objects-tab","aria-controls":"simple-tabpanel-3",sx:{"&.Mui-selected":D.selected}}),t.jsx(o.Tab,{label:this.props.t("States"),id:"states-tab","aria-controls":"simple-tabpanel-4",sx:{"&.Mui-selected":D.selected}}),t.jsx(o.Tab,{label:this.props.t("Log"),id:"log-tab","aria-controls":"simple-tabpanel-5",sx:{"&.Mui-selected":D.selected}}),t.jsx(o.Tab,{label:this.props.t("Plugins"),id:"plugins-tab","aria-controls":"simple-tabpanel-6",sx:{"&.Mui-selected":D.selected}})]})}),this.state.loading?t.jsx(o.LinearProgress,{}):null,!this.state.loading&&this.state.currentTab===0?t.jsx(o.Box,{component:"div",sx:D.tabPanel,children:this.renderSystem()}):null,!this.state.loading&&this.state.currentTab===1?t.jsx(o.Box,{component:"div",sx:D.tabPanel,children:this.renderMultihost()}):null,!this.state.loading&&this.state.currentTab===2?t.jsx(o.Box,{component:"div",sx:D.tabPanel,children:this.renderObjects()}):null,!this.state.loading&&this.state.currentTab===3?t.jsx(o.Box,{component:"div",sx:D.tabPanel,children:this.renderStates()}):null,!this.state.loading&&this.state.currentTab===4?t.jsx(o.Box,{component:"div",sx:D.tabPanel,children:this.renderLog()}):null,!this.state.loading&&this.state.currentTab===5?t.jsx(o.Box,{component:"div",sx:D.tabPanel,children:this.renderPlugins()}):null,this.renderDialogConfirm(),this.renderRestartDialog()]}),t.jsxs(o.DialogActions,{children:[t.jsx(o.Button,{variant:"contained",disabled:!this.state.hasChanges.length||this.state.saving,onClick:()=>this.onSave(),color:"primary",startIcon:t.jsx(f.Check,{}),children:this.props.t("Save & Close")}),t.jsx(o.Button,{variant:"contained",color:"grey",disabled:this.state.saving,onClick:()=>this.state.hasChanges.length?this.setState({confirmExit:!0}):this.props.onClose(),startIcon:t.jsx(f.Close,{}),children:this.state.hasChanges.length?this.props.t("Cancel"):this.props.t("Close")})]})]})}}const Wt=$()(Nt),L={error:{border:"2px solid #FF0000"},id:{fontStyle:"italic"},dialog:{height:"calc(100% - 64px)"},button:{marginTop:20,marginLeft:8},funcDivEdit:{width:"100%"},funcEditName:{display:"inline-block",width:85},funcEdit:{width:400},marginTop:{marginTop:20},commonTabWrapper:{flexFlow:"wrap",display:"flex"},commonWrapper:{width:500,minWidth:300},flexDrop:{width:"100%",maxWidth:500,margin:"auto",display:"flex"},marginBlock:{marginTop:20},buttonAdd:{minWidth:150},textField:{width:"100%"},flex:{display:"flex"},close:{width:"20px",height:"20px",opacity:"0.9",cursor:"pointer",position:"relative",top:20,transition:"all 0.6s ease","&:hover":{transform:"rotate(90deg)"},"&:before":{position:"absolute",left:"9px",content:'""',height:"20px",width:"3px",backgroundColor:"#ff4f4f",transform:"rotate(45deg)"},"&:after":{position:"absolute",left:"9px",content:'""',height:"20px",width:"3px",backgroundColor:"#ff4f4f",transform:"rotate(-45deg)"}},color:{width:70},buttonRemoveWrapper:{position:"absolute",zIndex:222,right:0},tabsPadding:{padding:"0px 24px"}};class Gt extends T.Component{originalObj;constructor(e){super(e),this.state={text:JSON.stringify(this.props.obj,null,2),error:!1,changed:!1},this.originalObj=JSON.stringify(this.props.obj,null,2)}prepareObject(e){e=e||this.state.text;try{const s=JSON.parse(e);return s._id=this.props.obj._id,s}catch{return null}}onChange(e){const s={text:e},r=this.prepareObject(e);r?(s.changed=this.originalObj!==JSON.stringify(r,null,2),this.state.error&&(s.error=!1)):s.error=!0,this.setState(s)}onUpdate(){try{const e=JSON.parse(this.state.text);e._id=this.props.obj._id,this.props.onClose(e)}catch{}}setCommonItem(e,s,r){e.common[s]=r,this.onChange(JSON.stringify(e,null,2))}removeCommonItem(e,s){delete e.common.common[s],this.onChange(JSON.stringify(e,null,2))}buttonAddKey(e,s){const{t:r}=this.props;return t.jsx("div",{style:L.marginBlock,children:t.jsx(o.Button,{style:L.buttonAdd,variant:"contained",color:"secondary",onClick:s,startIcon:t.jsx(f.Add,{}),children:r(`Add ${e}`)})})}buttonRemoveKey(e,s){const{t:r}=this.props;return t.jsx(o.Tooltip,{title:r(`Remove ${e}`),slotProps:{popper:{sx:{pointerEvents:"none"}}},children:t.jsx(o.Box,{component:"div",sx:L.close,onClick:s})})}renderCommonEdit(){try{const e=JSON.parse(this.state.text),s=!1,{t:r}=this.props;return t.jsxs("div",{style:L.commonTabWrapper,children:[t.jsxs("div",{style:L.commonWrapper,children:[typeof e.common.title<"u"?t.jsx(o.TextField,{variant:"standard",disabled:s,label:r("title"),style:{...L.marginBlock,...L.textField},fullWidth:!0,value:e.common.title,onChange:d=>this.setCommonItem(e,"title",d.target.value),slotProps:{input:{endAdornment:e.common.title?t.jsx(o.InputAdornment,{position:"end",children:t.jsx(o.IconButton,{tabIndex:-1,size:"small",onClick:()=>this.setCommonItem(e,"title",""),children:t.jsx(f.Close,{})})}):null}}}):this.buttonAddKey("title",()=>this.setCommonItem(e,"title","")),typeof e.common.color<"u"?t.jsxs("div",{style:L.flex,children:[t.jsx(o.TextField,{variant:"standard",disabled:s,style:{...L.marginBlock,...L.color},label:r("Color"),type:"color",value:e.common.color,onChange:d=>this.setCommonItem(e,"color",d.target.value),slotProps:{input:{endAdornment:e.common.color?t.jsx(o.InputAdornment,{position:"end",children:t.jsx(o.IconButton,{tabIndex:-1,size:"small",onClick:()=>this.setCommonItem(e,"color",""),children:t.jsx(f.Close,{})})}):null}}}),this.buttonRemoveKey("color",()=>this.removeCommonItem(e,"color"))]}):this.buttonAddKey("color",()=>this.setCommonItem(e,"color",""))]}),typeof e.common.icon<"u"?t.jsxs("div",{style:L.flexDrop,children:[t.jsx(mt,{disabled:s,crop:!0,maxSize:256*1024,icon:e.common.icon,removeIconFunc:()=>this.setCommonItem(e,"icon",""),onChange:d=>this.setCommonItem(e,"icon",d)}),this.buttonRemoveKey("icon",()=>this.removeCommonItem(e,"icon"))]}):t.jsx("div",{style:L.flexDrop,children:this.buttonAddKey("icon",()=>this.setCommonItem(e,"icon",""))})]})}catch{return t.jsx("div",{children:this.props.t("Cannot parse JSON!")})}}render(){return t.jsxs(o.Dialog,{sx:{"& .MuiDialog-paper":L.dialog},open:!0,maxWidth:"lg",fullWidth:!0,fullScreen:!1,onClose:()=>this.props.onClose(),"aria-labelledby":"edit-value-dialog-title","aria-describedby":"edit-value-dialog-description",children:[t.jsxs(o.DialogTitle,{id:"edit-value-dialog-title",children:[this.props.t("Edit host settings"),":",t.jsx("span",{style:L.id,children:this.props.obj._id})]}),t.jsx(o.DialogContent,{children:this.renderCommonEdit()}),t.jsxs(o.DialogActions,{children:[t.jsx(o.Button,{variant:"contained",disabled:this.state.error||!this.state.changed,onClick:()=>this.onUpdate(),color:"primary",startIcon:t.jsx(f.Check,{}),children:this.props.t("Write")}),t.jsx(o.Button,{variant:"contained",onClick:()=>this.props.onClose(),color:"grey",startIcon:t.jsx(f.Close,{}),children:this.props.t("Cancel")})]})]})}}const at="0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)",lt="0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)",Jt=`
24
- @keyframes newValueAnimationHostDark {
25
- 0% {
26
- color: #00f900;
27
- }
28
- 80% {
29
- color: #008000;
30
- }
31
- 100% {
32
- color: #fff;
33
- }
34
- }
35
- @keyframes newValueAnimationHostLight {
36
- 0% {
37
- color: #00f900;
38
- }
39
- 80% {
40
- color: #008000;
41
- }
42
- 100% {
43
- color: #fff;
44
- }
45
- }
46
- .newValueHost-dark {
47
- animation: newValueAnimationHostDark 2s ease-in-out;
48
- }
49
- .newValueHost-light {
50
- animation: newValueAnimationHostLight 2s ease-in-out;
51
- }
52
- @keyframes colors {
53
- 0% {
54
- left: -51px;
55
- }
56
- 100% {
57
- left: 101%;
58
- }
59
- }
60
- @keyframes warning {
61
- 0% {
62
- opacity: 1;
63
- }
64
- 100% {
65
- opacity: 0.7;
66
- }
67
- }
68
- @keyframes red {
69
- 0% {
70
- opacity: 1;
71
- }
72
- 100% {
73
- opacity: 0.8;
74
- }
75
- }
76
- @keyframes onBlink-keys-dark {
77
- 0% {
78
- color: #264d72;
79
- }
80
- 80% {
81
- color: #3679be;
82
- }
83
- 100% {
84
- color: #fff;
85
- }
86
- }
87
- @keyframes onBlink-keys-light {
88
- 0% {
89
- color: #3679be;
90
- }
91
- 80% {
92
- color: #264d72;
93
- }
94
- 100% {
95
- color: #000;
96
- }
97
- }
98
- .onBlick-light {
99
- animation: onBlink-keys-light 2s ease-in-out;
100
- animation-iteration-count: 2;
101
- font-size: 12px;
102
- margin-left: 4px;
103
- }
104
- .onBlick-dark {
105
- animation: onBlink-keys-dark 2s ease-in-out;
106
- animation-iteration-count: 2;
107
- font-size: 12px;
108
- margin-left: 4px;
109
- }
110
- @keyframes height {
111
- 0% {
112
- height: 0;
113
- },
114
- 100% {
115
- height: 160px;
116
- }
117
- }
118
- `,O={img:{width:45,height:45,margin:"auto 0",position:"relative","&:after":{content:'""',position:"absolute",zIndex:2,top:0,left:0,width:"100%",height:"100%",background:'url("img/no-image.svg") 100% 100% no-repeat',backgroundSize:"cover",backgroundColor:"#fff"}},collapseOff:{height:0},footerBlock:c=>({background:c.palette.background.default,p:"10px",display:"flex",justifyContent:"space-between"}),hidden:{display:"none"},emptyButton:{width:48},greenText:c=>({color:c.palette.success.dark}),wrapperAvailable:{display:"flex",alignItems:"center"},buttonUpdate:{border:`1px solid ${nt[700]}`,padding:"2px 7px",borderRadius:"5px",display:"flex",alignItems:"center",cursor:"pointer",transition:"background 0.5s","&:hover":{background:"#00800026"}},buttonUpdateIcon:{height:20,width:20,marginRight:10},debug:{backgroundColor:dt[700]},info:{backgroundColor:pt[700]},warn:{backgroundColor:St[700]},error:{backgroundColor:ht[700]},smallAvatar:{width:24,height:24},formControl:{display:"flex"},baseSettingsButton:{transform:"rotate(45deg)"},tooltip:{pointerEvents:"none"}},Ut=["silly","debug","info","warn","error"];function U(c,e){const s=c.className.split(" "),r=s.indexOf(e);r!==-1&&(s.splice(r,1),c.className=s.join(" ")),s.push(e),setTimeout(d=>c.className=d,100,s.join(" "))}function Vt(c){return c==="debug"?t.jsx(f.BugReport,{}):c==="info"?t.jsx(f.Info,{}):c==="warn"?t.jsx(f.Warning,{}):c==="error"?t.jsx(f.Error,{}):null}class M extends T.Component{static formatInfo={Uptime:E.formatSeconds,"System uptime":E.formatSeconds,RAM:E.formatRam,Speed:E.formatSpeed,"Disk size":E.formatBytes,"Disk free":E.formatBytes,time:e=>new Date(e).toLocaleString()};refEvents=J.createRef();refWarning=J.createRef();refCpu=J.createRef();refMem=J.createRef();refUptime=J.createRef();outputCache="-";inputCache="-";cpuCache="- %";memCache="- %";uptimeCache="-";diskFreeCache=1;diskSizeCache=1;diskWarningCache=1;constructor(e){super(e),this.state={logLevel:"",logLevelSelect:"",hostNotifications:{notifications:null,warning:0,other:0},openDialogLogLevel:!1,hostUpdateDialog:!1,updateAvailable:!1,instructionDialog:!1,updateDialog:!1,baseSettingsDialog:!1,editDialog:!1,changeLog:null}}async getInitialDiskStates(){const e=await this.props.socket.getState(`${this.props.hostId}.diskWarning`);this.diskWarningCache=(e==null?void 0:e.val)??this.diskWarningCache;const s=await this.props.socket.getState(`${this.props.hostId}.diskFree`);this.diskFreeCache=(s==null?void 0:s.val)??this.diskFreeCache;const r=await this.props.socket.getState(`${this.props.hostId}.diskSize`);this.diskSizeCache=(r==null?void 0:r.val)??this.diskSizeCache}notificationHandler=e=>e&&e[this.props.hostId]&&this.setState({hostNotifications:{notifications:e[this.props.hostId],...M.calculateWarning(e[this.props.hostId])}});readChangeLog(){this.state.changeLog||fetch(Y.replace("github.com","raw.githubusercontent.com").replace("/blob/","/")).then(e=>e.text()).then(e=>this.setState({changeLog:e})).catch(e=>console.error(`Cannot read changelog: ${e}`))}componentDidMount(){this.props.hostsWorker.registerNotificationHandler(this.notificationHandler),this.props.hostsWorker.getNotifications(this.props.hostId).then(e=>this.notificationHandler(e)),this.props.socket.subscribeState(`${this.props.hostId}.inputCount`,this.eventsInputFunc),this.props.socket.subscribeState(`${this.props.hostId}.outputCount`,this.eventsOutputFunc),this.props.socket.subscribeState(`${this.props.hostId}.cpu`,this.cpuFunc),this.props.socket.subscribeState(`${this.props.hostId}.mem`,this.memFunc),this.props.socket.subscribeState(`${this.props.hostId}.uptime`,this.uptimeFunc),this.getInitialDiskStates().finally(async()=>{await this.props.socket.subscribeState(`${this.props.hostId}.diskFree`,this.warningFunc),await this.props.socket.subscribeState(`${this.props.hostId}.diskSize`,this.warningFunc),await this.props.socket.subscribeState(`${this.props.hostId}.diskWarning`,this.warningFunc)}),this.props.socket.subscribeState(`${this.props.hostId}.logLevel`,this.logLevelFunc)}componentWillUnmount(){this.props.hostsWorker.unregisterNotificationHandler(this.notificationHandler),this.props.socket.unsubscribeState(`${this.props.hostId}.inputCount`,this.eventsInputFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.outputCount`,this.eventsOutputFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.cpu`,this.cpuFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.mem`,this.memFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.uptime`,this.uptimeFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.diskFree`,this.warningFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.diskSize`,this.warningFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.diskWarning`,this.warningFunc),this.props.socket.unsubscribeState(`${this.props.hostId}.logLevel`,this.logLevelFunc)}eventsInputFunc=(e,s)=>{this.inputCache=s&&s.val!==null?`⇥${s.val}`:"-",this.refEvents.current&&(this.refEvents.current.innerHTML=`${this.inputCache} / ${this.outputCache}`,U(this.refEvents.current,`newValueHost-${this.props.themeType||"light"}`))};eventsOutputFunc=(e,s)=>{this.outputCache=s&&s.val!==null?`↦${s.val}`:"-",this.refEvents.current&&(this.refEvents.current.innerHTML=`${this.inputCache} / ${this.outputCache}`,U(this.refEvents.current,`newValueHost-${this.props.themeType||"light"}`))};warningFunc=(e,s)=>{e.endsWith("diskFree")?this.diskFreeCache=(s==null?void 0:s.val)||0:e.endsWith("diskSize")?this.diskSizeCache=(s==null?void 0:s.val)||0:e.endsWith("diskWarning")&&(this.diskWarningCache=(s==null?void 0:s.val)||0);const r=this.diskFreeCache/this.diskSizeCache*100<=this.diskWarningCache;this.refWarning.current&&(r?(this.refWarning.current.setAttribute("title",this.props.t("Warning: Free space on disk is low")),this.refWarning.current.classList.add("warning")):(this.refWarning.current.removeAttribute("title"),this.refWarning.current.classList.remove("warning")))};cpuFunc=(e,s)=>{this.cpuCache=this.formatValue(s,"%"),this.refCpu.current&&(this.refCpu.current.innerHTML=this.cpuCache,U(this.refCpu.current,`newValueHost-${this.props.themeType||"light"}`))};memFunc=(e,s)=>{this.memCache=this.formatValue(s,"%"),this.refMem.current&&(this.refMem.current.innerHTML=this.memCache,U(this.refMem.current,`newValueHost-${this.props.themeType||"light"}`))};uptimeFunc=(e,s)=>{if(s!=null&&s.val){const r=Math.floor(s.val/86400),d=Math.floor(s.val%(3600*24)/3600);this.uptimeCache=r?`${r}d${d}h`:`${d}h`}this.refUptime.current&&(this.refUptime.current.innerHTML=this.uptimeCache,U(this.refUptime.current,`newValueHost-${this.props.themeType||"light"}`))};static calculateWarning(e){const s={warning:0,other:0};if(!e)return s;const{result:r}=e;if(!r||!r.system)return s;if(Object.keys(r.system.categories).length){const d=r.system.categories;for(const b of Object.values(d))Object.keys(b.instances).forEach(()=>b.severity==="alert"?s.warning++:s.other++)}return s}formatValue(e,s){return!e||e.val===null||e.val===void 0?`-${s?` ${s}`:""}`:this.props.systemConfig.common.isFloatComma?e.val.toString().replace(".",",")+(s?` ${s}`:""):e.val+(s?` ${s}`:"")}logLevelFunc=(e,s)=>{s&&this.setState({logLevel:s.val,logLevelSelect:s.val})};renderDialogLogLevel(){return this.state.openDialogLogLevel?t.jsxs(Ct,{theme:this.props.theme,title:this.props.t("Edit log level rule for %s",this.props.host.common.name),onApply:()=>{this.props.socket.setState(`${this.props.hostId}.logLevel`,this.state.logLevelSelect).catch(e=>window.alert(`Cannot set log level: ${e}`)),this.setState({openDialogLogLevel:!1})},onClose:()=>this.setState({openDialogLogLevel:!1,logLevelSelect:this.state.logLevel}),children:[t.jsxs(o.FormControl,{style:{...O.formControl,marginTop:8},variant:"outlined",children:[t.jsx(o.InputLabel,{children:this.props.t("log level")}),t.jsx(o.Select,{variant:"standard",value:this.state.logLevelSelect,fullWidth:!0,onChange:e=>this.setState({logLevelSelect:e.target.value}),children:Ut.map(e=>t.jsx(o.MenuItem,{value:e,children:this.props.t(e)},e))})]}),t.jsxs(o.FormControl,{style:O.formControl,variant:"outlined",children:[t.jsx(o.FormHelperText,{children:this.props.t("Log level will be reset to the saved level after the restart of the controller")}),t.jsxs(o.FormHelperText,{children:[this.props.t("You can set the log level permanently in the base host settings"),t.jsx(f.Build,{style:O.baseSettingsButton})]})]})]}):null}onCopy(){const e=[];if(this.refCpu.current&&e.push(`CPU: ${this.refCpu.current.innerHTML}`),this.refMem.current&&e.push(`RAM: ${this.refMem.current.innerHTML}`),this.refUptime.current&&e.push(`${this.props.t("Uptime")}: ${this.refUptime.current.innerHTML}`),e.push(`${this.props.t("Available")}: ${this.props.available}`),e.push(`${this.props.t("Installed")}: ${this.props.host.common.installedVersion}`),this.refEvents.current&&e.push(`${this.props.t("Events")}: ${this.refEvents.current.innerHTML}`),this.props.hostData&&typeof this.props.hostData=="object"){const s=this.props.hostData;Object.keys(s).map(r=>e.push(`${this.props.t(r)}: ${M.formatInfo[r]?M.formatInfo[r](s[r],this.props.t):s[r]||"--"}`))}B.copyToClipboard(e.join(`
119
- `)),window.alert(this.props.t("Copied"))}renderUpdateButton(e,s){return e?t.jsx(o.Tooltip,{title:this.props.t("Update"),slotProps:{popper:{sx:O.tooltip}},children:t.jsxs(o.Box,{component:"div",onClick:r=>(r.stopPropagation(),this.openHostUpdateDialog()),sx:O.buttonUpdate,children:[t.jsx(o.IconButton,{style:O.buttonUpdateIcon,size:"small",children:t.jsx(f.Refresh,{})}),t.jsx("span",{style:{color:nt[700]},children:this.props.available})]})}):t.jsx("span",{style:s,children:this.props.available})}renderHostBaseEdit(){return this.props.expertMode?t.jsx(o.Tooltip,{title:this.props.t("Host Base Settings"),slotProps:{popper:{sx:O.tooltip}},children:t.jsx("div",{children:t.jsx(o.IconButton,{size:"large",disabled:!this.props.alive,onClick:e=>{e.stopPropagation(),this.setState({baseSettingsDialog:!0})},children:t.jsx(f.Build,{style:O.baseSettingsButton})})})}):null}renderExtendButton(e){return t.jsx(o.Tooltip,{title:this.props.t(e?"collapse":"Expand"),slotProps:{popper:{sx:O.tooltip}},children:t.jsx("div",{children:t.jsx(o.IconButton,{size:"large",children:e?t.jsx(It,{}):t.jsx(wt,{})})})})}renderRestartButton(){return t.jsx(o.Tooltip,{title:this.props.t("Restart host"),slotProps:{popper:{sx:O.tooltip}},children:t.jsx("div",{children:t.jsx(o.IconButton,{size:"large",disabled:!this.props.alive,onClick:e=>{e.stopPropagation(),this.props.socket.restartController(this.props.hostId).catch(s=>window.alert(`Cannot restart: ${s}`))},children:t.jsx(f.Cached,{})})})})}renderEditButton(){return t.jsx(o.IconButton,{size:"large",onClick:e=>{e.stopPropagation(),this.setState({editDialog:!0})},children:t.jsx(f.Edit,{})})}renderRemoveButton(){return!this.props.alive&&!this.props.isCurrentHost?t.jsx(o.Tooltip,{title:this.props.alive||this.props.isCurrentHost?this.props.t("You cannot delete host, when it is alive"):this.props.t("Remove"),slotProps:{popper:{sx:O.tooltip}},children:t.jsx(o.IconButton,{size:"large",onClick:e=>{e.stopPropagation(),this.props.executeCommandRemove()},children:t.jsx(f.Delete,{})})}):t.jsx("div",{style:O.emptyButton})}renderCopyButton(e){return t.jsx(o.Tooltip,{title:this.props.t("Copy"),slotProps:{popper:{sx:O.tooltip}},children:t.jsx(o.IconButton,{size:"large",onClick:()=>this.onCopy(),style:e,children:t.jsx(H,{})})})}renderLogLevel(){return t.jsx(o.Tooltip,{title:`${this.props.t("loglevel")} ${this.state.logLevel}`,slotProps:{popper:{sx:O.tooltip}},children:t.jsx(o.IconButton,{size:"large",onClick:e=>{e.stopPropagation(),this.setState({openDialogLogLevel:!0})},children:t.jsx(o.Avatar,{style:{...O.smallAvatar,...O[this.state.logLevel]},children:Vt(this.state.logLevel)})})})}renderNotificationsBadge(e,s){return t.jsx(o.Badge,{sx:s?{right:-3,top:13,padding:"0 4px",cursor:"pointer"}:{cursor:"pointer"},title:this.props.t("Hosts notifications"),badgeContent:this.state.hostNotifications.warning+this.state.hostNotifications.other,style:O.badge,color:this.state.hostNotifications.warning>0?"error":"secondary",onClick:r=>{r.stopPropagation(),this.props.showAdaptersWarning({[this.props.hostId]:this.state.hostNotifications.notifications},this.props.hostId)},children:e})}async openHostUpdateDialog(){const e=await this.props.socket.checkFeatureSupported("CONTROLLER_UI_UPGRADE");this.setState({hostUpdateDialog:!0,updateAvailable:e}),this.readChangeLog()}renderHostUpdateDialog(){return this.state.hostUpdateDialog?t.jsx(bt,{adapter:this.props.host.common.name,adapterObject:this.props.jsControllerInfo,t:this.props.t,textUpdate:this.state.updateAvailable?this.props.t("Start update"):this.props.t("Show instructions"),textInstruction:this.props.t("Show whole changelog"),rightDependencies:!0,news:this.getNews(),toggleTranslation:this.props.toggleTranslation,noTranslation:this.props.noTranslation,onUpdate:()=>{this.state.updateAvailable?this.setState({hostUpdateDialog:!1,updateDialog:!0}):this.setState({hostUpdateDialog:!1,instructionDialog:!0})},theme:this.props.theme,installedVersion:this.props.host.common.installedVersion,onInstruction:()=>{window.open(Y,"_blank")},onClose:()=>this.setState({hostUpdateDialog:!1})}):null}renderUpdateDialog(){return this.state.updateAvailable&&this.state.updateDialog?t.jsx(Ft,{socket:this.props.socket,hostId:this.props.hostId,version:this.props.jsControllerInfo.version,onClose:()=>this.setState({updateDialog:!1}),adminInstance:this.props.adminInstance,onUpdating:e=>this.props.onUpdating(e),themeType:this.props.themeType}):this.state.instructionDialog?t.jsx(Ot,{socket:this.props.socket,hostId:this.props.hostId,version:this.props.jsControllerInfo.version,onClose:()=>this.setState({instructionDialog:!1})}):null}static extractNews(e,s){const r=e.split(`
120
- `);let d="",b=!1;for(let x=0;x<r.length;x++)if(r[x].startsWith("## ")){if(b)break;r[x].startsWith(`## ${s}`)&&(b=!0)}else b&&(d+=`${r[x].replace(/^\*\s*/,"").replace(/^\(\w+\)\s*/,"")}
121
- `);return d}getNews(e){const s=this.props.jsControllerInfo,r=this.props.host.common.installedVersion,d=[];return r&&(s!=null&&s.news)&&Object.keys(s.news).forEach(b=>{try{if(xt.gt(b,r)||e){let x=!1,k=this.props.noTranslation?s.news[b].en:s.news[b][this.props.lang]||s.news[b].en;if(s.news[b].en==="see CHANGELOG.md"&&this.state.changeLog){const F=M.extractNews(this.state.changeLog,b);F&&(k=F,x=!0)}d.push({version:b,news:k,downloaded:x})}}catch{console.warn(`Cannot compare "${b}" and "${r}"`)}}),d}baseSettingsSettingsDialog(){return this.state.baseSettingsDialog?t.jsx(Wt,{currentHost:this.props.hostId,themeType:this.props.themeType,currentHostName:this.props.host.common.name,onClose:()=>this.setState({baseSettingsDialog:!1}),lang:this.props.lang,socket:this.props.socket,t:this.props.t},"base"):null}renderEditObjectDialog(){return this.state.editDialog?t.jsx(Gt,{obj:this.props.host,t:this.props.t,onClose:e=>this.setState({editDialog:!1},()=>{e&&this.props.socket.setObject(e._id,e).then(()=>this.forceUpdate()).catch(s=>alert(`Cannot write object: ${s}`))})}):null}renderDialogs(){return t.jsxs(t.Fragment,{children:[this.renderDialogLogLevel(),this.renderHostUpdateDialog(),this.renderUpdateDialog(),this.renderEditObjectDialog(),this.baseSettingsSettingsDialog()]})}}const j={...O,root:c=>({position:"relative",m:"10px",width:300,minHeight:200,background:c.palette.background.default,boxShadow:at,display:"flex",flexDirection:"column",transition:"box-shadow 0.5s","&:hover":{boxShadow:lt},"& .warning":{backgroundColor:"#de0000 !important","&:before":{position:"absolute",right:0,top:-5,content:'"⚠"',fontSize:25,height:"30px",width:"30px",color:"black"},animation:"$warning 2.5s ease-in-out infinite alternate"}}),imageBlock:{minHeight:60,display:"flex",padding:"0 10px 0 10px",position:"relative",justifyContent:"space-between",transition:"background 0.5s"},fab:{position:"absolute",bottom:-20,width:40,height:40,right:20},collapse:{height:"100%",position:"absolute",width:"100%",zIndex:3,marginTop:"auto",bottom:0,transition:"height 0.3s",justifyContent:"space-between",display:"flex",flexDirection:"column"},collapseOff:{height:0},close:{width:20,height:20,opacity:.9,cursor:"pointer",position:"relative",ml:"auto",mb:"10px",transition:"all 0.6s ease","&:hover":{transform:"rotate(90deg)"},"&:before":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"#ff4f4f",transform:"rotate(45deg)"},"&:after":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"#ff4f4f",transform:"rotate(-45deg)"}},onOffLine:{alignSelf:"center",width:"100%",height:4},adapter:c=>({width:"100%",fontWeight:"bold",fontSize:16,verticalAlign:"middle",pl:1,pt:2,color:c.palette.mode==="dark"?"#333":"#555"}),cardContentInfo:c=>({overflow:"auto",paddingTop:0,backgroundColor:c.palette.background.paper,color:c.palette.mode==="dark"?"#EEE":"#111"}),cardContentH5:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between",paddingBottom:"10px !important"},marginTop10:{marginTop:10},displayFlex:{display:"flex"},enableButton:{display:"flex",justifyContent:"space-between",alignItems:"center"},instanceStateNotAlive1:{backgroundColor:"rgba(192, 192, 192, 0.4)"},green:{background:"#00ce00",position:"relative"},red:{background:"#da0000"},dotLine:{width:50,height:"100%",background:"linear-gradient(90deg, rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)",zIndex:2,position:"absolute",left:-11},cardContentDiv:{position:"sticky",right:0,top:0,paddingTop:10},curdContentFlexCenter:{display:"flex",alignItems:"center",ml:"4px"},ul:{paddingTop:0,paddingBottom:0,paddingLeft:16,paddingRight:8},value:{marginLeft:5},label:{fontWeight:"bold"}};class qt extends M{getHostDescriptionAll(){return this.props.hostData?typeof this.props.hostData=="string"?this.props.hostData:!this.props.hostData||typeof this.props.hostData!="object"?t.jsx("ul",{style:j.ul,children:t.jsx(o.Skeleton,{})},"ul"):t.jsx("ul",{style:j.ul,children:Object.keys(this.props.hostData).map(e=>t.jsx("li",{children:t.jsxs("span",{style:j.black,children:[t.jsxs("span",{style:j.label,children:[this.props.t(e),": "]}),t.jsx("span",{style:j.value,children:M.formatInfo[e]?M.formatInfo[e](this.props.hostData[e],this.props.t):this.props.hostData[e]||"--"})]})},e))},"ul"):t.jsx(o.Skeleton,{})}render(){const e=(this.props.isCurrentHost||this.props.alive)&&E.updateAvailable(this.props.host.common.installedVersion,this.props.available),s=this.getHostDescriptionAll();return t.jsxs(o.Card,{sx:B.getStyle(this.props.theme,j.root,this.props.hidden&&j.hidden),children:[this.renderDialogs(),this.state.openCollapse&&t.jsxs("div",{style:{...j.collapse,...this.state.openCollapse?void 0:j.collapseOff},children:[t.jsxs(o.CardContent,{sx:j.cardContentInfo,children:[t.jsx("div",{style:j.cardContentDiv,onClick:()=>this.setState({openCollapse:!1}),children:t.jsx(o.Box,{component:"div",sx:j.close,onClick:()=>this.setState({openCollapse:!1})})}),s]}),t.jsx(o.Box,{component:"div",sx:j.footerBlock})]}),t.jsx("div",{style:{...j.onOffLine,...this.props.alive?j.green:j.red},children:this.props.alive&&t.jsx("div",{style:j.dotLine})}),t.jsxs("div",{ref:this.refWarning,style:{...j.imageBlock,...this.props.alive?void 0:j.instanceStateNotAlive1,background:this.props.host.common.color||"inherit"},children:[t.jsx(o.CardMedia,{sx:j.img,component:"img",image:this.props.host.common.icon||"img/no-image.svg"}),t.jsx(o.Box,{component:"div",style:B.getStyle(this.props.theme,j.adapter,{color:this.props.host.common.color&&B.invertColor(this.props.host.common.color,!0)||"inherit"}),children:this.renderNotificationsBadge(this.props.host.common.name,!0)}),this.state.openCollapse?null:t.jsx(o.Fab,{disabled:typeof s=="string",onClick:()=>this.setState({openCollapse:!0}),style:j.fab,color:"primary","aria-label":"add",title:this.props.t("Click for more"),children:t.jsx(f.MoreVert,{})})]}),t.jsxs(o.CardContent,{style:j.cardContentH5,children:[t.jsx(o.Typography,{variant:"body2",color:"textSecondary",component:"div",children:t.jsxs("div",{style:j.displayFlex,children:[t.jsx("span",{style:j.label,children:"CPU:"}),t.jsx("div",{ref:this.refCpu,style:j.value,children:"- %"})]})}),t.jsx(o.Typography,{variant:"body2",color:"textSecondary",component:"div",children:t.jsxs("div",{style:j.displayFlex,children:[t.jsx("span",{style:j.label,children:"RAM:"}),t.jsx("div",{ref:this.refMem,style:j.value,children:"- %"})]})}),t.jsx(o.Typography,{variant:"body2",color:"textSecondary",component:"div",children:t.jsxs("div",{style:j.displayFlex,children:[t.jsxs("span",{style:j.label,children:[this.props.t("Uptime"),":"]}),t.jsx("div",{ref:this.refUptime,style:j.value,children:"-d -h"})]})}),t.jsxs(o.Typography,{variant:"body2",color:"textSecondary",component:"div",style:j.wrapperAvailable,children:[t.jsxs("span",{style:j.label,children:[this.props.t("Available")," js-controller:"]}),t.jsx(o.Box,{component:"div",sx:{...e?j.greenText:void 0,...j.curdContentFlexCenter},children:this.renderUpdateButton(e)})]}),t.jsxs(o.Typography,{variant:"body2",color:"textSecondary",component:"p",children:[t.jsxs("span",{style:j.label,children:[this.props.t("Installed")," js-controller:"]}),t.jsx("span",{style:j.value,children:this.props.host.common.installedVersion})]}),t.jsx(o.Typography,{variant:"body2",color:"textSecondary",component:"div",children:t.jsxs("div",{style:j.displayFlex,children:[t.jsxs("span",{style:j.label,children:[this.props.t("Events"),":"]}),t.jsx("div",{ref:this.refEvents,style:j.value,children:"- / -"})]})}),t.jsx("div",{style:j.marginTop10,children:t.jsxs(o.Typography,{component:"span",style:j.enableButton,children:[this.renderEditButton(),this.renderHostBaseEdit(),this.renderRestartButton(),this.props.expertMode&&this.state.logLevel&&this.renderLogLevel(),this.renderRemoveButton(),this.renderCopyButton()]})})]})]},this.props.hostId)}}const v={...O,root:c=>({position:"relative",m:"7px",background:c.palette.background.default,boxShadow:at,overflow:"hidden",transition:"box-shadow 0.5s,height 0.3s","&:hover":{boxShadow:lt}}),imageBlock:{marginRight:6,minHeight:60,width:"100%",maxWidth:300,display:"flex",padding:"0 10px 0 10px",position:"relative",justifyContent:"space-between",transition:"background 0.5s",alignItems:"baseline"},collapse:{height:215,backgroundColor:"rgba(128, 128, 128, 0.1)",width:"100%",zIndex:3,marginTop:"auto",bottom:0,transition:"height 0.3s",justifyContent:"space-between",display:"flex",flexDirection:"column"},collapseOn:{animation:"height 1s"},onOff:{alignSelf:"center",width:4,height:"100%"},host:c=>({width:"100%",fontWeight:"bold",fontSize:16,paddingLeft:"8px",alignSelf:"center",color:c.palette.mode==="dark"?"#ddd":"#222",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}),cardContentH5:{height:"100%",display:"flex",width:"100%",justifyContent:"space-between",padding:"10px !important",alignItems:"center"},marginTop10:{marginLeft:"auto",display:"flex"},enableButton:{display:"flex",justifyContent:"space-between"},green:{background:"#00ce00",position:"relative",overflow:"hidden"},dotLine:{width:10,height:20,background:"linear-gradient( rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)",zIndex:2,position:"absolute",top:-21},red:{background:"#da0000"},flex:{flex:1,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},cardContentInfo:{overflow:"auto",paddingTop:0,justifyContent:"center",display:"flex",height:"100%",position:"relative"},cursorNoDrop:{cursor:"no-drop !important"},wrapperFlex:{display:"flex",cursor:"pointer","& .warning":{backgroundColor:"#de0000 !important","&:before":{position:"absolute",right:0,top:-5,content:'"⚠"',fontSize:25,height:"30px",width:"30px",color:"black"},animation:"$warning 2.5s ease-in-out infinite alternate"},"@media screen and (max-width: 500px)":{flexDirection:"column"}},wrapperColor:{position:"relative",overflow:"hidden"},hidden1100:{"@media screen and (max-width: 1100px)":{display:"none !important"}},hidden800:{"@media screen and (max-width: 800px)":{display:"none !important"}},hidden600:{"@media screen and (max-width: 600px)":{display:"none !important"}},curdContentFlexCenter:{display:"flex",alignItems:"center"},wrapperInfo:{display:"flex",flexFlow:"wrap",width:"100%",justifyContent:"space-around"},wrapperBlockItem:{display:"flex",flexFlow:"nowrap",whiteSpace:"nowrap",margin:10},bold:{fontWeight:"bold"},nowrap:{display:"flex",flexFlow:"nowrap",flex:1,whiteSpace:"nowrap",marginRight:5},cell:{}};class Xt extends M{renderValue(e){return typeof this.props.hostData!="object"?null:t.jsxs("div",{style:v.wrapperBlockItem,children:[t.jsxs("span",{style:{...v.bold,...v.nowrap},children:[this.props.t(e),": "]}),M.formatInfo[e]?M.formatInfo[e](this.props.hostData[e],this.props.t):this.props.hostData[e]||"--"]},e)}getHostDescriptionAll(){return this.props.hostData?typeof this.props.hostData=="string"?this.props.hostData:t.jsxs("div",{style:v.wrapperInfo,children:[t.jsx("div",{style:v.marginRight,children:this.props.hostData&&typeof this.props.hostData=="object"?Object.keys(this.props.hostData).map((e,s)=>s<=5&&this.renderValue(e)):t.jsx(o.Skeleton,{})}),t.jsx("div",{style:v.marginRight,children:this.props.hostData&&typeof this.props.hostData=="object"?Object.keys(this.props.hostData).map((e,s)=>s>5&&s<12&&this.renderValue(e)):t.jsx(o.Skeleton,{})}),t.jsx("div",{style:v.marginRight,children:this.props.hostData&&typeof this.props.hostData=="object"?Object.keys(this.props.hostData).map((e,s)=>s>=12&&this.renderValue(e)):t.jsx(o.Skeleton,{})})]}):t.jsx(o.Skeleton,{})}render(){const e=(this.props.isCurrentHost||this.props.alive)&&E.updateAvailable(this.props.host.common.installedVersion,this.props.available),s=this.getHostDescriptionAll();return t.jsxs(o.Box,{component:"div",sx:B.getStyle(this.props.theme,v.root,this.props.hidden&&v.hidden,{border:`2px solid ${this.props.host.common.color||"inherit"}`,borderRadius:"5px"}),children:[this.renderDialogs(),t.jsxs(o.Box,{component:"div",sx:{...v.wrapperFlex,...this.props.alive?void 0:v.cursorNoDrop},onClick:this.state.openDialogLogLevel?null:()=>this.setState({openCollapse:!this.state.openCollapse}),children:[t.jsxs("div",{style:v.wrapperColor,children:[t.jsx("div",{style:{...v.onOff,...this.props.alive?v.green:v.red}}),this.props.alive&&t.jsx("div",{style:v.dotLine})]}),t.jsxs("div",{ref:this.refWarning,style:{...v.imageBlock,background:this.props.host.common.color||"inherit"},children:[this.renderNotificationsBadge(t.jsx(o.CardMedia,{sx:v.img,component:"img",image:this.props.host.common.icon||"img/no-image.svg"}),!0),t.jsx("div",{style:B.getStyle(this.props.theme,v.host,{color:this.props.host.common.color&&B.invertColor(this.props.host.common.color,!0)||"inherit"}),children:this.props.host.common.name})]}),t.jsxs(o.CardContent,{sx:{"&.MuiCardContent-root":v.cardContentH5},children:[t.jsx(o.Typography,{sx:{...v.flex,...v.hidden800,...v.cell},variant:"body2",color:"textSecondary",component:"div",children:t.jsx("div",{ref:this.refCpu,children:"- %"})}),t.jsx(o.Typography,{sx:{...v.flex,...v.hidden800,...v.cell},variant:"body2",color:"textSecondary",component:"div",children:t.jsx("div",{ref:this.refMem,children:"- %"})}),t.jsx(o.Typography,{sx:{...v.flex,...v.hidden800,...v.cell},variant:"body2",color:"textSecondary",component:"div",children:t.jsx("div",{ref:this.refUptime,children:"-/-"})}),t.jsx(o.Typography,{sx:{...v.flex,...v.hidden1100},variant:"body2",color:"textSecondary",component:"p",children:this.props.host.common.installedVersion}),t.jsx(o.Typography,{sx:{...v.flex,...v.hidden1100,...v.cell},variant:"body2",color:"textSecondary",component:"div",children:t.jsx(o.Box,{component:"div",sx:{...e?v.greenText:void 0,...v.curdContentFlexCenter},children:this.renderUpdateButton(e)})}),t.jsx(o.Typography,{sx:{...v.flex,...v.hidden600,...v.cell},variant:"body2",color:"textSecondary",component:"div",children:t.jsx("div",{ref:this.refEvents,children:"- / -"})}),t.jsx("div",{style:v.marginTop10,children:t.jsxs(o.Typography,{component:"span",style:v.enableButton,children:[this.renderEditButton(),this.renderHostBaseEdit(),this.renderRestartButton(),this.props.expertMode&&this.state.logLevel?this.renderLogLevel():t.jsx("div",{style:v.emptyButton}),this.renderRemoveButton(),this.renderExtendButton(this.state.openCollapse)]})})]})]}),typeof s=="object"&&t.jsxs("div",{style:{...v.collapse,...this.state.openCollapse?v.collapseOn:v.collapseOff},onClick:r=>r.stopPropagation(),children:[t.jsxs(o.CardContent,{style:v.cardContentInfo,children:[s,this.renderCopyButton({height:44,width:44})]}),t.jsx(o.Box,{component:"div",sx:v.footerBlock})]})]},this.props.hostId)}}const I={grow:{flexGrow:1},cards:{display:"flex",flexFlow:"wrap",justifyContent:"center"},tabHeaderWrapper:{height:30,display:"flex",margin:7},tabHeaderFirstItem:{width:306,paddingLeft:30,fontSize:14,fontWeight:600,alignSelf:"center"},tabHeaderItem:{flex:1,fontSize:14,fontWeight:600,alignSelf:"center"},tabHeaderItemButton:{fontSize:14,fontWeight:600,alignSelf:"center"},tabFlex:{display:"flex",flex:1,padding:"0 10px"},hidden1100:{"@media screen and (max-width: 1100px)":{display:"none !important"}},hidden800:{"@media screen and (max-width: 800px)":{display:"none !important"}},hidden600:{"@media screen and (max-width: 600px)":{display:"none !important"}},jsController:{fontSize:12,opacity:.4,display:"block",whiteSpace:"nowrap"},tooltip:{pointerEvents:"none"}},z={};function Kt(c){var e;if((e=c.dockerInformation)!=null&&e.isDocker){let s=c.dockerInformation.isOfficial?"official image":"unofficial image";c.dockerInformation.isOfficial&&(s+=` - ${c.dockerInformation.officialVersion}`),c.Platform=`${c.Platform} (${s})`}delete c.dockerInformation}class Qt extends T.Component{constructor(e){super(e),this.state={viewMode:(window._localStorage||window.localStorage).getItem("Hosts.viewMode")==="true",alive:{},hosts:[],repository:{},hostsData:{},filterText:(window._localStorage||window.localStorage).getItem("Hosts.filterText")||"",showSlowConnectionWarning:!1,readTimeoutMs:et.getReadTimeoutMs()}}t=(e,s,r)=>(s!==void 0&&r!==void 0&&!z[`${e} ${s} ${r}`]?z[`${e} ${s} ${r}`]=this.props.t(e,s,r):s!==void 0&&!z[`${e} ${s}`]?z[`${e} ${s}`]=this.props.t(e,s):z[e]||(z[e]=this.props.t(e)),s!==void 0&&r!==void 0?z[`${e} ${s} ${r}`]:s!==void 0?z[`${e} ${s}`]:z[e]);componentDidMount(){this.readInfo().then(()=>{this.props.hostsWorker.registerHandler(this.updateHosts),this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive)})}componentWillUnmount(){this.props.hostsWorker.unregisterHandler(this.updateHosts),this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive)}getHostsData(e,s){const r=[];for(let d=0;d<e.length;d++)if(s[e[d]._id]){const b=this.props.socket.getHostInfo(e[d]._id,null,this.state.readTimeoutMs).catch(x=>(console.error(`Cannot get getHostInfo: ${x}`),x.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0}),{id:e[d]._id,data:x.toString()})).then(x=>(Kt(x),{id:e[d]._id,data:x}));r.push(b)}else r.push(Promise.resolve({id:e[d]._id,data:"offline"}));return Promise.all(r).then(d=>{const b={};return d.forEach(x=>b[x.id]=x.data),b})}async readInfo(){try{const e=await this.props.socket.getHosts(!0),s=await this.props.socket.getRepository(this.props.currentHost,{update:!1},!1,this.state.readTimeoutMs),r=JSON.parse(JSON.stringify(this.state.alive));for(let x=0;x<e.length;x++){const k=await this.props.socket.getState(`${e[x]._id}.alive`);r[e[x]._id]=k?!!k.val:!1}const d=await this.getHostsData(e,r),b={alive:r,hosts:e,hostsData:d,repository:s};this.state.filterText&&e.length<=2&&(b.filterText=""),this.setState(b)}catch(e){window.alert(`Cannot getRepository: ${e}`),e.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0})}}updateHosts=e=>{const s=JSON.parse(JSON.stringify(this.state.hosts)),r=JSON.parse(JSON.stringify(this.state.alive));Promise.all(e.map(async d=>{const b=s.findIndex(x=>x._id===d.id);if(b!==-1)d.obj?s[b]=d.obj:s.splice(b,1);else{const x=await this.props.socket.getState(`${d.id}.alive`);r[d.id]=!!(x!=null&&x.val),s.push(d.obj)}})).then(()=>{const d={hosts:s,alive:r};this.state.filterText&&s.length<=2&&(d.filterText=""),this.setState(d)})};updateHostsAlive=e=>{const s=JSON.parse(JSON.stringify(this.state.alive));let r=!1;e.forEach(d=>{d.type==="deleted"?s[d.id]!==void 0&&(delete s[d.id],r=!0):!!s[d.id]!=!!d.alive&&(s[d.id]=d.alive,r=!0)}),r&&this.setState({alive:s})};getPanelsOrRows(){const e=this.renderHosts().filter(s=>s);return e.length?e:this.t("All items are filtered out")}renderSlowConnectionWarning(){return this.state.showSlowConnectionWarning?t.jsx(et,{readTimeoutMs:this.state.readTimeoutMs,t:this.t,onClose:async e=>{this.setState({showSlowConnectionWarning:!1}),e&&(this.setState({readTimeoutMs:e}),await this.readInfo())}}):null}renderHosts(){return this.state.hosts.map(e=>{var r;if(this.state.filterText&&!e.common.name.toLowerCase().includes(this.state.filterText.toLowerCase()))return null;const s=this.state.viewMode?qt:Xt;return t.jsx(s,{adminInstance:this.props.adminInstance,alive:this.state.alive[e._id],available:((r=this.state.repository["js-controller"])==null?void 0:r.version)||"-",executeCommandRemove:()=>this.props.executeCommand(`host remove ${e.common.name}`),expertMode:this.props.expertMode,host:e,hostData:this.state.hostsData[e._id],hostId:e._id,hostsWorker:this.props.hostsWorker,isCurrentHost:this.props.currentHost===e._id,jsControllerInfo:this.state.repository["js-controller"],lang:this.props.lang,noTranslation:this.props.noTranslation,onUpdating:this.props.onUpdating,showAdaptersWarning:this.props.showAdaptersWarning,socket:this.props.socket,systemConfig:this.props.systemConfig,t:this.t,theme:this.props.theme,themeType:this.props.themeType,toggleTranslation:this.props.toggleTranslation},e._id)})}renderTableHeader(){const e=window.innerWidth<100?10:window.innerWidth<1200?12:14;return t.jsxs("div",{style:I.tabHeaderWrapper,children:[t.jsx("div",{style:I.tabHeaderFirstItem,children:this.t("Name:")}),t.jsxs("div",{style:I.tabFlex,children:[t.jsx(o.Box,{component:"div",sx:B.getStyle(this.props.theme,I.tabHeaderItem,I.hidden800,{fontSize:e}),children:"CPU"}),t.jsx(o.Box,{component:"div",sx:B.getStyle(this.props.theme,I.tabHeaderItem,I.hidden800,{fontSize:e}),children:"RAM"}),t.jsx(o.Box,{component:"div",sx:B.getStyle(this.props.theme,I.tabHeaderItem,I.hidden800,{fontSize:e}),children:this.t("Uptime")}),t.jsxs(o.Box,{component:"div",sx:B.getStyle(this.props.theme,I.tabHeaderItem,I.hidden1100,{fontSize:e}),children:[this.t("Installed"),t.jsx("div",{style:I.jsController,children:"js-controller"})]}),t.jsxs(o.Box,{component:"div",sx:B.getStyle(this.props.theme,I.tabHeaderItem,I.hidden1100,{fontSize:e}),children:[this.t("Available"),t.jsx("div",{style:I.jsController,children:"js-controller"})]}),t.jsx(o.Box,{component:"div",sx:B.getStyle(this.props.theme,I.tabHeaderItem,I.hidden600,{fontSize:e}),children:this.t("Events")}),t.jsx("div",{style:{...I.tabHeaderItemButton,width:this.props.expertMode?292:244}})]})]})}render(){return this.state.hosts.length?t.jsxs(gt,{children:[t.jsx("style",{children:Jt}),this.renderSlowConnectionWarning(),t.jsxs(ft,{children:[t.jsx(o.Tooltip,{title:this.t("Show / hide List"),slotProps:{popper:{sx:I.tooltip}},children:t.jsx(o.IconButton,{size:"large",onClick:()=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",this.state.viewMode?"false":"true"),this.setState({viewMode:!this.state.viewMode})},children:this.state.viewMode?t.jsx(f.ViewModule,{}):t.jsx(f.ViewList,{})})}),t.jsx(o.Tooltip,{title:this.t("Reload"),slotProps:{popper:{sx:I.tooltip}},children:t.jsx(o.IconButton,{size:"large",onClick:()=>this.forceUpdate(),children:t.jsx(f.Refresh,{})})}),t.jsx("div",{style:I.grow}),this.state.hosts.length>2?t.jsx(o.TextField,{variant:"standard",label:this.t("Filter"),style:{margin:"5px 0"},value:this.state.filterText,onChange:e=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",e.target.value),this.setState({filterText:e.target.value})},slotProps:{input:{endAdornment:this.state.filterText?t.jsx(o.InputAdornment,{position:"end",children:t.jsx(o.IconButton,{tabIndex:-1,size:"small",onClick:()=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",""),this.setState({filterText:""})},children:t.jsx(f.Close,{})})}):null}}}):null,t.jsx("div",{style:I.grow})]}),t.jsxs(yt,{overflow:"auto",children:[B.isStableRepository(this.props.systemConfig.common.activeRepo)?null:t.jsx(o.Box,{sx:{marginX:2,width:"calc(100% - 32px)",alignSelf:"center"},children:t.jsx(vt,{type:"warning",children:this.t('Active repo is "%s"',this.props.systemConfig.common.activeRepo)})}),t.jsxs("div",{style:this.state.viewMode?I.cards:void 0,children:[!this.state.viewMode&&this.renderTableHeader(),this.getPanelsOrRows()]})]})]}):t.jsx(o.LinearProgress,{})}}const ye=$()(Qt);export{ye as default};