homebridge-config-ui-x 5.11.2-beta.8 → 5.11.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/CHANGELOG.md +3 -21
- package/dist/core/auth/auth.controller.d.ts +0 -4
- package/dist/core/config/config.interfaces.d.ts +0 -14
- package/dist/core/config/config.service.d.ts +0 -6
- package/dist/core/config/config.service.js +0 -8
- package/dist/core/config/config.service.js.map +1 -1
- package/dist/core/config/config.startup.js +17 -48
- package/dist/core/config/config.startup.js.map +1 -1
- package/dist/core/feature-flags/feature-flags.registry.js +0 -5
- package/dist/core/feature-flags/feature-flags.registry.js.map +1 -1
- package/dist/core/homebridge-ipc/homebridge-ipc.service.js +0 -1
- package/dist/core/homebridge-ipc/homebridge-ipc.service.js.map +1 -1
- package/dist/core/spa/spa.filter.d.ts +0 -3
- package/dist/core/spa/spa.filter.js +2 -22
- package/dist/core/spa/spa.filter.js.map +1 -1
- package/dist/globalDefaults.js +0 -3
- package/dist/globalDefaults.js.map +1 -1
- package/dist/main.js +4 -18
- package/dist/main.js.map +1 -1
- package/dist/modules/accessories/accessories.controller.d.ts +1 -1
- package/dist/modules/accessories/accessories.module.js +0 -2
- package/dist/modules/accessories/accessories.module.js.map +1 -1
- package/dist/modules/accessories/accessories.service.d.ts +3 -21
- package/dist/modules/accessories/accessories.service.js +17 -280
- package/dist/modules/accessories/accessories.service.js.map +1 -1
- package/dist/modules/child-bridges/child-bridges.interfaces.d.ts +0 -9
- package/dist/modules/config-editor/config-editor.controller.d.ts +0 -4
- package/dist/modules/config-editor/config-editor.controller.js +0 -64
- package/dist/modules/config-editor/config-editor.controller.js.map +1 -1
- package/dist/modules/config-editor/config-editor.service.d.ts +1 -6
- package/dist/modules/config-editor/config-editor.service.js +1 -45
- package/dist/modules/config-editor/config-editor.service.js.map +1 -1
- package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js +1 -1
- package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js.map +1 -1
- package/dist/modules/plugins/plugins.module.js +1 -1
- package/dist/modules/plugins/plugins.service.js +2 -17
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/server/server.controller.d.ts +0 -50
- package/dist/modules/server/server.controller.js +2 -201
- package/dist/modules/server/server.controller.js.map +1 -1
- package/dist/modules/server/server.service.d.ts +0 -48
- package/dist/modules/server/server.service.js +14 -502
- package/dist/modules/server/server.service.js.map +1 -1
- package/dist/modules/status/status.gateway.d.ts +0 -2
- package/dist/modules/status/status.interfaces.d.ts +0 -11
- package/dist/modules/status/status.service.d.ts +1 -4
- package/dist/modules/status/status.service.js +2 -21
- package/dist/modules/status/status.service.js.map +1 -1
- package/package.json +7 -9
- package/public/3rdpartylicenses.txt +620 -594
- package/public/assets/plugin-ui-utils/ui.js +0 -3
- package/public/assets/plugin-ui-utils/ui.js.map +1 -1
- package/public/chunk-2BB4D4TW.js +1 -0
- package/public/chunk-2GCZ3AMH.js +1 -0
- package/public/chunk-2K5FWBCK.js +8 -0
- package/public/chunk-2LQBMVWH.js +1 -0
- package/public/chunk-34ZN4GVA.js +3 -0
- package/public/chunk-3JW6FD5V.js +1 -0
- package/public/chunk-57XTQ6PK.js +1 -0
- package/public/chunk-5DBV5PYR.js +19 -0
- package/public/chunk-5GKTPXPE.js +1 -0
- package/public/chunk-5X7ARCKG.js +5 -0
- package/public/chunk-67HOYJJ2.js +1 -0
- package/public/chunk-6MZHUZRT.js +4 -0
- package/public/chunk-77CMUO6J.js +1 -0
- package/public/chunk-7LJYL7EH.js +1 -0
- package/public/chunk-7TFBELRD.js +1 -0
- package/public/chunk-AXOHPUQR.js +1 -0
- package/public/chunk-BMAZBLAT.js +1 -0
- package/public/chunk-C554TVZA.js +2 -0
- package/public/chunk-DGDNSN6I.js +1 -0
- package/public/chunk-E6RSPO2D.js +1 -0
- package/public/chunk-ESQ665GW.js +5 -0
- package/public/chunk-G4QH622U.js +5 -0
- package/public/chunk-GKPR5M7S.js +1 -0
- package/public/chunk-GT7UMMFF.js +2 -0
- package/public/chunk-HBIQJCSE.js +1 -0
- package/public/{chunk-BMOLDRJ3.js → chunk-JLZ5WU6N.js} +1 -1
- package/public/chunk-JSZIAFBJ.js +1 -0
- package/public/chunk-JWQRV434.js +1 -0
- package/public/chunk-JX72JCMA.js +1 -0
- package/public/chunk-KT26K4DO.js +1 -0
- package/public/chunk-L63FND3A.js +1 -0
- package/public/chunk-LSXTHVKB.js +1 -0
- package/public/chunk-N5VXONVW.js +1 -0
- package/public/{chunk-H7F7H5MW.js → chunk-N6JGA2PG.js} +1 -1
- package/public/chunk-NVCJ3EJS.js +1 -0
- package/public/chunk-OPJZWDSO.js +1 -0
- package/public/chunk-OXBXHVWY.js +8 -0
- package/public/chunk-QHROK73U.js +50 -0
- package/public/chunk-QNEXPAIT.js +1 -0
- package/public/chunk-R2G2YWV4.js +51 -0
- package/public/chunk-RCNF365Q.js +1 -0
- package/public/chunk-RT6EDRIH.js +1 -0
- package/public/chunk-RWM6K46M.js +1 -0
- package/public/chunk-SVVR6UMH.js +1 -0
- package/public/chunk-UI4U37MO.js +1 -0
- package/public/chunk-ULKYNDD3.js +16 -0
- package/public/chunk-UPZ5UT6G.js +1 -0
- package/public/chunk-UQFIBBEZ.js +1 -0
- package/public/chunk-UWUTC3BD.js +1 -0
- package/public/chunk-UZ6QYM64.js +1 -0
- package/public/{chunk-CP6FP6S2.js → chunk-VKHX6FUQ.js} +2 -52
- package/public/chunk-VM2MV3DC.js +1 -0
- package/public/chunk-VM6FMRHY.js +1 -0
- package/public/chunk-VYK3U745.js +1 -0
- package/public/chunk-VZJJWHRX.js +1 -0
- package/public/chunk-WHC4E7WY.js +1 -0
- package/public/chunk-WJKVPIP2.js +1 -0
- package/public/chunk-WOBQOQPU.js +1 -0
- package/public/chunk-WTGHGHPV.js +1 -0
- package/public/chunk-WY6UQ47H.js +1 -0
- package/public/chunk-X4ZEQSRY.js +4 -0
- package/public/{chunk-WVG4A2SW.js → chunk-XVO5247V.js} +1 -1
- package/public/chunk-XWNU2MFJ.js +1 -0
- package/public/chunk-YD3GJ2C6.js +1 -0
- package/public/chunk-YUEGV7HK.js +4 -0
- package/public/chunk-ZLRFR32W.js +1 -0
- package/public/chunk-ZZ5IX26U.js +40 -0
- package/public/chunk-ZZQEWRDE.js +1 -0
- package/public/index.html +2 -2
- package/public/main-VKVUZHHA.js +1 -0
- package/public/polyfills-5KWHJ7II.js +2 -0
- package/public/styles-7EFV5QBG.css +1 -0
- package/scripts/extract-plugin-alias.js +2 -53
- package/dist/core/spa/spa-html.service.d.ts +0 -5
- package/dist/core/spa/spa-html.service.js +0 -32
- package/dist/core/spa/spa-html.service.js.map +0 -1
- package/dist/core/ssl/ssl-cert-generator.service.d.ts +0 -15
- package/dist/core/ssl/ssl-cert-generator.service.js +0 -125
- package/dist/core/ssl/ssl-cert-generator.service.js.map +0 -1
- package/dist/modules/accessories/accessories.interfaces.d.ts +0 -94
- package/dist/modules/accessories/accessories.interfaces.js +0 -2
- package/dist/modules/accessories/accessories.interfaces.js.map +0 -1
- package/docs/matter-todo.md +0 -15
- package/docs/ssl-upload-pr.md +0 -103
- package/public/assets/matter.svg +0 -8
- package/public/chunk-2V4LIZUH.js +0 -1
- package/public/chunk-4UVYLGCZ.js +0 -1
- package/public/chunk-4WEBTV3N.js +0 -1
- package/public/chunk-4YNYBAGL.js +0 -1
- package/public/chunk-52X3LPJH.js +0 -1
- package/public/chunk-5R6AJZGA.js +0 -1
- package/public/chunk-5WSUQV2C.js +0 -1
- package/public/chunk-6DLZEENG.js +0 -1
- package/public/chunk-6INJQUJQ.js +0 -16
- package/public/chunk-6QWPGE2L.js +0 -1
- package/public/chunk-77S5CL3V.js +0 -1
- package/public/chunk-7BMHIIBT.js +0 -1
- package/public/chunk-7DFQDPRM.js +0 -1
- package/public/chunk-7WKZ7EMI.js +0 -1
- package/public/chunk-7WUBDTA6.js +0 -1
- package/public/chunk-AXMO2G45.js +0 -1
- package/public/chunk-B46EWHBD.js +0 -1
- package/public/chunk-B4AJQJMI.js +0 -1
- package/public/chunk-B75B723G.js +0 -1
- package/public/chunk-BB35SJH2.js +0 -2
- package/public/chunk-BFGRDXJK.js +0 -35
- package/public/chunk-BQRKHSGH.js +0 -1
- package/public/chunk-BXRCPOIK.js +0 -1
- package/public/chunk-BZ3XB6O4.js +0 -1
- package/public/chunk-CEMVTOZG.js +0 -4
- package/public/chunk-CMERG3AC.js +0 -1
- package/public/chunk-CMO4UANJ.js +0 -1
- package/public/chunk-CPT52C2F.js +0 -1
- package/public/chunk-D3Q5QTFY.js +0 -1
- package/public/chunk-ETWBSGPI.js +0 -1
- package/public/chunk-EWS4VSZB.js +0 -1
- package/public/chunk-F5AJLGGI.js +0 -1
- package/public/chunk-G2GGYHA2.js +0 -3
- package/public/chunk-G2KWTNHR.js +0 -1
- package/public/chunk-GDWF2NMA.js +0 -2
- package/public/chunk-GGTS2YBW.js +0 -4
- package/public/chunk-GJG6QZ7P.js +0 -1
- package/public/chunk-GU5F3H4I.js +0 -1
- package/public/chunk-H3BKW5W3.js +0 -1
- package/public/chunk-H4WASUXW.js +0 -1
- package/public/chunk-HUTYOGRH.js +0 -4
- package/public/chunk-IBUR2RIO.js +0 -1
- package/public/chunk-IDJSTIFL.js +0 -1
- package/public/chunk-IP6FLYVL.js +0 -1
- package/public/chunk-IPI77WYV.js +0 -1
- package/public/chunk-J2DDS6ED.js +0 -1
- package/public/chunk-J6ND4K5Q.js +0 -1
- package/public/chunk-J7UDRE66.js +0 -2
- package/public/chunk-JUQRWAIR.js +0 -1
- package/public/chunk-JWGWPSC6.js +0 -1
- package/public/chunk-JWRZMMRO.js +0 -68
- package/public/chunk-JWUEJV6S.js +0 -1
- package/public/chunk-JY5ZEEL2.js +0 -1
- package/public/chunk-KFPYUDGJ.js +0 -1
- package/public/chunk-KIRW7NMH.js +0 -1
- package/public/chunk-KTQBVBY4.js +0 -1
- package/public/chunk-LKJRMUOE.js +0 -1
- package/public/chunk-LVQWSVHA.js +0 -1
- package/public/chunk-LZ7S7WKH.js +0 -1
- package/public/chunk-MDHWQ5V2.js +0 -8
- package/public/chunk-MJP4XVUI.js +0 -1
- package/public/chunk-N5ONV6TU.js +0 -1
- package/public/chunk-N7UWTPTT.js +0 -1
- package/public/chunk-NAICVRJH.js +0 -1
- package/public/chunk-NCFDA3W4.js +0 -1
- package/public/chunk-NIS65GVY.js +0 -1
- package/public/chunk-OBV66CW4.js +0 -1
- package/public/chunk-OF2SRCQW.js +0 -5
- package/public/chunk-OOILCTQ3.js +0 -19
- package/public/chunk-PAZUAFSZ.js +0 -1
- package/public/chunk-PEUDPLH6.js +0 -1
- package/public/chunk-PRGOUVRO.js +0 -1
- package/public/chunk-PWCLNQBI.js +0 -1
- package/public/chunk-Q7EXN4JA.js +0 -1
- package/public/chunk-QE7VI3JB.js +0 -1
- package/public/chunk-QES44GQE.js +0 -1
- package/public/chunk-QMWN5KPC.js +0 -1
- package/public/chunk-R6MQZ2DW.js +0 -1
- package/public/chunk-RESZLSD7.js +0 -1
- package/public/chunk-RGWFM4OK.js +0 -1
- package/public/chunk-RI4GLH22.js +0 -1
- package/public/chunk-RP5JPYDI.js +0 -1
- package/public/chunk-RT25QBCQ.js +0 -1
- package/public/chunk-RVWZNTDJ.js +0 -1
- package/public/chunk-RXDY2NMJ.js +0 -1
- package/public/chunk-SDRRZFEQ.js +0 -1
- package/public/chunk-SPC2DLZR.js +0 -3
- package/public/chunk-TCUQZ3QO.js +0 -1
- package/public/chunk-TPUA4UIN.js +0 -1
- package/public/chunk-TQBVDY26.js +0 -1
- package/public/chunk-U24HWDVU.js +0 -1
- package/public/chunk-U2NM4L2D.js +0 -1
- package/public/chunk-UWYTPKKV.js +0 -1
- package/public/chunk-VKR3GG6K.js +0 -1
- package/public/chunk-VY7HWBNV.js +0 -5
- package/public/chunk-W55SP3LJ.js +0 -1
- package/public/chunk-WP3AD6W5.js +0 -1
- package/public/chunk-XNZA4UBO.js +0 -12
- package/public/chunk-XOPZ7U6G.js +0 -1
- package/public/chunk-XORPUWNC.js +0 -1
- package/public/chunk-XPFMPBEG.js +0 -1
- package/public/chunk-XTYMIZVV.js +0 -1
- package/public/chunk-Y3PXWRYQ.js +0 -1
- package/public/chunk-Y5WP66WK.js +0 -1
- package/public/chunk-YCQCWGBG.js +0 -1
- package/public/chunk-Z5PUNNUZ.js +0 -1
- package/public/chunk-ZCGZM7LU.js +0 -1
- package/public/chunk-ZNN6GWYK.js +0 -19
- package/public/main-O5PA2XOA.js +0 -1
- package/public/media/matter-P563JGDL.svg +0 -8
- package/public/polyfills-34U4WL3Z.js +0 -1
- package/public/styles-CT2LPGES.css +0 -1
package/public/chunk-OOILCTQ3.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import{a as bi}from"./chunk-H3BKW5W3.js";import{a as dt,b as Pe,c as $e,d as De}from"./chunk-CP6FP6S2.js";import{a as ue,b as hi,c as Vn,d as Mt}from"./chunk-6INJQUJQ.js";import{a as ci}from"./chunk-JWGWPSC6.js";import{a as ui}from"./chunk-XNZA4UBO.js";import{a as li,b as si,c as di}from"./chunk-BMOLDRJ3.js";import{a as ri}from"./chunk-CMO4UANJ.js";import{a as Ge}from"./chunk-H7F7H5MW.js";import{a as gi}from"./chunk-MDHWQ5V2.js";import{a as oi,c as Se,d as ct,e as qe,f as mt,g as pt,h as gt,i as ye,k as ut,l as _t,m as ft,w as ai,y as ht}from"./chunk-PRGOUVRO.js";import{a as Bn}from"./chunk-GU5F3H4I.js";import{a as wn}from"./chunk-IDJSTIFL.js";import{a as kn}from"./chunk-4UVYLGCZ.js";import{a as Sn}from"./chunk-BXRCPOIK.js";import{a as Mn}from"./chunk-U24HWDVU.js";import{a as En}from"./chunk-RI4GLH22.js";import{a as ve}from"./chunk-PWCLNQBI.js";import{a as _n}from"./chunk-QE7VI3JB.js";import{a as fn}from"./chunk-77S5CL3V.js";import{a as hn}from"./chunk-6DLZEENG.js";import{a as bn}from"./chunk-LZ7S7WKH.js";import{a as Cn}from"./chunk-LVQWSVHA.js";import{a as vn}from"./chunk-Y3PXWRYQ.js";import{a as xn}from"./chunk-Y5WP66WK.js";import{a as yn}from"./chunk-RP5JPYDI.js";import{a as ln}from"./chunk-7WKZ7EMI.js";import{a as sn}from"./chunk-BZ3XB6O4.js";import{a as dn}from"./chunk-U2NM4L2D.js";import{a as cn}from"./chunk-LKJRMUOE.js";import{a as mn}from"./chunk-W55SP3LJ.js";import{a as pn}from"./chunk-KFPYUDGJ.js";import{a as gn}from"./chunk-QES44GQE.js";import{a as un}from"./chunk-JWUEJV6S.js";import{a as St,b as bt,c as _i,d as fi}from"./chunk-BFGRDXJK.js";import{a as kt,c as mi,d as pi}from"./chunk-ZCGZM7LU.js";import{a as Ci}from"./chunk-BB35SJH2.js";import{a as nt,b as ot,c as at,d as rt,e as lt,f as st,g as Ie,m as q,n as le,o as Zt,p as ei,q as ti,r as ii,s as ni,t as xe}from"./chunk-OF2SRCQW.js";import{e as pe}from"./chunk-EWS4VSZB.js";import{C as Ce,D as Xt,b as Te,c as qt,e as he,j as Gt,l as be,n as Jt,q as Kt,t as et,u as tt,w as it,x as Qt,y as Yt}from"./chunk-TPUA4UIN.js";import{b as W}from"./chunk-OBV66CW4.js";import{E as L,F as j,H as U,J as fe,K as N,q as zt,w as Wt}from"./chunk-J7UDRE66.js";import{Ab as _,Ac as Ve,Bc as Rt,Cb as ee,Db as te,Dc as m,Eb as ie,Ec as g,F as Me,Fb as x,Fc as z,Gb as l,Hb as r,Ib as C,Jb as T,Kb as I,Lb as J,Mb as jt,Mc as Xe,Nb as Ht,Nc as We,O as Bt,Oc as Ze,R as Oe,Rb as V,Sb as ae,Ua as ce,Va as At,X as Ee,Xb as E,Ya as Ft,Yb as ne,Za as o,Zb as p,aa as b,d as me,ea as se,ec as Je,fc as Ke,ga as B,gc as Qe,ha as w,hc as Re,ic as ze,jc as G,kc as c,lc as k,mb as R,mc as y,n as He,nb as F,nc as _e,oc as Ye,pb as Lt,qb as Ut,rc as Q,sa as v,sc as Y,tb as wt,tc as X,uc as Ot,va as Nt,wc as oe,xc as de,yb as P,yc as ke,zb as u,zc as re}from"./chunk-HUTYOGRH.js";import{a as en}from"./chunk-PAZUAFSZ.js";import{a as tn}from"./chunk-ETWBSGPI.js";import{a as nn}from"./chunk-IBUR2RIO.js";import{a as on}from"./chunk-JUQRWAIR.js";import{a as an}from"./chunk-H4WASUXW.js";import{a as rn}from"./chunk-TCUQZ3QO.js";import{a as D,b as A,c as Dt,g as Z,h as S}from"./chunk-B4AJQJMI.js";var Fe=Z(dt(),1);var vi=(()=>{class i{jsonSchemaForm=b(bt,{host:!0,self:!0,optional:!0});jsfPatch=We(!1,{});constructor(){let e=this.jsonSchemaForm,n=e.jsf.buildLayout.bind(e.jsf);e.jsf.buildLayout=t=>{if(n(t),e.jsf.formValues&&this.jsfPatch())return this.fixNestedArrayLayout(e.jsf.layout,e.jsf.formValues)}}fixNestedArrayLayout(e,n){return this.fixArray(e,n,""),e}fixArray(e,n,t){if(Array.isArray(e)){let a=e.filter(f=>f.name!=="_bridge"),d=a.filter(f=>f.items&&Array.isArray(f.items)).flatMap(f=>f.items).filter(f=>f.dataType==="array"||f.arrayItem);a.concat(d).filter(f=>f.dataType==="array"||f.arrayItem).forEach(f=>{this.fixNestedArray(f,n,t)})}else this.fixNestedArray(e,n,t)}fixNestedArray(e,n,t){if(e.items&&Array.isArray(e.items)){let a=e.items.find(d=>d.type==="$ref");if(a){let d=e.items.filter(M=>M.type==="section"||M.type==="div"),h=d.length>0?d.reduce((M,$)=>M.id>$.id?M:$):this.getItemTemplateFromRef(a),f=this.getDataFromPointer(n,a.dataPointer.replace(t,""));if(f===null)return;if(Array.isArray(f)){for(;e.items.length-1<f.length;){let M=kt(h);M._id=pi("new_"),e.items.unshift(M)}f.forEach((M,$)=>{this.fixArray(e.items[$],M,a.dataPointer)})}else this.fixArray(e.items,n,a.dataPointer)}else this.fixArray(e.items,n,t);e.items.filter(d=>d.items&&Array.isArray(d.items)).forEach(d=>{this.fixArray(d.items,n,t)})}}getDataFromPointer(e,n){let t=e;return n.substring(1).split(/\//).filter(a=>a!=="-").forEach(a=>{try{t=t[a]}catch{t=null}}),t}getItemTemplateFromRef(e){let n={type:"section",items:[]},t=kt(e);return mi(t,n),t}static \u0275fac=function(n){return new(n||i)};static \u0275dir=Lt({type:i,selectors:[["","jsfPatch",""]],inputs:{jsfPatch:[1,"jsfPatch"]}})}return i})();function Tn(i,s){if(i&1){let e=V();l(0,"json-schema-form",1),E("onChanges",function(t){B(e);let a=p();return w(a.onChanges(t))})("isValid",function(t){B(e);let a=p();return w(a.validChange(t))}),r()}if(i&2){let e=p();x("jsfPatch",e.configSchema().fixArrays)("options",e.jsonFormOptions)("schema",e.configSchema().schema)("UISchema",e.configSchema().uiSchema)("layout",e.configSchema().layout)("form",e.configSchema().form)("data",e.currentData)("language",e.language)}}var Ct=(()=>{class i{$settings=b(W);availableLanguages=["de","en","es","fr","it","pt","zh"];configSchema=We.required({});data=We.required({});dataChange=Xe();dataChanged=Xe();isValid=Xe();currentData;language="en";jsonFormOptions={addSubmit:!1,loadExternalAssets:!1,returnEmptyFields:!1,setSchemaDefaults:!0,autocomplete:!1};constructor(){Nt(()=>{this.currentData=this.data()})}ngOnInit(){let e=this.$settings.env.lang.split("-")[0];this.availableLanguages.includes(e)&&(this.language=e)}onChanges(e){this.dataChange.emit(e),this.dataChanged.emit(e)}validChange(e){this.isValid.emit(e)}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["app-schema-form"]],inputs:{configSchema:[1,"configSchema"],data:[1,"data"]},outputs:{dataChange:"dataChange",dataChanged:"dataChanged",isValid:"isValid"},decls:2,vars:1,consts:[["framework","bootstrap-5",1,"ng-bs5-validate",3,"jsfPatch","options","schema","UISchema","layout","form","data","language"],["framework","bootstrap-5",1,"ng-bs5-validate",3,"onChanges","isValid","jsfPatch","options","schema","UISchema","layout","form","data","language"]],template:function(n,t){n&1&&(jt(0),u(1,Tn,1,8,"json-schema-form",0),Ht()),n&2&&(o(),_(t.configSchema().schema?1:-1))},dependencies:[_i,bt,vi],encapsulation:2})}return i})();var Ne=(()=>{class i{$api=b(N);$modal=b(le);$toastr=b(U);$translate=b(L);injector=b(se);openCorrectRestartModalForPlugin(e){return S(this,null,function*(){let n=yield this.getChildBridgesForPlugin(e);if(n.length){let t=R([{provide:ai,useValue:{bridges:n.map(a=>({name:a.name,username:a.username,matterSerialNumber:a.matterSerialNumber}))}}],this.injector);this.$modal.open(hi,{size:"lg",backdrop:"static",injector:t})}else this.$modal.open(ue,{size:"lg",backdrop:"static"})})}getChildBridgesForPlugin(e){return S(this,null,function*(){try{return(yield this.$api.get("/status/homebridge/child-bridges")).filter(t=>e===t.plugin)}catch(n){return console.error(n),this.$toastr.error(n.message,this.$translate.instant("toast.title_error")),[]}})}static \u0275fac=function(n){return new(n||i)};static \u0275prov=Ee({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var In=Dt({"../../../../i18n/bg.json":()=>en(),"../../../../i18n/ca.json":()=>tn(),"../../../../i18n/cs.json":()=>nn(),"../../../../i18n/de.json":()=>on(),"../../../../i18n/en.json":()=>an(),"../../../../i18n/es.json":()=>rn(),"../../../../i18n/fi.json":()=>ln(),"../../../../i18n/fr.json":()=>sn(),"../../../../i18n/he.json":()=>dn(),"../../../../i18n/hu.json":()=>cn(),"../../../../i18n/id.json":()=>mn(),"../../../../i18n/it.json":()=>pn(),"../../../../i18n/ja.json":()=>gn(),"../../../../i18n/ko.json":()=>un(),"../../../../i18n/mk.json":()=>_n(),"../../../../i18n/nl.json":()=>fn(),"../../../../i18n/no.json":()=>hn(),"../../../../i18n/pl.json":()=>bn(),"../../../../i18n/pt-BR.json":()=>Cn(),"../../../../i18n/pt.json":()=>vn(),"../../../../i18n/ru.json":()=>xn(),"../../../../i18n/sl.json":()=>yn(),"../../../../i18n/sv.json":()=>Bn(),"../../../../i18n/th.json":()=>wn(),"../../../../i18n/tr.json":()=>kn(),"../../../../i18n/uk.json":()=>Sn(),"../../../../i18n/zh-CN.json":()=>Mn(),"../../../../i18n/zh-TW.json":()=>En()});var Pn=["custompluginui"];function $n(i,s){i&1&&(l(0,"div",6),C(1,"i",18),r())}function Dn(i,s){if(i&1){let e=V();l(0,"div",8)(1,"app-schema-form",19),E("dataChanged",function(t){B(e);let a=p();return w(a.schemaFormUpdatedSubject.next(t))})("isValid",function(t){B(e);let a=p();return w(a.onIsValid(t))}),r()()}if(i&2){let e=p();o(),x("configSchema",e.schema)("data",e.pluginConfig[0])}}function Nn(i,s){if(i&1){let e=V();l(0,"button",24),E("click",function(){B(e);let t=p(2);return w(t.formActionSubject.next("cancel"))}),c(1),r()}if(i&2){let e=p(2);o(),y(" ",e.formCancelButtonLabel()," ")}}function An(i,s){if(i&1){let e=V();l(0,"button",25),E("click",function(){B(e);let t=p(2);return w(t.formActionSubject.next("submit"))}),c(1),r()}if(i&2){let e=p(2);x("disabled",!e.formValid()),o(),y(" ",e.formSubmitButtonLabel()," ")}}function Fn(i,s){if(i&1){let e=V();l(0,"div",8)(1,"app-schema-form",20),E("dataChange",function(t){B(e);let a=p();return w(a.formData.set(t))})("dataChanged",function(t){B(e);let a=p();return w(a.formUpdatedSubject.next(t))})("isValid",function(t){B(e);let a=p();return w(a.formValidEvent(t))}),r(),l(2,"div",21),u(3,Nn,2,1,"button",22),u(4,An,2,2,"button",23),r()()}if(i&2){let e=p();o(),x("configSchema",e.formSchema())("data",e.formData()),o(2),_(e.formCancelButtonLabel()?3:-1),o(),_(e.formSubmitButtonLabel()?4:-1)}}function Ln(i,s){i&1&&(l(0,"div",9),C(1,"i",18),r())}function Un(i,s){if(i&1&&(C(0,"i",26),m(1,"translate")),i&2){let e=p();G(e.formIsValid()?"fa-circle-check green-text":e.strictValidation()?"fa-circle-exclamation red-text":"fa-circle-exclamation orange-text"),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function jn(i,s){i&1&&(c(0),m(1,"translate")),i&2&&y(" ",g(1,1,"form.button_save")," ")}function Hn(i,s){i&1&&C(0,"i",17)}var xi=(()=>{class i{$activeModal=b(q);$api=b(N);$cb=b(Ne);$plugin=b(Be);$settings=b(W);$toastr=b(U);$translate=b(L);$ws=b(ve);modalData=b(qe);customPluginUiElementTarget=Ze("custompluginui",{});plugin=this.modalData.plugin;schema=this.modalData.schema;pluginConfig=this.modalData.pluginConfig??[];pluginAlias=v("",{});pluginType=v("platform",{});loading=v(!0,{});saveInProgress=v(!1,{});pluginSpinner=v(!1,{});saveButtonDisabled=v(!1,{});uiLoaded=v(!1,{});showSchemaForm=v(!1,{});formId=v(void 0,{});formSchema=v(void 0,{});formData=v(void 0,{});formSubmitButtonLabel=v(void 0,{});formCancelButtonLabel=v(void 0,{});formValid=v(!0,{});isFirstSave=v(!1,{});formIsValid=v(!0,{});strictValidation=v(!1,{});io;basePath="";iframe;schemaFormRecentlyUpdated=!1;schemaFormRecentlyRefreshed=!1;destroy$=new me;schemaFormUpdatedSubject=new me;schemaFormRefreshSubject=new me;formUpdatedSubject=new me;formActionSubject=new me;ngOnInit(){let e=this.schema,n=this.plugin;if(!e||!n){console.error("CustomPluginsComponent: schema or plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.pluginAlias.set(e.pluginAlias),this.pluginType.set(e.pluginType),this.strictValidation.set(e.strictValidation),this.pluginConfig.length===0&&this.isFirstSave.set(!0),this.io=this.$ws.connectToNamespace("plugins/settings-ui"),this.basePath=`/plugins/settings-ui/${encodeURIComponent(n.name)}`,this.initialize(),this.schemaFormRefreshSubject.pipe(Me(250),Oe(this.destroy$)).subscribe(this.schemaFormRefresh.bind(this)),this.schemaFormUpdatedSubject.pipe(Me(250),Bt(1),Oe(this.destroy$)).subscribe(t=>{this.schemaFormUpdated(t)}),this.formUpdatedSubject.pipe(Me(100),Bt(1),Oe(this.destroy$)).subscribe(this.formUpdated.bind(this)),this.formActionSubject.pipe(Oe(this.destroy$)).subscribe(this.formActionEvent.bind(this)),window.addEventListener("message",this.handleMessage,!1)}ngOnDestroy(){window.removeEventListener("message",this.handleMessage),this.destroy$.next(),this.destroy$.complete(),this.io&&this.io.end(),this.schemaFormRefreshSubject.complete(),this.schemaFormUpdatedSubject.complete(),this.formUpdatedSubject.complete(),this.formActionSubject.complete()}onIsValid(e){this.formIsValid.set(e)}formValidEvent(e){this.formValid.set(e)}savePluginConfig(e=!1){return S(this,null,function*(){let n=this.plugin;if(n){this.saveInProgress.set(!0);try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(n.name)}`,this.pluginConfig);if(this.saveInProgress.set(!1),e){if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(n,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(n.name)}}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}initialize(){return S(this,null,function*(){let e=this.plugin;e&&(this.io.socket.emit("start",e.name),this.io.socket.on("response",n=>{n.action="response",this.iframe.contentWindow.postMessage(n,fe.api.origin)}),this.io.socket.on("stream",n=>{n.action="stream",this.iframe.contentWindow.postMessage(n,fe.api.origin)}),this.io.socket.on("ready",()=>{this.loading.set(!1),this.loadUi()}))})}loadUi(){let e=this.plugin;e&&(this.iframe=this.customPluginUiElementTarget()?.nativeElement,this.iframe&&(this.iframe.src=`${fe.api.base+this.basePath}/index.html?origin=${encodeURIComponent(location.origin)}&v=${encodeURIComponent(e.installedVersion)}`))}handleMessage=e=>{if(e.origin===fe.api.origin||e.origin===window.origin)switch(e.data.action){case"loaded":this.injectDefaultStyles(e),this.confirmReady(e);break;case"request":{this.handleRequest(e);break}case"scrollHeight":this.setiFrameHeight(e),this.uiLoaded.set(!0);break;case"config.get":{this.requestResponse(e,this.getConfigBlocks());break}case"config.save":{this.requestResponse(e,this.savePluginConfig());break}case"config.update":{this.handleUpdateConfig(e,e.data.pluginConfig);break}case"config.schema":{this.requestResponse(e,this.schema);break}case"cachedAccessories.get":{this.handleGetCachedAccessories(e);break}case"cachedMatterAccessories.get":{this.handleGetCachedMatterAccessories(e);break}case"schema.show":{this.formEnd(),this.showSchemaForm.set(!0);break}case"schema.hide":{this.showSchemaForm.set(!1);break}case"form.create":{this.showSchemaForm.set(!1),this.formCreate(e.data.formId,e.data.schema,e.data.data,e.data.submitButton,e.data.cancelButton);break}case"form.end":{this.formEnd();break}case"user.lightingMode":{this.requestResponse(e,this.$settings.actualLightingMode);break}case"i18n.lang":{this.requestResponse(e,this.$translate.getCurrentLang());break}case"i18n.translations":{this.requestResponse(e,In(`../../../../i18n/${this.$translate.getCurrentLang()}.json`));break}case"close":{this.$activeModal.close();break}case"toast.success":this.$toastr.success(e.data.message,e.data.title);break;case"toast.error":this.$toastr.error(e.data.message,e.data.title);break;case"toast.warning":this.$toastr.warning(e.data.message,e.data.title);break;case"toast.info":this.$toastr.info(e.data.message,e.data.title);break;case"spinner.show":this.pluginSpinner.set(!0);break;case"spinner.hide":this.pluginSpinner.set(!1);break;case"button.save.disabled":this.saveButtonDisabled.set(!0);break;case"button.save.enabled":this.saveButtonDisabled.set(!1);break}};confirmReady(e){e.source.postMessage({action:"ready"},e.origin)}setiFrameHeight(e){this.iframe.style.height=`${e.data.scrollHeight+10}px`}handleRequest(e){this.io.socket.emit("request",e.data)}handleUpdateConfig(e,n){if(this.showSchemaForm()&&this.schemaFormRefreshSubject.next(void 0),!Array.isArray(n))return this.$toastr.error(this.$translate.instant("plugins.config.must_be_array"),this.$translate.instant("toast.title_error")),this.requestResponse(e,{message:this.$translate.instant("plugins.config.must_be_array")},!1);for(let t of n)if(typeof t!="object"||Array.isArray(t))return this.$toastr.error(this.$translate.instant("plugins.config.must_be_array_objects"),this.$translate.instant("toast.title_error")),this.requestResponse(e,{message:this.$translate.instant("plugins.config.must_be_array_objects")},!1);return this.updateConfigBlocks(n),this.requestResponse(e,this.getConfigBlocks())}requestResponse(e,n,t=!0){e.source.postMessage({action:"response",requestId:e.data.requestId,success:t,data:n},e.origin)}injectDefaultStyles(e){return S(this,null,function*(){let n=Array.from(window.document.body.classList).find(M=>M.startsWith("config-ui-x-")),t=window.document.body.classList.contains("dark-mode"),a=e.source;a.postMessage({action:"body-class",class:n},e.origin),a.postMessage({action:"body-class",class:"modal-content"},e.origin),t&&a.postMessage({action:"body-class",class:"dark-mode"},e.origin);let d=Array.from(document.querySelectorAll("link"));for(let M of d)if(M.getAttribute("rel")==="stylesheet"){let $=M.getAttribute("href"),ge=document.baseURI+($.startsWith("/")?$.substring(1):$);a.postMessage({action:"link-element",href:ge,rel:"stylesheet"},e.origin)}let h=Array.from(document.querySelectorAll("style"));for(let M of h)a.postMessage({action:"inline-style",style:M.innerHTML},e.origin);let f=`
|
|
2
|
-
body {
|
|
3
|
-
height: unset !important;
|
|
4
|
-
background-color: ${t?"#242424":"#FFFFFF"} !important;
|
|
5
|
-
color: ${t?"#FFFFFF":"#000000"} !important;
|
|
6
|
-
}
|
|
7
|
-
`;a.postMessage({action:"inline-style",style:f},e.origin)})}getConfigBlocks(){return this.pluginConfig}updateConfigBlocks(e){for(let n of e)n[this.pluginType()]=this.pluginAlias();this.pluginConfig=e}schemaFormUpdated(e){if(!this.iframe||!this.iframe.contentWindow)return;if(this.schemaFormRecentlyRefreshed){this.schemaFormRecentlyRefreshed=!1;return}this.schemaFormRecentlyUpdated=!0;let n=this.pluginConfig;if(n.length>0&&typeof e=="object"&&e!==null&&!Array.isArray(e)){let t=[...n];t[0]=e,this.pluginConfig=t}this.iframe.contentWindow.postMessage({action:"stream",event:"configChanged",data:this.pluginConfig},fe.api.origin)}schemaFormRefresh(){if(this.schemaFormRecentlyUpdated){this.schemaFormRecentlyUpdated=!1;return}this.schemaFormRecentlyRefreshed=!0,this.showSchemaForm()&&(this.showSchemaForm.set(!1),queueMicrotask(()=>{this.showSchemaForm.set(!0)}))}formCreate(e,n,t,a,d){return S(this,null,function*(){yield this.formEnd(),this.formId.set(e),this.formSchema.set(n),this.formData.set(t),this.formSubmitButtonLabel.set(a),this.formCancelButtonLabel.set(d)})}formEnd(){return S(this,null,function*(){this.formId()&&(this.formId.set(void 0),this.formSchema.set(void 0),this.formData.set(void 0),this.formSubmitButtonLabel.set(void 0),this.formCancelButtonLabel.set(void 0),yield new Promise(e=>setTimeout(e)))})}formUpdated(e){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId(),data:{formEvent:"change",formData:e}},fe.api.origin)}formActionEvent(e){this.iframe.contentWindow.postMessage({action:"stream",event:this.formId(),data:{formEvent:e,formData:this.formData()}},fe.api.origin)}handleGetCachedAccessories(e){return S(this,null,function*(){let n=this.plugin;if(n)try{let t=yield this.$api.get("/server/cached-accessories");return this.requestResponse(e,t.filter(a=>a.plugin===n.name))}catch(t){console.error("Failed to get cached accessories:",t),this.$toastr.error(this.$translate.instant("toast.title_error"))}})}handleGetCachedMatterAccessories(e){return S(this,null,function*(){let n=this.plugin;if(n)try{let t=yield this.$api.get("/server/matter-accessories");return this.requestResponse(e,t.filter(a=>a.plugin===n.name))}catch(t){console.error("Failed to get cached Matter accessories:",t),this.$toastr.error(this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],viewQuery:function(n,t){n&1&&Je(t.customPluginUiElementTarget,Pn,5),n&2&&Ke()},decls:24,vars:17,consts:[["custompluginui",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0",2,"min-height","110px"],[1,"text-center","primary-text"],["width","100%","height","1px;","sandbox","allow-same-origin allow-scripts allow-popups allow-popups-to-escape-sandbox allow-downloads allow-forms",2,"border","0"],[1,"card","card-body"],[1,"loading-overlay","text-center","primary-text","d-flex","align-items-center","justify-content-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[3,"dataChanged","isValid","configSchema","data"],[3,"dataChange","dataChanged","isValid","configSchema","data"],[1,"text-end","custom-form-action-buttons"],[1,"btn","btn-elegant"],[1,"btn","btn-primary",3,"disabled"],[1,"btn","btn-elegant",3,"click"],[1,"btn","btn-primary",3,"click","disabled"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"]],template:function(n,t){if(n&1){let a=V();l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),l(4,"button",4),m(5,"translate"),E("click",function(){return B(a),w(t.dismissModal())}),r()(),l(6,"div",5),u(7,$n,2,0,"div",6),C(8,"iframe",7,0),u(10,Dn,2,2,"div",8),u(11,Fn,5,4,"div",8),u(12,Ln,2,0,"div",9),r(),l(13,"div",10)(14,"div",11)(15,"button",12),E("click",function(){return B(a),w(t.dismissModal())}),c(16),m(17,"translate"),r()(),C(18,"div",13),l(19,"div",14),u(20,Un,2,6,"i",15),l(21,"button",16),E("click",function(){return B(a),w(t.savePluginConfig(!0))}),u(22,jn,2,3),u(23,Hn,1,0,"i",17),r()()()()}n&2&&(o(3),k(t.plugin.displayName||t.plugin.name),o(),x("disabled",t.saveInProgress()),P("aria-label",g(5,13,"form.button_close")),o(3),_(t.loading()?7:-1),o(3),_(t.uiLoaded()&&t.pluginConfig.length&&t.schema.singular&&t.showSchemaForm()?10:-1),o(),_(t.formId()?11:-1),o(),_(t.pluginSpinner()?12:-1),o(3),x("disabled",t.saveInProgress()),o(),y(" ",g(17,15,"form.button_close")," "),o(4),_(t.saveButtonDisabled()?-1:20),o(),x("disabled",t.saveInProgress()||t.saveButtonDisabled()),o(),_(t.saveInProgress()?-1:22),o(),_(t.saveInProgress()?23:-1))},dependencies:[Ct,fi,xe,j],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}.loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:16px;background-color:#ffffffb3} body.dark-mode .loading-overlay{background-color:#242424b3}.custom-form-action-buttons[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child{margin-right:2px}"]})}return i})();var yi=(()=>{class i{injector=b(se);$api=b(N);$modal=b(le);plugins={};openSettings(e,n){return S(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=R([{provide:qe,useValue:{plugin:e,schema:n,pluginConfig:t}}],this.injector);return this.$modal.open(this.plugins[e.name],{size:"lg",backdrop:"static",injector:a}).result.catch(()=>{})})}openCustomSettingsUi(e,n){return S(this,null,function*(){let t=yield this.loadPluginConfig(e.name),a=R([{provide:qe,useValue:{plugin:e,schema:n,pluginConfig:t}}],this.injector);return this.$modal.open(xi,{size:"lg",backdrop:"static",injector:a}).result.catch(()=>{})})}loadPluginConfig(e){return S(this,null,function*(){return this.$api.get(`/config-editor/plugin/${encodeURIComponent(e)}`)})}static \u0275fac=function(n){return new(n||i)};static \u0275prov=Ee({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var Ei=Z(li(),1),Vi=Z(si(),1),Ti=Z(di(),1),Ii=Z(Ge(),1);var Bi=Z(Ge(),1);var On=["pluginlogoutput"];function Rn(i,s){if(i&1){let e=V();l(0,"button",15),m(1,"translate"),m(2,"translate"),E("click",function(){B(e);let t=p();return w(t.restartChildBridges())}),C(3,"i",16),r()}if(i&2){let e=p();x("ngbTooltip",g(1,4,e.childBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))("openDelay",150)("disabled",e.midAction()),P("aria-label",g(2,6,e.childBridges.length>1?"child_bridge.restart_plural":"child_bridge.restart"))}}var wi=(()=>{class i{$activeModal=b(q);$api=b(N);$log=b(ui);$modal=b(le);$toastr=b(U);$translate=b(L);injector=b(se);modalData=b(mt);termTarget=Ze("pluginlogoutput",{});plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];midAction=v(!1,{});resizeEvent=new me;pluginAlias;ngOnInit(){this.getPluginLog()}ngOnDestroy(){this.$log.destroyTerminal()}onWindowResize(){this.resizeEvent.next(void 0)}restartChildBridges(){return S(this,null,function*(){this.midAction.set(!0);try{for(let e of this.childBridges)yield this.$api.put(`/server/restart/${e.username}`,{});this.$toastr.success(this.$translate.instant("plugins.manage.child_bridge_restart"),this.$translate.instant("toast.title_success")),this.midAction.set(!1)}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error")),this.midAction.set(!1)}})}downloadLogFile(){return S(this,null,function*(){this.midAction.set(!0);let e=R([{provide:oi,useValue:{title:this.$translate.instant("logs.title_download_log_file"),message:this.$translate.instant("logs.download_warning"),confirmButtonLabel:this.$translate.instant("form.button_download"),faIconClass:"fas fa-user-secret primary-text"}}],this.injector),n=this.$modal.open(ri,{size:"lg",backdrop:"static",injector:e});try{yield n.result;try{let t=yield this.$api.get("/platform-tools/hb-service/log/download?colour=yes",{observe:"response",responseType:"text"});if(!t.body)return;let a=t.body.split(`
|
|
8
|
-
`),d="",h=!1;a.forEach(f=>{if(f){if(h)if(f.match(/36m\[.*?\]/))h=!1;else{d+=`${f.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
|
|
9
|
-
`;return}f.includes(`36m[${this.pluginAlias}]`)&&(d+=`${f.replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"")}\r
|
|
10
|
-
`,h=!0)}}),this.plugin&&(0,Bi.saveAs)(new Blob([d],{type:"text/plain;charset=utf-8"}),`${this.plugin.name}.log.txt`),this.midAction.set(!1)}catch(t){let a;try{t instanceof Wt&&t.error?.text&&(a=JSON.parse(yield t.error.text()).message)}catch(d){console.error(d)}this.$toastr.error(a||this.$translate.instant("logs.download.error"),this.$translate.instant("toast.title_error")),this.midAction.set(!1)}}catch{this.midAction.set(!1)}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}getPluginLog(){return S(this,null,function*(){if(this.plugin)try{let e=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`);if(!this.plugin)return;this.pluginAlias=this.plugin.name==="homebridge-config-ui-x"?"Homebridge UI":e[0]?.name||this.plugin.name,this.$log.startTerminal(this.termTarget(),{},this.resizeEvent,this.pluginAlias)}catch(e){console.error(e);let n=e instanceof Error?e.error?.message||e.message:this.$translate.instant("toast.title_error");this.$toastr.error(n,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],viewQuery:function(n,t){n&1&&Je(t.termTarget,On,5),n&2&&Ke()},hostBindings:function(n,t){n&1&&E("resize",function(){return t.onWindowResize()},Ft)},decls:22,vars:21,consts:[["pluginlogoutput",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100","p-0"],[1,"w-100","bg-black","plugin-log-output","terminal","align-self-end","w-100","h-100","mb-0","p-2"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],["container","modal","placement","top","triggers","hover",1,"btn","btn-primary",3,"click","ngbTooltip","openDelay","disabled"],[1,"fas","fa-download"],["container","modal","placement","top","triggers","hover",1,"btn","btn-danger","ms-3",3,"ngbTooltip","openDelay","disabled"],["container","modal","placement","top","triggers","hover",1,"btn","btn-danger","ms-3",3,"click","ngbTooltip","openDelay","disabled"],[1,"fas","fa-power-off"]],template:function(n,t){if(n&1){let a=V();l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),l(4,"button",4),m(5,"translate"),E("click",function(){return B(a),w(t.dismissModal())}),r()(),l(6,"div",5),C(7,"div",6,0),r(),l(9,"div",7)(10,"div",8)(11,"button",9),m(12,"translate"),E("click",function(){return B(a),w(t.dismissModal())}),c(13),m(14,"translate"),r()(),C(15,"div",10),l(16,"div",11)(17,"button",12),m(18,"translate"),m(19,"translate"),E("click",function(){return B(a),w(t.downloadLogFile())}),C(20,"i",13),r(),u(21,Rn,4,8,"button",14),r()()()}n&2&&(o(3),k((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),x("disabled",t.midAction()),P("aria-label",g(5,11,"form.button_close")),o(7),x("disabled",t.midAction()),P("aria-label",g(12,13,"form.button_close")),o(2),y(" ",g(14,15,"form.button_close")," "),o(4),x("ngbTooltip",g(18,17,"logs.title_download_log_file"))("openDelay",150)("disabled",t.midAction()),P("aria-label",g(19,19,"logs.title_download_log_file")),o(4),_(t.childBridges.length?21:-1))},dependencies:[xe,j],encapsulation:2})}return i})();var ki=Z(dt(),1);var Et=()=>({app:"Homebridge v2"});function zn(i,s){i&1&&(l(0,"div",5),C(1,"i",12),r())}function Wn(i,s){i&1&&(l(0,"p",9),c(1,"All your plugins are marked as compatible with Homebridge v2."),r())}function qn(i,s){i&1&&(l(0,"p",9),c(1,"To ignore this warning and continue with the update, click continue below."),r())}function Gn(i,s){if(i&1&&(l(0,"p",9),c(1," Some of your plugins are not explicitly marked as compatible with Homebridge v2. This does "),l(2,"span",17),c(3,"not"),r(),c(4," necessarily mean that they won't work. We just can't guarantee that they will. "),r(),l(5,"p",9),c(6," For more information about this update, please see the "),l(7,"a",18),c(8,"wiki page"),r(),c(9,". "),r(),u(10,qn,2,0,"p",9)),i&2){let e=p(2);o(10),_(e.isUpdating?10:-1)}}function Jn(i,s){i&1&&(l(0,"div",19),c(1," Node.js Version"),C(2,"br"),l(3,"span",20),c(4),m(5,"translate"),r()(),l(6,"div",21),C(7,"i",22),r()),i&2&&(o(4),k(z(5,1,"status.readiness.node_yes",oe(4,Et))))}function Kn(i,s){i&1&&(l(0,"div",19),c(1," Node.js Version"),C(2,"br"),l(3,"span",20),c(4),m(5,"translate"),r(),C(6,"br"),l(7,"a",23),c(8),m(9,"translate"),C(10,"i",24),r()(),l(11,"div",21),C(12,"i",25),r()),i&2&&(o(4),k(z(5,2,"status.readiness.node_no",oe(7,Et))),o(4),y(" ",g(9,5,"plugins.compat.node_link")," "))}function Qn(i,s){i&1&&C(0,"i",26)}function Yn(i,s){i&1&&C(0,"i",27)}function Xn(i,s){if(i&1&&(l(0,"li",16)(1,"div",19),c(2),r(),l(3,"div",21),u(4,Qn,1,0,"i",26),u(5,Yn,1,0,"i",27),r()()),i&2){let e=s.$implicit;o(2),k(e.displayName),o(2),_(e.hb2Ready==="supported"?4:-1),o(),_(e.hb2Ready==="unknown"?5:-1)}}function Zn(i,s){if(i&1&&(l(0,"div",13),C(1,"img",14),r(),u(2,Wn,2,0,"p",9),u(3,Gn,11,1),l(4,"ul",15)(5,"li",16),u(6,Jn,8,5)(7,Kn,13,8),r(),te(8,Xn,6,3,"li",16,ee),r()),i&2){let e=p();o(2),_(e.allPluginsSupported()?2:-1),o(),_(e.allPluginsSupported()?-1:3),o(3),_(e.nodeReady()?6:7),o(2),ie(e.installedPlugins())}}function eo(i,s){if(i&1){let e=V();l(0,"button",28),m(1,"translate"),E("click",function(){B(e);let t=p();return w(t.closeModal("Dismiss"))}),c(2),m(3,"translate"),r()}i&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function to(i,s){if(i&1){let e=V();l(0,"button",28),m(1,"translate"),E("click",function(){B(e);let t=p();return w(t.closeModal("Dismiss"))}),c(2),m(3,"translate"),r()}i&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function io(i,s){if(i&1){let e=V();l(0,"button",29),E("click",function(){B(e);let t=p();return w(t.closeModal("update"))}),c(1),m(2,"translate"),r()}if(i&2){let e=p();x("disabled",e.loading()),o(),y(" ",g(2,2,"form.button_continue")," ")}}var Si=(()=>{class i{$activeModal=b(q);$api=b(N);$settings=b(W);$toastr=b(U);$translate=b(L);$ws=b(ve);io;modalData=b(ht);isUpdating=this.modalData.isUpdating;skipIfCompatible=this.modalData.skipIfCompatible;loading=v(!0,{});installedPlugins=v([],{});allPluginsSupported=v(!0,{});nodeReady=v(!1,{});ngOnInit(){this.initialize()}initialize(){return S(this,null,function*(){this.io=this.$ws.getExistingNamespace("status"),this.io.socket.connected&&(yield this.checkHomebridgeUiVersion()),yield this.loadInstalledPlugins(),this.loading.set(!1)})}checkHomebridgeUiVersion(){return S(this,null,function*(){try{let{nodeVersion:e}=yield He(this.io.request("get-homebridge-server-info"));this.nodeReady.set((0,ki.satisfies)(e,">=20"))}catch(e){console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}loadInstalledPlugins(){return S(this,null,function*(){this.installedPlugins.set([]),this.loading.set(!0);let e=this.$settings.env.homebridgeVersion.split(".")[0];try{let t=(yield this.$api.get("/plugins")).filter(a=>a.name!=="homebridge-config-ui-x").map(a=>{let d=a.engines?.homebridge?.split("||").map(f=>f.trim())||[],h=e==="2"?"hide":d.some(f=>f.startsWith("^2")||f.startsWith(">=2"))?"supported":"unknown";return h==="unknown"&&this.allPluginsSupported.set(!1),A(D({},a),{hb2Ready:h})}).sort((a,d)=>a.name.localeCompare(d.name));this.installedPlugins.set(t),this.skipIfCompatible&&this.installedPlugins().length===0&&this.$activeModal.close("update")}catch(n){console.error(n),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugins"),this.$translate.instant("toast.title_error"))}})}closeModal(e){this.$activeModal.close(e)}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:17,vars:12,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"w-100","text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],["ngSrc","assets/hb-icon.png","alt","","height","100","width","100",1,"plugin-icon-card"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"fw-bold"],["href","https://github.com/homebridge/homebridge/wiki/Updating-To-Homebridge-v2.0","target","_blank"],[1,"text-start","flex-grow-1"],[1,"grey-text"],[1,"ms-3"],[1,"fas","fa-check-circle","green-text","fa-xl"],["href","https://github.com/homebridge/homebridge/wiki/How-To-Update-Node.js","target","_blank","rel","noopener noreferrer",1,"small"],[1,"fa","fa-external-link-alt"],[1,"fas","fa-exclamation-circle","orange-text","fa-xl"],["aria-label","The developer has specifically marked this plugin as compatible with Homebridge v2.",1,"fas","fa-check-circle","green-text","fa-xl"],["aria-label","The developer has not specifically marked this plugin as compatible with Homebridge v2, but it may still work.",1,"fas","fa-question-circle","orange-text","fa-xl"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"]],template:function(n,t){n&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),r(),l(5,"button",3),m(6,"translate"),E("click",function(){return t.closeModal("Dismiss")}),r()(),l(7,"div",4),u(8,zn,2,0,"div",5)(9,Zn,10,3),r(),l(10,"div",6)(11,"div",7),u(12,eo,4,6,"button",8),r(),l(13,"div",9),u(14,to,4,6,"button",8),r(),l(15,"div",10),u(16,io,3,4,"button",11),r()()()),n&2&&(o(3),k(z(4,6,"status.readiness.title",oe(11,Et))),o(2),P("aria-label",g(6,9,"form.button_close")),o(3),_(t.loading()?8:9),o(4),_(t.isUpdating?12:-1),o(2),_(t.isUpdating?-1:14),o(2),_(t.isUpdating?16:-1))},dependencies:[zt,j],encapsulation:2})}return i})();var no=(i,s)=>({iconStar:i,iconThumbsUp:s}),Pi=(i,s,e,n)=>({"fa-arrow-alt-circle-down":i,"fa-code-compare":s,"fa-arrow-alt-circle-up":e,"fa-trash":n}),oo=()=>["homebridge","homebridge-config-ui-x"],ao=i=>({pluginName:i});function ro(i,s){i&1&&(l(0,"p",13),c(1),m(2,"translate"),r()),i&2&&(o(),k(g(2,1,"plugins.settings.restart_required")))}function lo(i,s){i&1&&(l(0,"p",13),c(1),m(2,"translate"),r()),i&2&&(o(),k(g(2,1,"restart.child_bridges")))}function so(i,s){if(i&1&&(C(0,"p",12),m(1,"translate"),u(2,ro,3,3,"p",13),u(3,lo,3,3,"p",13)),i&2){let e=p(3);x("innerHTML",z(1,3,"plugins.manage.github_support",ke(6,no,e.iconStar,e.iconThumbsUp)),ce),o(2),_(e.childBridges().length===0?2:-1),o(),_(e.childBridges().length>0?3:-1)}}function co(i,s){if(i&1&&(l(0,"div",9),C(1,"i",10),r(),l(2,"h5",11),c(3),r(),u(4,so,4,9)),i&2){let e=p(2);o(3),Ye("",e.pastTenseVerb(),": ",e.pluginDisplayName," (",e.targetVersionPretty(),")"),o(),_(e.isDisabled?-1:4)}}function mo(i,s){if(i&1&&(l(0,"div",6),u(1,co,5,4),r()),i&2){let e=p();o(),_(e.justUpdatedPlugin()?1:-1)}}function po(i,s){if(i&1&&(l(0,"div",7)(1,"div",9),C(2,"i",14),r(),l(3,"ul",15)(4,"li"),c(5),m(6,"translate"),r(),l(7,"li"),c(8),m(9,"translate"),r()(),l(10,"pre",16),c(11),r()()),i&2){let e=p();o(2),G(Ve(10,Pi,e.action==="Install",e.action==="Update"&&e.installedVersion,e.action==="Update"&&!e.installedVersion,e.action==="Uninstall")),o(3),k(g(6,6,"plugins.manage.online_updates")),o(3),k(g(9,8,"plugins.manage.manual_update_command")),o(3),_e(`hb-service stop
|
|
11
|
-
npm install -g `,e.pluginName,"@",e.targetVersion,`
|
|
12
|
-
hb-service start`)}}function go(i,s){if(i&1&&(l(0,"span"),c(1),r()),i&2){let e=p(3);o(),y("v",e.installedVersion," \u2192 ")}}function uo(i,s){if(i&1&&(l(0,"h5",18),u(1,go,2,1,"span"),c(2),r()),i&2){let e=p(2);o(),_(e.installedVersion?1:-1),o(),y(" ",e.targetVersionPretty()," ")}}function _o(i,s){i&1&&(l(0,"div",26),C(1,"i",27),r())}function fo(i,s){if(i&1&&C(0,"markdown",28),i&2){let e=p(4);x("data",e.versionNotes())}}function ho(i,s){i&1&&(l(0,"div",29),c(1),m(2,"translate"),r()),i&2&&(o(),k(g(2,1,"plugins.manage.notes_none")))}function bo(i,s){if(i&1&&(l(0,"div",29),c(1),m(2,"translate"),C(3,"br"),c(4),m(5,"translate"),C(6,"br"),c(7),m(8,"translate"),C(9,"br"),r()),i&2){let e=p(6);o(),y(" ",z(2,3,"plugins.manage.notes_beta_1",de(10,ao,e.pluginDisplayName))),o(3),y(" ",g(5,6,"plugins.manage.notes_beta_2")),o(3),y(" ",g(8,8,"plugins.manage.notes_beta_3"))}}function Co(i,s){i&1&&(l(0,"div",29),c(1),m(2,"translate"),r()),i&2&&(o(),k(g(2,1,"plugins.manage.notes_latest")))}function vo(i,s){if(i&1&&u(0,bo,10,12,"div",29)(1,Co,3,3,"div",29),i&2){let e=p(5);_(e.targetVersion.includes("beta")||e.targetVersion.includes("alpha")||e.targetVersion.includes("next")?0:1)}}function xo(i,s){if(i&1&&u(0,ho,3,3,"div",29)(1,vo,2,1),i&2){let e=p(4);_(e.versionNotesShow()?0:1)}}function yo(i,s){if(i&1&&u(0,fo,1,1,"markdown",28)(1,xo,2,1),i&2){let e=p(3);_(e.versionNotes()?0:1)}}function Bo(i,s){if(i&1&&(l(0,"div",25),u(1,_o,2,0,"div",26)(2,yo,2,1),r()),i&2){let e=p(2);o(),_(e.action==="Update"&&!e.versionNotesLoaded()?1:2)}}function wo(i,s){i&1&&(l(0,"div",26),C(1,"i",27),r())}function ko(i,s){if(i&1&&C(0,"markdown",28),i&2){let e=p(4);x("data",e.fullChangelog())}}function So(i,s){i&1&&(C(0,"div",31),m(1,"translate")),i&2&&x("innerHTML",g(1,1,"plugins.manage.changelog_none"),ce)}function Mo(i,s){if(i&1&&u(0,ko,1,1,"markdown",28)(1,So,2,3,"div",31),i&2){let e=p(3);_(e.fullChangelog()?0:1)}}function Eo(i,s){if(i&1&&(l(0,"div",30),u(1,wo,2,0,"div",26)(2,Mo,2,1),r()),i&2){let e=p(2);o(),_(e.action==="Update"&&!e.fullChangelogLoaded()?1:2)}}function Vo(i,s){if(i&1){let e=V();l(0,"div",24)(1,"p",32)(2,"span",33),c(3),m(4,"translate"),r(),l(5,"a",34),E("click",function(){B(e);let t=p(2);return w(t.downloadBackupFile())}),C(6,"i",35),r()(),l(7,"p",36),c(8),m(9,"translate"),r()()}i&2&&(o(3),k(g(4,2,"plugins.manage.backup")),o(5),k(g(9,4,"plugins.manage.hb_restart")))}function To(i,s){if(i&1){let e=V();l(0,"div",6)(1,"div",9),C(2,"i",17),r(),u(3,uo,3,2,"h5",18),l(4,"ul",19,0),X("activeIdChange",function(t){B(e);let a=p();return Y(a.releaseNotesTab,t)||(a.releaseNotesTab=t),w(t)}),l(6,"li",20)(7,"button",21),c(8),m(9,"translate"),r(),wt(10,Bo,3,1,"ng-template",22),r(),l(11,"li",20)(12,"button",21),c(13),m(14,"translate"),r(),wt(15,Eo,3,1,"ng-template",22),r()(),C(16,"div",23),u(17,Vo,10,6,"div",24),r()}if(i&2){let e=Qe(5),n=p();o(2),G(Ve(14,Pi,n.action==="Install"&&!n.installedVersion,n.action==="Install"&&n.installedVersion,n.action==="Update",n.action==="Uninstall")),o(),_(n.latestVersion?3:-1),o(),Q("activeId",n.releaseNotesTab),o(2),x("ngbNavItem",1),o(2),k(g(9,10,"plugins.manage.notes")),o(3),x("ngbNavItem",2),o(2),k(g(14,12,"plugins.manage.changelog")),o(3),x("ngbNavOutlet",e),o(),_(oe(19,oo).includes(n.pluginName)?17:-1)}}function Io(i,s){if(i&1){let e=V();l(0,"button",43),m(1,"translate"),E("click",function(){B(e);let t=p(2);return w(t.dismissModal())}),c(2),m(3,"translate"),r()}i&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function Po(i,s){if(i&1){let e=V();l(0,"button",43),m(1,"translate"),E("click",function(){B(e);let t=p(2);return w(t.dismissModal())}),c(2),m(3,"translate"),r()}i&2&&(P("aria-label",g(1,2,"form.button_close")),o(2),y(" ",g(3,4,"form.button_close")," "))}function $o(i,s){if(i&1){let e=V();l(0,"button",44),E("click",function(){B(e);let t=p(2);return w(t.update())}),c(1),m(2,"translate"),r()}i&2&&(o(),k(g(2,1,"form.button_continue")))}function Do(i,s){if(i&1){let e=V();l(0,"button",44),E("click",function(){B(e);let t=p(2);return w(t.childBridges().length>0?t.onRestartChildBridgeClick():t.onRestartHomebridgeClick())}),c(1),m(2,"translate"),r()}i&2&&(o(),y(" ",g(2,1,"menu.tooltip_restart")," "))}function No(i,s){if(i&1){let e=V();l(0,"button",45),E("click",function(){B(e);let t=p(2);return w(t.downloadLogFile())}),c(1),m(2,"translate"),r()}i&2&&(o(),k(g(2,1,"form.button_download")))}function Ao(i,s){if(i&1&&(l(0,"div",8)(1,"div",37),u(2,Io,4,6,"button",38),r(),l(3,"div",39),u(4,Po,4,6,"button",38),r(),l(5,"div",40),u(6,$o,3,3,"button",41),u(7,Do,3,3,"button",41),u(8,No,3,3,"button",42),r()()),i&2){let e=p();o(2),_(!e.justUpdatedPlugin()&&e.onlineUpdateOk()||e.justUpdatedPlugin()&&(!e.isDisabled||e.actionFailed())?2:-1),o(2),_(e.justUpdatedPlugin()&&e.isDisabled&&!e.actionFailed()||!e.onlineUpdateOk()?4:-1),o(2),_(e.onlineUpdateOk()&&e.releaseNotesShow()?6:-1),o(),_(e.justUpdatedPlugin()&&!e.isDisabled?7:-1),o(),_(e.actionFailed()?8:-1)}}var Ae=(()=>{class i{$activeModal=b(q);$api=b(N);$backup=b(bi);$modal=b(le);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(L);$ws=b(ve);injector=b(se);modalData=b(ye);pluginName=this.modalData.pluginName;pluginDisplayName=this.modalData.pluginDisplayName??"";targetVersion=this.modalData.targetVersion??"";latestVersion=this.modalData.latestVersion??"";installedVersion=this.modalData.installedVersion??"";isDisabled=this.modalData.isDisabled??!1;action=this.modalData.action;onRefreshPluginList=this.modalData.onRefreshPluginList??(()=>{});initialIsConfigured=this.modalData.isConfigured??!1;targetVersionPretty=v("",{});actionComplete=v(!1,{});actionFailed=v(!1,{});justUpdatedPlugin=v(!1,{});updateToBeta=v(!1,{});childBridges=v([],{});pastTenseVerb=v("",{});onlineUpdateOk=v(!1,{});versionNotes=v("",{});versionNotesLoaded=v(!1,{});versionNotesShow=v(!1,{});fullChangelog=v("",{});fullChangelogLoaded=v(!1,{});releaseNotesShow=v(!1,{});isConfigured=v(this.initialIsConfigured,{});presentTenseVerb;releaseNotesTab=1;iconStar='<i class="fas fa-star primary-text"></i>';iconThumbsUp='<i class="fas fa-thumbs-up primary-text"></i>';io;toastSuccess;term=new Ti.Terminal;termTarget;fitAddon=new Ei.FitAddon;webLinksAddon=new Vi.WebLinksAddon;errorLog="";constructor(){this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}ngOnInit(){let e=this.targetVersion,n=this.latestVersion;switch(this.targetVersionPretty.set(e==="latest"?`v${n}`:/^\d/.test(e)?`v${e}`:e),this.io=this.$ws.connectToNamespace("plugins"),this.termTarget=document.getElementById("plugin-log-output"),this.term.open(this.termTarget),this.fitAddon.fit(),this.io.socket.on("stdout",t=>{this.term.write(t);let a=t.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();a&&(this.errorLog+=`${a}\r
|
|
13
|
-
`)}),this.toastSuccess=this.$translate.instant("toast.title_success"),this.onlineUpdateOk.set(!(["homebridge","homebridge-config-ui-x"].includes(this.pluginName)&&this.$settings.env.platform==="win32")),this.action){case"Install":this.install(),this.presentTenseVerb=this.$translate.instant("plugins.manage.install"),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.installed"));break;case"Uninstall":this.uninstall(),this.presentTenseVerb=this.$translate.instant("plugins.manage.uninstall"),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.uninstalled"));break;case"Update":switch(this.targetVersion){case"latest":this.updateToBeta.set(!1);break;case"alpha":case"beta":case"test":this.updateToBeta.set(!0);break}this.presentTenseVerb=this.$translate.instant("plugins.manage.update"),this.pastTenseVerb.set(this.$translate.instant("plugins.manage.updated")),this.getVersionNotes();break}}ngOnDestroy(){this.io.end()}update(){if(this.releaseNotesShow.set(!1),this.versionNotes.set(""),this.fullChangelog.set(""),!!this.onlineUpdateOk()){if(this.pluginName==="homebridge"){this.upgradeHomebridge();return}this.io.request("update",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>S(this,null,function*(){if(this.pluginName==="homebridge-config-ui-x")try{this.$settings.webroot&&this.$settings.webroot!=="/"&&(yield this.$api.put("/server/webroot",{webroot:this.$settings.webroot})),yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),window.location.href="restart"}catch(e){console.error("Failed to update webroot or set restart flag:",e),window.location.href="restart"}else{try{yield this.getChildBridges()}catch(n){console.error(n)}let e=this.onRefreshPluginList;e&&e(),!this.isConfigured()&&this.childBridges().length===0?(this.$toastr.success(`${this.pastTenseVerb()} ${this.pluginName}`,this.toastSuccess),this.$activeModal.close(),this.$router.navigate(["/plugins"])):(this.actionComplete.set(!0),this.justUpdatedPlugin.set(!0),this.$router.navigate(["/plugins"]))}}),error:e=>{this.actionFailed.set(!0),console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}}onRestartHomebridgeClick(){this.$router.navigate(["/restart"]),this.$activeModal.close()}onRestartChildBridgeClick(){return S(this,null,function*(){try{for(let n of this.childBridges())yield this.$api.put(`/server/restart/${n.username}`,{});let e=R([{provide:mt,useValue:{plugin:{name:this.pluginName,displayName:this.pluginDisplayName},childBridges:this.childBridges()}}],this.injector);this.$modal.open(wi,{size:"xl",backdrop:"static",injector:e})}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.manage.child_bridge_restart_failed"),this.$translate.instant("toast.title_error"))}finally{this.$activeModal.close()}})}downloadLogFile(){let e=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,Ii.saveAs)(e,`${this.pluginName}-error.log`)}downloadBackupFile(){return S(this,null,function*(){try{yield this.$backup.downloadBackup()}catch(e){console.error(e);let n=e instanceof Error?e.message:this.$translate.instant("toast.title_error");this.$toastr.error(n,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}install(){if(this.onlineUpdateOk()){if(this.pluginName==="homebridge"){this.upgradeHomebridge();return}this.io.request("install",{name:this.pluginName,version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>S(this,null,function*(){this.$toastr.success(`${this.pastTenseVerb()} ${this.pluginName}`,this.toastSuccess);let e=this.onRefreshPluginList;e&&e();try{let t=(yield this.$api.get("/plugins")).find(a=>a.name===this.pluginName);this.$activeModal.close({action:"just-installed",plugin:t})}catch(n){console.error("Failed to fetch updated plugin data:",n),this.$activeModal.close({action:"just-installed",pluginName:this.pluginName})}}),error:e=>{this.actionFailed.set(!0),console.error(e),this.$router.navigate(["/plugins"]),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}}uninstall(){this.io.request("uninstall",{name:this.pluginName,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>{let e=this.onRefreshPluginList;e&&e(),this.$activeModal.close(),this.$router.navigate(["/plugins"]),this.$modal.open(ue,{size:"lg",backdrop:"static"})},error:e=>{this.actionFailed.set(!0),console.error(e),this.$toastr.error(e.message,this.$translate.instant("toast.title_error"))}})}upgradeHomebridge(){return S(this,null,function*(){let e="update";if(Number(this.installedVersion.split(".")[0])<2&&["2","alpha","beta"].includes(this.targetVersion.split(".")[0])){let n=R([{provide:ht,useValue:{isUpdating:!0,skipIfCompatible:!1}}],this.injector);e=yield this.$modal.open(Si,{size:"lg",backdrop:"static",injector:n}).result}e==="update"?this.io.request("homebridge-update",{version:this.targetVersion,termCols:this.term.cols,termRows:this.term.rows}).subscribe({next:()=>S(this,null,function*(){this.$activeModal.close();try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),this.$router.navigate(["/restart"])}catch(n){console.error(n),this.$router.navigate(["/restart"])}}),error:n=>{this.actionFailed.set(!0),console.error(n);let t=n instanceof Error?n.message:this.$translate.instant("toast.title_error");this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.close()}}):this.$activeModal.close()})}getVersionNotes(){return S(this,null,function*(){this.releaseNotesShow.set(!0);try{let e=yield this.$api.get(`/plugins/release/${encodeURIComponent(this.pluginName)}`);this.fullChangelog.set(e.changelog),e.latestVersion&&this.targetVersion==="latest"&&this.targetVersionPretty.set(e.latestVersion);let n=this.targetVersion,t=this.latestVersion;!(["beta","alpha","test","next"].includes(n)||n.includes("-"))&&(n==="latest"||n===t)?(this.versionNotesShow.set(!0),e.notes&&this.versionNotes.set(e.notes)):(this.versionNotesShow.set(!1),this.versionNotesLoaded.set(!0))}catch(e){console.error("Error loading release notes:",e)}this.fullChangelogLoaded.set(!0),this.versionNotesLoaded.set(!0)})}getChildBridges(){return S(this,null,function*(){let n=(yield this.$api.get("/status/homebridge/child-bridges")).filter(t=>this.pluginName===t.plugin);this.childBridges.set(n)})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:11,vars:9,consts:[["nav","ngbNav"],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],["id","plugin-log-output",1,"modal-body",3,"hidden"],[1,"modal-body","plugin-modal-body"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"mb-3","text-center"],[1,"far","fa-check-circle","primary-text",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"mb-3","text-center","grey-text",3,"innerHTML"],[1,"text-center","mb-0"],[1,"fas","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"p-2","mb-0"],[1,"far","primary-text",2,"font-size","75px"],[1,"mb-4","text-center"],["ngbNav","",1,"nav-tabs","px-0",3,"activeIdChange","activeId"],[1,"w-50","m-0",3,"ngbNavItem"],["ngbNavLink","",1,"w-100","release-tab"],["ngbNavContent",""],[1,"mt-2",3,"ngbNavOutlet"],[1,"mt-4","mb-0"],[1,"alert","release-notes","p-3","pb-1","my-0"],[1,"w-100","text-center","primary-text","mt-3","mb-4"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"plugin-md",3,"data"],[1,"w-100","text-center","grey-text","mt-3","mb-4"],[1,"alert","release-notes","p-3","pb-1","my-0",2,"border-top-left-radius","0","border-top-right-radius","0"],[1,"w-100","text-center","grey-text","mt-3","mb-4",3,"innerHTML"],[1,"w-100","text-center","mb-1","small"],[1,"grey-text"],["href","javascript:void(0)",3,"click"],[1,"fa","fa-download","mx-1"],[1,"w-100","text-center","mb-0","small","grey-text"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button",1,"btn","btn-primary"],[1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button",1,"btn","btn-primary",3,"click"],[1,"btn","btn-primary",3,"click"]],template:function(n,t){n&1&&(l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),l(4,"button",4),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),C(6,"div",5),u(7,mo,2,1,"div",6),u(8,po,12,15,"div",7),u(9,To,18,20,"div",6),u(10,Ao,9,5,"div",8),r()),n&2&&(o(3),k(t.pluginDisplayName),o(),P("aria-label",g(5,7,"form.button_close")),o(2),x("hidden",!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()),o(),_(t.actionComplete()?7:-1),o(),_(t.onlineUpdateOk()?-1:8),o(),_(t.releaseNotesShow()&&!t.actionComplete()&&t.onlineUpdateOk()?9:-1),o(),_(!t.onlineUpdateOk()||t.actionComplete()||t.releaseNotesShow()||t.actionFailed()?10:-1))},dependencies:[$e,Pe,De,ni,ti,ei,Zt,ii,j],styles:[".plugin-modal-body[_ngcontent-%COMP%] .release-notes[_ngcontent-%COMP%]{box-shadow:none;max-height:39vh;overflow:auto;border:0;border-top-left-radius:0;border-top-right-radius:0}.plugin-modal-body[_ngcontent-%COMP%] .release-tab[_ngcontent-%COMP%]{font-size:1rem;color:#d3d3d3}.plugin-modal-body[_ngcontent-%COMP%] .tab-content[_ngcontent-%COMP%]{border-radius:0 0 20px 20px} .nav-tabs{--bs-nav-tabs-border-width: 0} .plugin-md{text-align:left;font-size:.85rem;word-wrap:break-word} .plugin-md img{max-width:100%} .plugin-md h1{font-size:1.3rem;font-weight:300} .plugin-md h2{font-size:1.2rem;font-weight:300} .plugin-md h3{font-size:1.1rem;font-weight:300} .plugin-md h4{font-size:1rem;font-weight:300} .plugin-md h5{font-size:.9rem;font-weight:300} .plugin-md pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}"]})}return i})();var $i=Z(dt(),1);var Fo=()=>["homebridge","homebridge-config-ui-x"];function Lo(i,s){i&1&&(l(0,"div",5),C(1,"i",12),r())}function Uo(i,s){if(i&1&&(C(0,"i",20),l(1,"h6",21),c(2),m(3,"translate"),r(),l(4,"p",21),c(5),m(6,"translate"),l(7,"span",22),c(8),r()()),i&2){let e=p(2);o(2),k(g(3,3,"plugins.manage.select_version")),o(3),y(" ",g(6,5,"plugins.status_installed"),": "),o(3),y("v",e.plugin==null?null:e.plugin.installedVersion)}}function jo(i,s){i&1&&(C(0,"i",23),l(1,"h6",21),c(2),m(3,"translate"),r()),i&2&&(o(2),k(g(3,1,"plugins.manage.select_version")))}function Ho(i,s){i&1&&C(0,"i",26)}function Oo(i,s){i&1&&C(0,"i",27)}function Ro(i,s){if(i&1){let e=V();l(0,"li",14)(1,"span",8),c(2),C(3,"br"),l(4,"small",24),c(5),r()(),l(6,"button",25),E("click",function(){let t=B(e).$implicit,a=p(2);return w(a.doInstall(t.version))}),u(7,Ho,1,0,"i",26)(8,Oo,1,0,"i",27),r()()}if(i&2){let e=s.$implicit,n=p(2);o(2),y(" ",e.tag," "),o(3),y("v",e.version),o(2),_((n.plugin==null?null:n.plugin.installedVersion)===e.version?7:8)}}function zo(i,s){i&1&&c(0," \u2713 ")}function Wo(i,s){if(i&1&&(l(0,"option",17),c(1),u(2,zo,1,0),r()),i&2){let e=s.$implicit,n=p(2);x("value",e.version)("selected",n.versionSelect==e.version),o(),y(" v",e.version," "),o(),_(e.version==(n.plugin==null?null:n.plugin.installedVersion)?2:-1)}}function qo(i,s){i&1&&C(0,"i",26)}function Go(i,s){i&1&&C(0,"i",27)}function Jo(i,s){if(i&1){let e=V();l(0,"button",25),E("click",function(){B(e);let t=p(2);return w(t.doInstall(t.versionSelect))}),u(1,qo,1,0,"i",26)(2,Go,1,0,"i",27),r()}if(i&2){let e=p(2);o(),_((e.plugin==null?null:e.plugin.installedVersion)===e.versionSelect?1:2)}}function Ko(i,s){if(i&1&&(l(0,"ul",19)(1,"li",28)(2,"div",8),c(3),m(4,"translate"),C(5,"br"),l(6,"span",29),c(7),m(8,"translate"),r()(),l(9,"div",30),C(10,"input",31),m(11,"translate"),C(12,"label",32),r()()()),i&2){let e=p(2);o(3),y(" ",g(4,4,"plugins.manage.hide_updates")),o(4),k(g(8,6,"plugins.manage.hide_updates_desc")),o(3),x("formControl",e.hideUpdatesFormControl),P("aria-label",g(11,8,"plugins.manage.hide_updates"))}}function Qo(i,s){if(i&1){let e=V();l(0,"div",6),u(1,Uo,9,7)(2,jo,4,3),l(3,"ul",13),te(4,Ro,9,3,"li",14,ee),l(6,"li",14)(7,"div",15),c(8),m(9,"translate"),C(10,"br"),l(11,"select",16),X("ngModelChange",function(t){B(e);let a=p();return Y(a.versionSelect,t)||(a.versionSelect=t),w(t)}),te(12,Wo,3,4,"option",17,ee),r()(),u(14,Jo,3,1,"button",18),r()(),u(15,Ko,13,10,"ul",19),r()}if(i&2){let e=p();o(),_(e.plugin!=null&&e.plugin.installedVersion?1:2),o(3),ie(e.versionsWithTags()),o(4),y(" ",g(9,5,"plugins.manage.all_versions")," "),o(3),Q("ngModel",e.versionSelect),o(),ie(e.versions()),o(2),_(e.versionSelect?14:-1),o(),_(e.plugin!=null&&e.plugin.installedVersion&&!oe(7,Fo).includes(e.plugin==null?null:e.plugin.name)?15:-1)}}var Di=(()=>{class i{$activeModal=b(q);$api=b(N);$settings=b(W);$toastr=b(U);$translate=b(L);modalData=b(_t);plugin=this.modalData.plugin;onRefreshPluginList=this.modalData.onRefreshPluginList;_versionSelect=v("",{});loading=v(!0,{});versions=v([],{});versionsWithTags=v([],{});get versionSelect(){return this._versionSelect()}set versionSelect(e){this._versionSelect.set(e)}isUpdateHidden=!1;hideUpdatesFormControl=new Gt(!1);ngOnInit(){let e=this.plugin;e&&(this.versionSelect=e.installedVersion||e.latestVersion,this.lookupVersions(),this.isUpdateHidden=this.$settings.env.plugins.hideUpdatesFor&&this.$settings.env.plugins.hideUpdatesFor.includes(e.name),this.hideUpdatesFormControl.patchValue(this.isUpdateHidden),this.hideUpdatesFormControl.valueChanges.pipe(Me(750)).subscribe(n=>{n!==null&&this.toggleHideUpdates(n)}))}doInstall(e){let n=this.plugin;if(!n)return;let t=this.versions().find(a=>a.version===e);this.$activeModal.close({name:n.name,version:e,engines:t?.engines,action:n.installedVersion?"alternate":"install"})}toggleHideUpdates(e){return S(this,null,function*(){let n=this.plugin;if(!n)return;let t=this.$settings.env.plugins?.hideUpdatesFor||[];e?t.includes(n.name)||(t=[...t,n.name].sort((a,d)=>a.localeCompare(d))):t=t.filter(a=>a!==n.name);try{yield this.$api.put("/config-editor/ui/plugins/hide-updates-for",{body:t}),this.$settings.setEnvItem("plugins.hideUpdatesFor",t);let a=this.onRefreshPluginList;a&&a()}catch(a){this.hideUpdatesFormControl.patchValue(this.isUpdateHidden,{emitEvent:!1}),console.error(a);let d=a instanceof Error?a.message:this.$translate.instant("toast.title_error");this.$toastr.error(d,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}lookupVersions(){return S(this,null,function*(){let e=this.plugin;if(e)try{let n=yield this.$api.get(`/plugins/lookup/${encodeURIComponent(e.name)}/versions`),t=[],a=[];for(let[h,f]of Object.entries(n.versions))t.push({version:h,engines:f.engines||null}),Object.keys(n.tags).filter(M=>n.tags[M]===h).forEach(M=>{a.push({version:h,tag:M})});let d=this.plugin;d?.installedVersion&&!t.find(h=>h.version===d.installedVersion)&&t.push({version:d.installedVersion,engines:d.engines||null}),t.sort((h,f)=>(0,$i.rcompare)(h.version,f.version)),a.sort((h,f)=>{let M=["latest","next","beta","alpha"],$=M.includes(h.tag)?M.indexOf(h.tag):999,ge=M.includes(f.tag)?M.indexOf(f.tag):999;return $-ge}),this.versions.set(t),this.versionsWithTags.set(a),!t.find(h=>h.version===this.versionSelect)&&n.tags.latest&&(this.versionSelect=n.tags.latest),this.loading.set(!1)}catch(n){console.error(n);let t=n instanceof Error?n.error?.message||n.message:this.$translate.instant("toast.title_error");this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.dismiss()}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:17,vars:11,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body","d-flex","flex-row","flex-grow-1","w-100"],[1,"w-100","text-center","primary-text"],[1,"w-100","text-center"],[1,"modal-footer","justify-content-between"],[1,"text-start"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],[1,"text-end"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"text-start",2,"min-width","50%"],[1,"custom-select","w-100","font-monospace",2,"font-size","0.875rem",3,"ngModelChange","ngModel"],[3,"value","selected"],[1,"btn","btn-primary","m-0","ms-3","py-1"],[1,"list-group","list-group-box","mt-3","mb-0"],[1,"fas","fa-code-compare","primary-text","mb-3",2,"font-size","75px"],[1,"mb-3"],[1,"font-monospace"],[1,"far","fa-arrow-alt-circle-down","primary-text","mb-3",2,"font-size","75px"],[1,"grey-text","font-monospace"],[1,"btn","btn-primary","m-0","ms-3","py-1",3,"click"],[1,"fas","fa-rotate-right"],[1,"fas","fa-arrow-alt-circle-down"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"grey-text","small"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox","id","hidePluginUpdates",1,"rendux-input",3,"formControl"],["for","hidePluginUpdates",1,"rendux-label","ms-3"]],template:function(n,t){n&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,Lo,2,0,"div",5)(8,Qo,16,8,"div",6),r(),l(9,"div",7),C(10,"div",8),l(11,"div",9)(12,"button",10),m(13,"translate"),E("click",function(){return t.dismissModal()}),c(14),m(15,"translate"),r()(),C(16,"div",11),r()()),n&2&&(o(3),k((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),P("aria-label",g(5,5,"form.button_close")),o(3),_(t.loading()?7:8),o(5),P("aria-label",g(13,7,"form.button_close")),o(2),y(" ",g(15,9,"form.button_close")," "))},dependencies:[Ce,tt,it,Te,et,he,be,Xt,Kt,j],encapsulation:2})}return i})();var Ni=Z(Vn(),1);var vt=(()=>{class i{transform(e){return e.replace(/\$\{\{HOSTNAME\}\}/g,location.hostname)}static \u0275fac=function(n){return new(n||i)};static \u0275pipe=Ut({name:"interpolateMd",type:i,pure:!0})}return i})();var Yo=(i,s,e,n,t)=>({"fa-circle-check":i,"green-text":s,"fa-circle-exclamation":e,"red-text":n,"orange-text":t}),Xo=(i,s,e)=>({"fa-circle-check green-text":i,"fa-circle-exclamation red-text":s,"fa-circle-exclamation orange-text":e});function Zo(i,s){i&1&&(l(0,"div",5),C(1,"i",14),r())}function ea(i,s){i&1&&(l(0,"div",6),c(1),m(2,"translate"),m(3,"translate"),r()),i&2&&(o(),_e(" ",g(2,2,"plugins.settings.message_manual_config_required")," ",g(3,4,"plugins.settings.message_consult_documentation")," "))}function ta(i,s){if(i&1&&(C(0,"markdown",7),m(1,"interpolateMd")),i&2){let e=p();x("data",g(1,1,e.schema==null?null:e.schema.headerDisplay))}}function ia(i,s){if(i&1){let e=V();l(0,"button",28),m(1,"translate"),E("click",function(){B(e);let t=p(2).$index,a=p(2);return w(a.removeBlock(t))}),C(2,"i",29),r()}i&2&&x("ngbTooltip",g(1,2,"form.button_delete"))("openDelay",150)}function na(i,s){if(i&1){let e=V();u(0,ia,3,4,"button",25),l(1,"button",26),m(2,"translate"),E("click",function(){B(e);let t=p().$index,a=p(2);return w(a.editBlock(t))}),C(3,"i",27),r()}if(i&2){let e=p().$index,n=p(2);_(n.show()==="configBlock."+e?0:-1),o(),x("ngbTooltip",g(2,3,"form.button_edit"))("openDelay",150)}}function oa(i,s){if(i&1&&(C(0,"i",30),m(1,"translate")),i&2){let e=p().$index,n=p(2);G(Rt(6,Yo,n.formBlocksValid()[e],n.formBlocksValid()[e],!n.formBlocksValid()[e],n.strictValidation()&&!n.formBlocksValid()[e],!n.strictValidation()&&!n.formBlocksValid()[e])),x("ngbTooltip",g(1,4,n.formBlocksValid()[e]?"form.label_valid":n.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function aa(i,s){if(i&1){let e=V();l(0,"div",16)(1,"div",18)(2,"div",19)(3,"h5",20),c(4),r(),l(5,"div"),u(6,na,4,5),u(7,oa,2,12,"i",21),r()()(),l(8,"div",22)(9,"div",23)(10,"ngx-monaco-editor",24),E("ngModelChange",function(t){B(e);let a=p(2);return w(a.currentBlock.set(t))})("onInit",function(t){B(e);let a=p(2);return w(a.onEditorInit(t))}),r()()()()}if(i&2){let e=s.$implicit,n=s.$index,t=p(2);x("ngbAccordionItem","configBlock."+n)("collapsed",t.show()!=="configBlock."+n)("id","configBlock."+n),o(4),k(e.name||t.pluginAlias()),o(2),_(!(t.schema!=null&&t.schema.singular)||t.pluginConfig().length>1?6:-1),o(),_(t.schema!=null&&t.schema.singular?-1:7),o(3),x("options",t.editorOptions)("ngModel",t.currentBlock())}}function ra(i,s){if(i&1&&(l(0,"div",17),C(1,"markdown",7),m(2,"interpolateMd"),r()),i&2){let e=p(2);o(),x("data",g(2,1,e.schema==null?null:e.schema.footerDisplay))}}function la(i,s){if(i&1&&(l(0,"div",15),te(1,aa,11,8,"div",16,ee),r(),u(3,ra,3,3,"div",17)),i&2){let e=p();x("closeOthers",!0),o(),ie(e.pluginConfig()),o(2),_(e.schema!=null&&e.schema.footerDisplay?3:-1)}}function sa(i,s){if(i&1&&(C(0,"i",35),m(1,"translate")),i&2){let e=p(2);G(re(6,Xo,e.formIsValid(),e.strictValidation()&&!e.formIsValid(),!e.strictValidation()&&!e.formIsValid())),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function da(i,s){if(i&1){let e=V();l(0,"button",36),E("click",function(){B(e);let t=p(2);return w(t.addBlock())}),C(1,"i",37),r()}}function ca(i,s){i&1&&(c(0),m(1,"translate")),i&2&&y(" ",g(1,1,"form.button_save")," ")}function ma(i,s){i&1&&C(0,"i",34)}function pa(i,s){if(i&1){let e=V();u(0,sa,2,10,"i",31),u(1,da,2,0,"button",32),l(2,"button",33),E("click",function(){B(e);let t=p();return w(t.save())}),u(3,ca,2,3),u(4,ma,1,0,"i",34),r()}if(i&2){let e=p();_(e.schema!=null&&e.schema.singular?0:-1),o(),_(e.schema!=null&&e.schema.singular?-1:1),o(),x("disabled",e.saveInProgress()||!e.formIsValid()&&e.strictValidation()),o(),_(e.saveInProgress()?-1:3),o(),_(e.saveInProgress()?4:-1)}}function ga(i,s){if(i&1){let e=V();l(0,"button",38),E("click",function(){B(e);let t=p();return w(t.openFullConfigEditor())}),c(1),m(2,"translate"),r()}i&2&&(o(),y(" ",g(2,1,"plugins.settings.label_open_config_editor")," "))}var Tt=(()=>{class i{$activeModal=b(q);$api=b(N);$cb=b(Ne);$md=b(ci);$plugin=b(Be);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(L);modalData=b(Se);plugin=this.modalData.plugin;schema=this.modalData.schema;isDebugModeEnabled=this.$settings.isFeatureEnabled("childBridgeDebugMode");isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");pluginAlias=v("",{});pluginType=v(null,{});loading=v(!0,{});canConfigure=v(!1,{});show=v("",{});pluginConfig=v([],{});currentBlock=v(void 0,{});currentBlockIndex=v(null,{});saveInProgress=v(!1,{});isFirstSave=v(!1,{});monacoEditor;formBlocksValid=v({},{});formIsValid=v(!0,{});strictValidation=v(!1,{});editorOptions;get arrayKey(){return this.pluginType()==="accessory"?"accessories":"platforms"}ngOnInit(){this.editorOptions={language:"json",theme:this.$settings.actualLightingMode==="dark"?"vs-dark":"vs-light"},this.strictValidation.set(this.schema?.strictValidation||!1),this.$md.detect.mobile()?(this.loading.set(!1),this.canConfigure.set(!1)):this.loadPluginAlias()}onEditorInit(e){return S(this,null,function*(){window.editor=e,this.monacoEditor=e,this.setupSchemaValidation(),this.monacoEditor.onDidChangeModelContent(()=>setTimeout(()=>this.onValidationChange(),300)),window.monaco.editor.onDidChangeMarkers(t=>{let a=this.monacoEditor.getModel()?.uri;a&&t.some(d=>d.toString()===a.toString())&&this.onValidationChange()}),yield this.monacoEditor.getModel().setValue(this.currentBlock()),yield this.monacoEditor.getAction("editor.action.formatDocument").run()})}ngOnDestroy(){try{if(window.editor&&window.editor.dispose&&(window.editor.dispose(),window.editor=void 0),window.monaco){let n=`http://plugin/${this.schema?.pluginAlias||this.pluginAlias}/config.json`,a=(window.monaco.languages.json.jsonDefaults.diagnosticsOptions.schemas||[]).filter(d=>d.uri!==n);window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:a})}this.monacoEditor&&this.monacoEditor.dispose()}catch{}}addBlock(){if(!this.saveCurrentBlock()){this.$toastr.error(this.$translate.instant("plugins.config.please_fix"),this.$translate.instant("toast.title_error"));return}this.pluginConfig.update(e=>[...e,{[this.pluginType()]:this.pluginAlias(),name:this.pluginAlias()}]),this.editBlock(this.pluginConfig().length-1)}editBlock(e){if(this.currentBlockIndex()!==null){if(!this.saveCurrentBlock())return;this.formBlocksValid.update(n=>A(D({},n),{[this.currentBlockIndex()]:this.isJsonValid()}))}this.show.set(`configBlock.${e}`),this.currentBlockIndex.set(e),this.currentBlock.set(JSON.stringify(this.pluginConfig()[e],null,4)),e in this.formBlocksValid()||this.formBlocksValid.update(n=>A(D({},n),{[e]:!0})),this.updateOverallValidation(),setTimeout(()=>this.onValidationChange(),150)}removeBlock(e){let n=this.pluginConfig()[e],t=this.pluginConfig().findIndex(a=>a===n);t>-1&&this.pluginConfig.update(a=>{let d=[...a];return d.splice(t,1),d}),this.currentBlockIndex.set(null),this.currentBlock.set(void 0),this.show.set("")}save(){return S(this,null,function*(){if(this.saveInProgress.set(!0),!this.saveCurrentBlock()){this.saveInProgress.set(!1);return}try{let e=this.plugin;if(!e)return;let n=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,this.pluginConfig());if(this.$activeModal.close(),this.isFirstSave()&&this.$settings.env.recommendChildBridges&&n[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(e,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(e.name)}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}})}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}closeModal(){this.$activeModal.close()}setupSchemaValidation(){let e=this.schema?.schema;e||(e=this.createBasicSchema());let t=`http://plugin/${this.schema?.pluginAlias||this.pluginAlias()}/config.json`,a=Mt(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()==="platform"}),h=[...e.required||[]];this.pluginType()==="platform"?(h.includes("platform")||h.push("platform"),e.properties?.platform?e.properties.platform.const=this.pluginAlias():e.properties=A(D({},e.properties),{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",const:this.pluginAlias()}})):(h.includes("accessory")||h.push("accessory"),h.includes("name")||h.push("name"),e.properties?.accessory?e.properties.accessory.const=this.pluginAlias():e.properties=A(D({},e.properties),{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to.",const:this.pluginAlias()}})),window.monaco.languages.json.jsonDefaults.setDiagnosticsOptions({validate:!0,allowComments:!1,schemas:[{uri:t,fileMatch:["*"],schema:A(D({},e),{required:h,properties:A(D({},e.properties),{_bridge:a})})}]})}createBasicSchema(){let e=Mt(this.$translate,{isDebugModeEnabled:this.isDebugModeEnabled,isMatterSupported:this.isMatterSupported,isPlatformPlugin:this.pluginType()==="platform"});return this.pluginType()==="platform"?{type:"object",required:["platform"],title:this.$translate.instant("plugins.button_settings"),properties:{platform:{type:"string",title:"Platform Name",description:"This is used by Homebridge to identify which plugin this platform belongs to.",not:{enum:["config"]}},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the platform."},_bridge:e}}:{type:"object",required:["accessory","name"],title:this.$translate.instant("plugins.button_settings"),properties:{accessory:{type:"string",title:this.$translate.instant("child_bridge.config.accessory"),description:"This is used by Homebridge to identify which plugin this accessory belongs to."},name:{type:"string",title:this.$translate.instant("accessories.name"),description:"The name of the accessory."},_bridge:e}}}isJsonValid(){if(!this.monacoEditor)return!0;let e=this.monacoEditor.getModel();if(!e)return!0;let n=window.monaco.editor.getModelMarkers({resource:e.uri}),t=window.monaco;return!n.filter(d=>d.severity===t.MarkerSeverity.Error||d.severity===t.MarkerSeverity.Warning).length}onValidationChange(){this.currentBlockIndex()!==null&&this.monacoEditor&&(this.formBlocksValid.update(e=>A(D({},e),{[this.currentBlockIndex()]:this.isJsonValid()})),this.updateOverallValidation())}updateOverallValidation(){this.formIsValid.set(Object.values(this.formBlocksValid()).every(e=>e))}loadPluginAlias(){return S(this,null,function*(){let e=this.plugin;if(e)try{let n=yield this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`);n.pluginAlias&&n.pluginType?(this.pluginAlias.set(n.pluginAlias),this.pluginType.set(n.pluginType),this.loadHomebridgeConfig()):this.loading.set(!1)}catch{this.loading.set(!1)}})}loadHomebridgeConfig(){return S(this,null,function*(){let e=this.plugin;if(!e)return;let n=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`);this.pluginConfig.set(n),this.canConfigure.set(!0),this.loading.set(!1),this.initializeValidationState(),this.pluginConfig().length?this.editBlock(0):(this.isFirstSave.set(!0),this.addBlock())})}saveCurrentBlock(){if(this.currentBlockIndex()!==null&&this.monacoEditor){let e=this.monacoEditor.getModel().getValue().trim(),n;e.charAt(0)==='"'&&e.charAt(e.length-1)==="]"&&(e=`{${e}}`);try{n=Ni.default.parse(e)}catch(d){return console.error(d),this.$toastr.error(this.$translate.instant("config.config_invalid_json"),this.$translate.instant("toast.title_error")),!1}if(Array.isArray(n)||typeof n!="object"||n===null)return this.$toastr.error(this.$translate.instant("plugins.config.must_be_object"),this.$translate.instant("toast.title_error")),!1;let t=n;if(!t[this.pluginType()]&&Array.isArray(t[this.arrayKey])&&t[this.arrayKey].length&&Object.keys(t).length===1&&(t=t[this.arrayKey][0]),this.pluginType()==="accessory"&&(!t.name||typeof t.name!="string"))return this.$toastr.error(this.$translate.instant("plugins.config.name_property"),this.$translate.instant("toast.title_error")),t.name="",this.monacoEditor.getModel().setValue(JSON.stringify(t,null,4)),!1;let a=this.pluginConfig()[this.currentBlockIndex()];Object.keys(a).forEach(d=>delete a[d]),Object.assign(a,t),a[this.pluginType()]=this.pluginAlias()}return!0}initializeValidationState(){let e={};for(let n=0;n<this.pluginConfig().length;n+=1)e[n]=!0;this.formBlocksValid.set(e),this.updateOverallValidation()}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:20,vars:16,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"text-center","primary-text"],[1,"alert","alert-warning","mb-0"],[1,"plugin-md",3,"data"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],[1,"btn","btn-primary"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],["ngbAccordion","",3,"closeOthers"],[1,"card",3,"ngbAccordionItem","collapsed","id"],[1,"mt-3"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0","py-2","ps-1"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"class","ngbTooltip","openDelay"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body","p-0",2,"height","400px"],[1,"flex-grow-1","h-100","w-100","mb-0","pb-0",3,"ngModelChange","onInit","options","ngModel"],["container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"ngbTooltip","openDelay"],["ngbAccordionToggle","","container","modal","triggers","hover",1,"btn","btn-primary","m-0","ms-2","me-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-edit"],["container","modal","triggers","hover",1,"btn","btn-danger","m-0","ms-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-trash"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"ngbTooltip","openDelay"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-plus"],[1,"btn","btn-primary",3,"click"]],template:function(n,t){n&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.closeModal()}),r()(),l(6,"div",4),u(7,Zo,2,0,"div",5),u(8,ea,4,6,"div",6),u(9,ta,2,3,"markdown",7),u(10,la,4,2),r(),l(11,"div",8)(12,"div",9)(13,"button",10),E("click",function(){return t.closeModal()}),c(14),m(15,"translate"),r()(),C(16,"div",11),l(17,"div",12),u(18,pa,5,5),u(19,ga,3,3,"button",13),r()()()),n&2&&(o(3),_e("",(t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)," - ",t.pluginType()),o(),x("disabled",t.saveInProgress()),P("aria-label",g(5,12,"form.button_close")),o(3),_(t.loading()?7:-1),o(),_(!t.loading()&&!t.canConfigure()?8:-1),o(),_(t.schema!=null&&t.schema.headerDisplay?9:-1),o(),_(!t.loading()&&t.canConfigure()?10:-1),o(3),x("disabled",t.saveInProgress()),o(),y(" ",g(15,14,"form.button_close")," "),o(4),_(t.canConfigure()?18:-1),o(),_(t.canConfigure()?-1:19))},dependencies:[st,lt,rt,xe,ot,nt,Ci,Ce,he,be,at,$e,Pe,De,j,vt],styles:[".no-padding-card-body .card-body{padding:0!important} body.dark-mode .no-padding-card-body .card-body{background-color:#1e1e1e}.manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return i})();var It=i=>({link:i}),Ai=(i,s)=>({"green-text":i,"grey-text":s});function ua(i,s){if(i&1){let e=V();l(0,"button",14),m(1,"translate"),E("click",function(){B(e);let t=p();return w(t.closeModal())}),r()}if(i&2){let e=p();x("disabled",e.saveInProgress()),P("aria-label",g(1,2,"form.button_close"))}}function _a(i,s){i&1&&(l(0,"div",6),C(1,"i",15),r())}function fa(i,s){i&1&&(l(0,"li"),c(1),m(2,"translate"),r()),i&2&&(o(),k(g(2,1,"child_bridge.bridges_paired_2")))}function ha(i,s){if(i&1&&(l(0,"li"),c(1),m(2,"translate"),r(),u(3,fa,3,3,"li")),i&2){let e,n=p(2);o(),k(g(2,2,"child_bridge.bridges_paired")),o(2),_(n.configBlocks().length===1&&!n.deviceInfo().get((e=n.configBlocks()[0]._bridge)==null?null:e.username)&&n.originalBridges().length===0?3:-1)}}function ba(i,s){if(i&1&&(l(0,"option",30),c(1),r()),i&2){let e=s.$implicit,n=s.$index;x("value",n),o(),k(e.name||e.platform||e.accessory)}}function Ca(i,s){if(i&1){let e=V();l(0,"ul",22)(1,"li",26),c(2),m(3,"translate"),r(),l(4,"li",24)(5,"label",27),c(6),m(7,"translate"),r(),l(8,"div",28)(9,"select",29),E("ngModelChange",function(t){B(e);let a=p(3);return a.selectedBlock.set(t),w(a.onBlockChange(t))}),te(10,ba,2,2,"option",30,ee),r()()()()}if(i&2){let e=p(3);o(2),k(g(3,3,"form.label.changes_kept")),o(4),y(" ",g(7,5,"accessories.plugin")," "),o(3),x("ngModel",e.selectedBlock()),o(),ie(e.configBlocks())}}function va(i,s){if(i&1&&c(0),i&2){let e=p().$implicit;_e(" ",e.name," \xB7 ",e.username," ")}}function xa(i,s){if(i&1&&c(0),i&2){let e=p().$implicit;y(" ",e.username," ")}}function ya(i,s){if(i&1&&(l(0,"option",30),u(1,va,1,2)(2,xa,1,1),r()),i&2){let e=s.$implicit;x("value",e.username),o(),_(e.name?1:2)}}function Ba(i,s){if(i&1){let e=V();l(0,"li",24)(1,"label",31),c(2),m(3,"translate"),r(),l(4,"div",28)(5,"select",32,0),E("change",function(){B(e);let t=Qe(6),a=p(3);return w(a.onLinkBridgeChange(t.value))}),l(7,"option",30),c(8),m(9,"translate"),r(),te(10,ya,3,2,"option",30,ee),r()()()}if(i&2){let e=p(3);o(2),k(g(3,2,"child_bridge.config.or_link")),o(6),k(g(9,4,"child_bridge.config.select_existing")),o(2),ie(e.bridgesAvailableForLink())}}function wa(i,s){i&1&&(l(0,"li",24)(1,"label",33),c(2,"Child Bridge"),r(),l(3,"div",34),c(4),m(5,"translate"),r()()),i&2&&(o(4),y(" ",g(5,1,"child_bridge.config.prevent")," "))}function ka(i,s){if(i&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),E("change",function(){B(e);let t=p(3);return w(t.toggleExternalBridge(t.configBlocks()[t.selectedBlock()],!t.enabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),r(),C(6,"label",37),r()()}if(i&2){let e=p(3);o(2),y(" ",g(3,4,e.currentlySelectedLink()?"child_bridge.config.or_link":"child_bridge.config.use")," "),o(3),x("id","toggleExternalBridgeInput_"+e.selectedBlock())("checked",e.enabledBlocks()[e.selectedBlock()]),o(),x("for","toggleExternalBridgeInput_"+e.selectedBlock())}}function Sa(i,s){if(i&1&&(l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",38),c(5),r()()),i&2){let e=p(3);o(2),k(g(3,2,"child_bridge.config.name")),o(3),y(" ",e.currentlySelectedLink().name," ")}}function Ma(i,s){if(i&1&&(l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",38),c(5),r()()),i&2){let e,n=p(3);o(2),k(g(3,2,"users.label_username")),o(3),y(" ",((e=n.currentlySelectedLink())==null?null:e.username)||((e=n.configBlocks()[n.selectedBlock()]._bridge)==null?null:e.username)," ")}}function Ea(i,s){if(i&1&&(l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",38),c(5),r()()),i&2){let e=p(3);o(2),k(g(3,2,"child_bridge.config.port")),o(3),y(" ",e.currentlySelectedLink().port," ")}}function Va(i,s){if(i&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),l(4,"code"),c(5,"-D"),r()(),l(6,"div",35)(7,"input",50),m(8,"translate"),X("ngModelChange",function(t){B(e);let a=p(5);return Y(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled,t)||(a.configBlocks()[a.selectedBlock()]._bridge.debugModeEnabled=t),w(t)}),r(),C(9,"label",37),r()()}if(i&2){let e=p(5);o(2),y("",g(3,5,"child_bridge.config.debug")," "),o(5),x("id","homebridgeDebugMode_"+e.selectedBlock()),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.debugModeEnabled),P("aria-label",g(8,7,"settings.startup.debug")),o(2),x("for","homebridgeDebugMode_"+e.selectedBlock())}}function Ta(i,s){if(i&1){let e=V();l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),l(4,"span",41),c(5),m(6,"translate"),r(),C(7,"br")(8,"small",42),m(9,"translate"),r(),l(10,"div",43)(11,"input",44),E("input",function(t){let a;B(e);let d=p(4);return w(d.onScheduledRestartCronChange(t.target.value,(a=d.configBlocks()[d.selectedBlock()]._bridge)==null?null:a.username))}),r()()(),u(12,Va,10,9,"li",25),l(13,"li",24)(14,"label",33)(15,"span",45),c(16,"DEBUG"),r(),C(17,"br")(18,"small",46),m(19,"translate"),r(),l(20,"div",28)(21,"input",47),X("ngModelChange",function(t){B(e);let a=p(4);return Y(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.DEBUG=t),w(t)}),r()()(),l(22,"li",24)(23,"label",33)(24,"span",45),c(25,"NODE_OPTIONS"),r(),C(26,"br"),l(27,"small",48),c(28),m(29,"translate"),r()(),l(30,"div",28)(31,"input",49),X("ngModelChange",function(t){B(e);let a=p(4);return Y(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS,t)||(a.configBlocks()[a.selectedBlock()]._bridge.env.NODE_OPTIONS=t),w(t)}),r()()()}if(i&2){let e,n=p(4);o(2),y(" ",g(3,13,"settings.startup.scheduled_restart")," "),o(3),k(g(6,15,"common.labels.beta")),o(3),x("innerHtml",z(9,17,"settings.startup.scheduled_restart_desc",de(25,It,n.linkCron)),ce),o(3),Re("letter-spacing","0.15em")("text-align","center"),x("value",n.getScheduledRestartCron((e=n.configBlocks()[n.selectedBlock()]._bridge)==null?null:e.username)),o(),_(n.canShowBridgeDebug()?12:-1),o(6),x("innerHTML",z(19,20,"settings.service.debug_tooltip",de(27,It,n.linkDebug)),ce),o(3),Q("ngModel",n.configBlocks()[n.selectedBlock()]._bridge.env.DEBUG),o(7),k(g(29,23,"settings.service.node_tooltip")),o(3),Q("ngModel",n.configBlocks()[n.selectedBlock()]._bridge.env.NODE_OPTIONS)}}function Ia(i,s){if(i&1){let e=V();l(0,"li",24)(1,"label",33),c(2),m(3,"translate"),r(),l(4,"div",28)(5,"input",39),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.name,t)||(a.configBlocks()[a.selectedBlock()]._bridge.name=t),w(t)}),r()()(),l(6,"li",24)(7,"label",33),c(8),m(9,"translate"),r(),l(10,"div",28)(11,"input",40),m(12,"translate"),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer,t)||(a.configBlocks()[a.selectedBlock()]._bridge.manufacturer=t),w(t)}),r()()(),l(13,"li",24)(14,"label",33),c(15),m(16,"translate"),r(),l(17,"div",28)(18,"input",40),m(19,"translate"),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.model,t)||(a.configBlocks()[a.selectedBlock()]._bridge.model=t),w(t)}),r()()(),l(20,"li",24)(21,"label",33),c(22),m(23,"translate"),r(),l(24,"div",28)(25,"input",40),m(26,"translate"),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision,t)||(a.configBlocks()[a.selectedBlock()]._bridge.firmwareRevision=t),w(t)}),r()()(),u(27,Ta,32,29)}if(i&2){let e=p(3);o(2),k(g(3,16,"child_bridge.config.name")),o(3),ze("is-invalid",e.getHapNameValidationError(e.selectedBlock())),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.name),o(3),k(g(9,18,"child_bridge.config.manufacturer")),o(3),x("placeholder",g(12,20,"form.optional")),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.manufacturer),o(4),k(g(16,22,"child_bridge.config.model")),o(3),x("placeholder",g(19,24,"form.optional")),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.model),o(4),k(g(23,26,"child_bridge.config.firmware")),o(3),ze("font-monospace",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),x("placeholder",g(26,28,"form.optional")),Q("ngModel",e.configBlocks()[e.selectedBlock()]._bridge.firmwareRevision),o(2),_(e.justInstalled?-1:27)}}function Pa(i,s){i&1&&(l(0,"li",55)(1,"div",57)(2,"div",58)(3,"div")(4,"div",59),C(5,"i",60),r(),l(6,"div",61),c(7),m(8,"translate"),r()()()()()),i&2&&(o(7),k(g(8,1,"child_bridge.return_to_pair")))}function $a(i,s){i&1&&(l(0,"span"),c(1),m(2,"translate"),r()),i&2&&(o(),y(" \xB7 ",g(2,1,"status.code_scan")," "))}function Da(i,s){if(i&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),m(6,"translate"),E("change",function(){let t;B(e);let a=p(5);return w(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"hap"))}),r(),C(7,"label",37),r()()}if(i&2){let e,n=p(5);o(2),k(g(3,5,"child_bridge.config.hide_pairing_alert")),o(3),x("id","toggleHideHapUnpairing_"+n.selectedBlock())("checked",n.isUnpairingHidden((e=n.configBlocks()[n.selectedBlock()]._bridge)==null?null:e.username,"hap")),P("aria-label",g(6,7,"child_bridge.config.hide_pairing_alert")),o(2),x("for","toggleHideHapUnpairing_"+n.selectedBlock())}}function Na(i,s){if(i&1&&(l(0,"li",55)(1,"div",57),C(2,"app-qrcode",62),l(3,"p",63),c(4),r(),l(5,"p",64),C(6,"i",65),c(7),m(8,"translate"),u(9,$a,3,3,"span"),r()()(),u(10,Da,8,9,"li",25)),i&2){let e,n,t,a,d,h,f=p(4);o(2),x("data",(e=f.deviceInfo().get((e=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:e.username))==null?null:e._setupCode),o(2),y(" ",(n=f.deviceInfo().get((n=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:n.username))==null?null:n.pincode," "),o(2),G(ke(9,Ai,(t=f.deviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))==null?null:t._isPaired,!((t=f.deviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))!=null&&t._isPaired))),o(),y(" ",g(8,7,(a=f.deviceInfo().get((a=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:a.username))!=null&&a._isPaired?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),_((d=f.deviceInfo().get((d=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:d.username))!=null&&d._isPaired?-1:9),o(),_((h=f.deviceInfo().get((h=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:h.username))!=null&&h._isPaired?-1:10)}}function Aa(i,s){i&1&&(l(0,"span"),c(1),m(2,"translate"),r()),i&2&&(o(),y(" \xB7 ",g(2,1,"status.code_scan")," "))}function Fa(i,s){if(i&1){let e=V();l(0,"li",25)(1,"span",8),c(2),m(3,"translate"),r(),l(4,"div",35)(5,"input",36),m(6,"translate"),E("change",function(){let t;B(e);let a=p(7);return w(a.toggleHideUnpairing((t=a.configBlocks()[a.selectedBlock()]._bridge)==null?null:t.username,"matter"))}),r(),C(7,"label",37),r()()}if(i&2){let e,n=p(7);o(2),k(g(3,5,"child_bridge.config.hide_pairing_alert")),o(3),x("id","toggleHideMatterUnpairing_"+n.selectedBlock())("checked",n.isUnpairingHidden((e=n.configBlocks()[n.selectedBlock()]._bridge)==null?null:e.username,"matter")),P("aria-label",g(6,7,"child_bridge.config.hide_pairing_alert")),o(2),x("for","toggleHideMatterUnpairing_"+n.selectedBlock())}}function La(i,s){if(i&1&&(l(0,"li",55)(1,"div",57),C(2,"app-qrcode",62),l(3,"p",63),c(4),r(),l(5,"p",64),C(6,"i",65),c(7),m(8,"translate"),u(9,Aa,3,3,"span"),r()()(),u(10,Fa,8,9,"li",25)),i&2){let e,n,t,a,d,h,f=p(6);o(2),x("data",(e=f.matterDeviceInfo().get((e=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:e.username))==null?null:e.setupUri),o(2),y(" ",(n=f.matterDeviceInfo().get((n=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:n.username))==null?null:n.pin," "),o(2),G(ke(9,Ai,(t=f.matterDeviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))==null?null:t.commissioned,!((t=f.matterDeviceInfo().get((t=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:t.username))!=null&&t.commissioned))),o(),y(" ",g(8,7,(a=f.matterDeviceInfo().get((a=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:a.username))!=null&&a.commissioned?"status.widget.qr_paired":"status.widget.qr_unpaired")," "),o(2),_((d=f.matterDeviceInfo().get((d=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:d.username))!=null&&d.commissioned?-1:9),o(),_((h=f.matterDeviceInfo().get((h=f.configBlocks()[f.selectedBlock()]._bridge)==null?null:h.username))!=null&&h.commissioned?-1:10)}}function Ua(i,s){i&1&&(l(0,"li",55)(1,"div",57)(2,"div",70)(3,"div")(4,"div",59),C(5,"i",60),r(),l(6,"div",61),c(7),m(8,"translate"),r()()()()()),i&2&&(o(7),k(g(8,1,"child_bridge.return_to_pair")))}function ja(i,s){if(i&1){let e=V();l(0,"li",67)(1,"ul",68)(2,"li"),c(3),m(4,"translate"),r(),l(5,"li"),c(6),m(7,"translate"),r()()(),u(8,La,11,12),u(9,Ua,9,3,"li",55),l(10,"li",24)(11,"label",33),c(12),m(13,"translate"),r(),l(14,"div",28)(15,"input",69),X("ngModelChange",function(t){B(e);let a=p(5);return Y(a.configBlocks()[a.selectedBlock()]._bridge.matter.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.matter.port=t),w(t)}),r()()()}if(i&2){let e,n,t=p(5);o(3),k(g(4,8,"child_bridge.config.matter_note_1")),o(3),k(g(7,10,"child_bridge.config.matter_note_2")),o(2),_((e=t.matterDeviceInfo().get((e=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:e.username))!=null&&e.setupUri?8:-1),o(),_(t.matterDeviceInfo().get((n=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:n.username)&&!((n=t.matterDeviceInfo().get((n=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:n.username))!=null&&n.setupUri)?9:-1),o(3),k(g(13,12,"child_bridge.config.port")),o(3),ze("is-invalid",t.getMatterPortValidationError(t.selectedBlock())),Q("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.matter.port)}}function Ha(i,s){if(i&1){let e=V();l(0,"ul",23)(1,"li",25)(2,"label",33),C(3,"i",66),c(4),m(5,"translate"),l(6,"span",41),c(7),m(8,"translate"),r()(),l(9,"div",35)(10,"input",36),E("change",function(){B(e);let t=p(4);return w(t.toggleMatterBridge(t.configBlocks()[t.selectedBlock()],!t.matterEnabledBlocks()[t.selectedBlock()],t.selectedBlock()))}),r(),C(11,"label",37),r()(),u(12,ja,16,14),r()}if(i&2){let e,n=p(4);o(4),y(" ",g(5,6,"matter_bridge.config.use")," "),o(3),k(g(8,8,"common.labels.beta")),o(3),x("id","toggleMatterBridgeInput_"+n.selectedBlock())("checked",n.matterEnabledBlocks()[n.selectedBlock()]),o(),x("for","toggleMatterBridgeInput_"+n.selectedBlock()),o(),_(n.matterEnabledBlocks()[n.selectedBlock()]&&((e=n.configBlocks()[n.selectedBlock()]._bridge)!=null&&e.matter)&&((e=n.configBlocks()[n.selectedBlock()]._bridge)!=null&&e.username)?12:-1)}}function Oa(i,s){if(i&1){let e=V();l(0,"ul",23)(1,"li",25)(2,"span",8),C(3,"i",51),c(4),m(5,"translate"),r(),l(6,"div",52),C(7,"input",53)(8,"label",54),r()(),u(9,Pa,9,3,"li",55),u(10,Na,11,12),l(11,"li",24)(12,"label",33),c(13),m(14,"translate"),r(),l(15,"div",28)(16,"input",56),X("ngModelChange",function(t){B(e);let a=p(3);return Y(a.configBlocks()[a.selectedBlock()]._bridge.port,t)||(a.configBlocks()[a.selectedBlock()]._bridge.port=t),w(t)}),r()()()(),u(17,Ha,13,10,"ul",23)}if(i&2){let e,n,t=p(3);o(4),y(" ",g(5,12,"child_bridge.config.enable_hap")," "),o(3),x("id","toggleHapInput_"+t.selectedBlock())("checked",!0)("disabled",!0),o(),x("for","toggleHapInput_"+t.selectedBlock()),o(),_((e=t.configBlocks()[t.selectedBlock()]._bridge)!=null&&e.username&&t.deviceInfo().get((e=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:e.username)===!1?9:-1),o(),_(t.deviceInfo().get((n=t.configBlocks()[t.selectedBlock()]._bridge)==null?null:n.username)?10:-1),o(3),k(g(14,14,"child_bridge.config.port")),o(3),ze("is-invalid",t.getHapPortValidationError(t.selectedBlock())),Q("ngModel",t.configBlocks()[t.selectedBlock()]._bridge.port),o(),_(t.isMatterSupported&&!t.configBlocks()[t.selectedBlock()].accessory?17:-1)}}function Ra(i,s){if(i&1&&(u(0,Ca,12,7,"ul",22),l(1,"ul",23),u(2,Ba,12,6,"li",24),u(3,wa,6,3,"li",24),u(4,ka,7,6,"li",25),u(5,Sa,6,4,"li",24),u(6,Ma,6,4,"li",24),u(7,Ea,6,4,"li",24),u(8,Ia,28,30),r(),u(9,Oa,18,16)),i&2){let e,n,t,a,d=p(2);_(d.configBlocks().length>1?0:-1),o(2),_(!((e=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&e.username)&&d.bridgesAvailableForLink().length&&!d.currentBridgeHasLinks()?2:-1),o(),_(d.currentBridgeHasLinks()?3:-1),o(),_(d.currentBridgeHasLinks()?-1:4),o(),_(d.currentlySelectedLink()?5:-1),o(),_((d.currentlySelectedLink()||(n=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&n.username)&&(d.currentlySelectedLink()||!d.currentBridgeHasLinks())?6:-1),o(),_(d.currentlySelectedLink()?7:-1),o(),_(!d.currentlySelectedLink()&&((t=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&t.username)?8:-1),o(),_(!d.currentlySelectedLink()&&((a=d.configBlocks()[d.selectedBlock()]._bridge)!=null&&a.username)?9:-1)}}function za(i,s){i&1&&(c(0),m(1,"translate")),i&2&&y(" ",g(1,1,"child_bridge.confirm_delete_2")," ")}function Wa(i,s){if(i&1&&(l(0,"li"),C(1,"i",72),c(2),l(3,"span",48),c(4," \xB7 "),r(),l(5,"span",73),c(6),r()()),i&2){let e,n=s.$implicit,t=p(3);o(2),y(" ",n.bridgeName||((e=t.deviceInfo().get(n.id))==null?null:e.displayName)," "),o(4),k(n.id)}}function qa(i,s){if(i&1&&(l(0,"li"),C(1,"i",74),c(2),l(3,"span",48),c(4," \xB7 "),r(),l(5,"span",73),c(6),r()()),i&2){let e=s.$implicit;o(2),y(" ",e.name," "),o(4),k(e.username)}}function Ga(i,s){if(i&1&&(l(0,"ngb-alert",19)(1,"p"),c(2),m(3,"translate"),u(4,za,2,3),r(),l(5,"div",10)(6,"ul",71),te(7,Wa,7,2,"li",null,ee),te(9,qa,7,2,"li",null,ee),r()()()),i&2){let e=p(2);x("dismissible",!1),o(2),y(" ",g(3,3,"child_bridge.confirm_delete_1")," "),o(2),_(e.deletingPairedBridge()?4:-1),o(3),ie(e.deleteBridges()),o(2),ie(e.deleteMatterBridges())}}function Ja(i,s){i&1&&(l(0,"ngb-alert",20),c(1),m(2,"translate"),r()),i&2&&(x("dismissible",!1),o(),k(g(2,2,"child_bridge.must_configure_plugin")))}function Ka(i,s){if(i&1){let e=V();l(0,"ngb-alert",21)(1,"div",17),c(2),m(3,"translate"),m(4,"translate"),r(),l(5,"button",75),E("click",function(){B(e);let t=p(2);return w(t.openFullConfigEditor())}),c(6),m(7,"translate"),r()()}i&2&&(x("dismissible",!1),o(2),_e(" ",g(3,4,"plugins.settings.message_manual_config_required")," ",g(4,6,"plugins.settings.message_consult_documentation")," "),o(4),y(" ",g(7,8,"plugins.settings.label_open_config_editor")," "))}function Qa(i,s){if(i&1){let e=V();l(0,"div",10)(1,"img",16),E("error",function(){B(e);let t=p();return w(t.handleIconError())}),r()(),l(2,"ul",17),C(3,"li",18),m(4,"translate"),u(5,ha,4,4),r(),u(6,Ra,10,9),u(7,Ga,11,5,"ngb-alert",19),u(8,Ja,3,4,"ngb-alert",20),u(9,Ka,8,10,"ngb-alert",21)}if(i&2){let e=p();o(),x("src",e.plugin.icon,At),o(2),x("innerHTML",z(4,7,"child_bridge.about",de(10,It,e.linkChildBridges)),ce),o(2),_(e.configBlocks().length?5:-1),o(),_(e.canConfigure()&&e.configBlocks().length?6:-1),o(),_(e.deleteBridges().length||e.deleteMatterBridges().length?7:-1),o(),_(!e.configBlocks().length&&e.canConfigure?8:-1),o(),_(e.canConfigure()?-1:9)}}function Ya(i,s){if(i&1){let e=V();l(0,"button",76),E("click",function(){B(e);let t=p();return w(t.closeModal())}),c(1),m(2,"translate"),r()}if(i&2){let e=p();x("disabled",e.saveInProgress()),o(),y(" ",g(2,2,"form.button_close")," ")}}function Xa(i,s){i&1&&C(0,"i",78)}function Za(i,s){if(i&1){let e=V();l(0,"button",77),E("click",function(){B(e);let t=p();return w(t.save())}),c(1),m(2,"translate"),u(3,Xa,1,0,"i",78),r()}if(i&2){let e=p();x("disabled",e.saveInProgress()||e.hasValidationErrors),o(),y(" ",g(2,3,"form.button_save")," "),o(2),_(e.saveInProgress()?3:-1)}}function er(i,s){if(i&1){let e=V();l(0,"button",79),E("click",function(){B(e);let t=p();return w(t.closeModal())}),c(1),m(2,"translate"),r()}i&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function tr(i,s){i&1&&(c(0),m(1,"translate")),i&2&&y(" ",g(1,1,"form.button_save")," ")}function ir(i,s){i&1&&C(0,"i",78)}function nr(i,s){if(i&1){let e=V();l(0,"button",77),E("click",function(){B(e);let t=p(2);return w(t.save())}),u(1,tr,2,3),u(2,ir,1,0,"i",78),r()}if(i&2){let e=p(2);x("disabled",e.saveInProgress()||e.loading()||e.hasValidationErrors),o(),_(e.saveInProgress()?-1:1),o(),_(e.saveInProgress()?2:-1)}}function or(i,s){if(i&1){let e=V();l(0,"button",81),E("click",function(){B(e);let t=p(2);return w(t.openPluginConfig())}),c(1),m(2,"translate"),r()}i&2&&(o(),y(" ",g(2,1,"plugins.button_settings")," "))}function ar(i,s){if(i&1&&(u(0,nr,3,3,"button",11),u(1,or,3,3,"button",80)),i&2){let e=p();_(e.configBlocks().length?0:-1),o(),_(e.configBlocks().length?-1:1)}}var Fi=(()=>{class i{$activeModal=b(q);$api=b(N);$modal=b(le);$plugin=b(Be);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(L);modalData=b(ct);plugin=this.modalData.plugin;schema=this.modalData.schema;justInstalled=this.modalData.justInstalled??!1;loading=v(!0,{});canConfigure=v(!0,{});saveInProgress=v(!1,{});configBlocks=v([],{});selectedBlock=v("0",{});isPlatform=v(!1,{});enabledBlocks=v({},{});matterEnabledBlocks=v({},{});matterExplicitlyDisabledBeforeChildBridge=new Set;bridgeConfigs=new Map;originalScheduledRestartCrons=new Map;originalHideAlerts=new Map;bridgeCache=v(new Map,{});originalBridges=v([],{});deviceInfo=v(new Map,{});matterBridgeCache=v(new Map,{});originalMatterBridges=v([],{});matterDeviceInfo=v(new Map,{});deleteMatterBridges=v([],{});canShowBridgeDebug=v(!1,{});deleteBridges=v([],{});deletingPairedBridge=v(!1,{});accessoryBridgeLinks=v([],{});bridgesAvailableForLink=v([],{});currentlySelectedLink=v(null,{});currentBridgeHasLinks=v(!1,{});isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");defaultIcon="assets/hb-icon.png";linkChildBridges='<a href="https://github.com/homebridge/homebridge/wiki/Child-Bridges" target="_blank"><i class="fas fa-external-link-alt primary-text"></i></a>';linkDebug='<a href="https://github.com/homebridge/homebridge-config-ui-x/wiki/Debug-Common-Values" target="_blank"><i class="fa fa-external-link-alt primary-text"></i></a>';linkCron='<a href="https://crontab.guru/" target="_blank" rel="noopener noreferrer"><i class="fa fa-external-link-alt primary-text"></i></a>';ngOnInit(){this.initialize()}handleIconError(){this.plugin&&(this.plugin.icon=this.defaultIcon)}onBlockChange(e){this.selectedBlock.set(e);let n=this.configBlocks(),t=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(d=>d.index===e)||null),this.currentBridgeHasLinks.set(this.accessoryBridgeLinks().some(d=>d.usesIndex===e));let a=[];if(n[Number(e)].accessory)for(let[d,h]of Array.from(this.bridgeCache().entries()))t[d]&&!this.deleteBridges().some(f=>f.id===h.username)&&d<Number(e)&&a.push({index:d.toString(),usesIndex:e,name:h.name,port:h.port,username:h.username});this.bridgesAvailableForLink.set(a)}onLinkBridgeChange(e){if(e){let n=this.configBlocks(),t=this.selectedBlock(),a=n.findIndex(h=>h._bridge?.username===e);this.accessoryBridgeLinks.update(h=>[...h,{index:t,usesIndex:a.toString(),name:this.bridgeCache().get(a)?.name,port:this.bridgeCache().get(a)?.port,username:e}]),this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(h=>h.index===t)||null),this.enabledBlocks.update(h=>A(D({},h),{[Number(t)]:!0}));let d=n[Number(t)];d._bridge={username:e}}}initialize(){return S(this,null,function*(){try{yield Promise.all([this.getPluginType(),this.loadPluginConfig(),this.loadBridgeConfigs()]),this.canShowBridgeDebug.set(this.$settings.isFeatureEnabled("childBridgeDebugMode"))}catch(e){console.error("Failed to initialize:",e);let n=e instanceof Error?e.message:"Failed to initialize component";this.$toastr.error(n,this.$translate.instant("toast.title_error"))}finally{this.loading.set(!1)}})}getPluginType(){return S(this,null,function*(){let e=this.plugin;if(e)try{let n=yield this.$api.get(`/plugins/alias/${encodeURIComponent(e.name)}`);this.isPlatform.set(n.pluginType==="platform")}catch(n){console.error(n);let t=n instanceof Error?n.message:"Failed to load plugin type";this.$toastr.error(t,this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}loadPluginConfig(){return S(this,null,function*(){let e=this.plugin;if(e)try{let n=yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`);this.configBlocks.set(n);for(let[f,M]of n.entries()){if(M._bridge&&this.enabledBlocks.update($=>A(D({},$),{[f]:!0})),M._bridge&&M._bridge.username){let $=Array.from(this.bridgeCache().entries()).find(([,H])=>H.username===M._bridge.username),ge=$?$[0]:-1,O=$?$[1]:void 0;if(O)M._bridge.env={},this.accessoryBridgeLinks.update(H=>[...H,{index:f.toString(),usesIndex:ge.toString(),name:O.name,port:O.port,username:M._bridge.username}]);else{if(M._bridge.env=M._bridge.env||{},this.bridgeCache.update(H=>new Map(H).set(f,M._bridge)),yield this.getDeviceInfo(M._bridge.username),!M._bridge.name){let H=this.deviceInfo().get(M._bridge.username);H&&(M._bridge.name=H.displayName)}this.originalBridges.update(H=>[...H,JSON.parse(JSON.stringify(M._bridge))])}}M._bridge&&M._bridge.matter&&(M.accessory?delete M._bridge.matter:(this.matterEnabledBlocks.update($=>A(D({},$),{[f]:!0})),this.matterBridgeCache.update($=>new Map($).set(f,{port:M._bridge.matter.port})),this.originalMatterBridges.update($=>[...$,{port:M._bridge.matter.port}]),M._bridge.username&&(yield this.getMatterCommissioningInfo(M._bridge.username))))}this.justInstalled&&this.bridgeCache().size===0&&n.forEach((f,M)=>{this.enabledBlocks.update($=>A(D({},$),{[M]:!0})),this.toggleExternalBridge(f,!0,M.toString())}),this.accessoryBridgeLinks().find(f=>f.username===this.bridgeCache().get(Number(this.selectedBlock()))?.username)&&this.currentBridgeHasLinks.set(!0);let a=this.selectedBlock(),d=this.enabledBlocks();this.currentlySelectedLink.set(this.accessoryBridgeLinks().find(f=>f.index===a)||null);let h=[];if(n[Number(a)]?.accessory)for(let[f,M]of Array.from(this.bridgeCache().entries()))d[f]&&!this.deleteBridges().some($=>$.id===M.username)&&f<Number(a)&&h.push({index:f.toString(),usesIndex:a,name:M.name,port:M.port,username:M.username});this.bridgesAvailableForLink.set(h)}catch(n){this.canConfigure.set(!1),console.error(n)}})}toggleExternalBridge(e,n,t){return S(this,null,function*(){let a=this.plugin;if(a){if(n){let d=this.bridgeCache().get(Number(t)),h=this.matterBridgeCache().get(Number(t));if(e._bridge={username:d?d.username:this.generateUsername(),port:yield this.getUnusedPort(),name:d?.name||this.sanitizeBridgeName(a.displayName||a.name),model:d?.model,manufacturer:d?.manufacturer,firmwareRevision:d?.firmwareRevision,debugModeEnabled:d?.debugModeEnabled,env:d?.env||{}},h&&!this.matterExplicitlyDisabledBeforeChildBridge.has(Number(t))&&(e._bridge.matter={port:h.port??(yield this.getUnusedMatterPort())},this.matterEnabledBlocks.update(f=>A(D({},f),{[Number(t)]:!0})),e._bridge.username&&(this.originalMatterBridges().some(M=>M.port===h.port)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update(M=>new Map(M).set(e._bridge.username,{port:h.port}))),e._bridge.username)){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges.update(M=>M.filter($=>$.identifier!==f))}this.deleteBridges().some(f=>f.id===e._bridge.username)&&this.deleteBridges.update(f=>f.filter(M=>M.id!==e._bridge.username)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.bridgeCache.update(f=>new Map(f).set(Number(t),e._bridge)),yield this.getDeviceInfo(e._bridge.username),this.enabledBlocks.update(f=>A(D({},f),{[Number(t)]:!0}))}else{if(this.enabledBlocks.update(d=>A(D({},d),{[Number(t)]:!1})),e._bridge?.matter&&this.matterEnabledBlocks()[Number(t)]&&this.matterBridgeCache.update(d=>new Map(d).set(Number(t),{port:e._bridge.matter.port})),this.accessoryBridgeLinks().some(d=>d.index===t))this.accessoryBridgeLinks.update(d=>d.filter(h=>h.index!==t)),this.currentlySelectedLink.set(null);else{let d=this.originalBridges().find(h=>h.username===e._bridge.username);if(d&&!this.deleteBridges().some(h=>h.id===e._bridge.username)){let h=this.deviceInfo().get(e._bridge.username);this.deleteBridges.update(f=>[...f,{id:e._bridge.username,bridgeName:e._bridge.name||d.displayName,paired:h?h._isPaired:!1}])}if(e._bridge?.username){let h=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges().some(M=>M.identifier===h)&&this.matterExplicitlyDisabledBeforeChildBridge.add(Number(t))}if(e._bridge?.matter&&e._bridge.username&&this.originalMatterBridges().some(f=>f.port===e._bridge.matter.port)){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");if(!this.deleteMatterBridges().some(M=>M.identifier===f)){let M=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update($=>[...$,{username:e._bridge.username,identifier:f,name:M}])}}}this.matterEnabledBlocks.update(d=>A(D({},d),{[Number(t)]:!1})),delete e._bridge}this.deletingPairedBridge.set(this.deleteBridges().some(d=>d.paired))}})}get hasValidationErrors(){let e=this.configBlocks(),n=this.enabledBlocks();for(let[t,a]of e.entries())if(n[t]&&a._bridge?.username&&(this.getHapNameValidationError(t.toString())||this.getHapPortValidationError(t.toString())))return!0;return!1}getUnusedPort(){return S(this,null,function*(){try{return(yield this.$api.get("/server/port/new")).port}catch{return Math.floor(Math.random()*30001+3e4)}})}getUnusedMatterPort(){return S(this,null,function*(){try{return(yield this.$api.get("/server/port/new/matter")).port}catch{return Math.floor(Math.random()*12+5530)}})}getDeviceInfo(e){return S(this,null,function*(){try{let n=yield this.$api.get(`/server/pairings/${e.replace(/:/g,"")}`);this.deviceInfo.update(t=>new Map(t).set(e,n))}catch(n){console.error(n),this.deviceInfo.update(t=>new Map(t).set(e,!1))}})}sanitizeBridgeName(e){if(!e)return e;let n=e.replace(/[^\p{L}\p{N} ']/gu,"");return n=n.replace(/^[ ']+|[ ']+$/g,""),n=n.replace(/^[^\p{L}\p{N}]+|[^\p{L}\p{N}]+$/gu,""),n}getMatterCommissioningInfo(e){return S(this,null,function*(){try{let t=(yield this.$api.get("/status/homebridge/child-bridges")).find(a=>a.username===e);t&&t.matterSetupUri?this.matterDeviceInfo.update(a=>new Map(a).set(e,{setupUri:t.matterSetupUri,pin:t.matterPin,serialNumber:t.matterSerialNumber,commissioned:t.matterCommissioned,deviceCount:t.matterDeviceCount,port:t.matterConfig?.port})):this.matterDeviceInfo.update(a=>new Map(a).set(e,{port:t?.matterConfig?.port}))}catch(n){console.error(n),this.matterDeviceInfo.update(t=>new Map(t).set(e,{}))}})}toggleMatterBridge(e,n,t){return S(this,null,function*(){let a=this.plugin;if(a){if(e.accessory){this.matterEnabledBlocks.update(d=>A(D({},d),{[Number(t)]:!1}));return}if(n){this.matterEnabledBlocks.update(f=>A(D({},f),{[Number(t)]:!0}));let d=this.matterBridgeCache().get(Number(t));e._bridge||(e._bridge={env:{}});let h;if(d?.port?h=d.port:h=yield this.getUnusedMatterPort(),e._bridge.matter={port:h},this.matterBridgeCache.update(f=>new Map(f).set(Number(t),{port:h})),e._bridge.username){let f=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,"");this.deleteMatterBridges.update($=>$.filter(ge=>ge.identifier!==f)),this.matterExplicitlyDisabledBeforeChildBridge.delete(Number(t)),this.originalMatterBridges().some($=>$.port===h)?yield this.getMatterCommissioningInfo(e._bridge.username):this.matterDeviceInfo.update($=>new Map($).set(e._bridge.username,{port:h}))}}else{this.matterEnabledBlocks.update(h=>A(D({},h),{[Number(t)]:!1}));let d=this.originalMatterBridges().some(h=>e._bridge?.matter&&h.port===e._bridge.matter.port);if(e._bridge&&e._bridge.matter&&(this.matterBridgeCache.update(h=>new Map(h).set(Number(t),{port:e._bridge.matter.port})),delete e._bridge.matter),e._bridge?.username&&(this.matterDeviceInfo.update(h=>new Map(h).set(e._bridge.username,null)),d)){let h=e._bridge.username.replace(/[^a-z0-9]/gi,"-").replace(/-+/g,"-").replace(/^-|-$/g,""),f=e._bridge.name||a.displayName||a.name;this.deleteMatterBridges.update(M=>[...M,{username:e._bridge.username,identifier:h,name:f}])}e._bridge&&Object.keys(e._bridge).length===0&&delete e._bridge}}})}getMatterPortValidationError(e){let n=this.configBlocks()[Number(e)],t=n._bridge?.matter?.port;if(!t&&t!==0)return!1;if(typeof t!="number"||!Number.isInteger(t)||t<1024||t>65535||[5353,8080,8443].includes(t))return!0;let a=n._bridge?.port;return a&&t===a}getHapNameValidationError(e){let n=this.configBlocks()[Number(e)];if(!n._bridge?.name)return!1;let t=n._bridge.name;return!/^[\p{L}\p{N}][\p{L}\p{N} ']*[\p{L}\p{N}]$/u.test(t)}getHapPortValidationError(e){let n=this.configBlocks(),t=this.enabledBlocks(),a=n[Number(e)],d=a._bridge?.port;if(!d&&d!==0)return!1;if(typeof d!="number"||!Number.isInteger(d)||d<1025||d>65533)return!0;for(let[f,M]of n.entries())if(f.toString()!==e&&t[f]&&M._bridge?.port===d)return!0;let h=a._bridge?.matter?.port;return h&&d===h}normalizeMatterConfig(e){e._bridge?.matter&&(!e._bridge.matter.port&&e._bridge.matter.port!==0&&(e._bridge.matter.port=void 0),e._bridge.matter.port===void 0&&delete e._bridge.matter)}save(){return S(this,null,function*(){let e=this.plugin;if(e){this.saveInProgress.set(!0);try{let n=this.configBlocks(),t=this.matterEnabledBlocks();for(let[O,H]of n.entries()){if(H._bridge?.username){if(this.getHapNameValidationError(O.toString())){this.$toastr.error(this.$translate.instant("plugins.bridge.name_error"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1);return}if(this.getHapPortValidationError(O.toString())){this.$toastr.error(this.$translate.instant("plugins.bridge.port_error",{type:"HAP"}),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1);return}}if(t[O]&&this.getMatterPortValidationError(O.toString())){this.$toastr.error(this.$translate.instant("plugins.bridge.port_error",{type:"Matter"}),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1);return}this.normalizeMatterConfig(H)}yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(e.name)}`,n);for(let O of this.deleteBridges())try{yield this.$api.delete(`/server/pairings/${O.id.replace(/:/g,"")}`)}catch(H){console.error(H),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let a=this.deleteMatterBridges().filter(O=>!this.deleteBridges().some(H=>H.id===O.username));for(let O of a)try{let H=O.username.replace(/:/g,"");yield this.$api.delete(`/server/pairings/${H}/matter`)}catch(H){console.error(H),this.$toastr.error(this.$translate.instant("settings.reset_bridge.error"),this.$translate.instant("toast.title_error"))}let d=this.hasScheduledRestartCronChanged(),h=this.hasHideAlertsChanged(),f=this.hasBridgeConfigChanged(),M=this.deleteBridges().length>0||this.deleteMatterBridges().length>0,$=!d&&!h&&!f&&!M,ge=h&&!d&&!f&&!M;for(let[O,H]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(yt=>yt.id===O))continue;let we=this.originalHideAlerts.get(O),Le=!!H.hideHapAlert,Ue=!!H.hideMatterAlert,$t=we?!!we.hideHapAlert:!1,je=we?!!we.hideMatterAlert:!1;try{Le!==$t&&(yield this.saveHideAlert(O,"hap",Le)),Ue!==je&&(yield this.saveHideAlert(O,"matter",Ue))}catch(yt){console.error(yt)}}for(let[O,H]of this.bridgeConfigs.entries()){if(this.deleteBridges().some(je=>je.id===O))continue;let we=H.scheduledRestartCron||null,Le=this.originalScheduledRestartCrons.get(O)||null,Ue=we===""?null:we;if(Ue!==(Le===""?null:Le))try{yield this.saveScheduledRestartCron(O,Ue)}catch(je){console.error(je)}}if(d)try{yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{})}catch(O){console.error(O)}$?this.$activeModal.close():ge?this.$activeModal.close("refresh"):(this.$activeModal.close(),this.$modal.open(ue,{size:"lg",backdrop:"static"}))}catch(n){console.error(n);let t=n instanceof Error?n.message:"Failed to save configuration";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}finally{this.saveInProgress.set(!1)}}})}openPluginConfig(){let e=this.plugin;e&&(this.$activeModal.close(),this.$plugin.settings({name:e.name,settingsSchema:!0,links:{}}))}generateUsername(){let e="0123456789ABCDEF",n="0E:";for(let t=0;t<5;t+=1)n+=e.charAt(Math.round(Math.random()*15)),n+=e.charAt(Math.round(Math.random()*15)),t!==4&&(n+=":");return n}openFullConfigEditor(){this.$router.navigate(["/config"]),this.$activeModal.close()}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close("Dismiss")}getMatterBridgeName(e){let n=this.configBlocks().find(t=>t._bridge?.username===e);return n?._bridge?.name?n._bridge.name:n.name||n.platform||n.accessory}loadBridgeConfigs(){return S(this,null,function*(){let e=this.$settings.env.bridges||[];this.bridgeConfigs.clear(),this.originalScheduledRestartCrons.clear(),this.originalHideAlerts.clear();for(let n of e){let t=n.username.toUpperCase();this.bridgeConfigs.set(t,n),this.originalScheduledRestartCrons.set(t,n.scheduledRestartCron||null),this.originalHideAlerts.set(t,{hideHapAlert:n.hideHapAlert,hideMatterAlert:n.hideMatterAlert})}})}isUnpairingHidden(e,n){let t=this.bridgeConfigs.get(e.toUpperCase());return t?n==="hap"?!!t.hideHapAlert:!!t.hideMatterAlert:!1}toggleHideUnpairing(e,n){let t=e.toUpperCase(),d=!this.isUnpairingHidden(e,n),h=this.bridgeConfigs.get(t);h||(h={username:t},this.bridgeConfigs.set(t,h)),n==="hap"?d?h.hideHapAlert=!0:delete h.hideHapAlert:d?h.hideMatterAlert=!0:delete h.hideMatterAlert}getScheduledRestartCron(e){return e&&this.bridgeConfigs.get(e.toUpperCase())?.scheduledRestartCron||""}onScheduledRestartCronChange(e,n){if(!n)return;let t=n.toUpperCase(),a=this.bridgeConfigs.get(t);a||(a={username:t},this.bridgeConfigs.set(t,a));let d=e?.trim();d?a.scheduledRestartCron=d:delete a.scheduledRestartCron}hasScheduledRestartCronChanged(){for(let[e,n]of this.bridgeConfigs.entries()){let t=n.scheduledRestartCron||null,a=this.originalScheduledRestartCrons.get(e)||null;if((t===""?null:t)!==(a===""?null:a))return!0}return!1}hasBridgeConfigChanged(){let e=this.configBlocks();if(e.length!==this.originalBridges().length)return!0;for(let[,n]of e.entries()){if(!n._bridge)continue;let t=this.originalBridges().find(M=>M.username===n._bridge.username);if(!t||n._bridge.name!==t.name||n._bridge.port!==t.port||n._bridge.model!==t.model||n._bridge.manufacturer!==t.manufacturer||n._bridge.firmwareRevision!==t.firmwareRevision||n._bridge.debugModeEnabled!==t.debugModeEnabled)return!0;let a=n._bridge.env||{},d=t.env||{};if(a.DEBUG!==d.DEBUG||a.NODE_OPTIONS!==d.NODE_OPTIONS)return!0;let h=!!n._bridge.matter,f=!!t.matter;if(h!==f||h&&f&&n._bridge.matter.port!==t.matter.port)return!0}return!1}hasHideAlertsChanged(){for(let[e,n]of this.bridgeConfigs.entries()){let t=this.originalHideAlerts.get(e),a=!!n.hideHapAlert,d=!!n.hideMatterAlert,h=t?!!t.hideHapAlert:!1,f=t?!!t.hideMatterAlert:!1;if(a!==h||d!==f)return!0}return!1}updateLocalBridgeConfig(e,n){let t=e.toUpperCase(),a=this.$settings.env.bridges||[],d=a.findIndex(h=>h.username.toUpperCase()===t);d!==-1?Object.assign(a[d],n):a.push(D({username:t},n)),this.$settings.env.bridges=a}saveHideAlert(e,n,t){return S(this,null,function*(){let a=e.toUpperCase(),d=n==="hap"?`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-hap-alert`:`/config-editor/ui/bridges/${encodeURIComponent(a)}/hide-matter-alert`;try{yield this.$api.put(d,{value:t}),this.updateLocalBridgeConfig(a,{hideHapAlert:t})}catch(h){throw console.error(`Failed to update hide ${n} alert:`,h),h}})}saveScheduledRestartCron(e,n){return S(this,null,function*(){let t=e.toUpperCase();try{if(yield this.$api.put(`/config-editor/ui/bridges/${encodeURIComponent(t)}/scheduled-restart-cron`,{value:n||null}),n)this.updateLocalBridgeConfig(t,{scheduledRestartCron:n});else{let a=this.$settings.env.bridges||[],d=a.findIndex(h=>h.username.toUpperCase()===t);d!==-1&&(delete a[d].scheduledRestartCron,this.$settings.env.bridges=a)}}catch(a){throw console.error("Failed to update scheduled restart cron:",a),a}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:16,vars:8,consts:[["bridgeLinkSelect",""],[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button",1,"btn","btn-primary",3,"disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],["alt","Plugin Icon",1,"mb-3","plugin-icon-card",3,"error","src"],[1,"mb-3"],[3,"innerHTML"],["type","error",1,"mt-3","mb-0",3,"dismissible"],["type","info",3,"dismissible"],["type","info",1,"mb-0",3,"dismissible"],[1,"list-group","list-group-box","mb-0"],[1,"list-group","list-group-box","mt-3","mb-0"],[1,"list-group-item","d-flex","flex-column","flex-md-row","align-items-center"],[1,"list-group-item","d-flex","justify-content-between","align-items-center","flex-row","pb-2"],[1,"list-group-item","text-center","grey-text","small"],["for","bridgeSelect",1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50"],["id","bridgeSelect",1,"custom-select",3,"ngModelChange","ngModel"],[3,"value"],["for","bridgeLink",1,"mb-2","mb-md-0","w-100","w-md-50"],["id","bridgeLink",1,"custom-select",3,"change"],[1,"mb-2","mb-md-0","w-100","w-md-50"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text"],[1,"text-end","grey-text","d-flex","align-items-center"],["type","checkbox",1,"rendux-input",3,"change","id","checked"],[1,"rendux-label",3,"for"],[1,"text-start","text-md-end","w-100","w-md-50","grey-text","font-monospace"],["type","text",1,"form-control","custom-input",3,"ngModelChange","ngModel"],["type","text",1,"form-control","custom-input",3,"ngModelChange","placeholder","ngModel"],[1,"badge","badge-primary","ms-1"],[1,"grey-text",3,"innerHtml"],[1,"text-start","text-md-end","w-100","w-md-50","d-flex","flex-column","align-items-end"],["type","text","placeholder","mm hh dd MM ww","maxlength","30",1,"form-control","custom-input","font-monospace",3,"input","value"],[1,"font-monospace"],[1,"grey-text",3,"innerHTML"],["type","text","placeholder","HAP-NodeJS:Advertiser,HAP-NodeJS:Service",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"grey-text"],["type","text","placeholder","--max-old-space-size=512 --max-http-header-size=8192",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],["type","checkbox",1,"rendux-input",3,"ngModelChange","id","ngModel"],[1,"fas","fa-xl","fa-hap","me-2","my-2"],[1,"text-end","grey-text","d-flex","align-items-center",2,"opacity","0.5","cursor","not-allowed"],["type","checkbox",1,"rendux-input",2,"pointer-events","none",3,"id","checked","disabled"],[1,"rendux-label",2,"cursor","not-allowed",3,"for"],[1,"list-group-item","text-center"],["type","number","min","1025","max","65533",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"w-100","d-flex","flex-column","text-center"],[1,"mx-auto","d-flex","align-items-center","justify-content-center","qr-code-placeholder","primary-text","p-3"],[1,"text-center","grey-text"],[1,"fas","fa-qrcode","fa-2x","mb-2","primary-text"],[1,"text-center","small","grey-text"],[1,"mx-auto",2,"width","175px","height","175px",3,"data"],[1,"mx-auto","mt-3","mb-1","font-monospace"],[1,"grey-text","mx-auto","small","mb-1",2,"max-width","400px"],[1,"fas","fa-link"],[1,"fas","fa-xl","fa-matter","me-2","my-2"],[1,"list-group-item"],[1,"grey-text","small"],["type","number","min","1024","max","65535","placeholder","e.g. 5540",1,"form-control","custom-input","font-monospace",3,"ngModelChange","ngModel"],[1,"mx-auto","d-flex","align-items-center","justify-content-center","qr-code-placeholder","primary-text"],[1,"d-inline-block","text-start","mb-0"],[1,"fas","fa-lg","fa-hap","me-1"],[1,"grey-text","font-monospace"],[1,"fas","fa-lg","fa-matter","me-1"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click"]],template:function(n,t){n&1&&(l(0,"div",1)(1,"div",2)(2,"h5",3),c(3),r(),u(4,ua,2,4,"button",4),r(),l(5,"div",5),u(6,_a,2,0,"div",6),u(7,Qa,10,12),r(),l(8,"div",7)(9,"div",8),u(10,Ya,3,4,"button",9),r(),l(11,"div",10),u(12,Za,4,5,"button",11),u(13,er,3,3,"button",12),r(),l(14,"div",13),u(15,ar,2,2),r()()()),n&2&&(o(3),k(t.plugin.displayName||t.plugin.name),o(),_(t.justInstalled?-1:4),o(2),_(t.loading()?6:-1),o(),_(t.loading()?-1:7),o(3),_(t.canConfigure()&&!t.justInstalled?10:-1),o(2),_(t.justInstalled?12:-1),o(),_(t.canConfigure()?-1:13),o(2),_(t.canConfigure()&&!t.justInstalled?15:-1))},dependencies:[Ce,tt,it,qt,Jt,Te,et,he,Yt,Qt,be,Ie,gi,j],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}.qr-code-placeholder[_ngcontent-%COMP%]{width:175px;height:175px;border:2px solid currentColor;border-radius:8px;background-color:#f8f9fa;padding:20px} body.dark-mode .qr-code-placeholder, [class*=config-ui-x-dark-mode] .qr-code-placeholder{background-color:#1a1a1a}"]})}return i})();var Pt=Z(dt(),1);var xt=()=>["homebridge","homebridge-config-ui-x"],Li=(i,s,e)=>({pluginName:i,minVersion:s,installedVersion:e}),rr=(i,s,e)=>({minVersion:i,installedVersion:s,latestVersion:e,packageName:"Homebridge"}),lr=()=>({packageName:"Homebridge"}),sr=(i,s,e)=>({minVersion:i,installedVersion:s,latestVersion:e,packageName:"Homebridge UI"}),dr=()=>({packageName:"Homebridge UI"});function cr(i,s){if(i&1&&(l(0,"li",14)(1,"div",17),C(2,"i",18),r(),l(3,"div",19),c(4),m(5,"translate"),r()()),i&2){let e=p(2);o(4),y(" ",z(5,1,"plugins.compat.node_too_low",re(4,Li,e.plugin.displayName,e.nodeMinVersion,e.nodeInstalledVersion))," ")}}function mr(i,s){if(i&1&&(l(0,"li",14)(1,"div",17),C(2,"i",18),r(),l(3,"div",19),c(4),m(5,"translate"),r()()),i&2){let e=p(2);o(4),y(" ",z(5,1,"plugins.compat.hb_too_low",re(4,Li,e.plugin.displayName,e.hbMinVersion,e.hbInstalledVersion))," ")}}function pr(i,s){if(i&1&&(l(0,"div",11),C(1,"i",12),r(),l(2,"ul",13),u(3,cr,6,8,"li",14),u(4,mr,6,8,"li",14),r(),l(5,"ngb-alert",15)(6,"p",16),c(7),m(8,"translate"),r()()),i&2){let e=p();o(),G(Ot("",e.action==="install"?"far fa-arrow-alt-circle-down":e.action==="update"?"far fa-arrow-alt-circle-up":"fas fa-code-compare"," primary-text")),o(2),_(e.isValidNode?-1:3),o(),_(e.isValidHb?-1:4),o(),x("dismissible",!1),o(2),k(g(8,7,"common.phrases.are_you_sure"))}}function gr(i,s){if(i&1&&(l(0,"div",11),C(1,"i",20),r(),l(2,"ul",13)(3,"li",14)(4,"div",17),C(5,"i",18),r(),l(6,"div",19),c(7),m(8,"translate"),r()()(),l(9,"ngb-alert",15)(10,"p",21),c(11),m(12,"translate"),r(),l(13,"p",16)(14,"a",22),c(15),m(16,"translate"),C(17,"i",23),r()()()),i&2){let e=p();o(7),y(" ",z(8,4,"plugins.compat.hb_node_too_low",re(12,rr,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion))," "),o(2),x("dismissible",!1),o(2),k(z(12,7,"plugins.compat.node_first",oe(16,lr))),o(4),y(" ",g(16,10,"plugins.compat.node_link")," ")}}function ur(i,s){if(i&1&&(l(0,"div",11),C(1,"i",20),r(),l(2,"ul",13)(3,"li",14)(4,"div",17),C(5,"i",18),r(),l(6,"div",19),c(7),m(8,"translate"),r()()(),l(9,"ngb-alert",15)(10,"p",21),c(11),m(12,"translate"),r(),l(13,"p",16)(14,"a",22),c(15),m(16,"translate"),C(17,"i",23),r()()()),i&2){let e=p();o(7),y(" ",z(8,4,"plugins.compat.hb_node_too_low",re(12,sr,e.nodeMinVersion,e.nodeInstalledVersion,e.plugin.latestVersion))," "),o(2),x("dismissible",!1),o(2),k(z(12,7,"plugins.compat.node_first",oe(16,dr))),o(4),y(" ",g(16,10,"plugins.compat.node_link")," ")}}function _r(i,s){if(i&1){let e=V();l(0,"button",24),E("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),r()}i&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function fr(i,s){if(i&1){let e=V();l(0,"button",24),E("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),r()}i&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function hr(i,s){if(i&1){let e=V();l(0,"button",25),E("click",function(){B(e);let t=p();return w(t.closeModal())}),c(1),m(2,"translate"),r()}i&2&&(o(),y(" ",g(2,1,"form.button_continue")," "))}var Ui=(()=>{class i{$activeModal=b(q);$settings=b(W);modalData=b(ut);plugin=this.modalData.plugin;isValidNode=this.modalData.isValidNode??!1;isValidHb=this.modalData.isValidHb??!1;action=this.modalData.action??null;nodeMinVersion;nodeInstalledVersion;hbMinVersion;hbInstalledVersion;ngOnInit(){let e=this.plugin;if(!e){console.error("PluginCompatibilityComponent: plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.nodeMinVersion=(0,Pt.minVersion)(e.updateEngines?.node),this.nodeInstalledVersion=this.$settings.env.nodeVersion,this.hbMinVersion=(0,Pt.minVersion)(e.updateEngines?.homebridge),this.hbInstalledVersion=this.$settings.env.homebridgeVersion}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close(!0)}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:18,vars:16,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger"],[1,"text-center","mb-3"],[2,"font-size","75px"],[1,"list-group","list-group-box","mb-3","text-start"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],["type","warning",1,"mb-0",3,"dismissible"],[1,"text-center","mb-0"],[1,"me-3"],[1,"fas","fa-exclamation-circle","orange-text","fa-xl"],[1,"text-start","flex-grow-1"],[1,"fab","fa-node-js","primary-text",2,"font-size","75px"],[1,"text-center","mb-1"],["href","https://homebridge.io/w/JTKEF","target","_blank","rel","noopener noreferrer"],[1,"fa","fa-external-link-alt"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click"]],template:function(n,t){n&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),r(),l(5,"button",3),m(6,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(7,"div",4),u(8,pr,9,9),u(9,gr,18,17),u(10,ur,18,17),r(),l(11,"div",5)(12,"div",6),u(13,_r,3,3,"button",7),r(),l(14,"div",8),u(15,fr,3,3,"button",7),r(),l(16,"div",9),u(17,hr,3,3,"button",10),r()()()),n&2&&(o(3),k(g(4,8,"plugins.compat.title")),o(2),P("aria-label",g(6,10,"form.button_close")),o(3),_(t.plugin&&!oe(12,xt).includes(t.plugin.name)?8:-1),o(),_(t.plugin&&t.plugin.name==="homebridge"?9:-1),o(),_(t.plugin&&t.plugin.name==="homebridge-config-ui-x"?10:-1),o(3),_(t.plugin&&!oe(13,xt).includes(t.plugin.name)?13:-1),o(2),_(t.plugin&&oe(14,xt).includes(t.plugin.name)?15:-1),o(2),_(t.plugin&&!oe(15,xt).includes(t.plugin.name)?17:-1))},dependencies:[Ie,j],encapsulation:2})}return i})();var ji=Z(Ge(),1);var Hi=(()=>{class i{$api=b(N);$toastr=b(U);$translate=b(L);downloadDumpFile(){return S(this,null,function*(){try{let e=yield this.$api.get("/plugins/custom-plugins/homebridge-deconz/dump-file",{observe:"response",responseType:"blob"});(0,ji.saveAs)(e.body,"homebridge-deconz.json.gz")}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.settings.deconz.dump_no_exist"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["app-homebridge-deconz"]],decls:4,vars:3,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-download"]],template:function(n,t){n&1&&(T(0,"button",0),ne("click",function(){return t.downloadDumpFile()}),J(1,"i",1),c(2),m(3,"translate"),I()),n&2&&(o(2),y(" ",g(3,1,"plugins.settings.custom.download_dump_file "),`
|
|
14
|
-
`))},dependencies:[j],encapsulation:2})}return i})();var Oi=Z(Ge(),1);var Ri=(()=>{class i{$api=b(N);$translate=b(L);$toastr=b(U);downloadDumpFile(){return S(this,null,function*(){try{let e=yield this.$api.get("/plugins/custom-plugins/homebridge-hue/dump-file",{observe:"response",responseType:"blob"});(0,Oi.saveAs)(e.body,"homebridge-hue.json.gz")}catch(e){console.error(e),this.$toastr.error(this.$translate.instant("plugins.settings.hue.dump_no_exist"),this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["app-homebridge-hue"]],decls:4,vars:3,consts:[["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant","m-0",3,"click"],[1,"fas","fa-download"]],template:function(n,t){n&1&&(T(0,"button",0),ne("click",function(){return t.downloadDumpFile()}),J(1,"i",1),c(2),m(3,"translate"),I()),n&2&&(o(2),y(" ",g(3,1,"plugins.settings.custom.download_dump_file "),`
|
|
15
|
-
`))},dependencies:[j],encapsulation:2})}return i})();var zi=(i,s,e)=>({"fa-circle-check green-text":i,"fa-circle-exclamation red-text":s,"fa-circle-exclamation orange-text":e});function br(i,s){if(i&1&&(C(0,"markdown",5),m(1,"interpolateMd")),i&2){let e=p();x("data",g(1,1,e.schema.headerDisplay))}}function Cr(i,s){if(i&1){let e=V();l(0,"button",31),m(1,"translate"),E("click",function(){B(e);let t=p().$implicit,a=p(2);return w(a.removeBlock(t.__uuid__))}),C(2,"i",32),r()}i&2&&x("ngbTooltip",g(1,2,"form.button_delete"))("openDelay",150)}function vr(i,s){if(i&1){let e=V();l(0,"div",19)(1,"div",20)(2,"div",21)(3,"h5",22),c(4),r(),l(5,"div",23),u(6,Cr,3,4,"button",24),l(7,"button",25),m(8,"translate"),C(9,"i",26),r(),C(10,"i",27),m(11,"translate"),r()()(),l(12,"div",28)(13,"div",29)(14,"app-schema-form",30),X("dataChange",function(t){let a=B(e).$implicit;return Y(a.config,t)||(a.config=t),w(t)}),E("isValid",function(t){let a=B(e).$index,d=p(2);return w(d.onIsValid(t,a))}),r()()()()}if(i&2){let e=s.$implicit,n=s.$index,t=p(2);x("ngbAccordionItem",e.__uuid__)("collapsed",t.show()!==e.__uuid__)("id",e.__uuid__),o(4),k(e.name),o(2),_(t.plugin.name!=="homebridge-config-ui-x"&&t.show()===e.__uuid__?6:-1),o(),x("ngbTooltip",g(8,13,"form.button_edit"))("openDelay",150),o(3),G(re(17,zi,t.formBlocksValid()[n],t.strictValidation()&&!t.formBlocksValid()[n],!t.strictValidation()&&!t.formBlocksValid()[n])),x("ngbTooltip",g(11,15,t.formBlocksValid()[n]?"form.label_valid":t.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150),o(4),x("configSchema",t.schema),Q("data",e.config)}}function xr(i,s){if(i&1){let e=V();l(0,"div",18),E("show",function(t){B(e);let a=p();return w(a.blockShown(t))})("hide",function(t){B(e);let a=p();return w(a.blockHidden(t))}),te(1,vr,15,21,"div",19,ee),r()}if(i&2){let e=p();x("closeOthers",!0),o(),ie(e.pluginConfig())}}function yr(i,s){i&1&&C(0,"app-homebridge-deconz")}function Br(i,s){i&1&&C(0,"app-homebridge-hue")}function wr(i,s){if(i&1){let e=V();l(0,"div",7)(1,"app-schema-form",30),X("dataChange",function(t){B(e);let a=p();return Y(a.pluginConfig()[0].config,t)||(a.pluginConfig()[0].config=t),w(t)}),E("isValid",function(t){B(e);let a=p();return w(a.onIsValid(t,0))}),r(),u(2,yr,1,0,"app-homebridge-deconz"),u(3,Br,1,0,"app-homebridge-hue"),r()}if(i&2){let e=p();o(),x("configSchema",e.schema),Q("data",e.pluginConfig()[0].config),o(),_(e.plugin.name==="homebridge-deconz"?2:-1),o(),_(e.plugin.name==="homebridge-hue"?3:-1)}}function kr(i,s){if(i&1&&(l(0,"div",8),C(1,"markdown",5),m(2,"interpolateMd"),r()),i&2){let e=p();o(),x("data",g(2,1,e.schema.footerDisplay))}}function Sr(i,s){if(i&1&&(C(0,"i",33),m(1,"translate")),i&2){let e=p();G(re(6,zi,e.formIsValid(),e.strictValidation()&&!e.formIsValid(),!e.strictValidation()&&!e.formIsValid())),x("ngbTooltip",g(1,4,e.formIsValid()?"form.label_valid":e.strictValidation()?"form.label_invalid_strict":"form.label_invalid"))("openDelay",150)}}function Mr(i,s){if(i&1){let e=V();l(0,"button",34),E("click",function(){B(e);let t=p();return w(t.addBlock())}),C(1,"i",35),r()}}function Er(i,s){i&1&&(l(0,"span"),c(1),m(2,"translate"),r()),i&2&&(o(),k(g(2,1,"form.button_save")))}function Vr(i,s){i&1&&C(0,"i",17)}var Wi=(()=>{class i{$activeModal=b(q);$api=b(N);$cb=b(Ne);$plugin=b(Be);$settings=b(W);$toastr=b(U);$translate=b(L);modalData=b(Se);plugin=this.modalData.plugin;schema=this.modalData.schema;pluginConfig=v([],{});show=v("",{});saveInProgress=v(!1,{});formBlocksValid=v({},{});formIsValid=v(!0,{});strictValidation=v(!1,{});pluginAlias=v("",{});pluginType=v("platform",{});isFirstSave=v(!1,{});form={};ngOnInit(){let e=this.schema,n=this.plugin;if(!e||!n){console.error("PluginConfigComponent: schema or plugin not provided"),this.$activeModal.dismiss("Missing required data");return}this.pluginAlias.set(e.pluginAlias),this.pluginType.set(e.pluginType),this.strictValidation.set(e.strictValidation),this.loadPluginConfig()}save(){return S(this,null,function*(){this.saveInProgress.set(!0);let e=this.pluginConfig().map(t=>t.config),n=this.plugin;if(!n){this.saveInProgress.set(!1);return}try{let t=yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(n.name)}`,e);if(this.saveInProgress.set(!1),n.name==="homebridge-config-ui-x")this.$settings.getAppSettings().catch(()=>{});else if(this.isFirstSave()&&this.$settings.env.recommendChildBridges&&t[0]?.platform){this.$activeModal.close(),this.$plugin.bridgeSettings(n,!0);return}this.$activeModal.close(),yield this.$cb.openCorrectRestartModalForPlugin(n.name)}catch(t){console.error(t),this.$toastr.error(this.$translate.instant("config.failed_to_save_config"),this.$translate.instant("toast.title_error")),this.saveInProgress.set(!1)}})}blockShown(e){this.show.set(e);let n=this.pluginConfig();for(let t of n)t.name=t.config.name||t.name}blockHidden(e){this.show()===e&&this.show.set("")}addBlock(){let e=St(),n=this.schema;this.pluginConfig.update(t=>[...t,{__uuid__:e,name:n.pluginAlias,config:{[this.pluginType()]:n.pluginAlias}}]),this.formBlocksValid.update(t=>A(D({},t),{[this.pluginConfig().length-1]:!1})),this.blockShown(e)}removeBlock(e){let n=this.pluginConfig().findIndex(t=>t.__uuid__===e);this.pluginConfig.update(t=>t.filter(a=>a.__uuid__!==e)),this.formBlocksValid.update(t=>{let a=D({},t);return delete a[n],a}),Object.keys(this.formBlocksValid()).length||this.formIsValid.set(!0)}onIsValid(e,n){this.formBlocksValid.update(t=>A(D({},t),{[n]:e})),this.formIsValid.set(Object.values(this.formBlocksValid()).every(t=>t))}dismissModal(){this.$activeModal.dismiss("Dismiss")}closeModal(){this.$activeModal.close()}loadPluginConfig(){return S(this,null,function*(){let e=this.plugin,n=this.schema;if(!(!e||!n))try{let a=(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(e.name)}`)).map(d=>({__uuid__:St(),name:d.name||n.pluginAlias,config:d}));this.pluginConfig.set(a),this.pluginConfig().length?this.show.set(this.pluginConfig()[0].__uuid__):(this.isFirstSave.set(!0),this.addBlock()),e.name==="homebridge-hue"&&this.pluginConfig().length&&this.homebridgeHueFix(this.pluginConfig()[0].config)}catch(t){console.error(t);let a=t?.error?.message||this.$translate.instant("plugins.config.load_error");this.$toastr.error(a,this.$translate.instant("toast.title_error"))}})}homebridgeHueFix(e){let n=this.schema;if(n&&(n.schema.properties.users={type:"object",properties:{}},!(!e.users||typeof e.users!="object")))for(let t of Object.keys(e.users))n.schema.properties.users.properties[t]={type:"string"}}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:23,vars:18,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body","pb-0"],[1,"plugin-md",3,"data"],["ngbAccordion","",3,"closeOthers"],[1,"card","card-body"],[1,"mt-3"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end","d-flex","align-items-center","justify-content-end"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"class","ngbTooltip","openDelay"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],["ngbAccordion","",3,"show","hide","closeOthers"],[1,"card",3,"ngbAccordionItem","collapsed","id"],["ngbAccordionHeader","",1,"card-header"],[1,"d-flex","align-items-center","justify-content-between"],[1,"m-0"],[1,"d-flex","align-items-center"],["container","modal","placement","left","triggers","hover",1,"btn","btn-danger","ms-2",3,"ngbTooltip","openDelay"],["ngbAccordionToggle","","container","modal","placement","left","triggers","hover",1,"btn","btn-primary","ms-2","me-2",3,"ngbTooltip","openDelay"],[1,"fa","fa-edit"],["container","modal","placement","left","triggers","hover",1,"fa","fa-xl",3,"ngbTooltip","openDelay"],["ngbAccordionCollapse",""],["ngbAccordionBody","",1,"card-body"],[3,"dataChange","isValid","configSchema","data"],["container","modal","placement","left","triggers","hover",1,"btn","btn-danger","ms-2",3,"click","ngbTooltip","openDelay"],[1,"fa","fa-trash"],["container","modal","placement","top","triggers","hover",1,"fa","fa-xl","me-2",3,"ngbTooltip","openDelay"],["type","button","data-dismiss","modal",1,"btn","btn-elegant","me-2",3,"click"],[1,"fa","fa-plus"]],template:function(n,t){n&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,br,2,3,"markdown",5),u(8,xr,3,1,"div",6),u(9,wr,4,4,"div",7),u(10,kr,3,3,"div",8),r(),l(11,"div",9)(12,"div",10)(13,"button",11),E("click",function(){return t.closeModal()}),c(14),m(15,"translate"),r()(),C(16,"div",12),l(17,"div",13),u(18,Sr,2,10,"i",14),u(19,Mr,2,0,"button",15),l(20,"button",16),E("click",function(){return t.save()}),u(21,Er,3,3,"span"),u(22,Vr,1,0,"i",17),r()()()()),n&2&&(o(3),k(t.plugin.displayName||t.plugin.name),o(),x("disabled",t.saveInProgress()),P("aria-label",g(5,14,"form.button_close")),o(3),_(t.schema.headerDisplay?7:-1),o(),_(t.pluginConfig().length&&!t.schema.singular?8:-1),o(),_(t.pluginConfig().length&&t.schema.singular?9:-1),o(),_(t.schema.footerDisplay?10:-1),o(3),x("disabled",t.saveInProgress()),o(),y(" ",g(15,16,"form.button_close")," "),o(4),_(t.schema.singular?18:-1),o(),_(t.schema.singular?-1:19),o(),x("disabled",t.saveInProgress()||!t.formIsValid()&&t.strictValidation()),o(),_(t.saveInProgress()?-1:21),o(),_(t.saveInProgress()?22:-1))},dependencies:[$e,Pe,De,st,lt,rt,xe,ot,nt,Ct,Hi,Ri,at,j,vt],styles:[".manage-plugin-config-external-icons[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;line-height:1;color:#000;opacity:.5;background-color:transparent;border:0}"]})}return i})();var Tr=(i,s)=>({"btn-danger":i,"btn-elegant":s}),Ir=(i,s,e)=>({"fa-broom":i,"fa-undo":s,"fa-spinner fa-pulse":e});function Pr(i,s){i&1&&(T(0,"div",12),J(1,"i",13),I(),T(2,"p",14),c(3),m(4,"translate"),I()),i&2&&(o(3),k(g(4,1,"reset.bridge_accessories.empty")))}function $r(i,s){if(i&1&&J(0,"i",26)(1,"i",27),i&2){let e=p().$implicit;Re("opacity",e._protocol==="matter"&&e._matterOnly?"0.25":"1"),o(),Re("opacity",e._protocol==="matter"?"1":"0.25")}}function Dr(i,s){i&1&&J(0,"i",20)}function Nr(i,s){if(i&1){let e=V();T(0,"li",18)(1,"span",19),u(2,$r,2,4)(3,Dr,1,0,"i",20),I(),T(4,"span",21),c(5),J(6,"br"),T(7,"small",22)(8,"span",23),c(9),I()()(),T(10,"button",24),m(11,"translate"),ne("click",function(){let t=B(e).$implicit,a=p(2);return w(a.toggleList(t._id,t._protocol))}),J(12,"i",25),I()()}if(i&2){let e=s.$implicit,n=p(2);o(2),_(n.isMatterSupported?2:3),o(3),y(" ",e.name," "),o(4),k(e._username),o(),G(ke(11,Tr,!n.isInList(e._id,e._protocol),n.isInList(e._id,e._protocol))),ae("disabled",n.clicked()),P("aria-label",g(11,9,"form.button_delete")),o(2),G(re(14,Ir,!n.isInList(e._id,e._protocol),n.isInList(e._id,e._protocol)&&!n.clicked(),n.isInList(e._id,e._protocol)&&n.clicked()))}}function Ar(i,s){if(i&1&&(T(0,"div",12),J(1,"i",15),I(),T(2,"ul",16)(3,"li"),c(4),m(5,"translate"),I(),T(6,"li"),c(7),m(8,"translate"),I()(),T(9,"ul",17),te(10,Nr,13,18,"li",18,ee),I()),i&2){let e=p();o(4),k(g(5,2,"reset.bridge_accessories.list_1")),o(3),k(g(8,4,"reset.clear_cache_single.list_3")),o(3),ie(e.pairings())}}function Fr(i,s){if(i&1){let e=V();T(0,"button",28),ne("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),I()}if(i&2){let e=p();ae("disabled",e.clicked()),o(),y(" ",g(2,2,"form.button_close")," ")}}function Lr(i,s){if(i&1){let e=V();T(0,"button",29),ne("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(1),m(2,"translate"),I()}i&2&&(o(),y(" ",g(2,1,"form.button_close")," "))}function Ur(i,s){if(i&1&&c(0),i&2){let e=p(3);y(" (",e.toDelete().length,") ")}}function jr(i,s){if(i&1&&(c(0),m(1,"translate"),u(2,Ur,1,1)),i&2){let e=p(2);y(" ",g(1,2,"form.button_reset")," "),o(2),_(e.toDelete().length>0?2:-1)}}function Hr(i,s){i&1&&J(0,"i",31)}function Or(i,s){if(i&1){let e=V();T(0,"button",30),ne("click",function(){B(e);let t=p();return w(t.cleanBridges())}),u(1,jr,3,4),u(2,Hr,1,0,"i",31),I()}if(i&2){let e=p();ae("disabled",!e.toDelete().length||e.clicked()),o(),_(e.clicked()?-1:1),o(),_(e.clicked()?2:-1)}}var qi=(()=>{class i{$activeModal=b(q);$api=b(N);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(L);modalData=b(gt);childBridges=this.modalData.childBridges??[];clicked=v(!1,{});pairings=v([],{});toDelete=v([],{});isMatterSupported=this.$settings.isFeatureEnabled("matterSupport");ngOnInit(){this.loadPairings()}toggleList(e,n){let t=this.toDelete();t.some(a=>a.id===e&&a.protocol===n)?this.toDelete.set(t.filter(a=>a.id!==e||a.protocol!==n)):this.toDelete.update(a=>[...a,{id:e,protocol:n}])}isInList(e,n){return this.toDelete().some(t=>t.id===e&&t.protocol===n)}cleanBridges(){return S(this,null,function*(){this.clicked.set(!0);try{yield this.$api.delete("/server/pairings/accessories",{body:this.toDelete()}),this.$toastr.success(this.$translate.instant("reset.accessory_ind.done"),this.$translate.instant("toast.title_success")),this.$activeModal.close(),this.$router.navigate(["/restart"],{queryParams:{restarting:!0}})}catch(e){this.clicked.set(!1),console.error(e);let n=e instanceof Error?e.message:"Failed to clean bridges";this.$toastr.error(n,this.$translate.instant("toast.title_error"))}})}dismissModal(){this.$activeModal.dismiss("Dismiss")}loadPairings(){return S(this,null,function*(){try{let e=yield this.$api.get("/server/pairings"),n=this.childBridges.length>0?this.childBridges[0].plugin:null,t=e.filter(h=>h._category==="bridge"&&!h._main&&this.childBridges.find(f=>f.username===h._username)).sort((h,f)=>h.name.localeCompare(f.name)),a=e.filter(h=>h._matterOnly&&h._plugin===n).sort((h,f)=>h.name.localeCompare(f.name)),d=[];for(let h of t)d.push(A(D({},h),{_protocol:"hap",_displayName:h.name})),this.isMatterSupported&&h._matter&&d.push(A(D({},h),{_protocol:"matter",_displayName:h.name}));if(this.isMatterSupported)for(let h of a)d.push(A(D({},h),{_protocol:"matter",_displayName:h.name}));this.pairings.set(d)}catch(e){console.error(e);let n=e instanceof Error?e.message:"Failed to load pairings";this.$toastr.error(n,this.$translate.instant("toast.title_error")),this.$activeModal.close()}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:17,vars:12,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-center"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"disabled"],[1,"text-center","mb-3"],[1,"fas","fa-circle-check","primary-text",2,"font-size","75px"],[1,"mb-0","text-center"],[1,"fas","fa-broom","primary-text",2,"font-size","75px"],[1,"mb-3"],[1,"list-group","list-group-box","mb-0"],[1,"list-group-item","d-flex","justify-content-between","align-items-center"],[1,"me-3"],[1,"fas","fa-lg","fa-hap"],[1,"flex-grow-1"],[1,"grey-text"],[1,"font-monospace"],[1,"btn","btn-danger","m-0","ms-3",3,"click","disabled"],[1,"fas"],[1,"fas","fa-lg","fa-hap","me-2"],[1,"fas","fa-lg","fa-matter"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"]],template:function(n,t){n&1&&(T(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),I(),T(5,"button",3),m(6,"translate"),ne("click",function(){return t.dismissModal()}),I()(),T(7,"div",4),u(8,Pr,5,3),u(9,Ar,12,6),I(),T(10,"div",5)(11,"div",6),u(12,Fr,3,4,"button",7),I(),T(13,"div",8),u(14,Lr,3,3,"button",9),I(),T(15,"div",10),u(16,Or,3,3,"button",11),I()()()),n&2&&(o(3),k(g(4,8,"child_bridge.reset_accessories")),o(2),ae("disabled",t.clicked()),P("aria-label",g(6,10,"form.button_close")),o(3),_(t.pairings().length===0?8:-1),o(),_(t.pairings().length>0?9:-1),o(3),_(t.pairings().length>0?12:-1),o(2),_(t.pairings().length===0?14:-1),o(2),_(t.pairings().length>0?16:-1))},dependencies:[j],encapsulation:2})}return i})();var Ji=Z(li(),1),Ki=Z(si(),1),Qi=Z(di(),1),Yi=Z(Ge(),1);var Rr=i=>({prefix:i}),zr=i=>({link:i}),Gi=(i,s,e,n)=>({"fa-circle-o":i,"fa-spinner fa-pulse":s,"fa-check-circle green-text":e,"fa-times-circle red-text":n}),Wr=(i,s,e)=>({"fa-circle-o":i,"fa-spinner fa-pulse":s,"fa-times-circle red-text":e});function qr(i,s){i&1&&(T(0,"li"),c(1),m(2,"translate"),I()),i&2&&(o(),k(g(2,1,"plugins.manage.scoped.process")))}function Gr(i,s){i&1&&(J(0,"li",8),m(1,"translate"),T(2,"li"),c(3),m(4,"translate"),I()),i&2&&(ae("innerHTML",g(1,2,"plugins.manage.scoped.windows"),ce),o(3),k(g(4,4,"plugins.manage.manual_update_command")))}function Jr(i,s){if(i&1&&(T(0,"pre",9),c(1),I()),i&2){let e=p();o(),Ye(`hb-service stop
|
|
16
|
-
npm install -g `,e.plugin.newHbScope.to,"@",e.plugin.newHbScope.switch,`
|
|
17
|
-
npm uninstall -g `,e.plugin.newHbScope.from,`
|
|
18
|
-
hb-service start`)}}function Kr(i,s){if(i&1&&(T(0,"div",10)(1,"ul",18)(2,"li"),J(3,"i",19),c(4),m(5,"translate"),T(6,"span",20),c(7),I()(),T(8,"li"),J(9,"i",19),c(10),m(11,"translate"),T(12,"span",20),c(13),I()(),T(14,"li"),J(15,"i",19),c(16),m(17,"translate"),I()()()),i&2){let e=p();o(3),G(Ve(17,Gi,!e.installing()&&!e.installed()&&!e.failure(),e.installing(),e.installed()&&!e.failure(),!e.installed()&&e.failure())),o(),y(" ",g(5,11,"plugins.manage.install")," "),o(3),k(e.plugin.newHbScope.to),o(2),G(Ve(22,Gi,!e.uninstalling()&&!e.uninstalled()&&!e.failure(),e.uninstalling(),e.uninstalled()&&!e.failure(),!e.uninstalled()&&e.failure())),o(),y(" ",g(11,13,"plugins.manage.uninstall")," "),o(3),k(e.plugin.newHbScope.from),o(2),G(re(27,Wr,!e.restarting()&&!e.failure(),e.restarting(),e.failure())),o(),y(" ",g(17,15,"menu.hbrestart.title")," ")}}function Qr(i,s){if(i&1){let e=V();T(0,"div",11)(1,"p"),c(2),m(3,"translate"),I(),T(4,"p",20),c(5),I(),T(6,"button",21),ne("click",function(){B(e);let t=p();return w(t.downloadLogFile())}),c(7),m(8,"translate"),I()()}if(i&2){let e=p();o(2),k(g(3,3,"plugins.manage.scoped.error")),o(3),k(e.failure()),o(2),k(g(8,5,"form.button_download"))}}function Yr(i,s){if(i&1){let e=V();T(0,"button",22),m(1,"translate"),ne("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(2),m(3,"translate"),I()}if(i&2){let e=p();ae("disabled",e.installing()||e.uninstalling()||e.restarting()),P("aria-label",g(1,3,"form.button_close")),o(2),y(" ",g(3,5,"form.button_close")," ")}}function Xr(i,s){if(i&1){let e=V();T(0,"button",22),m(1,"translate"),ne("click",function(){B(e);let t=p();return w(t.dismissModal())}),c(2),m(3,"translate"),I()}if(i&2){let e=p();ae("disabled",e.installing()||e.uninstalling()||e.restarting()),P("aria-label",g(1,3,"form.button_close")),o(2),y(" ",g(3,5,"form.button_close")," ")}}function Zr(i,s){i&1&&(T(0,"span"),c(1),m(2,"translate"),I()),i&2&&(o(),k(g(2,1,"form.button_continue")))}function el(i,s){i&1&&J(0,"i",24)}function tl(i,s){if(i&1){let e=V();T(0,"button",23),ne("click",function(){B(e);let t=p();return w(t.doSwitch())}),u(1,Zr,3,3,"span"),u(2,el,1,0,"i",24),I()}if(i&2){let e=p();ae("disabled",e.installing()||e.uninstalling()||e.restarting()||!e.onlineUpdateOk()||e.failure()),o(),_(!e.installing()&&!e.uninstalling()&&!e.restarting()?1:-1),o(),_((e.installing()||e.uninstalling()||e.restarting())&&!e.failure()?2:-1)}}var Xi=(()=>{class i{$activeModal=b(q);$api=b(N);$router=b(pe);$settings=b(W);$toastr=b(U);$translate=b(L);$ws=b(ve);modalData=b(ft);plugin=this.modalData.plugin;installing=v(!1,{});installed=v(!1,{});uninstalling=v(!1,{});uninstalled=v(!1,{});restarting=v(!1,{});failure=v("",{});onlineUpdateOk=v(!1,{});io;term;termTarget;fitAddon=new Ji.FitAddon;webLinksAddon=new Ki.WebLinksAddon;errorLog="";moreInfo='<a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins" target="_blank"><i class="fa fa-external-link-alt primary-text"></i></a>';prefix='<span class="font-monospace">@homebridge-plugins/</span>';constructor(){this.term=new Qi.Terminal({theme:{background:"#00000000",foreground:this.$settings.actualLightingMode==="light"?"#333333":"#eeeeee",cursor:"#d2d2d2",selectionBackground:"#d2d2d2"},allowTransparency:!0,allowProposedApi:!0}),this.term.loadAddon(this.fitAddon),this.term.loadAddon(this.webLinksAddon)}ngOnInit(){this.onlineUpdateOk.set(this.$settings.env.platform!=="win32"),this.io=this.$ws.connectToNamespace("plugins"),this.termTarget=document.getElementById("plugin-output"),this.term.open(this.termTarget),this.fitAddon.fit(),this.io.socket.on("stdout",e=>{this.term.write(e);let n=e.toString().replace(/\x1B\[(\d{1,3}(;\d{1,2})?)?[mGK]/g,"").trimEnd();n&&(this.errorLog+=`${n}\r
|
|
19
|
-
`)})}doSwitch(){return S(this,null,function*(){if(this.plugin)try{this.installing.set(!0),yield He(this.io.request("install",{name:this.plugin.newHbScope.to,version:this.plugin.newHbScope.switch,termCols:this.term.cols,termRows:this.term.rows})),this.installing.set(!1),this.installed.set(!0),this.uninstalling.set(!0),yield He(this.io.request("uninstall",{name:this.plugin.newHbScope.from,termCols:this.term.cols,termRows:this.term.rows})),this.uninstalling.set(!1),this.uninstalled.set(!0),this.restarting.set(!0),yield this.$api.put("/platform-tools/hb-service/set-full-service-restart-flag",{}),this.$activeModal.close(),this.$router.navigate(["/restart"])}catch(e){this.installing()&&this.installing.set(!1),this.uninstalling()&&this.uninstalling.set(!1),this.restarting()&&this.restarting.set(!1);let n=e instanceof Error?e.message:"An error occurred";this.failure.set(n),console.error(e),this.$toastr.error(n,this.$translate.instant("toast.title_error"))}})}downloadLogFile(){if(!this.plugin)return;let e=new Blob([this.errorLog],{type:"text/plain;charset=utf-8"});(0,Yi.saveAs)(e,`${this.plugin.name}-error.log`)}ngOnDestroy(){this.io.end(),this.term.dispose()}dismissModal(){this.$activeModal.dismiss("Dismiss")}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:31,vars:31,consts:[[1,"modal-content"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"mb-3","text-center"],[1,"fas","fa-arrow-right-arrow-left","primary-text",2,"font-size","75px"],[1,"mb-0"],[3,"innerHTML"],[1,"mt-3","mb-0"],[1,"text-center"],[1,"alert","alert-error","mb-0"],["id","plugin-output",1,"mb-0",3,"hidden"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"disabled"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"disabled"],[1,"d-inline-block","text-start","mt-3","mb-3",2,"list-style-type","none"],[1,"fa"],[1,"font-monospace"],[1,"btn","btn-primary","mb-0",3,"click"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],["type","button","data-bs-dismiss","modal",1,"btn","btn-primary",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"]],template:function(n,t){n&1&&(T(0,"div",0)(1,"div",1)(2,"h5",2),c(3),m(4,"translate"),I(),T(5,"button",3),m(6,"translate"),ne("click",function(){return t.dismissModal()}),I()(),T(7,"div",4)(8,"div",5),J(9,"i",6),I(),T(10,"ul",7),J(11,"li",8),m(12,"translate"),T(13,"li"),c(14),m(15,"translate"),I(),J(16,"li",8),m(17,"translate"),u(18,qr,3,3,"li"),u(19,Gr,5,6),I(),u(20,Jr,2,3,"pre",9),u(21,Kr,18,31,"div",10),u(22,Qr,9,7,"div",11),J(23,"div",12),I(),T(24,"div",13)(25,"div",14),u(26,Yr,4,7,"button",15),I(),T(27,"div",10),u(28,Xr,4,7,"button",15),I(),T(29,"div",16),u(30,tl,3,3,"button",17),I()()()),n&2&&(o(3),k(g(4,15,"plugins.manage.scoped.switch")),o(2),ae("disabled",t.installing()||t.uninstalling()||t.restarting()),P("aria-label",g(6,17,"form.button_close")),o(6),ae("innerHTML",z(12,19,"plugins.manage.scoped.info_1",de(27,Rr,t.prefix)),ce),o(3),k(g(15,22,"plugins.manage.scoped_message")),o(2),ae("innerHTML",z(17,24,"plugins.manage.scoped.info_2",de(29,zr,t.moreInfo)),ce),o(2),_(t.onlineUpdateOk()?18:-1),o(),_(t.onlineUpdateOk()?-1:19),o(),_(t.plugin&&!t.onlineUpdateOk()?20:-1),o(),_(t.plugin&&t.onlineUpdateOk()?21:-1),o(),_(t.failure()?22:-1),o(),ae("hidden",!t.onlineUpdateOk()||t.failure()),o(3),_(t.onlineUpdateOk()?26:-1),o(2),_(t.onlineUpdateOk()?-1:28),o(2),_(t.onlineUpdateOk()?30:-1))},dependencies:[j],styles:["#plugin-output[_ngcontent-%COMP%]{height:150px;overflow-y:auto;overflow-x:hidden}"]})}return i})();var il=i=>({pluginName:i}),nl=i=>({count:i});function ol(i,s){i&1&&(l(0,"div",5),C(1,"i",13),r())}function al(i,s){i&1&&(c(0),m(1,"translate")),i&2&&y(" ",g(1,1,"plugins.uninstall_remove_child_bridge")," ")}function rl(i,s){if(i&1&&(c(0),m(1,"translate")),i&2){let e=p(4);y(" ",z(1,1,"plugins.uninstall_remove_child_bridges",de(4,nl,e.childBridges.length))," ")}}function ll(i,s){if(i&1){let e=V();l(0,"label",24)(1,"input",25),E("ngModelChange",function(t){B(e);let a=p(3);return w(a.removeChildBridges.set(t))}),r(),u(2,al,2,3),u(3,rl,2,6),C(4,"span",23),r()}if(i&2){let e=p(3);o(),x("ngModel",e.removeChildBridges()),o(),_(e.childBridges.length===1?2:-1),o(),_(e.childBridges.length>1?3:-1)}}function sl(i,s){if(i&1){let e=V();l(0,"p",16)(1,"label",21)(2,"input",22),E("ngModelChange",function(t){B(e);let a=p(2);return w(a.removeConfig.set(t))}),r(),c(3),m(4,"translate"),C(5,"span",23),r(),u(6,ll,5,3,"label",24),r()}if(i&2){let e=p(2);o(2),x("ngModel",e.removeConfig()),o(),y(" ",g(4,3,"plugins.uninstall_remove_plugin_config")," "),o(3),_(e.hasChildBridges()?6:-1)}}function dl(i,s){i&1&&(l(0,"ul",17)(1,"li"),c(2),m(3,"translate"),r(),l(4,"li"),c(5),m(6,"translate"),r()()),i&2&&(o(2),k(g(3,2,"plugins.uninstall_warn_1")),o(3),k(g(6,4,"plugins.uninstall_warn_2")))}function cl(i,s){i&1&&(l(0,"ngb-alert",18),c(1),m(2,"translate"),r()),i&2&&(x("dismissible",!1),o(),y(" ",g(2,2,"plugins.uninstall_remove_config_required")," "))}function ml(i,s){if(i&1&&(l(0,"div",14),C(1,"i",15),r(),l(2,"div",9),u(3,sl,7,5,"p",16),r(),u(4,dl,7,6,"ul",17),u(5,cl,3,4,"ngb-alert",18),l(6,"ngb-alert",19)(7,"p",20),c(8),m(9,"translate"),r()()),i&2){let e=p();o(3),_(e.isConfigured()?3:-1),o(),_(e.hasChildBridges()&&e.removeChildBridges()?4:-1),o(),_(e.isConfigured()&&(!e.pluginAlias()||!e.pluginType())?5:-1),o(),x("dismissible",!1),o(2),k(z(9,5,"plugins.uninstall_remove_confirmation",de(8,il,e.plugin==null?null:e.plugin.displayName)))}}function pl(i,s){i&1&&(c(0),m(1,"translate")),i&2&&y(" ",g(1,1,"plugins.manage.uninstall")," ")}function gl(i,s){i&1&&C(0,"i",12)}var Zi=(()=>{class i{$activeModal=b(q);$api=b(N);$modal=b(le);$toastr=b(U);$translate=b(L);injector=b(se);modalData=b(pt);plugin=this.modalData.plugin;childBridges=this.modalData.childBridges??[];action=this.modalData.action??"";loading=v(!0,{});uninstalling=v(!1,{});removeConfig=v(!0,{});removeChildBridges=v(!0,{});hasChildBridges=v(!1,{});isConfigured=v(!1,{});pluginType=v(null,{});pluginAlias=v(null,{});ngOnInit(){this.initialize()}doUninstall(){return S(this,null,function*(){if(this.uninstalling.set(!0),this.removeConfig()&&this.isConfigured())try{yield this.removePluginConfig()}catch(n){console.error(n);let t=n instanceof Error?n.message:"Unknown error";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}if(this.hasChildBridges()&&this.removeChildBridges())try{yield Promise.all(this.childBridges.map(n=>this.removeChildBridge(n.username.replace(/:/g,""))))}catch(n){console.error(n)}if(this.$activeModal.dismiss(),!this.plugin)return;let e=R([{provide:ye,useValue:{action:"Uninstall",pluginName:this.plugin.name,pluginDisplayName:this.plugin.displayName}}],this.injector);this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:e})})}dismissModal(){this.$activeModal.dismiss("Dismiss")}initialize(){return S(this,null,function*(){if(this.plugin)try{this.childBridges.length&&this.hasChildBridges.set(!0);let e=yield this.getAlias();this.pluginType.set(e.pluginType),this.pluginAlias.set(e.pluginAlias),(yield this.$api.get(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`)).length&&this.isConfigured.set(!0)}catch(e){console.error("Failed to initialize:",e);let n=e instanceof Error?e.message:"Failed to load plugin information";this.$toastr.error(n,this.$translate.instant("toast.title_error"))}finally{this.loading.set(!1)}})}getAlias(){return S(this,null,function*(){if(!this.plugin)throw new Error("Plugin not set");return this.$api.get(`/plugins/alias/${encodeURIComponent(this.plugin.name)}`)})}removePluginConfig(){return S(this,null,function*(){this.plugin&&(yield this.$api.post(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}`,[]),yield this.$api.put(`/config-editor/plugin/${encodeURIComponent(this.plugin.name)}/enable`,{}),this.$toastr.success(this.$translate.instant("plugins.settings.plugin_config_saved"),this.$translate.instant("toast.title_success")))})}removeChildBridge(e){return S(this,null,function*(){try{yield this.$api.delete(`/server/pairings/${e}`)}catch(n){console.error(n);let t=n instanceof Error?n.message:"Failed to remove child bridge";this.$toastr.error(t,this.$translate.instant("toast.title_error"))}})}static \u0275fac=function(n){return new(n||i)};static \u0275cmp=F({type:i,selectors:[["ng-component"]],decls:20,vars:17,consts:[[1,"modal-content",2,"min-height","300px"],[1,"modal-header"],[1,"modal-title"],["type","button","data-bs-dismiss","modal",1,"btn-close",3,"click","disabled"],[1,"modal-body"],[1,"text-center","primary-text"],[1,"modal-footer","justify-content-between"],[1,"text-start"],["type","button","data-bs-dismiss","modal",1,"btn","btn-elegant",3,"click","disabled"],[1,"text-center"],[1,"text-end"],["type","button","data-bs-dismiss","modal",1,"btn","btn-danger",3,"click","disabled"],[1,"fas","fa-spinner","fa-pulse"],[1,"fa","fa-cog","fa-spin",2,"font-size","75px"],[1,"text-center","mb-3"],[1,"fas","fa-trash","primary-text",2,"font-size","75px"],[1,"d-inline-block","text-start","mb-1"],[1,"mb-3","text-start"],["type","info",1,"mb-3",3,"dismissible"],["type","warning",1,"mb-0",3,"dismissible"],[1,"mb-0"],["for","remove-plugin-config",1,"hb-uix-switch","d-block"],["id","remove-plugin-config","type","checkbox",3,"ngModelChange","ngModel"],[1,"hb-uix-slider","hb-uix-round"],["for","remove-plugin-child-bridges",1,"hb-uix-switch","d-block"],["id","remove-plugin-child-bridges","type","checkbox",3,"ngModelChange","ngModel"]],template:function(n,t){n&1&&(l(0,"div",0)(1,"div",1)(2,"h5",2),c(3),r(),l(4,"button",3),m(5,"translate"),E("click",function(){return t.dismissModal()}),r()(),l(6,"div",4),u(7,ol,2,0,"div",5),u(8,ml,10,10),r(),l(9,"div",6)(10,"div",7)(11,"button",8),m(12,"translate"),E("click",function(){return t.dismissModal()}),c(13),m(14,"translate"),r()(),C(15,"div",9),l(16,"div",10)(17,"button",11),E("click",function(){return t.doUninstall()}),u(18,pl,2,3),u(19,gl,1,0,"i",12),r()()()()),n&2&&(o(3),k((t.plugin==null?null:t.plugin.displayName)||(t.plugin==null?null:t.plugin.name)),o(),x("disabled",t.uninstalling()),P("aria-label",g(5,11,"form.button_close")),o(3),_(t.loading()?7:-1),o(),_(t.loading()?-1:8),o(3),x("disabled",t.uninstalling()),P("aria-label",g(12,13,"form.button_close")),o(2),y(" ",g(14,15,"form.button_close")," "),o(4),x("disabled",t.loading()||t.uninstalling()),o(),_(t.uninstalling()?-1:18),o(),_(t.uninstalling()?19:-1))},dependencies:[Ce,Te,he,be,Ie,j],encapsulation:2})}return i})();var Be=(()=>{class i{$api=b(N);$modal=b(le);$customPluginsService=b(yi);$settings=b(W);$toastr=b(U);$translate=b(L);injector=b(se);pluginListRefreshSubject=new me;onPluginListRefresh=this.pluginListRefreshSubject.asObservable();installPlugin(e,n){return S(this,null,function*(){let t=R([{provide:ye,useValue:{action:"Install",pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:n,isConfigured:e.isConfigured,onRefreshPluginList:()=>this.pluginListRefreshSubject.next()}}],this.injector),a=this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:t});try{let d=yield a.result;d?.action==="just-installed"&&d?.plugin&&(d.plugin.isConfigured?this.$modal.open(ue,{size:"lg",backdrop:"static"}):yield this.settings(d.plugin))}catch{}})}uninstallPlugin(e,n){let t=R([{provide:pt,useValue:{plugin:e,childBridges:n,action:"Uninstall"}}],this.injector);this.$modal.open(Zi,{size:"lg",backdrop:"static",injector:t})}checkAndUpdatePlugin(e,n){return S(this,null,function*(){(yield this.checkHbAndNodeVersion(e,"update"))&&(yield this.updatePlugin(e,n))})}updatePlugin(e,n){return S(this,null,function*(){let t=R([{provide:ye,useValue:{action:"Update",pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:n,latestVersion:e.latestVersion,installedVersion:e.installedVersion,isDisabled:e.disabled,isConfigured:e.isConfigured,onRefreshPluginList:()=>this.pluginListRefreshSubject.next()}}],this.injector),a=this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:t});try{let d=yield a.result;d?.action==="just-installed"&&d?.plugin&&(d.plugin.isConfigured?this.$modal.open(ue,{size:"lg",backdrop:"static"}):yield this.settings(d.plugin))}catch{}})}upgradeHomebridge(e,n){return S(this,null,function*(){if(!(yield this.checkHbAndNodeVersion(e,"update")))return;let t=R([{provide:ye,useValue:{action:"Update",pluginName:e.name,pluginDisplayName:e.displayName,targetVersion:n,latestVersion:e.latestVersion,installedVersion:e.installedVersion}}],this.injector);this.$modal.open(Ae,{size:"lg",backdrop:"static",injector:t})})}installAlternateVersion(e){return S(this,null,function*(){let n=R([{provide:_t,useValue:{plugin:e,onRefreshPluginList:()=>this.pluginListRefreshSubject.next()}}],this.injector),t=this.$modal.open(Di,{size:"lg",backdrop:"static",injector:n});try{let{action:a,version:d,engines:h}=yield t.result;return(yield this.checkHbAndNodeVersion(A(D({},e),{updateEngines:h}),a))?e.name==="homebridge"?yield this.upgradeHomebridge(e,d):e.installedVersion?yield this.updatePlugin(e,d):this.installPlugin(e,d):void 0}catch{}})}bridgeSettings(e,n=!1){return S(this,null,function*(){let t;if(e.settingsSchema)try{t=yield this.loadConfigSchema(e.name)}catch(h){console.error(h),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}let a=R([{provide:ct,useValue:{schema:t,plugin:e,justInstalled:n}}],this.injector),d=this.$modal.open(Fi,{size:"lg",backdrop:"static",injector:a});try{(yield d.result)==="refresh"&&this.pluginListRefreshSubject.next()}catch{}})}settings(e){return S(this,null,function*(){let n;if(e.settingsSchema)try{n=yield this.loadConfigSchema(e.name)}catch(d){console.error(d),this.$toastr.error(this.$translate.instant("plugins.toast_failed_to_load_plugin_schema"),this.$translate.instant("toast.title_error"));return}if(n&&n.customUi)return this.$customPluginsService.openCustomSettingsUi(e,n);if(this.$customPluginsService.plugins[e.name])return this.$customPluginsService.openSettings(e,n);let t=R([{provide:Se,useValue:{schema:n,plugin:e}}],this.injector);return this.$modal.open(e.settingsSchema?Wi:Tt,{size:"lg",backdrop:"static",injector:t}).result.catch(()=>{})})}jsonEditor(e){return S(this,null,function*(){let n;if(e.settingsSchema)try{n=yield this.loadConfigSchema(e.name)}catch(d){console.error(d)}let t=R([{provide:Se,useValue:{schema:n,plugin:e}}],this.injector);return this.$modal.open(Tt,{size:"lg",backdrop:"static",injector:t}).result.catch(d=>console.error(d))})}checkHbAndNodeVersion(e,n){return S(this,null,function*(){let t=!0,a=!0;try{e.updateEngines?.node&&(0,Fe.lt)(this.$settings.env.nodeVersion,(0,Fe.minVersion)(e.updateEngines.node))&&(t=!1),e.updateEngines?.homebridge&&(0,Fe.lt)(this.$settings.env.homebridgeVersion,(0,Fe.minVersion)(e.updateEngines.homebridge))&&(a=!1)}catch(d){return console.error(d),this.$toastr.error(d.message,this.$translate.instant("toast.title_error")),!1}if(!t||!a)try{let d=R([{provide:ut,useValue:{plugin:e,isValidNode:t,isValidHb:a,action:n}}],this.injector);return yield this.$modal.open(Ui,{size:"lg",backdrop:"static",injector:d}).result}catch{return!1}return!0})}loadConfigSchema(e){return S(this,null,function*(){return this.$api.get(`/plugins/config-schema/${encodeURIComponent(e)}`)})}resetChildBridges(e){return S(this,null,function*(){let n=R([{provide:gt,useValue:{childBridges:e}}],this.injector);this.$modal.open(qi,{size:"lg",backdrop:"static",injector:n})})}switchToScoped(e){return S(this,null,function*(){let n=R([{provide:ft,useValue:{plugin:e}}],this.injector);this.$modal.open(Xi,{size:"lg",backdrop:"static",injector:n})})}static \u0275fac=function(n){return new(n||i)};static \u0275prov=Ee({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();export{wi as a,Si as b,Be as c};
|