iobroker.admin 7.7.1 → 7.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -4
- package/adminWww/assets/{AdapterUpdateDialog-Bgswiqs9.js → AdapterUpdateDialog-DHGhgEEq.js} +1 -1
- package/adminWww/assets/{Adapters-yQiEeoh8.js → Adapters-CgSIajcF.js} +2 -2
- package/adminWww/assets/{Config-C1Gjt8DC.js → Config-BQSl4bfA.js} +1 -1
- package/adminWww/assets/{CustomModal-CgEtkfCG.js → CustomModal-DNMTLv4y.js} +1 -1
- package/adminWww/assets/{CustomTab-CwioFUor.js → CustomTab-Bl8S8QZW.js} +1 -1
- package/adminWww/assets/{DefaultPropsProvider-DxsXuIyE.js → DefaultPropsProvider-u5xB1Fxz.js} +1 -1
- package/adminWww/assets/{EasyMode-CN-reJVI.js → EasyMode-xDbqrply.js} +1 -1
- package/adminWww/assets/{Enums-8m252lzC.js → Enums-BSICIhWI.js} +1 -1
- package/adminWww/assets/{Fields-lI3YkIzQ.js → Fields-C3JkTmfP.js} +1 -1
- package/adminWww/assets/{Files-fQpSPYWI.js → Files-DK85-COY.js} +2 -2
- package/adminWww/assets/{FilledInput-CKswrNd5.js → FilledInput-CysG4ax_.js} +1 -1
- package/adminWww/assets/{Hosts-BPdUlXV5.js → Hosts-qIsB4Gub.js} +2 -2
- package/adminWww/assets/Instances-BA_DCzs8.js +2 -0
- package/adminWww/assets/{Intro-Dr1-aqO9.js → Intro-00oh6SLw.js} +1 -1
- package/adminWww/assets/{Logs-xCCrWV30.js → Logs-Cvpgh-zN.js} +1 -1
- package/adminWww/assets/Objects-Dp71iotS.js +60 -0
- package/adminWww/assets/{State-nZ6sjU9_.js → State-BqfD2ABf.js} +1 -1
- package/adminWww/assets/{Tabs-BJ1rL35Z.js → Tabs-sxfWgN0b.js} +2 -2
- package/adminWww/assets/{Users-B0iasrSG.js → Users-CDcWqTfZ.js} +1 -1
- package/adminWww/assets/ace-BG5WYul1.js +985 -0
- package/adminWww/assets/{blueGrey-D-KQaGde.js → blueGrey-DYsiMDOn.js} +1 -1
- package/adminWww/assets/{bootstrap-DDrI3lVl.js → bootstrap-BYQTdf9r.js} +91 -103
- package/adminWww/assets/{createSvgIcon-DuKI6CvW.js → createSvgIcon-Bh3KWtyp.js} +1 -1
- package/adminWww/assets/{emotion-react.browser.esm-DApPKwaj.js → emotion-react.browser.esm-BCDt9NrH.js} +1 -1
- package/adminWww/assets/{emotion-styled.browser.esm-Dc05hmeu.js → emotion-styled.browser.esm-CyFqGgyG.js} +1 -1
- package/adminWww/assets/{emotion-utils.browser.esm-DOjH6Olm.js → emotion-utils.browser.esm-pglN4_eI.js} +1 -1
- package/adminWww/assets/{geosearch.module-CWfRtxrN.js → geosearch.module-DH4NhiPj.js} +1 -1
- package/adminWww/assets/hostInit-fzxL8JAx.js +1 -1
- package/adminWww/assets/{iconBase-CgxZ5MMC.js → iconBase-C3vi24ZE.js} +1 -1
- package/adminWww/assets/{index-BmWdDCX_.js → index-B1ITPhEY.js} +2 -2
- package/adminWww/assets/{index-D7Rlw-5R.js → index-D--ojYan.js} +1 -1
- package/adminWww/assets/{index-BjVqnwqt.js → index-D3IAEXXP.js} +1 -1
- package/adminWww/assets/{index-HOidq_rM.js → index-DPDg2YA0.js} +1 -1
- package/adminWww/assets/{index-Bsv_DXxB.js → index-DTGUg51P.js} +1 -1
- package/adminWww/assets/{index-BP5kWU3L.js → index-Qa7Q_Dz5.js} +1 -1
- package/adminWww/assets/{index-RvHSqeMD.js → index-qcIeekse.js} +13 -13
- package/adminWww/assets/{index-gHyOgbGJ.js → index-rKfs-rCa.js} +1 -1
- package/adminWww/assets/{index-DH1kmwK1.js → index-wN1ZlPSW.js} +2 -2
- package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-BOKYvG_W.js +1 -0
- package/adminWww/assets/{iobroker_admin__loadShare__leaflet__loadShare__-B1OZ7tj-.js → iobroker_admin__loadShare__leaflet__loadShare__-h9SMNPLU.js} +1 -1
- package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BnsS7SOQ.js +1 -0
- package/adminWww/assets/{iobroker_admin__loadShare__react__loadShare__-DtlEM_52.js → iobroker_admin__loadShare__react__loadShare__-Bis6NHgw.js} +1 -1
- package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-CTkuGOOk.js +5 -0
- package/adminWww/assets/{sentry-CNy_SQq1.js → sentry-H_UdJ2zx.js} +1 -1
- package/adminWww/assets/{zh-cn-DZTx1vAh.js → zh-cn-vvAC9zpl.js} +3 -3
- package/adminWww/index.html +2 -2
- package/adminWww/mf-manifest.json +1 -1
- package/adminWww/remoteEntry.js +2 -2
- package/adminWww/static/js/worker-javascript.js +1 -1
- package/adminWww/static/js/worker-yaml.js +1 -1
- package/io-package.json +14 -14
- package/package.json +10 -9
- package/adminWww/assets/Instances-BStmfz4r.js +0 -2
- package/adminWww/assets/Objects-BF8brXaf.js +0 -60
- package/adminWww/assets/ace-CFIUQz8j.js +0 -970
- package/adminWww/assets/iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-gw2iqPBS.js +0 -1
- package/adminWww/assets/iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BGyJCibC.js +0 -1
- package/adminWww/assets/iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js +0 -10
- package/build-backend/src/lib/checkLinuxPass.js +0 -280
- package/build-backend/src/lib/checkLinuxPass.js.map +0 -1
- package/build-backend/src/lib/testPassword.js +0 -58
- package/build-backend/src/lib/testPassword.js.map +0 -1
- package/build-backend/src/lib/translations.js +0 -27
- package/build-backend/src/lib/translations.js.map +0 -1
- package/build-backend/src/lib/utils.js +0 -344
- package/build-backend/src/lib/utils.js.map +0 -1
- package/build-backend/src/lib/web.js +0 -1165
- package/build-backend/src/lib/web.js.map +0 -1
- package/build-backend/src/main.js +0 -1704
- package/build-backend/src/main.js.map +0 -1
- package/build-backend/src-admin/src/components/Adapters/Utils.js +0 -39
- package/build-backend/src-admin/src/components/Adapters/Utils.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{j as t,E as nt,J as ht,B as pt,F as dt}from"./DefaultPropsProvider-DxsXuIyE.js";import{i as T,R as J}from"./iobroker_admin__loadShare__react__loadShare__-DtlEM_52.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-DDrI3lVl.js";import{G as it}from"./iconBase-CgxZ5MMC.js";import{A as bt}from"./AdapterUpdateDialog-Bgswiqs9.js";import{g as jt}from"./_commonjsHelpers-D6-XlEtG.js";import{C as Ct}from"./CustomModal-CgEtkfCG.js";import{a as St}from"./blueGrey-D-KQaGde.js";import"./iobroker_admin__loadShare__prop_mf_2_types__loadShare__-BGyJCibC.js";import"./iobroker_admin__mf_v__runtimeInit__mf_v__-VDoBF19b.js";import"./emotion-serialize.esm-BUa21YfQ.js";import"./iobroker_admin__loadShare___mf_0_emotion_mf_1_react__loadShare__-gw2iqPBS.js";import"./ace-CFIUQz8j.js";import"./FilledInput-CKswrNd5.js";import"./preload-helper-Dp1pzeXC.js";import"./iobroker_admin__loadShare__leaflet__loadShare__-B1OZ7tj-.js";import"./extends-CF3RwP-h.js";import"./zh-cn-DZTx1vAh.js";import"./State-nZ6sjU9_.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(`
|
|
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
2
|
`):this.state.response.stdout.join(`
|
|
3
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
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(`
|
|
@@ -20,7 +20,7 @@ iob status
|
|
|
20
20
|
iob update
|
|
21
21
|
iob upgrade self
|
|
22
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(){const e="log";return t.jsx(Ht,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:s=>this.updateSettings(e,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=`
|
|
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
24
|
@keyframes newValueAnimationHostDark {
|
|
25
25
|
0% {
|
|
26
26
|
color: #00f900;
|