homebridge-config-ui-x 5.0.0-beta.6 → 5.0.0-beta.60
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 +384 -20
- package/CONTRIBUTING.md +5 -4
- package/LICENSE +1 -1
- package/config.schema.json +34 -144
- package/dist/bin/hb-service.d.ts +2 -2
- package/dist/bin/hb-service.js +51 -50
- package/dist/bin/hb-service.js.map +1 -1
- package/dist/bin/platforms/darwin.js +2 -2
- package/dist/bin/platforms/darwin.js.map +1 -1
- package/dist/bin/platforms/win32.js +4 -2
- package/dist/bin/platforms/win32.js.map +1 -1
- package/dist/bin/standalone.js +1 -0
- package/dist/bin/standalone.js.map +1 -1
- package/dist/core/auth/auth.controller.d.ts +2 -2
- package/dist/core/auth/auth.controller.js.map +1 -1
- package/dist/core/auth/auth.module.js +1 -1
- package/dist/core/auth/auth.module.js.map +1 -1
- package/dist/core/auth/auth.service.js +10 -10
- package/dist/core/auth/auth.service.js.map +1 -1
- package/dist/core/auth/jwt.strategy.d.ts +3 -1
- package/dist/core/config/config.service.d.ts +4 -6
- package/dist/core/config/config.service.js +9 -9
- package/dist/core/config/config.service.js.map +1 -1
- package/dist/core/config/config.startup.js +2 -2
- package/dist/core/config/config.startup.js.map +1 -1
- package/dist/core/homebridge-ipc/homebridge-ipc.service.js +3 -3
- package/dist/core/homebridge-ipc/homebridge-ipc.service.js.map +1 -1
- package/dist/index.js +6 -77
- package/dist/index.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/modules/accessories/accessories.controller.js +5 -5
- package/dist/modules/accessories/accessories.controller.js.map +1 -1
- package/dist/modules/accessories/accessories.service.js +8 -7
- package/dist/modules/accessories/accessories.service.js.map +1 -1
- package/dist/modules/backup/backup.controller.js +7 -7
- package/dist/modules/backup/backup.controller.js.map +1 -1
- package/dist/modules/backup/backup.service.d.ts +1 -0
- package/dist/modules/backup/backup.service.js +57 -89
- package/dist/modules/backup/backup.service.js.map +1 -1
- package/dist/modules/child-bridges/child-bridges.service.js +0 -7
- package/dist/modules/child-bridges/child-bridges.service.js.map +1 -1
- package/dist/modules/config-editor/config-editor.controller.d.ts +1 -1
- package/dist/modules/config-editor/config-editor.controller.js +8 -8
- package/dist/modules/config-editor/config-editor.controller.js.map +1 -1
- package/dist/modules/config-editor/config-editor.service.d.ts +1 -1
- package/dist/modules/config-editor/config-editor.service.js +62 -64
- package/dist/modules/config-editor/config-editor.service.js.map +1 -1
- package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.d.ts +1 -1
- package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js +13 -11
- package/dist/modules/custom-plugins/plugins-settings-ui/plugins-settings-ui.service.js.map +1 -1
- package/dist/modules/log/log.gateway.d.ts +2 -1
- package/dist/modules/log/log.gateway.js.map +1 -1
- package/dist/modules/log/log.service.js +3 -3
- package/dist/modules/log/log.service.js.map +1 -1
- package/dist/modules/platform-tools/docker/docker.controller.js +3 -3
- package/dist/modules/platform-tools/docker/docker.controller.js.map +1 -1
- package/dist/modules/platform-tools/docker/docker.service.js +1 -1
- package/dist/modules/platform-tools/docker/docker.service.js.map +1 -1
- package/dist/modules/platform-tools/hb-service/hb-service.controller.js +3 -3
- package/dist/modules/platform-tools/hb-service/hb-service.controller.js.map +1 -1
- package/dist/modules/platform-tools/hb-service/hb-service.service.js +6 -6
- package/dist/modules/platform-tools/hb-service/hb-service.service.js.map +1 -1
- package/dist/modules/platform-tools/linux/linux.controller.js +2 -2
- package/dist/modules/platform-tools/linux/linux.controller.js.map +1 -1
- package/dist/modules/platform-tools/linux/linux.service.js +2 -2
- package/dist/modules/platform-tools/linux/linux.service.js.map +1 -1
- package/dist/modules/platform-tools/terminal/terminal.gateway.d.ts +2 -1
- package/dist/modules/platform-tools/terminal/terminal.gateway.js.map +1 -1
- package/dist/modules/platform-tools/terminal/terminal.service.js +2 -2
- package/dist/modules/platform-tools/terminal/terminal.service.js.map +1 -1
- package/dist/modules/plugins/plugins.controller.js +4 -4
- package/dist/modules/plugins/plugins.controller.js.map +1 -1
- package/dist/modules/plugins/plugins.service.d.ts +4 -1
- package/dist/modules/plugins/plugins.service.js +174 -103
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/server/server.controller.d.ts +22 -2
- package/dist/modules/server/server.controller.js +86 -18
- package/dist/modules/server/server.controller.js.map +1 -1
- package/dist/modules/server/server.service.d.ts +24 -6
- package/dist/modules/server/server.service.js +186 -67
- package/dist/modules/server/server.service.js.map +1 -1
- package/dist/modules/status/status.controller.d.ts +0 -1
- package/dist/modules/status/status.controller.js +3 -4
- package/dist/modules/status/status.controller.js.map +1 -1
- package/dist/modules/status/status.gateway.d.ts +1 -1
- package/dist/modules/status/status.service.d.ts +1 -1
- package/dist/modules/status/status.service.js +17 -41
- package/dist/modules/status/status.service.js.map +1 -1
- package/dist/modules/users/users.controller.js +7 -7
- package/dist/modules/users/users.controller.js.map +1 -1
- package/dist/self-check.js +6 -6
- package/dist/self-check.js.map +1 -1
- package/package.json +45 -43
- package/public/3rdpartylicenses.txt +119 -62
- package/public/assets/hap-icons/airpurifier.svg +49 -16
- package/public/assets/hap-icons/airquality.svg +24 -13
- package/public/assets/hap-icons/co-sensor.svg +72 -0
- package/public/assets/hap-icons/co2-sensor.svg +72 -0
- package/public/assets/hap-icons/contactsensor-closed.svg +35 -2
- package/public/assets/hap-icons/contactsensor-open.svg +80 -2
- package/public/assets/hap-icons/door-closed.svg +32 -2
- package/public/assets/hap-icons/door-open.svg +48 -2
- package/public/assets/hap-icons/fan-off.svg +24 -13
- package/public/assets/hap-icons/fan-on.svg +24 -13
- package/public/assets/hap-icons/garagedoor.svg +24 -13
- package/public/assets/hap-icons/humidity.svg +24 -13
- package/public/assets/hap-icons/irrigation-system.svg +47 -18
- package/public/assets/hap-icons/leaksensor.svg +52 -2
- package/public/assets/hap-icons/light.svg +47 -28
- package/public/assets/hap-icons/lightbulb.svg +24 -13
- package/public/assets/hap-icons/lock-locked.svg +24 -13
- package/public/assets/hap-icons/lock-unlocked.svg +24 -13
- package/public/assets/hap-icons/motionsensor.svg +100 -2
- package/public/assets/hap-icons/occupancysensor.svg +97 -2
- package/public/assets/hap-icons/outlet.svg +24 -13
- package/public/assets/hap-icons/securitysystem-active.svg +102 -2
- package/public/assets/hap-icons/securitysystem-off.svg +68 -2
- package/public/assets/hap-icons/smokesensor.svg +42 -9
- package/public/assets/hap-icons/speaker.svg +29 -13
- package/public/assets/hap-icons/statelessprogrammableswitch.svg +51 -2
- package/public/assets/hap-icons/switch.svg +24 -13
- package/public/assets/hap-icons/television.svg +15 -4
- package/public/assets/hap-icons/temperature.svg +24 -13
- package/public/assets/hap-icons/unknown.svg +24 -13
- package/public/assets/hap-icons/valve-generic.svg +27 -16
- package/public/assets/hap-icons/valve-irrigation.svg +37 -21
- package/public/assets/hap-icons/valve-showerhead.svg +52 -0
- package/public/assets/hap-icons/valve-waterfaucet.svg +21 -0
- package/public/assets/hap-icons/window-closed.svg +85 -2
- package/public/assets/hap-icons/window-open.svg +136 -2
- package/public/assets/hap-icons/windowcovering-closed.svg +45 -49
- package/public/assets/hap-icons/windowcovering-open.svg +40 -44
- package/public/assets/homebridge-color-round.svg +36 -1
- package/public/assets/homebridge-logo.svg +11 -1
- package/public/assets/mask-icon.svg +5 -1
- package/public/chunk-2HDJYV7P.js +1 -0
- package/public/chunk-2PYGXL3S.js +1 -0
- package/public/chunk-3JURJEIZ.js +1 -0
- package/public/chunk-3MYZ74PN.js +1 -0
- package/public/{chunk-CCUID66K.js → chunk-3NAAMMFZ.js} +1 -1
- package/public/chunk-3R3PVZG7.js +1 -0
- package/public/{chunk-BKUGARB4.js → chunk-44K5XVZH.js} +1 -1
- package/public/chunk-4UVD743J.js +1 -0
- package/public/chunk-5HMI3475.js +1 -0
- package/public/{chunk-NW6AFAD7.js → chunk-6OMIETCH.js} +1 -1
- package/public/chunk-6ZN4TBLM.js +7 -0
- package/public/chunk-7C3VZ3TZ.js +1 -0
- package/public/chunk-7IAYSGNN.js +1 -0
- package/public/{chunk-NWD4LL6Q.js → chunk-7X5P6T37.js} +1 -1
- package/public/chunk-ABI2LUSA.js +1 -0
- package/public/{chunk-QE7DO6J3.js → chunk-AFY7IWPI.js} +2 -2
- package/public/chunk-B75MYCJS.js +1 -0
- package/public/chunk-BC4ZZQWV.js +1 -0
- package/public/chunk-BS6X2RZL.js +1 -0
- package/public/chunk-BTB3JIDJ.js +1 -0
- package/public/chunk-CLRF6AUJ.js +6 -0
- package/public/{chunk-WNWWUCCZ.js → chunk-CUKPSGYS.js} +1 -1
- package/public/chunk-CYW4JA4J.js +1 -0
- package/public/{chunk-WHJSVGC7.js → chunk-D33FRRVF.js} +1 -1
- package/public/chunk-D6DBYUFZ.js +1 -0
- package/public/chunk-DBUCH6BG.js +1 -0
- package/public/chunk-DNQFYNG6.js +1 -0
- package/public/chunk-F5ICJKYI.js +8 -0
- package/public/chunk-FETTFNJ2.js +1 -0
- package/public/{chunk-6TCHCTXZ.js → chunk-G5LGUOIC.js} +1 -1
- package/public/chunk-GDFC3M3E.js +2 -0
- package/public/chunk-GLHOQ5NF.js +1 -0
- package/public/chunk-GSGK2SKG.js +1 -0
- package/public/chunk-H2GFXLCD.js +1 -0
- package/public/chunk-H2OOFTLR.js +1 -0
- package/public/chunk-HEMNUWDO.js +1 -0
- package/public/{chunk-3KDOQQBM.js → chunk-HGUYWCTI.js} +2 -2
- package/public/chunk-I275JECR.js +1 -0
- package/public/{chunk-JZZQRLNW.js → chunk-I6OD3CV4.js} +1 -1
- package/public/chunk-IGYTH5AX.js +14 -0
- package/public/chunk-IPT5RIJX.js +1 -0
- package/public/chunk-J4CB3RFZ.js +1 -0
- package/public/chunk-KFR3ZGJZ.js +1 -0
- package/public/chunk-KKIRFTQL.js +5 -0
- package/public/{chunk-7EUQWCP5.js → chunk-KPW2P5T4.js} +1 -1
- package/public/chunk-L3LMIZ4T.js +1 -0
- package/public/chunk-L4DBDSHB.js +1 -0
- package/public/chunk-LCRNBCRA.js +1 -0
- package/public/chunk-LZSQNNXJ.js +1 -0
- package/public/chunk-MMD3VZMJ.js +20 -0
- package/public/chunk-MOCPJJF3.js +1 -0
- package/public/chunk-NAFR5P6T.js +1 -0
- package/public/chunk-NRSBQVRN.js +1 -0
- package/public/chunk-O5XYQE2Q.js +23 -0
- package/public/chunk-OBOD4WBI.js +1 -0
- package/public/chunk-OI57SN2B.js +1 -0
- package/public/{chunk-4IKE4OKZ.js → chunk-OJE7KDWZ.js} +1 -1
- package/public/chunk-OXOBBTSH.js +1 -0
- package/public/chunk-PCYP2KRX.js +1 -0
- package/public/{chunk-EA5J2VEJ.js → chunk-QCVDY2FW.js} +1 -1
- package/public/chunk-QGLICWXR.js +1 -0
- package/public/chunk-QJ75M7UB.js +1 -0
- package/public/chunk-RFWUHIJ5.js +1 -0
- package/public/chunk-T2YC5S4T.js +1 -0
- package/public/chunk-TCXWRDYD.js +1 -0
- package/public/chunk-TEFE7EK6.js +1 -0
- package/public/chunk-TWDTF4UX.js +1 -0
- package/public/{chunk-QXT6R24L.js → chunk-TYEF6KNJ.js} +1 -1
- package/public/chunk-UCQRW7SR.js +1 -0
- package/public/chunk-VDSVEHQG.js +1 -0
- package/public/chunk-W2INV3O5.js +5 -0
- package/public/chunk-WACROBL3.js +1 -0
- package/public/chunk-WGP32ABK.js +1 -0
- package/public/chunk-XSS6G7LC.js +1 -0
- package/public/chunk-YCBC3C3V.js +1 -0
- package/public/chunk-YET3EKNI.js +1 -0
- package/public/chunk-YTVVSAM2.js +1 -0
- package/public/chunk-YU3C2YTO.js +32 -0
- package/public/chunk-YWMHIHWJ.js +1 -0
- package/public/chunk-Z7QXZUQS.js +1 -0
- package/public/chunk-ZB3BYZDQ.js +1 -0
- package/public/chunk-ZIXTTJ4W.js +1 -0
- package/public/chunk-ZZQJ3DGD.js +1 -0
- package/public/index.html +2 -2
- package/public/main-26CAD2XH.js +1 -0
- package/public/media/fa-brands-400-Q3XCMWHQ.woff2 +0 -0
- package/public/media/{fa-brands-400-KOKGDU7E.ttf → fa-brands-400-R2XQZCET.ttf} +0 -0
- package/public/media/fa-regular-400-QSNYFYRT.woff2 +0 -0
- package/public/media/{fa-regular-400-IPMAEX5Y.ttf → fa-regular-400-XUOPSR7E.ttf} +0 -0
- package/public/media/fa-solid-900-5ZUYHGA7.woff2 +0 -0
- package/public/media/{fa-solid-900-SRFFQLRM.ttf → fa-solid-900-PJNKLK6W.ttf} +0 -0
- package/public/polyfills-JFMQVUE2.js +2 -0
- package/public/styles-6IKEC5B4.css +1 -0
- package/scripts/upgrade-install-plugin.sh +1 -1
- package/public/chunk-2J6XFH3T.js +0 -1
- package/public/chunk-2KNNQ3N3.js +0 -1
- package/public/chunk-3FKHRKWG.js +0 -1
- package/public/chunk-3IX3CLER.js +0 -1
- package/public/chunk-3YHN3VHA.js +0 -1
- package/public/chunk-4AVEC3ZU.js +0 -1
- package/public/chunk-5BHGCTWL.js +0 -5
- package/public/chunk-62ADZGBJ.js +0 -6
- package/public/chunk-6GHV2TKM.js +0 -1
- package/public/chunk-6SC3OCKT.js +0 -8
- package/public/chunk-BCHM64F4.js +0 -1
- package/public/chunk-BPMSJ2VF.js +0 -1
- package/public/chunk-C2ERQ3FX.js +0 -1
- package/public/chunk-C6NH5RUO.js +0 -1
- package/public/chunk-CUPS2NE5.js +0 -1
- package/public/chunk-D6EUS4KM.js +0 -1
- package/public/chunk-DNZYDCPW.js +0 -1
- package/public/chunk-E3OHYYGW.js +0 -23
- package/public/chunk-EMKXES77.js +0 -14
- package/public/chunk-G7AVJCRN.js +0 -1
- package/public/chunk-HSJSWZHD.js +0 -1
- package/public/chunk-HYBTNEG3.js +0 -1
- package/public/chunk-J34SI644.js +0 -1
- package/public/chunk-JD7YSN6P.js +0 -1
- package/public/chunk-JL3HH376.js +0 -1
- package/public/chunk-JN46TW24.js +0 -1
- package/public/chunk-JPWCYJWM.js +0 -1
- package/public/chunk-JQVXXNK7.js +0 -1
- package/public/chunk-JW6PX64L.js +0 -1
- package/public/chunk-JXEJU7V3.js +0 -1
- package/public/chunk-K53Q52AX.js +0 -1
- package/public/chunk-KD3Z24TB.js +0 -1
- package/public/chunk-KPCZLNW7.js +0 -1
- package/public/chunk-KQJ7ONUG.js +0 -1
- package/public/chunk-KUOCPYMN.js +0 -1
- package/public/chunk-KXMGIDLQ.js +0 -1
- package/public/chunk-KZLHFU5K.js +0 -1
- package/public/chunk-LJHUPCL3.js +0 -32
- package/public/chunk-MTMEA6JC.js +0 -1
- package/public/chunk-N5BZ3IQD.js +0 -1
- package/public/chunk-N5UE2QRB.js +0 -1
- package/public/chunk-NGAJQJ5T.js +0 -1
- package/public/chunk-NNATGODS.js +0 -1
- package/public/chunk-NZNNTHFQ.js +0 -1
- package/public/chunk-ORPWYWCL.js +0 -5
- package/public/chunk-OSDZN4BY.js +0 -1
- package/public/chunk-PREJ7FYU.js +0 -1
- package/public/chunk-QHPDGSZ6.js +0 -1
- package/public/chunk-RBHJOIVB.js +0 -1
- package/public/chunk-RRHDXAZE.js +0 -1
- package/public/chunk-T7MCUROV.js +0 -1
- package/public/chunk-TCSXGQNF.js +0 -1
- package/public/chunk-TTENUNEO.js +0 -1
- package/public/chunk-TXOB7R5K.js +0 -7
- package/public/chunk-UEX6RTZJ.js +0 -1
- package/public/chunk-UG5DK2RQ.js +0 -2
- package/public/chunk-UG6ZOHXY.js +0 -1
- package/public/chunk-UN5422JY.js +0 -1
- package/public/chunk-VAJZ7KCO.js +0 -1
- package/public/chunk-VBCYNIMT.js +0 -1
- package/public/chunk-WHJOLAED.js +0 -1
- package/public/chunk-WJFAG3CM.js +0 -20
- package/public/chunk-YN5SJ37A.js +0 -1
- package/public/chunk-YR3ETJZY.js +0 -1
- package/public/chunk-YRD5IXFM.js +0 -1
- package/public/chunk-Z4A7KLCA.js +0 -1
- package/public/chunk-ZT23DWNL.js +0 -1
- package/public/main-LYJIIXIC.js +0 -1
- package/public/media/01-RQ3S2L53.png +0 -0
- package/public/media/02-VNCG2I2A.png +0 -0
- package/public/media/03-HI42L4ZG.png +0 -0
- package/public/media/04-FJLL55LZ.png +0 -0
- package/public/media/05-V3EO6SPT.png +0 -0
- package/public/media/06-EOJZCQZN.png +0 -0
- package/public/media/07-KMKB5PBD.png +0 -0
- package/public/media/08-UQJRF6B2.png +0 -0
- package/public/media/09-2DJQFRHH.png +0 -0
- package/public/media/arrow_left-CQT7FZM7.svg +0 -4
- package/public/media/arrow_right-SBUDRR2G.svg +0 -4
- package/public/media/fa-brands-400-6PJPV6JM.woff2 +0 -0
- package/public/media/fa-regular-400-OHB6J4OK.woff2 +0 -0
- package/public/media/fa-solid-900-ABTK6BNK.woff2 +0 -0
- package/public/polyfills-C6JHVXJJ.js +0 -2
- package/public/scripts-6GVLYD7F.js +0 -62
- package/public/styles-EG5MFQEM.css +0 -1
- /package/public/assets/{bootstrap-4 → bootstrap-5}/cssframework/assets.json +0 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAIA,gEAAkC;AAElC,yCAAmC;AACnC,mCAAkC;AAElC,IAAI,UAAe,CAAA;AAEnB,MAAM,YAAY;IAGhB,YAAY,GAAQ,EAAE,MAAW;QAC/B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,sBAAO,CAAC,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAA;QAC1D,sBAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QAC5D,sBAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,IAAI,IAAI,wBAAwB,CAAA;QAErE,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;QAC7B,OAAO;aACJ,kBAAkB,EAAE;aACpB,oBAAoB,EAAE;aACtB,MAAM,CAAC,0BAA0B,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,sBAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,CAAC,CAAC;aACnF,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,sBAAO,CAAC,GAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC;aACvE,MAAM,CAAC,oBAAoB,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,sBAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;aAC/E,KAAK,CAAC,sBAAO,CAAC,IAAI,CAAC,CAAA;QAEtB,IAAI,CAAC,IAAA,kBAAS,EAAC,sBAAO,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,iGAAiG,sBAAO,CAAC,OAAO,GAAG,CAAA;YAC/H,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACd,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACf,CAAC;IACH,CAAC;IAED,WAAW,CAAC,QAAQ;QAClB,MAAM,WAAW,GAAG,EAAE,CAAA;QACtB,QAAQ,CAAC,WAAW,CAAC,CAAA;IACvB,CAAC;CACF;AAGD,iBAAS,CAAC,GAAG,EAAE,EAAE;IACf,UAAU,GAAG,GAAG,CAAA;IAChB,UAAU,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;IAC7E,sBAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,sBAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AAChD,CAAC,CAAA"}
|
package/dist/main.js
CHANGED
|
@@ -107,7 +107,7 @@ async function bootstrap() {
|
|
|
107
107
|
const document = swagger_1.SwaggerModule.createDocument(app, options);
|
|
108
108
|
swagger_1.SwaggerModule.setup('swagger', app, document);
|
|
109
109
|
app.useGlobalFilters(new spa_filter_1.SpaFilter());
|
|
110
|
-
logger.warn(`Homebridge UI v${configService.package.version} is listening on ${startupConfig.host} port ${configService.ui.port}
|
|
110
|
+
logger.warn(`Homebridge UI v${configService.package.version} is listening on ${startupConfig.host} port ${configService.ui.port}.`);
|
|
111
111
|
await app.listen(configService.ui.port, startupConfig.host);
|
|
112
112
|
return app;
|
|
113
113
|
}
|
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;;AAGA,yCAAmC;AACnC,gEAAkC;AAElC,6DAAoC;AACpC,mEAAiD;AACjD,2CAA+C;AAC/C,uCAA0C;AAC1C,+DAAyD;AACzD,6CAAgE;AAChE,uCAAmC;AAEnC,6CAAwC;AACxC,iEAA4D;AAC5D,iEAA+D;AAC/D,iEAAqD;AACrD,sDAAiD;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,7 @@ exports.AccessoriesController = AccessoriesController;
|
|
|
39
39
|
__decorate([
|
|
40
40
|
(0, swagger_1.ApiOperation)({
|
|
41
41
|
summary: 'Return a list of Homebridge accessories.',
|
|
42
|
-
description: 'Homebridge must be running in
|
|
42
|
+
description: 'Homebridge must be running in `insecure` mode to access the accessory list.',
|
|
43
43
|
}),
|
|
44
44
|
(0, common_1.Get)('/'),
|
|
45
45
|
__metadata("design:type", Function),
|
|
@@ -51,15 +51,15 @@ __decorate([
|
|
|
51
51
|
summary: 'Get the accessory and room layout for the authenticating user.',
|
|
52
52
|
}),
|
|
53
53
|
(0, common_1.Get)('/layout'),
|
|
54
|
-
__param(0, (0, common_1.
|
|
54
|
+
__param(0, (0, common_1.Request)()),
|
|
55
55
|
__metadata("design:type", Function),
|
|
56
56
|
__metadata("design:paramtypes", [Object]),
|
|
57
57
|
__metadata("design:returntype", void 0)
|
|
58
58
|
], AccessoriesController.prototype, "getAccessoryLayout", null);
|
|
59
59
|
__decorate([
|
|
60
60
|
(0, swagger_1.ApiOperation)({
|
|
61
|
-
summary: 'Get a single accessory and refresh
|
|
62
|
-
description: 'Get the
|
|
61
|
+
summary: 'Get a single accessory and refresh its characteristics.',
|
|
62
|
+
description: 'Get the `uniqueId` from `GET /api/accessories`.',
|
|
63
63
|
}),
|
|
64
64
|
(0, common_1.Get)('/:uniqueId'),
|
|
65
65
|
__param(0, (0, common_1.Param)('uniqueId')),
|
|
@@ -70,7 +70,7 @@ __decorate([
|
|
|
70
70
|
__decorate([
|
|
71
71
|
(0, swagger_1.ApiOperation)({
|
|
72
72
|
summary: 'Set the value of an accessory characteristic.',
|
|
73
|
-
description: 'Get the
|
|
73
|
+
description: 'Get the `uniqueId` and `characteristicType` values from `GET /api/accessories`.',
|
|
74
74
|
}),
|
|
75
75
|
(0, swagger_1.ApiParam)({ name: 'uniqueId' }),
|
|
76
76
|
(0, common_1.Put)('/:uniqueId'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessories.controller.js","sourceRoot":"","sources":["../../../src/modules/accessories/accessories.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAQuB;AACvB,+CAA4C;AAC5C,6CAAgF;AAEhF,uDAAiE;AACjE,+DAA0D;AAMnD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YACmB,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IACtD,CAAC;IAOJ,cAAc;QACZ,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAA;IAClD,CAAC;IAMD,kBAAkB,
|
|
1
|
+
{"version":3,"file":"accessories.controller.js","sourceRoot":"","sources":["../../../src/modules/accessories/accessories.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAQuB;AACvB,+CAA4C;AAC5C,6CAAgF;AAEhF,uDAAiE;AACjE,+DAA0D;AAMnD,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YACmB,kBAAsC;QAAtC,uBAAkB,GAAlB,kBAAkB,CAAoB;IACtD,CAAC;IAOJ,cAAc;QACZ,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAA;IAClD,CAAC;IAMD,kBAAkB,CAAY,GAAG;QAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtE,CAAC;IAOD,YAAY,CAAoB,QAAgB;QAC9C,OAAO,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC;IAQD,0BAA0B,CAAoB,QAAQ,EAAU,IAAmC;QACjG,OAAO,IAAI,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC1G,CAAC;CACF,CAAA;AAxCY,sDAAqB;AAUhC;IALC,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,0CAA0C;QACnD,WAAW,EAAE,6EAA6E;KAC3F,CAAC;IACD,IAAA,YAAG,EAAC,GAAG,CAAC;;;;2DAGR;AAMD;IAJC,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,gEAAgE;KAC1E,CAAC;IACD,IAAA,YAAG,EAAC,SAAS,CAAC;IACK,WAAA,IAAA,gBAAO,GAAE,CAAA;;;;+DAE5B;AAOD;IALC,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,yDAAyD;QAClE,WAAW,EAAE,iDAAiD;KAC/D,CAAC;IACD,IAAA,YAAG,EAAC,YAAY,CAAC;IACJ,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;;;;yDAE9B;AAQD;IANC,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,+CAA+C;QACxD,WAAW,EAAE,iFAAiF;KAC/F,CAAC;IACD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9B,IAAA,YAAG,EAAC,YAAY,CAAC;IACU,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;IAAY,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAO,+CAA6B;;uEAElG;gCAvCU,qBAAqB;IAJjC,IAAA,iBAAO,EAAC,aAAa,CAAC;IACtB,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,IAAA,oBAAS,GAAE,CAAC;IACtB,IAAA,mBAAU,EAAC,aAAa,CAAC;qCAGe,wCAAkB;GAF9C,qBAAqB,CAwCjC"}
|
|
@@ -35,7 +35,7 @@ let AccessoriesService = class AccessoriesService {
|
|
|
35
35
|
}
|
|
36
36
|
async connect(client) {
|
|
37
37
|
if (!this.configService.homebridgeInsecureMode) {
|
|
38
|
-
this.logger.error('Homebridge must be running in insecure mode to control accessories');
|
|
38
|
+
this.logger.error('Homebridge must be running in insecure mode to control accessories.');
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
let services;
|
|
@@ -103,17 +103,18 @@ let AccessoriesService = class AccessoriesService {
|
|
|
103
103
|
if (!this.configService.homebridgeInsecureMode) {
|
|
104
104
|
throw new common_1.BadRequestException('Homebridge must be running in insecure mode to access accessories.');
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
return
|
|
108
|
-
}
|
|
106
|
+
try {
|
|
107
|
+
return await this.hapClient.getAllServices();
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
109
110
|
if (e.response?.status === 401) {
|
|
110
111
|
this.logger.warn('Homebridge must be running in insecure mode to view and control accessories from this plugin.');
|
|
111
112
|
}
|
|
112
113
|
else {
|
|
113
|
-
this.logger.error(`Failed load accessories from Homebridge
|
|
114
|
+
this.logger.error(`Failed to load accessories from Homebridge as ${e.message}.`);
|
|
114
115
|
}
|
|
115
116
|
return [];
|
|
116
|
-
}
|
|
117
|
+
}
|
|
117
118
|
}
|
|
118
119
|
async getAccessory(uniqueId) {
|
|
119
120
|
const services = await this.loadAccessories();
|
|
@@ -215,7 +216,7 @@ let AccessoriesService = class AccessoriesService {
|
|
|
215
216
|
}
|
|
216
217
|
accessoryLayout[user] = layout;
|
|
217
218
|
(0, fs_extra_1.writeJsonSync)(this.configService.accessoryLayoutPath, accessoryLayout);
|
|
218
|
-
this.logger.log(`
|
|
219
|
+
this.logger.log(`Accessory layout changes saved for ${user}.`);
|
|
219
220
|
return layout;
|
|
220
221
|
}
|
|
221
222
|
resetInstancePool() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessories.service.js","sourceRoot":"","sources":["../../../src/modules/accessories/accessories.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,yCAAgC;AAEhC,uDAAkD;AAClD,2CAAgE;AAChE,uCAAsE;AACtE,4DAAkC;AAElC,qEAAgE;AAChE,qEAAyD;AAGlD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAI7B,YACmB,aAA4B,EAC5B,MAAc;QADd,kBAAa,GAAb,aAAa,CAAe;QAC5B,WAAM,GAAN,MAAM,CAAQ;QAJ1B,qBAAgB,GAAG,IAAI,oBAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAMpD,IAAI,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAS,CAAC;gBAC7B,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG;gBACnD,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,gBAAgB,IAAI,EAAE;aACrD,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAMM,KAAK,CAAC,OAAO,CAAC,MAAW;QAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"accessories.service.js","sourceRoot":"","sources":["../../../src/modules/accessories/accessories.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,14 +53,14 @@ let BackupController = class BackupController {
|
|
|
53
53
|
try {
|
|
54
54
|
const data = await req.file();
|
|
55
55
|
if (data.file.truncated) {
|
|
56
|
-
throw new common_1.InternalServerErrorException(`Restore file exceeds maximum size ${globalThis.backup.maxBackupSizeText}
|
|
56
|
+
throw new common_1.InternalServerErrorException(`Restore file exceeds maximum size ${globalThis.backup.maxBackupSizeText}.`);
|
|
57
57
|
}
|
|
58
58
|
else {
|
|
59
59
|
await this.backupService.uploadBackupRestore(data);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
catch (err) {
|
|
63
|
-
this.logger.error(
|
|
63
|
+
this.logger.error(`Restore backup failed as ${err.message}`);
|
|
64
64
|
throw new common_1.InternalServerErrorException(err.message);
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -73,7 +73,7 @@ let BackupController = class BackupController {
|
|
|
73
73
|
await this.backupService.uploadHbfxRestore(data);
|
|
74
74
|
}
|
|
75
75
|
catch (err) {
|
|
76
|
-
this.logger.error(
|
|
76
|
+
this.logger.error(`Restore backup failed as ${err.message}`);
|
|
77
77
|
throw new common_1.InternalServerErrorException(err.message);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -84,7 +84,7 @@ let BackupController = class BackupController {
|
|
|
84
84
|
exports.BackupController = BackupController;
|
|
85
85
|
__decorate([
|
|
86
86
|
(0, common_1.UseGuards)(admin_guard_1.AdminGuard),
|
|
87
|
-
(0, swagger_1.ApiOperation)({ summary: 'Download a
|
|
87
|
+
(0, swagger_1.ApiOperation)({ summary: 'Download a `.tar.gz` of the Homebridge instance.' }),
|
|
88
88
|
(0, common_1.Get)('/download'),
|
|
89
89
|
__param(0, (0, common_1.Res)({ passthrough: true })),
|
|
90
90
|
__metadata("design:type", Function),
|
|
@@ -144,7 +144,7 @@ __decorate([
|
|
|
144
144
|
(0, common_1.UseGuards)(admin_guard_1.AdminGuard),
|
|
145
145
|
(0, common_1.Post)('/restore'),
|
|
146
146
|
(0, swagger_1.ApiOperation)({
|
|
147
|
-
summary: 'Upload a
|
|
147
|
+
summary: 'Upload a `.tar.gz` of the Homebridge instance.',
|
|
148
148
|
description: 'NOTE: This endpoint does not trigger the restore process.',
|
|
149
149
|
}),
|
|
150
150
|
(0, swagger_1.ApiConsumes)('multipart/form-data'),
|
|
@@ -169,7 +169,7 @@ __decorate([
|
|
|
169
169
|
(0, common_1.Put)('/restore/trigger'),
|
|
170
170
|
(0, swagger_1.ApiOperation)({
|
|
171
171
|
summary: 'Triggers a headless restore process from the last uploaded backup file.',
|
|
172
|
-
description: 'Logs to stdout
|
|
172
|
+
description: 'Logs to `stdout`/`stderr`.',
|
|
173
173
|
}),
|
|
174
174
|
__metadata("design:type", Function),
|
|
175
175
|
__metadata("design:paramtypes", []),
|
|
@@ -178,7 +178,7 @@ __decorate([
|
|
|
178
178
|
__decorate([
|
|
179
179
|
(0, common_1.UseGuards)(admin_guard_1.AdminGuard),
|
|
180
180
|
(0, swagger_1.ApiOperation)({
|
|
181
|
-
summary: 'Upload a
|
|
181
|
+
summary: 'Upload a `.hbfx` backup file created by third party apps.',
|
|
182
182
|
description: 'NOTE: This endpoint does not trigger the restore process.',
|
|
183
183
|
}),
|
|
184
184
|
(0, swagger_1.ApiConsumes)('multipart/form-data'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.controller.js","sourceRoot":"","sources":["../../../src/modules/backup/backup.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAGA,2CAWuB;AACvB,+CAA4C;AAC5C,6CAOwB;AAExB,oEAA+D;AAC/D,qEAAyD;AACzD,qDAAgD;AAMzC,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YACU,aAA4B,EAC5B,MAAc;QADd,kBAAa,GAAb,aAAa,CAAe;QAC5B,WAAM,GAAN,MAAM,CAAQ;IACrB,CAAC;IAKE,AAAN,KAAK,CAAC,cAAc,CAA6B,GAAG;QAClD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAA;YACvC,MAAM,IAAI,qCAA4B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAKK,AAAN,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAA;IAC/C,CAAC;IAKK,AAAN,KAAK,CAAC,oBAAoB;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAA;IAClD,CAAC;IAMK,AAAN,KAAK,CAAC,kBAAkB,CAAoB,QAAQ;QAClD,OAAO,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACxD,CAAC;IAMK,AAAN,KAAK,CAAC,qBAAqB,CAAoB,QAAQ;QACrD,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC;IASK,AAAN,KAAK,CAAC,sBAAsB,CAAoB,QAAQ;QACtD,OAAO,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAC5D,CAAC;IAoBK,AAAN,KAAK,CAAC,aAAa,CAAQ,GAAmB;QAC5C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,qCAA4B,CAAC,qCAAqC,UAAU,CAAC,MAAM,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"backup.controller.js","sourceRoot":"","sources":["../../../src/modules/backup/backup.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,7 @@ export declare class BackupService {
|
|
|
34
34
|
getScheduledBackup(backupId: string): Promise<StreamableFile>;
|
|
35
35
|
deleteScheduledBackup(backupId: string): Promise<void>;
|
|
36
36
|
restoreScheduledBackup(backupId: string): Promise<void>;
|
|
37
|
+
cleanup(backupDir: string): Promise<void>;
|
|
37
38
|
downloadBackup(reply: FastifyReply): Promise<StreamableFile>;
|
|
38
39
|
uploadBackupRestore(data: MultipartFile): Promise<void>;
|
|
39
40
|
removeRestoreDirectory(): Promise<void>;
|
|
@@ -13,7 +13,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.BackupService = void 0;
|
|
16
|
-
const node_child_process_1 = require("node:child_process");
|
|
17
16
|
const node_events_1 = require("node:events");
|
|
18
17
|
const node_os_1 = require("node:os");
|
|
19
18
|
const node_path_1 = require("node:path");
|
|
@@ -61,7 +60,7 @@ let BackupService = class BackupService {
|
|
|
61
60
|
const backupDir = await (0, fs_extra_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'homebridge-backup-'));
|
|
62
61
|
const backupFileName = `homebridge-backup-${instanceId}.${new Date().getTime().toString()}.tar.gz`;
|
|
63
62
|
const backupPath = (0, node_path_1.resolve)(backupDir, backupFileName);
|
|
64
|
-
this.logger.log(`Creating temporary backup archive at ${backupPath}
|
|
63
|
+
this.logger.log(`Creating temporary backup archive at ${backupPath}.`);
|
|
65
64
|
try {
|
|
66
65
|
const storagePath = await (0, fs_extra_1.realpath)(this.configService.storagePath);
|
|
67
66
|
await (0, fs_extra_1.copy)(storagePath, (0, node_path_1.resolve)(backupDir, 'storage'), {
|
|
@@ -109,14 +108,14 @@ let BackupService = class BackupService {
|
|
|
109
108
|
uix: this.configService.package.version,
|
|
110
109
|
node: node_process_1.default.version,
|
|
111
110
|
});
|
|
112
|
-
await (0, tar_1.
|
|
111
|
+
await (0, tar_1.create)({
|
|
113
112
|
portable: true,
|
|
114
113
|
gzip: true,
|
|
115
114
|
file: backupPath,
|
|
116
115
|
cwd: backupDir,
|
|
117
116
|
filter: (filePath, stat) => {
|
|
118
117
|
if (stat.size > globalThis.backup.maxBackupFileSize) {
|
|
119
|
-
this.logger.warn(`Backup is skipping
|
|
118
|
+
this.logger.warn(`Backup is skipping ${filePath} because it is larger than ${globalThis.backup.maxBackupFileSizeText}.`);
|
|
120
119
|
return false;
|
|
121
120
|
}
|
|
122
121
|
return true;
|
|
@@ -127,11 +126,11 @@ let BackupService = class BackupService {
|
|
|
127
126
|
'info.json',
|
|
128
127
|
]);
|
|
129
128
|
if ((0, fs_extra_1.statSync)(backupPath).size > globalThis.backup.maxBackupSize) {
|
|
130
|
-
this.logger.error(`Backup file exceeds maximum restore file size (${globalThis.backup.maxBackupSizeText}) ${((0, fs_extra_1.statSync)(backupPath).size / (1024 * 1024)).toFixed(1)}MB
|
|
129
|
+
this.logger.error(`Backup file exceeds maximum restore file size (${globalThis.backup.maxBackupSizeText}) ${((0, fs_extra_1.statSync)(backupPath).size / (1024 * 1024)).toFixed(1)}MB.`);
|
|
131
130
|
}
|
|
132
131
|
}
|
|
133
132
|
catch (e) {
|
|
134
|
-
this.logger.log(`Backup failed, removing ${backupDir}
|
|
133
|
+
this.logger.log(`Backup failed, removing ${backupDir}.`);
|
|
135
134
|
await (0, fs_extra_1.remove)((0, node_path_1.resolve)(backupDir));
|
|
136
135
|
throw e;
|
|
137
136
|
}
|
|
@@ -145,7 +144,7 @@ let BackupService = class BackupService {
|
|
|
145
144
|
async ensureScheduledBackupPath() {
|
|
146
145
|
if (this.configService.ui.scheduledBackupPath) {
|
|
147
146
|
if (!await (0, fs_extra_1.pathExists)(this.configService.instanceBackupPath)) {
|
|
148
|
-
throw new Error(`Custom instance backup path does not
|
|
147
|
+
throw new Error(`Custom instance backup path does not exist: ${this.configService.instanceBackupPath}`);
|
|
149
148
|
}
|
|
150
149
|
try {
|
|
151
150
|
await (0, fs_extra_1.access)(this.configService.instanceBackupPath, fs_extra_1.constants.W_OK | fs_extra_1.constants.R_OK);
|
|
@@ -163,7 +162,7 @@ let BackupService = class BackupService {
|
|
|
163
162
|
await this.ensureScheduledBackupPath();
|
|
164
163
|
}
|
|
165
164
|
catch (e) {
|
|
166
|
-
this.logger.warn(
|
|
165
|
+
this.logger.warn(`Could not run scheduled backup as ${e.message}.`);
|
|
167
166
|
return;
|
|
168
167
|
}
|
|
169
168
|
try {
|
|
@@ -172,7 +171,7 @@ let BackupService = class BackupService {
|
|
|
172
171
|
await (0, fs_extra_1.remove)((0, node_path_1.resolve)(backupDir));
|
|
173
172
|
}
|
|
174
173
|
catch (e) {
|
|
175
|
-
this.logger.warn(
|
|
174
|
+
this.logger.warn(`Failed to create scheduled instance backup as ${e.message}.`);
|
|
176
175
|
}
|
|
177
176
|
try {
|
|
178
177
|
const backups = await this.listScheduledBackups();
|
|
@@ -183,7 +182,7 @@ let BackupService = class BackupService {
|
|
|
183
182
|
}
|
|
184
183
|
}
|
|
185
184
|
catch (e) {
|
|
186
|
-
this.logger.warn(
|
|
185
|
+
this.logger.warn(`Failed to remove old backups as ${e.message}.`);
|
|
187
186
|
}
|
|
188
187
|
}
|
|
189
188
|
async getNextBackupTime() {
|
|
@@ -236,61 +235,89 @@ let BackupService = class BackupService {
|
|
|
236
235
|
});
|
|
237
236
|
}
|
|
238
237
|
catch (e) {
|
|
239
|
-
this.logger.warn(
|
|
238
|
+
this.logger.warn(`Could not get scheduled backups as ${e.message}.`);
|
|
240
239
|
throw new common_1.InternalServerErrorException(e.message);
|
|
241
240
|
}
|
|
242
241
|
}
|
|
243
242
|
async getScheduledBackup(backupId) {
|
|
244
|
-
|
|
245
|
-
if (!await (0, fs_extra_1.pathExists)(backupPath)) {
|
|
243
|
+
if (!/^[0-9A-Z]{12}\.\d{9,15}$/i.test(backupId)) {
|
|
246
244
|
throw new common_1.NotFoundException();
|
|
247
245
|
}
|
|
246
|
+
let backupPath = (0, node_path_1.resolve)(this.configService.instanceBackupPath, `homebridge-backup-${backupId}.tar.gz`);
|
|
247
|
+
try {
|
|
248
|
+
backupPath = await (0, fs_extra_1.realpath)(backupPath);
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
throw new common_1.NotFoundException();
|
|
252
|
+
}
|
|
253
|
+
if (!backupPath.startsWith(this.configService.instanceBackupPath)) {
|
|
254
|
+
throw new common_1.BadRequestException('Invalid backup path');
|
|
255
|
+
}
|
|
248
256
|
return new common_1.StreamableFile((0, fs_extra_1.createReadStream)(backupPath));
|
|
249
257
|
}
|
|
250
258
|
async deleteScheduledBackup(backupId) {
|
|
251
|
-
|
|
252
|
-
if (!await (0, fs_extra_1.pathExists)(backupPath)) {
|
|
259
|
+
if (!/^[0-9A-Z]{12}\.\d{9,15}$/i.test(backupId)) {
|
|
253
260
|
throw new common_1.NotFoundException();
|
|
254
261
|
}
|
|
262
|
+
let backupPath = (0, node_path_1.resolve)(this.configService.instanceBackupPath, `homebridge-backup-${backupId}.tar.gz`);
|
|
263
|
+
try {
|
|
264
|
+
backupPath = await (0, fs_extra_1.realpath)(backupPath);
|
|
265
|
+
}
|
|
266
|
+
catch (e) {
|
|
267
|
+
throw new common_1.NotFoundException();
|
|
268
|
+
}
|
|
269
|
+
if (!backupPath.startsWith(this.configService.instanceBackupPath)) {
|
|
270
|
+
throw new common_1.BadRequestException('Invalid backup path');
|
|
271
|
+
}
|
|
255
272
|
try {
|
|
256
273
|
await (0, fs_extra_1.remove)(backupPath);
|
|
257
|
-
this.logger.warn(`Scheduled backup ${backupId} deleted by request
|
|
274
|
+
this.logger.warn(`Scheduled backup ${backupId} deleted by request.`);
|
|
258
275
|
}
|
|
259
276
|
catch (e) {
|
|
260
|
-
this.logger.warn(
|
|
277
|
+
this.logger.warn(`Failed to delete scheduled backup by request as ${e.message}.`);
|
|
261
278
|
throw new common_1.InternalServerErrorException(e.message);
|
|
262
279
|
}
|
|
263
280
|
}
|
|
264
281
|
async restoreScheduledBackup(backupId) {
|
|
265
|
-
|
|
266
|
-
|
|
282
|
+
if (!/^[0-9A-Z]{12}\.\d{9,15}$/i.test(backupId)) {
|
|
283
|
+
throw new common_1.NotFoundException();
|
|
284
|
+
}
|
|
285
|
+
let backupPath = (0, node_path_1.resolve)(this.configService.instanceBackupPath, `homebridge-backup-${backupId}.tar.gz`);
|
|
286
|
+
try {
|
|
287
|
+
backupPath = await (0, fs_extra_1.realpath)(backupPath);
|
|
288
|
+
}
|
|
289
|
+
catch (e) {
|
|
267
290
|
throw new common_1.NotFoundException();
|
|
268
291
|
}
|
|
292
|
+
if (!backupPath.startsWith(this.configService.instanceBackupPath)) {
|
|
293
|
+
throw new common_1.BadRequestException('Invalid backup path');
|
|
294
|
+
}
|
|
269
295
|
this.restoreDirectory = undefined;
|
|
270
296
|
const restoreDir = await (0, fs_extra_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'homebridge-backup-'));
|
|
271
|
-
await pump((0, fs_extra_1.createReadStream)(backupPath), (0, tar_1.
|
|
297
|
+
await pump((0, fs_extra_1.createReadStream)(backupPath), (0, tar_1.extract)({
|
|
272
298
|
cwd: restoreDir,
|
|
273
299
|
}));
|
|
274
300
|
this.restoreDirectory = restoreDir;
|
|
275
301
|
}
|
|
302
|
+
async cleanup(backupDir) {
|
|
303
|
+
await (0, fs_extra_1.remove)((0, node_path_1.resolve)(backupDir));
|
|
304
|
+
this.logger.log(`Backup complete, removing ${backupDir}.`);
|
|
305
|
+
}
|
|
276
306
|
async downloadBackup(reply) {
|
|
277
307
|
const { backupDir, backupPath, backupFileName } = await this.createBackup();
|
|
278
|
-
async function cleanup() {
|
|
279
|
-
await (0, fs_extra_1.remove)((0, node_path_1.resolve)(backupDir));
|
|
280
|
-
this.logger.log(`Backup complete, removing ${backupDir}`);
|
|
281
|
-
}
|
|
282
308
|
reply.raw.setHeader('Content-type', 'application/octet-stream');
|
|
283
309
|
reply.raw.setHeader('Content-disposition', `attachment; filename=${backupFileName}`);
|
|
284
310
|
reply.raw.setHeader('File-Name', backupFileName);
|
|
285
311
|
if (reply.request.hostname === 'localhost:8080') {
|
|
286
312
|
reply.raw.setHeader('access-control-allow-origin', 'http://localhost:4200');
|
|
287
313
|
}
|
|
288
|
-
|
|
314
|
+
const cleanup = this.cleanup.bind(this, backupDir);
|
|
315
|
+
return new common_1.StreamableFile((0, fs_extra_1.createReadStream)(backupPath).on('close', cleanup));
|
|
289
316
|
}
|
|
290
317
|
async uploadBackupRestore(data) {
|
|
291
318
|
this.restoreDirectory = undefined;
|
|
292
319
|
const backupDir = await (0, fs_extra_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'homebridge-backup-'));
|
|
293
|
-
await pump(data.file, (0, tar_1.
|
|
320
|
+
await pump(data.file, (0, tar_1.extract)({
|
|
294
321
|
cwd: backupDir,
|
|
295
322
|
}));
|
|
296
323
|
this.restoreDirectory = backupDir;
|
|
@@ -400,11 +427,6 @@ let BackupService = class BackupService {
|
|
|
400
427
|
const uiConfigBlock = restoredConfig.platforms.find(x => x.platform === 'config');
|
|
401
428
|
if (uiConfigBlock) {
|
|
402
429
|
uiConfigBlock.port = this.configService.ui.port;
|
|
403
|
-
if (this.configService.serviceMode || this.configService.runningInDocker) {
|
|
404
|
-
delete uiConfigBlock.restart;
|
|
405
|
-
delete uiConfigBlock.sudo;
|
|
406
|
-
delete uiConfigBlock.log;
|
|
407
|
-
}
|
|
408
430
|
}
|
|
409
431
|
else {
|
|
410
432
|
restoredConfig.platforms.push({
|
|
@@ -425,7 +447,7 @@ let BackupService = class BackupService {
|
|
|
425
447
|
async uploadHbfxRestore(data) {
|
|
426
448
|
this.restoreDirectory = undefined;
|
|
427
449
|
const backupDir = await (0, fs_extra_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'homebridge-backup-'));
|
|
428
|
-
this.logger.log(`Extracting .hbfx file to ${backupDir}
|
|
450
|
+
this.logger.log(`Extracting .hbfx file to ${backupDir}.`);
|
|
429
451
|
await pump(data.file, (0, unzipper_1.Extract)({
|
|
430
452
|
path: backupDir,
|
|
431
453
|
}));
|
|
@@ -531,64 +553,10 @@ let BackupService = class BackupService {
|
|
|
531
553
|
}
|
|
532
554
|
postBackupRestoreRestart() {
|
|
533
555
|
setTimeout(() => {
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
setTimeout(() => {
|
|
537
|
-
node_process_1.default.kill(node_process_1.default.pid, 'SIGKILL');
|
|
538
|
-
}, 500);
|
|
539
|
-
return;
|
|
540
|
-
}
|
|
541
|
-
if (this.configService.runningInDocker) {
|
|
542
|
-
try {
|
|
543
|
-
return (0, node_child_process_1.execSync)('killall -9 homebridge; kill -9 $(pidof homebridge-config-ui-x);');
|
|
544
|
-
}
|
|
545
|
-
catch (e) {
|
|
546
|
-
this.logger.error(e);
|
|
547
|
-
this.logger.error('Failed to restart Homebridge');
|
|
548
|
-
}
|
|
549
|
-
}
|
|
550
|
-
if (node_process_1.default.connected) {
|
|
551
|
-
node_process_1.default.kill(node_process_1.default.ppid, 'SIGKILL');
|
|
556
|
+
this.homebridgeIpcService.killHomebridge();
|
|
557
|
+
setTimeout(() => {
|
|
552
558
|
node_process_1.default.kill(node_process_1.default.pid, 'SIGKILL');
|
|
553
|
-
}
|
|
554
|
-
if (this.configService.ui.noFork) {
|
|
555
|
-
return node_process_1.default.kill(node_process_1.default.pid, 'SIGKILL');
|
|
556
|
-
}
|
|
557
|
-
if ((0, node_os_1.platform)() === 'linux' && this.configService.ui.standalone) {
|
|
558
|
-
try {
|
|
559
|
-
const getPidByPort = (port) => {
|
|
560
|
-
try {
|
|
561
|
-
return Number.parseInt((0, node_child_process_1.execSync)(`fuser ${port}/tcp 2>/dev/null`).toString('utf8').trim(), 10);
|
|
562
|
-
}
|
|
563
|
-
catch (e) {
|
|
564
|
-
return null;
|
|
565
|
-
}
|
|
566
|
-
};
|
|
567
|
-
const getPidByName = () => {
|
|
568
|
-
try {
|
|
569
|
-
return Number.parseInt((0, node_child_process_1.execSync)('pidof homebridge').toString('utf8').trim(), 10);
|
|
570
|
-
}
|
|
571
|
-
catch (e) {
|
|
572
|
-
return null;
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
|
-
const homebridgePid = getPidByPort(this.configService.homebridgeConfig.bridge.port) || getPidByName();
|
|
576
|
-
if (homebridgePid) {
|
|
577
|
-
node_process_1.default.kill(homebridgePid, 'SIGKILL');
|
|
578
|
-
return node_process_1.default.kill(node_process_1.default.pid, 'SIGKILL');
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
catch (e) {
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
if (this.configService.ui.restart) {
|
|
585
|
-
return (0, node_child_process_1.exec)(this.configService.ui.restart, (err) => {
|
|
586
|
-
if (err) {
|
|
587
|
-
this.logger.log('Restart command exited with an error. Failed to restart Homebridge.');
|
|
588
|
-
}
|
|
589
|
-
});
|
|
590
|
-
}
|
|
591
|
-
return node_process_1.default.kill(node_process_1.default.pid, 'SIGKILL');
|
|
559
|
+
}, 500);
|
|
592
560
|
}, 500);
|
|
593
561
|
return { status: 0 };
|
|
594
562
|
}
|