homebridge-config-ui-x 5.0.0-beta.8 → 5.0.0-beta.81
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 +412 -31
- package/CONTRIBUTING.md +5 -4
- package/LICENSE +1 -1
- package/config.schema.json +35 -145
- 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 +3 -3
- 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 +8 -10
- package/dist/core/config/config.service.js +24 -19
- 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.js +19 -79
- 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 +17 -13
- 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 +168 -103
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/server/server.controller.d.ts +28 -3
- package/dist/modules/server/server.controller.js +137 -20
- package/dist/modules/server/server.controller.js.map +1 -1
- package/dist/modules/server/server.service.d.ts +27 -6
- package/dist/modules/server/server.service.js +212 -66
- 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 +145 -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/assets/plugin-ui-utils/ui.js +3 -0
- package/public/assets/plugin-ui-utils/ui.js.map +1 -1
- package/public/chunk-2BYFJJKD.js +1 -0
- package/public/chunk-2HBIS5KD.js +14 -0
- package/public/chunk-2O6AXIBR.js +1 -0
- package/public/chunk-2SEP7Q76.js +1 -0
- package/public/chunk-2UZO6OQ7.js +23 -0
- package/public/chunk-3RCQ6L4J.js +6 -0
- package/public/chunk-4SITUFK3.js +1 -0
- package/public/{chunk-YRSHLHYL.js → chunk-4UM5QHY6.js} +1 -1
- package/public/chunk-57WSQ6T6.js +1 -0
- package/public/chunk-62DAT7AX.js +1 -0
- package/public/chunk-67A3U7JY.js +1 -0
- package/public/{chunk-CCUID66K.js → chunk-6US6MXBM.js} +1 -1
- package/public/{chunk-EA5J2VEJ.js → chunk-7VVMNL54.js} +1 -1
- package/public/chunk-7Z74FGCO.js +1 -0
- package/public/chunk-7ZNHDMCE.js +1 -0
- package/public/chunk-A7263J2F.js +1 -0
- package/public/{chunk-QE7DO6J3.js → chunk-ADC7QO6N.js} +2 -2
- package/public/chunk-AU74FUFM.js +1 -0
- package/public/chunk-BI2JONL7.js +1 -0
- package/public/{chunk-7EUQWCP5.js → chunk-BVWBB74Y.js} +2 -2
- package/public/chunk-CIDCYWQD.js +1 -0
- package/public/chunk-COJPC76A.js +1 -0
- package/public/chunk-D6GDUL63.js +5 -0
- package/public/{chunk-WNWWUCCZ.js → chunk-EGECSH4K.js} +3 -3
- package/public/chunk-EON6XHIW.js +20 -0
- package/public/chunk-F2CIREEO.js +1 -0
- package/public/chunk-F75NHZPV.js +1 -0
- package/public/chunk-FD54JRNF.js +1 -0
- package/public/chunk-FQEUOMOT.js +1 -0
- package/public/chunk-GJL2B6EX.js +1 -0
- package/public/{chunk-6TCHCTXZ.js → chunk-GN7IXG4L.js} +1 -1
- package/public/chunk-HI45ZEZU.js +1 -0
- package/public/chunk-HWJ734TY.js +1 -0
- package/public/chunk-I5VNJY5H.js +1 -0
- package/public/chunk-I7XHOSDH.js +1 -0
- package/public/{chunk-D2D564LE.js → chunk-IH7IL35X.js} +1 -1
- package/public/chunk-JIT72ITX.js +1 -0
- package/public/chunk-LBGUEPBU.js +1 -0
- package/public/chunk-LEMXCMWD.js +1 -0
- package/public/chunk-LIG3MQU2.js +1 -0
- package/public/chunk-MCY32ZEQ.js +1 -0
- package/public/{chunk-TSZZQKYF.js → chunk-MVL5EQPC.js} +1 -1
- package/public/chunk-MXAKDDIW.js +1 -0
- package/public/chunk-MZFFFGFF.js +1 -0
- package/public/chunk-OZ3D5PEN.js +1 -0
- package/public/chunk-P6HYOLET.js +1 -0
- package/public/chunk-PAZ5V5TQ.js +7 -0
- package/public/chunk-PDQGIGL6.js +1 -0
- package/public/chunk-PGJGS3YA.js +1 -0
- package/public/chunk-PL6ZMRTL.js +1 -0
- package/public/chunk-QAQ62ONT.js +1 -0
- package/public/chunk-QHRWSZEW.js +1 -0
- package/public/chunk-QOVSP2KD.js +1 -0
- package/public/chunk-QT6YV32Y.js +1 -0
- package/public/chunk-RKG5F4ZV.js +1 -0
- package/public/chunk-RMMQMQZX.js +1 -0
- package/public/chunk-RQA2H3J6.js +1 -0
- package/public/chunk-S2XBNDS5.js +1 -0
- package/public/chunk-SKS24AVF.js +1 -0
- package/public/chunk-SKVHW32E.js +5 -0
- package/public/chunk-TIXTDDTD.js +7 -0
- package/public/chunk-TP425OA6.js +1 -0
- package/public/chunk-TRIO3R5X.js +1 -0
- package/public/chunk-UBLIT2K3.js +1 -0
- package/public/{chunk-TZS4WGUK.js → chunk-UHT54HTE.js} +2 -2
- package/public/chunk-UNO5SD4B.js +1 -0
- package/public/chunk-USOUWLNH.js +2 -0
- package/public/chunk-VL2VV7JU.js +1 -0
- package/public/chunk-VQEPN6H2.js +1 -0
- package/public/chunk-VUKQDY5X.js +1 -0
- package/public/chunk-VUTUDBG5.js +1 -0
- package/public/chunk-VXLVIRES.js +1 -0
- package/public/chunk-W3624K3I.js +1 -0
- package/public/chunk-WCO7YV6E.js +8 -0
- package/public/chunk-XYRZUWP2.js +1 -0
- package/public/chunk-Y4XTCS5Q.js +41 -0
- package/public/chunk-Y5I5EFKZ.js +1 -0
- package/public/chunk-YDBOT4OU.js +1 -0
- package/public/chunk-YHXSTLHD.js +1 -0
- package/public/{chunk-JZZQRLNW.js → chunk-ZA436JJP.js} +1 -1
- package/public/chunk-ZOK6NY4K.js +8 -0
- package/public/chunk-ZVGCGGDU.js +1 -0
- package/public/index.html +2 -2
- package/public/main-N277YXB2.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-4F4B5XMZ.js +2 -0
- package/public/styles-PGYQLREL.css +1 -0
- package/scripts/upgrade-install-plugin.sh +1 -1
- package/public/chunk-32ZJLZS4.js +0 -1
- package/public/chunk-34G5YV5T.js +0 -1
- package/public/chunk-37PRYZH6.js +0 -1
- package/public/chunk-3IX3CLER.js +0 -1
- package/public/chunk-3NB33IBB.js +0 -1
- package/public/chunk-5ABW4ZKF.js +0 -20
- package/public/chunk-5KSPDTFH.js +0 -1
- package/public/chunk-5OHKMFXO.js +0 -1
- package/public/chunk-656LQTVE.js +0 -14
- package/public/chunk-7T234PWV.js +0 -1
- package/public/chunk-AZC7XCGC.js +0 -1
- package/public/chunk-BKUGARB4.js +0 -7
- package/public/chunk-BPMSJ2VF.js +0 -1
- package/public/chunk-BY2TSVEY.js +0 -1
- package/public/chunk-C7QJOHXE.js +0 -1
- package/public/chunk-CKR46AVL.js +0 -1
- package/public/chunk-DLMGGPRM.js +0 -1
- package/public/chunk-DXZ6DCYP.js +0 -1
- package/public/chunk-EP66JAAV.js +0 -1
- package/public/chunk-FJF4WNUO.js +0 -1
- package/public/chunk-FQYNC4RH.js +0 -1
- package/public/chunk-HHG6WMVF.js +0 -1
- package/public/chunk-HHIHVUCL.js +0 -1
- package/public/chunk-HSJSWZHD.js +0 -1
- package/public/chunk-II2UAWC2.js +0 -6
- package/public/chunk-IMOTYOKQ.js +0 -8
- package/public/chunk-JDQ5PHOU.js +0 -1
- package/public/chunk-KG3DHJZY.js +0 -1
- package/public/chunk-KQJ7ONUG.js +0 -1
- package/public/chunk-LLGTFHIT.js +0 -1
- package/public/chunk-M346UY2G.js +0 -1
- package/public/chunk-MNBUOV7P.js +0 -1
- package/public/chunk-NI664X6I.js +0 -1
- package/public/chunk-NW6AFAD7.js +0 -1
- package/public/chunk-NZNNTHFQ.js +0 -1
- package/public/chunk-ORPWYWCL.js +0 -5
- package/public/chunk-P5FZV27L.js +0 -1
- package/public/chunk-PS4KQKK7.js +0 -1
- package/public/chunk-Q5YFESZW.js +0 -1
- package/public/chunk-QAEUHAL6.js +0 -1
- package/public/chunk-QBDPVXMM.js +0 -1
- package/public/chunk-QHPDGSZ6.js +0 -1
- package/public/chunk-QJYLB6LD.js +0 -1
- package/public/chunk-R2W5BRWY.js +0 -32
- package/public/chunk-RIN5QMTV.js +0 -1
- package/public/chunk-RKC5OBYP.js +0 -1
- package/public/chunk-RT7V3UYQ.js +0 -5
- package/public/chunk-SCR7PUV7.js +0 -1
- package/public/chunk-SOEXENDP.js +0 -1
- package/public/chunk-TCSXGQNF.js +0 -1
- package/public/chunk-TH2G22O2.js +0 -23
- package/public/chunk-TMD6JYTR.js +0 -1
- package/public/chunk-TO5O6L7A.js +0 -1
- package/public/chunk-TXOB7R5K.js +0 -7
- package/public/chunk-UG5DK2RQ.js +0 -2
- package/public/chunk-UYLV5ENO.js +0 -1
- package/public/chunk-VPSLX47Z.js +0 -1
- package/public/chunk-VVGJ5MFU.js +0 -1
- package/public/chunk-WAUGELUM.js +0 -1
- package/public/chunk-WHJOLAED.js +0 -1
- package/public/chunk-WHJSVGC7.js +0 -1
- package/public/chunk-WXTR3AXD.js +0 -1
- package/public/chunk-X2AWRY46.js +0 -1
- package/public/chunk-X3GZMTJ5.js +0 -1
- package/public/chunk-X7YNKLZW.js +0 -1
- package/public/chunk-XRPL3VU7.js +0 -1
- package/public/chunk-Y3RRGTUL.js +0 -1
- package/public/chunk-YD5MPMXA.js +0 -1
- package/public/chunk-YJB6Y76M.js +0 -1
- package/public/chunk-ZT23DWNL.js +0 -1
- package/public/main-35ZSDHG6.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
CHANGED
|
@@ -1,47 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
4
|
};
|
|
38
|
-
const node_child_process_1 = require("node:child_process");
|
|
39
|
-
const node_path_1 = require("node:path");
|
|
40
5
|
const node_process_1 = __importDefault(require("node:process"));
|
|
41
6
|
const commander_1 = require("commander");
|
|
42
7
|
const semver_1 = require("semver");
|
|
43
8
|
let homebridge;
|
|
44
|
-
class
|
|
9
|
+
class HomebridgeUi {
|
|
45
10
|
constructor(log, config) {
|
|
46
11
|
this.log = log;
|
|
47
12
|
node_process_1.default.env.UIX_CONFIG_PATH = homebridge.user.configPath();
|
|
@@ -50,50 +15,16 @@ class HomebridgeConfigUi {
|
|
|
50
15
|
const program = new commander_1.Command();
|
|
51
16
|
program
|
|
52
17
|
.allowUnknownOption()
|
|
18
|
+
.allowExcessArguments()
|
|
53
19
|
.option('-P, --plugin-path [path]', '', p => node_process_1.default.env.UIX_CUSTOM_PLUGIN_PATH = p)
|
|
54
20
|
.option('-I, --insecure', '', () => node_process_1.default.env.UIX_INSECURE_MODE = '1')
|
|
55
21
|
.option('-T, --no-timestamp', '', () => node_process_1.default.env.UIX_LOG_NO_TIMESTAMPS = '1')
|
|
56
22
|
.parse(node_process_1.default.argv);
|
|
57
|
-
if (!(0, semver_1.satisfies)(node_process_1.default.version, '>=18.
|
|
58
|
-
const msg = `Node.js
|
|
23
|
+
if (!(0, semver_1.satisfies)(node_process_1.default.version, '>=20.18.0')) {
|
|
24
|
+
const msg = `Node.js v20.18.0 higher is required. You may experience issues running this plugin running on ${node_process_1.default.version}.`;
|
|
59
25
|
log.error(msg);
|
|
60
26
|
log.warn(msg);
|
|
61
27
|
}
|
|
62
|
-
if (node_process_1.default.env.UIX_SERVICE_MODE === '1' && node_process_1.default.connected) {
|
|
63
|
-
this.log('Running in Service Mode');
|
|
64
|
-
}
|
|
65
|
-
else if (config.standalone || node_process_1.default.env.UIX_SERVICE_MODE === '1'
|
|
66
|
-
|| (node_process_1.default.env.HOMEBRIDGE_CONFIG_UI === '1' && (0, semver_1.satisfies)(node_process_1.default.env.CONFIG_UI_VERSION, '>=3.5.5', { includePrerelease: true }))) {
|
|
67
|
-
this.log.warn('*********** Homebridge Standalone Mode Is Deprecated **********');
|
|
68
|
-
this.log.warn('* Please swap to "service mode" using the hb-service command. *');
|
|
69
|
-
this.log.warn('* See https://homebridge.io/w/JUvQr for instructions on how to migrate. *');
|
|
70
|
-
this.log('Running in Standalone Mode.');
|
|
71
|
-
}
|
|
72
|
-
else if (config.noFork) {
|
|
73
|
-
this.noFork();
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
this.fork();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
fork() {
|
|
80
|
-
const ui = (0, node_child_process_1.fork)((0, node_path_1.resolve)(__dirname, 'bin/fork'), null, {
|
|
81
|
-
env: node_process_1.default.env,
|
|
82
|
-
});
|
|
83
|
-
this.log('Spawning homebridge-config-ui-x with PID', ui.pid);
|
|
84
|
-
ui.on('close', () => {
|
|
85
|
-
node_process_1.default.kill(node_process_1.default.pid, 'SIGTERM');
|
|
86
|
-
});
|
|
87
|
-
ui.on('error', () => {
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
async noFork() {
|
|
91
|
-
await Promise.resolve().then(() => __importStar(require('./main')));
|
|
92
|
-
}
|
|
93
|
-
static serviceMode() {
|
|
94
|
-
node_process_1.default.on('disconnect', () => {
|
|
95
|
-
node_process_1.default.exit();
|
|
96
|
-
});
|
|
97
28
|
}
|
|
98
29
|
accessories(callback) {
|
|
99
30
|
const accessories = [];
|
|
@@ -102,9 +33,7 @@ class HomebridgeConfigUi {
|
|
|
102
33
|
}
|
|
103
34
|
module.exports = (api) => {
|
|
104
35
|
homebridge = api;
|
|
105
|
-
homebridge.registerPlatform('homebridge-config-ui-x', 'config',
|
|
106
|
-
|
|
107
|
-
HomebridgeConfigUi.serviceMode();
|
|
108
|
-
}
|
|
36
|
+
homebridge.registerPlatform('homebridge-config-ui-x', 'config', HomebridgeUi);
|
|
37
|
+
node_process_1.default.on('disconnect', () => node_process_1.default.exit());
|
|
109
38
|
};
|
|
110
39
|
//# sourceMappingURL=index.js.map
|
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":";;;;;;;;;;;;;;;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,qEAAqE,CAAC,CAAA;YACxF,OAAM;QACR,CAAC;QAED,IAAI,QAAe,CAAA;QAEnB,MAAM,kBAAkB,GAAG,KAAK,EAAE,OAAgB,EAAE,EAAE;YACpD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAQ,UAAU,CAAC,CAAA;gBAC3D,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;YAED,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;YACvC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;YAC5C,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;YACzC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QACjD,CAAC,CAAA;QAGD,MAAM,kBAAkB,CAAC,KAAK,CAAC,CAAA;QAG/B,MAAM,cAAc,GAAG,KAAK,EAAE,GAAS,EAAE,EAAE;YACzC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAgB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAChF,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;wBAC3D,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;wBAEvC,UAAU,CAAC,GAAG,EAAE;4BACd,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;wBACvC,CAAC,EAAE,IAAI,CAAC,CAAA;oBACV,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QACD,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAA;QAE9C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAA;QAE7D,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,EAAE;YAClC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;QACvC,CAAC,CAAA;QACD,OAAO,CAAC,EAAE,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAA;QAG3C,MAAM,qBAAqB,GAAG,KAAK,EAAE,IAAS,EAAE,EAAE;YAChD,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAA;QACtD,CAAC,CAAA;QACD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAA;QAG/D,MAAM,oBAAoB,GAAG,UAAU,CAAC,KAAK,IAAI,EAAE;YACjD,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC,EAAE,IAAI,CAAC,CAAA;QAGR,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,YAAY,CAAC,oBAAoB,CAAC,CAAA;YAClC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;YAChC,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAA;YACvC,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;YAC9C,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAA;YAC5C,OAAO,CAAC,MAAM,EAAE,CAAA;YAChB,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAA;QAC7E,CAAC,CAAA;QAED,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACzC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAGlC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAA;IACnC,CAAC;IAMO,sBAAsB,CAAC,QAAe;QAC5C,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAA;IAC/D,CAAC;IAKM,KAAK,CAAC,eAAe;QAC1B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;YAC/C,MAAM,IAAI,4BAAmB,CAAC,oEAAoE,CAAC,CAAA;QACrG,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAA;YACnH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC,OAAO,GAAG,CAAC,CAAA;YAClF,CAAC;YACD,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAMM,KAAK,CAAC,YAAY,CAAC,QAAgB;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QAE3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,4BAAmB,CAAC,6BAA6B,QAAQ,cAAc,CAAC,CAAA;QACpF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAA;YACtC,OAAO,OAAO,CAAA;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,4BAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAQM,KAAK,CAAC,0BAA0B,CAAC,QAAgB,EAAE,kBAA0B,EAAE,KAAgC;QACpH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QAE3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,4BAAmB,CAAC,6BAA6B,QAAQ,cAAc,CAAC,CAAA;QACpF,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAA;QAEpE,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvG,MAAM,IAAI,4BAAmB,CAAC,gDAAgD,KAAK,GAAG,CAAC,CAAA;QACzF,CAAC;QAGD,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAe,EAAE,EAAE,CAAC,CAAA;YAC5C,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,4BAAmB,CAAC,4CAA4C,cAAc,CAAC,QAAQ,QAAQ,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAA;YACtI,CAAC;YACD,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,4BAAmB,CAAC,4CAA4C,cAAc,CAAC,QAAQ,QAAQ,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAA;YACtI,CAAC;QACH,CAAC;QAGD,IAAI,cAAc,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACtC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAe,CAAC,CAAA;YAC1C,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,4BAAmB,CAAC,4CAA4C,cAAc,CAAC,QAAQ,QAAQ,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAA;YACtI,CAAC;YACD,IAAI,cAAc,CAAC,QAAQ,KAAK,SAAS,IAAI,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC;gBAC7E,MAAM,IAAI,4BAAmB,CAAC,4CAA4C,cAAc,CAAC,QAAQ,QAAQ,cAAc,CAAC,QAAQ,GAAG,CAAC,CAAA;YACtI,CAAC;QACH,CAAC;QAGD,IAAI,cAAc,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAChD,KAAK,GAAG,IAAI,CAAA;gBACd,CAAC;qBAAM,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBACxD,KAAK,GAAG,KAAK,CAAA;gBACf,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,KAAK,GAAG,KAAK,KAAK,CAAC,CAAA;YACrB,CAAC;YAED,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,IAAI,4BAAmB,CAAC,6DAA6D,CAAC,CAAA;YAC9F,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YACpC,MAAM,OAAO,CAAC,sBAAsB,EAAE,CAAA;YACtC,OAAO,OAAO,CAAA;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,4BAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IAKM,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QAC9C,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAA;YAC9E,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;gBAChC,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAA;YAClC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO;gBACL;oBACE,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,EAAE;iBACb;aACF,CAAA;QACH,CAAC;IACH,CAAC;IAOM,KAAK,CAAC,mBAAmB,CAAC,IAAY,EAAE,MAA+B;QAC5E,IAAI,eAAoB,CAAA;QAExB,IAAI,CAAC;YACH,eAAe,GAAG,MAAM,IAAA,mBAAQ,EAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAA;QAC1E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,eAAe,GAAG,EAAE,CAAA;QACtB,CAAC;QAED,IAAI,CAAC,MAAM,IAAA,qBAAU,EAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAA,iBAAM,EAAC,IAAA,gBAAI,EAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAA;QACnE,CAAC;QAED,eAAe,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;QAC9B,IAAA,wBAAa,EAAC,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,eAAe,CAAC,CAAA;QACtE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sCAAsC,IAAI,GAAG,CAAC,CAAA;QAC9D,OAAO,MAAM,CAAA;IACf,CAAC;IAKM,iBAAiB;QACtB,IAAI,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAA;QACpC,CAAC;IACH,CAAC;CACF,CAAA;AAjRY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;qCAMuB,8BAAa;QACpB,uBAAM;GANtB,kBAAkB,CAiR9B"}
|
|
@@ -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":";;;;;;;;;;;;;;;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,GAAG,CAAC,CAAA;YACrH,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YAC5D,MAAM,IAAI,qCAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IAQK,AAAN,KAAK,CAAC,oBAAoB;QACxB,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAA;IAC1D,CAAC;IAoBK,AAAN,KAAK,CAAC,WAAW,CAAQ,GAAmB;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;YAC7B,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YAC5D,MAAM,IAAI,qCAA4B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACrD,CAAC;IACH,CAAC;IAKD,wBAAwB;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA;IACtD,CAAC;CACF,CAAA;AAxIY,4CAAgB;AASrB;IAHL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,kDAAkD,EAAE,CAAC;IAC7E,IAAA,YAAG,EAAC,WAAW,CAAC;IACK,WAAA,IAAA,YAAG,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;;;;sDAQ/C;AAKK;IAHL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,wDAAwD,EAAE,CAAC;IACnF,IAAA,YAAG,EAAC,yBAAyB,CAAC;;;;yDAG9B;AAKK;IAHL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,mDAAmD,EAAE,CAAC;IAC9E,IAAA,YAAG,EAAC,oBAAoB,CAAC;;;;4DAGzB;AAMK;IAJL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;IACzE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9C,IAAA,YAAG,EAAC,8BAA8B,CAAC;IACV,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;;;;0DAE1C;AAMK;IAJL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,4CAA4C,EAAE,CAAC;IACvE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9C,IAAA,eAAM,EAAC,8BAA8B,CAAC;IACV,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;;;;6DAE7C;AASK;IAPL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,wEAAwE;QACjF,WAAW,EAAE,2DAA2D;KACzE,CAAC;IACD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9C,IAAA,aAAI,EAAC,sCAAsC,CAAC;IACf,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;;;;8DAE9C;AAoBK;IAlBL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,aAAI,EAAC,UAAU,CAAC;IAChB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,gDAAgD;QACzD,WAAW,EAAE,2DAA2D;KACzE,CAAC;IACD,IAAA,qBAAW,EAAC,qBAAqB,CAAC;IAClC,IAAA,iBAAO,EAAC;QACP,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,QAAQ;iBACjB;aACF;SACF;KACF,CAAC;IACmB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAYzB;AAQK;IANL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,YAAG,EAAC,kBAAkB,CAAC;IACvB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,yEAAyE;QAClF,WAAW,EAAE,4BAA4B;KAC1C,CAAC;;;;4DAGD;AAoBK;IAlBL,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,2DAA2D;QACpE,WAAW,EAAE,2DAA2D;KACzE,CAAC;IACD,IAAA,qBAAW,EAAC,qBAAqB,CAAC;IAClC,IAAA,iBAAO,EAAC;QACP,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,QAAQ;iBACjB;aACF;SACF;KACF,CAAC;IACD,IAAA,aAAI,EAAC,eAAe,CAAC;IACH,WAAA,IAAA,YAAG,GAAE,CAAA;;;;mDAQvB;AAKD;IAHC,IAAA,kBAAS,EAAC,wBAAU,CAAC;IACrB,IAAA,YAAG,EAAC,UAAU,CAAC;IACf,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,oEAAoE,EAAE,CAAC;;;;gEAG/F;2BAvIU,gBAAgB;IAJ5B,IAAA,iBAAO,EAAC,kBAAkB,CAAC;IAC3B,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,IAAA,oBAAS,GAAE,CAAC;IACtB,IAAA,mBAAU,EAAC,QAAQ,CAAC;qCAGM,8BAAa;QACpB,uBAAM;GAHb,gBAAgB,CAwI5B"}
|
|
@@ -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(
|
|
147
|
+
throw new Error('Custom instance backup path does not exist');
|
|
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,7 +235,7 @@ 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
|
}
|
|
@@ -254,10 +253,10 @@ let BackupService = class BackupService {
|
|
|
254
253
|
}
|
|
255
254
|
try {
|
|
256
255
|
await (0, fs_extra_1.remove)(backupPath);
|
|
257
|
-
this.logger.warn(`Scheduled backup ${backupId} deleted by request
|
|
256
|
+
this.logger.warn(`Scheduled backup ${backupId} deleted by request.`);
|
|
258
257
|
}
|
|
259
258
|
catch (e) {
|
|
260
|
-
this.logger.warn(
|
|
259
|
+
this.logger.warn(`Failed to delete scheduled backup by request as ${e.message}.`);
|
|
261
260
|
throw new common_1.InternalServerErrorException(e.message);
|
|
262
261
|
}
|
|
263
262
|
}
|
|
@@ -268,7 +267,7 @@ let BackupService = class BackupService {
|
|
|
268
267
|
}
|
|
269
268
|
this.restoreDirectory = undefined;
|
|
270
269
|
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.
|
|
270
|
+
await pump((0, fs_extra_1.createReadStream)(backupPath), (0, tar_1.extract)({
|
|
272
271
|
cwd: restoreDir,
|
|
273
272
|
}));
|
|
274
273
|
this.restoreDirectory = restoreDir;
|
|
@@ -277,7 +276,7 @@ let BackupService = class BackupService {
|
|
|
277
276
|
const { backupDir, backupPath, backupFileName } = await this.createBackup();
|
|
278
277
|
async function cleanup() {
|
|
279
278
|
await (0, fs_extra_1.remove)((0, node_path_1.resolve)(backupDir));
|
|
280
|
-
this.logger.log(`Backup complete, removing ${backupDir}
|
|
279
|
+
this.logger.log(`Backup complete, removing ${backupDir}.`);
|
|
281
280
|
}
|
|
282
281
|
reply.raw.setHeader('Content-type', 'application/octet-stream');
|
|
283
282
|
reply.raw.setHeader('Content-disposition', `attachment; filename=${backupFileName}`);
|
|
@@ -290,7 +289,7 @@ let BackupService = class BackupService {
|
|
|
290
289
|
async uploadBackupRestore(data) {
|
|
291
290
|
this.restoreDirectory = undefined;
|
|
292
291
|
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.
|
|
292
|
+
await pump(data.file, (0, tar_1.extract)({
|
|
294
293
|
cwd: backupDir,
|
|
295
294
|
}));
|
|
296
295
|
this.restoreDirectory = backupDir;
|
|
@@ -400,11 +399,6 @@ let BackupService = class BackupService {
|
|
|
400
399
|
const uiConfigBlock = restoredConfig.platforms.find(x => x.platform === 'config');
|
|
401
400
|
if (uiConfigBlock) {
|
|
402
401
|
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
402
|
}
|
|
409
403
|
else {
|
|
410
404
|
restoredConfig.platforms.push({
|
|
@@ -425,7 +419,7 @@ let BackupService = class BackupService {
|
|
|
425
419
|
async uploadHbfxRestore(data) {
|
|
426
420
|
this.restoreDirectory = undefined;
|
|
427
421
|
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}
|
|
422
|
+
this.logger.log(`Extracting .hbfx file to ${backupDir}.`);
|
|
429
423
|
await pump(data.file, (0, unzipper_1.Extract)({
|
|
430
424
|
path: backupDir,
|
|
431
425
|
}));
|
|
@@ -531,64 +525,10 @@ let BackupService = class BackupService {
|
|
|
531
525
|
}
|
|
532
526
|
postBackupRestoreRestart() {
|
|
533
527
|
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');
|
|
528
|
+
this.homebridgeIpcService.killHomebridge();
|
|
529
|
+
setTimeout(() => {
|
|
552
530
|
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');
|
|
531
|
+
}, 500);
|
|
592
532
|
}, 500);
|
|
593
533
|
return { status: 0 };
|
|
594
534
|
}
|