homebridge-config-ui-x 5.0.0-beta.10 → 5.0.0-beta.101
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 +438 -31
- package/CONTRIBUTING.md +5 -4
- package/LICENSE +1 -1
- package/config.schema.json +55 -252
- package/dist/bin/hb-service.d.ts +2 -2
- package/dist/bin/hb-service.js +52 -51
- package/dist/bin/hb-service.js.map +1 -1
- package/dist/bin/platforms/darwin.js +3 -10
- 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 +31 -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 +46 -11
- package/dist/core/config/config.service.js +57 -20
- 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 +2 -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 +7 -1
- package/dist/modules/config-editor/config-editor.controller.js +36 -8
- package/dist/modules/config-editor/config-editor.controller.js.map +1 -1
- package/dist/modules/config-editor/config-editor.service.d.ts +5 -1
- package/dist/modules/config-editor/config-editor.service.js +132 -69
- 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 +7 -1
- package/dist/modules/plugins/plugins.service.js +215 -127
- package/dist/modules/plugins/plugins.service.js.map +1 -1
- package/dist/modules/server/server.controller.d.ts +33 -3
- package/dist/modules/server/server.controller.js +162 -20
- package/dist/modules/server/server.controller.js.map +1 -1
- package/dist/modules/server/server.service.d.ts +35 -6
- package/dist/modules/server/server.service.js +265 -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 +25 -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 +50 -43
- package/public/3rdpartylicenses.txt +218 -108
- 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-2G7GNBIF.js +1 -0
- package/public/chunk-3KBLYMVM.js +1 -0
- package/public/chunk-3NTCV6WP.js +2 -0
- package/public/chunk-4A5UMBFX.js +1 -0
- package/public/chunk-4KFFPE3X.js +1 -0
- package/public/chunk-4RGKWQU6.js +1 -0
- package/public/chunk-5NBW7CCV.js +1 -0
- package/public/chunk-67FAL7JH.js +1 -0
- package/public/chunk-6YYG3OKR.js +1 -0
- package/public/chunk-A3KWNY4Q.js +1 -0
- package/public/chunk-ALG7CIS3.js +5 -0
- package/public/chunk-BIRWL4X3.js +1 -0
- package/public/chunk-BKR5NA75.js +1 -0
- package/public/chunk-BMCQHGMB.js +1 -0
- package/public/{chunk-EA5J2VEJ.js → chunk-BRW7C4BZ.js} +1 -1
- package/public/chunk-C6LXQBT3.js +1 -0
- package/public/chunk-CG7LPZUJ.js +1 -0
- package/public/{chunk-Q5NJBBHF.js → chunk-CNOY6SFC.js} +1 -1
- package/public/chunk-CSHEX5NC.js +29 -0
- package/public/chunk-DDFZVHUO.js +1 -0
- package/public/{chunk-BSD4FVOE.js → chunk-E36YMZY4.js} +2 -2
- package/public/chunk-EGRPIFYF.js +1 -0
- package/public/chunk-EHYB64DK.js +1 -0
- package/public/chunk-EZZ2U6ZO.js +8 -0
- package/public/chunk-FNHPLIFV.js +1 -0
- package/public/chunk-GMY5QOXR.js +7 -0
- package/public/chunk-GYBA35QS.js +1 -0
- package/public/chunk-H7HZZEL7.js +1 -0
- package/public/chunk-HCJSLSTH.js +1 -0
- package/public/chunk-HPVQO6EP.js +1 -0
- package/public/chunk-HYNYVUKA.js +6 -0
- package/public/chunk-IFJOFLLC.js +1 -0
- package/public/chunk-IJR4P4CH.js +1 -0
- package/public/{chunk-7EUQWCP5.js → chunk-IOWBVW62.js} +2 -2
- package/public/chunk-JE732SOT.js +1 -0
- package/public/chunk-JHZXVI3K.js +1 -0
- package/public/chunk-JSTVINGW.js +1 -0
- package/public/chunk-K4IBXXRR.js +1 -0
- package/public/chunk-KGQXFMUX.js +8 -0
- package/public/chunk-L6JNO3P5.js +5 -0
- package/public/chunk-LBTT254H.js +23 -0
- package/public/{chunk-6FLZSYP2.js → chunk-MMEFZVFQ.js} +1 -1
- package/public/chunk-NANSDWEP.js +1 -0
- package/public/chunk-NPGQTP6K.js +1 -0
- package/public/chunk-NQ4J7SSU.js +1 -0
- package/public/chunk-OHPCYLXI.js +1 -0
- package/public/chunk-OK54UGUG.js +1 -0
- package/public/chunk-OR6CUPLP.js +1 -0
- package/public/chunk-PCOFQVCM.js +1 -0
- package/public/chunk-PFYSR33C.js +1 -0
- package/public/chunk-PODF4FUD.js +1 -0
- package/public/chunk-PU3TWSJU.js +20 -0
- package/public/chunk-PVH3OZPO.js +1 -0
- package/public/chunk-QGDQHACV.js +1 -0
- package/public/chunk-QHUIV2B5.js +1 -0
- package/public/chunk-QIH36FRX.js +1 -0
- package/public/chunk-QMB5XE4Y.js +1 -0
- package/public/chunk-R3VPSO5X.js +7 -0
- package/public/{chunk-QE7DO6J3.js → chunk-RNHMRKPJ.js} +2 -2
- package/public/chunk-S46K5JOQ.js +1 -0
- package/public/chunk-T4TYPDNX.js +1 -0
- package/public/chunk-TXSUD3RL.js +1 -0
- package/public/{chunk-PIAD3JIG.js → chunk-UTAVUGTT.js} +11 -11
- package/public/{chunk-JZZQRLNW.js → chunk-UVOJ3BF7.js} +1 -1
- package/public/chunk-UWKOQJLO.js +1 -0
- package/public/chunk-V2ZZMO7J.js +1 -0
- package/public/chunk-VEPTLCSB.js +1 -0
- package/public/{chunk-CCUID66K.js → chunk-VHTQTL2S.js} +1 -1
- package/public/chunk-VJEUBTTK.js +1 -0
- package/public/chunk-VLX322GM.js +1 -0
- package/public/chunk-VUYAK52W.js +2 -0
- package/public/chunk-W3C6RTKX.js +1 -0
- package/public/{chunk-WNWWUCCZ.js → chunk-WAA5KWIN.js} +3 -3
- package/public/chunk-WALYNNK5.js +1 -0
- package/public/chunk-WCYCETUA.js +1 -0
- package/public/chunk-WD2RKBDO.js +1 -0
- package/public/chunk-XAC7NMU3.js +1 -0
- package/public/{chunk-TIVE3PVO.js → chunk-XYAWU2ED.js} +1 -1
- package/public/chunk-Z64JVPZ3.js +1 -0
- package/public/chunk-ZP5ERU6O.js +1 -0
- package/public/index.html +2 -2
- package/public/main-ORLCJTBG.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-GCAZ7JAV.js +2 -0
- package/public/styles-PKR3EGHP.css +1 -0
- package/scripts/upgrade-install-plugin.sh +1 -1
- package/public/chunk-26EWO6RG.js +0 -1
- package/public/chunk-3IX3CLER.js +0 -1
- package/public/chunk-3ZJBUXFZ.js +0 -20
- package/public/chunk-4DDKOVAZ.js +0 -1
- package/public/chunk-4IGKXTSE.js +0 -6
- package/public/chunk-4PAHKWW6.js +0 -1
- package/public/chunk-4SMDEHVB.js +0 -1
- package/public/chunk-4X4WE4X3.js +0 -1
- package/public/chunk-57O4WFHV.js +0 -1
- package/public/chunk-5LGVFGMP.js +0 -1
- package/public/chunk-6HVQYFKM.js +0 -1
- package/public/chunk-6I5NOTAK.js +0 -5
- package/public/chunk-6TCHCTXZ.js +0 -1
- package/public/chunk-7RD3ANA6.js +0 -1
- package/public/chunk-AEZNVJNA.js +0 -1
- package/public/chunk-BKUGARB4.js +0 -7
- package/public/chunk-BPMSJ2VF.js +0 -1
- package/public/chunk-C3OLDXDF.js +0 -1
- package/public/chunk-CKJ7WSCY.js +0 -1
- package/public/chunk-DW3VS3AJ.js +0 -1
- package/public/chunk-FBHAKNKK.js +0 -1
- package/public/chunk-FTBDA6VV.js +0 -1
- package/public/chunk-FX2G7EKQ.js +0 -1
- package/public/chunk-GLXDWUP7.js +0 -1
- package/public/chunk-GW3B2BTG.js +0 -1
- package/public/chunk-GZS6TFES.js +0 -1
- package/public/chunk-HFUBGIQF.js +0 -8
- package/public/chunk-HJMBSNDE.js +0 -1
- package/public/chunk-HSJSWZHD.js +0 -1
- package/public/chunk-J2ACJ2SJ.js +0 -1
- package/public/chunk-J2GVB2HH.js +0 -1
- package/public/chunk-JGA3UJQJ.js +0 -1
- package/public/chunk-JLZHU54T.js +0 -23
- package/public/chunk-JTBW4DGJ.js +0 -1
- package/public/chunk-K2S5XQH3.js +0 -1
- package/public/chunk-KQJ7ONUG.js +0 -1
- package/public/chunk-L376ASVB.js +0 -1
- package/public/chunk-MR5BBXDA.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-P7LFHZOY.js +0 -1
- package/public/chunk-PLAUCLPN.js +0 -1
- package/public/chunk-Q3KYLUJV.js +0 -1
- package/public/chunk-Q63MEYUW.js +0 -1
- package/public/chunk-QHPDGSZ6.js +0 -1
- package/public/chunk-RVIWX6PZ.js +0 -1
- package/public/chunk-S522GW34.js +0 -1
- package/public/chunk-SCN3MDZ7.js +0 -1
- package/public/chunk-SQXGCWUT.js +0 -1
- package/public/chunk-TCSXGQNF.js +0 -1
- package/public/chunk-TGK4ZIKS.js +0 -1
- package/public/chunk-TR6DJBRN.js +0 -1
- package/public/chunk-TXOB7R5K.js +0 -7
- package/public/chunk-UEDIA63L.js +0 -1
- package/public/chunk-UG5DK2RQ.js +0 -2
- package/public/chunk-VHDU5NZU.js +0 -1
- package/public/chunk-VHO4CUXG.js +0 -1
- package/public/chunk-VWTJUCNR.js +0 -1
- package/public/chunk-WALRIIUN.js +0 -1
- package/public/chunk-WBI25HR2.js +0 -1
- package/public/chunk-WHJOLAED.js +0 -1
- package/public/chunk-WHJSVGC7.js +0 -1
- package/public/chunk-WJD5UZP6.js +0 -32
- package/public/chunk-WZ5X6FKY.js +0 -1
- package/public/chunk-Y6JL2J5G.js +0 -1
- package/public/chunk-YPX7RY6A.js +0 -1
- package/public/chunk-YZUUWSDB.js +0 -1
- package/public/chunk-YZVODNRC.js +0 -1
- package/public/chunk-ZT23DWNL.js +0 -1
- package/public/main-T37JUFDS.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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.controller.js","sourceRoot":"","sources":["../../../src/modules/server/server.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"server.controller.js","sourceRoot":"","sources":["../../../src/modules/server/server.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
+
import type { MultipartFile } from '@fastify/multipart';
|
|
1
2
|
import type { Systeminformation } from 'systeminformation';
|
|
2
3
|
import { ServiceUnavailableException } from '@nestjs/common';
|
|
3
4
|
import { ConfigService } from '../../core/config/config.service';
|
|
4
5
|
import { HomebridgeIpcService } from '../../core/homebridge-ipc/homebridge-ipc.service';
|
|
5
6
|
import { Logger } from '../../core/logger/logger.service';
|
|
6
7
|
import { AccessoriesService } from '../accessories/accessories.service';
|
|
7
|
-
import { ChildBridgesService } from '../child-bridges/child-bridges.service';
|
|
8
8
|
import { ConfigEditorService } from '../config-editor/config-editor.service';
|
|
9
9
|
import { HomebridgeMdnsSettingDto } from './server.dto';
|
|
10
10
|
export declare class ServerService {
|
|
11
11
|
private readonly configService;
|
|
12
12
|
private readonly configEditorService;
|
|
13
13
|
private readonly accessoriesService;
|
|
14
|
-
private readonly childBridgesService;
|
|
15
14
|
private readonly homebridgeIpcService;
|
|
16
15
|
private readonly logger;
|
|
17
16
|
private serverServiceCache;
|
|
@@ -19,7 +18,9 @@ export declare class ServerService {
|
|
|
19
18
|
private readonly accessoryInfoPath;
|
|
20
19
|
setupCode: string | null;
|
|
21
20
|
paired: boolean;
|
|
22
|
-
constructor(configService: ConfigService, configEditorService: ConfigEditorService, accessoriesService: AccessoriesService,
|
|
21
|
+
constructor(configService: ConfigService, configEditorService: ConfigEditorService, accessoriesService: AccessoriesService, homebridgeIpcService: HomebridgeIpcService, logger: Logger);
|
|
22
|
+
private deleteSingleDeviceAccessories;
|
|
23
|
+
private deleteSingleDevicePairing;
|
|
23
24
|
restartServer(): Promise<{
|
|
24
25
|
ok: boolean;
|
|
25
26
|
command: string;
|
|
@@ -27,14 +28,31 @@ export declare class ServerService {
|
|
|
27
28
|
}>;
|
|
28
29
|
resetHomebridgeAccessory(): Promise<void>;
|
|
29
30
|
getDevicePairings(): Promise<any[]>;
|
|
30
|
-
getDevicePairingById(deviceId: string): Promise<any>;
|
|
31
|
-
deleteDevicePairing(id: string): Promise<
|
|
31
|
+
getDevicePairingById(deviceId: string, configFile?: any): Promise<any>;
|
|
32
|
+
deleteDevicePairing(id: string, resetPairingInfo: boolean): Promise<{
|
|
33
|
+
ok: boolean;
|
|
34
|
+
}>;
|
|
35
|
+
deleteDevicesPairing(bridges: {
|
|
36
|
+
id: string;
|
|
37
|
+
resetPairingInfo: boolean;
|
|
38
|
+
}[]): Promise<{
|
|
39
|
+
ok: boolean;
|
|
40
|
+
}>;
|
|
32
41
|
deleteDeviceAccessories(id: string): Promise<void>;
|
|
42
|
+
deleteDevicesAccessories(bridges: {
|
|
43
|
+
id: string;
|
|
44
|
+
}[]): Promise<void>;
|
|
33
45
|
getCachedAccessories(): Promise<any[]>;
|
|
34
46
|
deleteCachedAccessory(uuid: string, cacheFile: string): Promise<{
|
|
35
47
|
ok: boolean;
|
|
36
48
|
}>;
|
|
37
|
-
|
|
49
|
+
deleteCachedAccessories(accessories: {
|
|
50
|
+
uuid: string;
|
|
51
|
+
cacheFile: string;
|
|
52
|
+
}[]): Promise<{
|
|
53
|
+
ok: boolean;
|
|
54
|
+
}>;
|
|
55
|
+
deleteAllCachedAccessories(): Promise<{
|
|
38
56
|
ok: boolean;
|
|
39
57
|
}>;
|
|
40
58
|
getSetupCode(): Promise<string | null>;
|
|
@@ -56,6 +74,17 @@ export declare class ServerService {
|
|
|
56
74
|
getHomebridgePort(): Promise<{
|
|
57
75
|
port: number;
|
|
58
76
|
}>;
|
|
77
|
+
getUsablePorts(): Promise<{
|
|
78
|
+
start?: number;
|
|
79
|
+
end?: number;
|
|
80
|
+
}>;
|
|
81
|
+
setHomebridgeName(name: string): Promise<void>;
|
|
59
82
|
setHomebridgePort(port: number): Promise<void>;
|
|
83
|
+
setUsablePorts(value: {
|
|
84
|
+
start?: number;
|
|
85
|
+
end?: number;
|
|
86
|
+
}): Promise<void>;
|
|
60
87
|
private nodeVersionChanged;
|
|
88
|
+
uploadWallpaper(data: MultipartFile): Promise<void>;
|
|
89
|
+
deleteWallpaper(): Promise<void>;
|
|
61
90
|
}
|
|
@@ -13,12 +13,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.ServerService = void 0;
|
|
16
|
+
const node_buffer_1 = require("node:buffer");
|
|
16
17
|
const node_child_process_1 = require("node:child_process");
|
|
17
18
|
const node_path_1 = require("node:path");
|
|
18
19
|
const node_process_1 = __importDefault(require("node:process"));
|
|
20
|
+
const node_stream_1 = require("node:stream");
|
|
21
|
+
const node_util_1 = require("node:util");
|
|
19
22
|
const hap_types_1 = require("@homebridge/hap-client/dist/hap-types");
|
|
20
23
|
const common_1 = require("@nestjs/common");
|
|
21
|
-
const buffer_shims_1 = require("buffer-shims");
|
|
22
24
|
const fs_extra_1 = require("fs-extra");
|
|
23
25
|
const node_cache_1 = __importDefault(require("node-cache"));
|
|
24
26
|
const systeminformation_1 = require("systeminformation");
|
|
@@ -27,14 +29,13 @@ const config_service_1 = require("../../core/config/config.service");
|
|
|
27
29
|
const homebridge_ipc_service_1 = require("../../core/homebridge-ipc/homebridge-ipc.service");
|
|
28
30
|
const logger_service_1 = require("../../core/logger/logger.service");
|
|
29
31
|
const accessories_service_1 = require("../accessories/accessories.service");
|
|
30
|
-
const child_bridges_service_1 = require("../child-bridges/child-bridges.service");
|
|
31
32
|
const config_editor_service_1 = require("../config-editor/config-editor.service");
|
|
33
|
+
const pump = (0, node_util_1.promisify)(node_stream_1.pipeline);
|
|
32
34
|
let ServerService = class ServerService {
|
|
33
|
-
constructor(configService, configEditorService, accessoriesService,
|
|
35
|
+
constructor(configService, configEditorService, accessoriesService, homebridgeIpcService, logger) {
|
|
34
36
|
this.configService = configService;
|
|
35
37
|
this.configEditorService = configEditorService;
|
|
36
38
|
this.accessoriesService = accessoriesService;
|
|
37
|
-
this.childBridgesService = childBridgesService;
|
|
38
39
|
this.homebridgeIpcService = homebridgeIpcService;
|
|
39
40
|
this.logger = logger;
|
|
40
41
|
this.serverServiceCache = new node_cache_1.default({ stdTTL: 300 });
|
|
@@ -43,20 +44,73 @@ let ServerService = class ServerService {
|
|
|
43
44
|
this.accessoryId = this.configService.homebridgeConfig.bridge.username.split(':').join('');
|
|
44
45
|
this.accessoryInfoPath = (0, node_path_1.join)(this.configService.storagePath, 'persist', `AccessoryInfo.${this.accessoryId}.json`);
|
|
45
46
|
}
|
|
47
|
+
async deleteSingleDeviceAccessories(id, cachedAccessoriesDir) {
|
|
48
|
+
const cachedAccessories = (0, node_path_1.join)(cachedAccessoriesDir, `cachedAccessories.${id}`);
|
|
49
|
+
const cachedAccessoriesBackup = (0, node_path_1.join)(cachedAccessoriesDir, `.cachedAccessories.${id}.bak`);
|
|
50
|
+
if (await (0, fs_extra_1.pathExists)(cachedAccessories)) {
|
|
51
|
+
await (0, fs_extra_1.unlink)(cachedAccessories);
|
|
52
|
+
this.logger.warn(`Bridge ${id} accessory removal: removed ${cachedAccessories}.`);
|
|
53
|
+
}
|
|
54
|
+
if (await (0, fs_extra_1.pathExists)(cachedAccessoriesBackup)) {
|
|
55
|
+
await (0, fs_extra_1.unlink)(cachedAccessoriesBackup);
|
|
56
|
+
this.logger.warn(`Bridge ${id} accessory removal: removed ${cachedAccessoriesBackup}.`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async deleteSingleDevicePairing(id, resetPairingInfo) {
|
|
60
|
+
const persistPath = (0, node_path_1.join)(this.configService.storagePath, 'persist');
|
|
61
|
+
const accessoryInfo = (0, node_path_1.join)(persistPath, `AccessoryInfo.${id}.json`);
|
|
62
|
+
const identifierCache = (0, node_path_1.join)(persistPath, `IdentifierCache.${id}.json`);
|
|
63
|
+
if (resetPairingInfo) {
|
|
64
|
+
try {
|
|
65
|
+
const configFile = await this.configEditorService.getConfigFile();
|
|
66
|
+
const username = id.match(/.{1,2}/g).join(':');
|
|
67
|
+
const pluginBlocks = configFile.accessories
|
|
68
|
+
.concat(configFile.platforms)
|
|
69
|
+
.concat([{ _bridge: configFile.bridge }])
|
|
70
|
+
.filter((block) => block._bridge?.username?.toUpperCase() === username.toUpperCase());
|
|
71
|
+
const pluginBlock = pluginBlocks.find((block) => block._bridge?.port);
|
|
72
|
+
const otherBlocks = pluginBlocks.filter((block) => !block._bridge?.port);
|
|
73
|
+
if (pluginBlock) {
|
|
74
|
+
pluginBlock._bridge.username = this.configEditorService.generateUsername();
|
|
75
|
+
pluginBlock._bridge.pin = this.configEditorService.generatePin();
|
|
76
|
+
otherBlocks.forEach((block) => {
|
|
77
|
+
block._bridge.username = pluginBlock._bridge.username;
|
|
78
|
+
});
|
|
79
|
+
this.logger.warn(`Bridge ${id} reset: new username: ${pluginBlock._bridge.username} and new pin: ${pluginBlock._bridge.pin}.`);
|
|
80
|
+
await this.configEditorService.updateConfigFile(configFile);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.logger.error(`Failed to reset username and pin for child bridge ${id} as the plugin block could not be found.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
this.logger.error(`Failed to reset username and pin for child bridge ${id} as ${e.message}.`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (await (0, fs_extra_1.pathExists)(accessoryInfo)) {
|
|
91
|
+
await (0, fs_extra_1.unlink)(accessoryInfo);
|
|
92
|
+
this.logger.warn(`Bridge ${id} reset: removed ${accessoryInfo}.`);
|
|
93
|
+
}
|
|
94
|
+
if (await (0, fs_extra_1.pathExists)(identifierCache)) {
|
|
95
|
+
await (0, fs_extra_1.unlink)(identifierCache);
|
|
96
|
+
this.logger.warn(`Bridge ${id} reset: removed ${identifierCache}.`);
|
|
97
|
+
}
|
|
98
|
+
await this.deleteDeviceAccessories(id);
|
|
99
|
+
}
|
|
46
100
|
async restartServer() {
|
|
47
|
-
this.logger.log('Homebridge restart request received');
|
|
48
|
-
if (
|
|
49
|
-
this.logger.log('UI
|
|
101
|
+
this.logger.log('Homebridge restart request received.');
|
|
102
|
+
if (!await this.configService.uiRestartRequired() && !await this.nodeVersionChanged()) {
|
|
103
|
+
this.logger.log('UI/Bridge settings have not changed - only restarting Homebridge process.');
|
|
50
104
|
this.homebridgeIpcService.restartHomebridge();
|
|
51
105
|
this.accessoriesService.resetInstancePool();
|
|
52
106
|
return { ok: true, command: 'SIGTERM', restartingUI: false };
|
|
53
107
|
}
|
|
54
108
|
setTimeout(() => {
|
|
55
109
|
if (this.configService.ui.restart) {
|
|
56
|
-
this.logger.log(`Executing restart command
|
|
110
|
+
this.logger.log(`Executing restart command ${this.configService.ui.restart}.`);
|
|
57
111
|
(0, node_child_process_1.exec)(this.configService.ui.restart, (err) => {
|
|
58
112
|
if (err) {
|
|
59
|
-
this.logger.log('Restart command exited with an error
|
|
113
|
+
this.logger.log('Restart command exited with an error, failed to restart Homebridge.');
|
|
60
114
|
}
|
|
61
115
|
});
|
|
62
116
|
}
|
|
@@ -72,23 +126,22 @@ let ServerService = class ServerService {
|
|
|
72
126
|
const configFile = await this.configEditorService.getConfigFile();
|
|
73
127
|
configFile.bridge.pin = this.configEditorService.generatePin();
|
|
74
128
|
configFile.bridge.username = this.configEditorService.generateUsername();
|
|
75
|
-
this.logger.warn(`Homebridge
|
|
76
|
-
this.logger.warn(`Homebridge Reset: New Pin: ${configFile.bridge.pin}`);
|
|
129
|
+
this.logger.warn(`Homebridge bridge reset: new username ${configFile.bridge.username} and new pin ${configFile.bridge.pin}.`);
|
|
77
130
|
await this.configEditorService.updateConfigFile(configFile);
|
|
78
131
|
await (0, fs_extra_1.remove)((0, node_path_1.resolve)(this.configService.storagePath, 'accessories'));
|
|
79
132
|
await (0, fs_extra_1.remove)((0, node_path_1.resolve)(this.configService.storagePath, 'persist'));
|
|
80
|
-
this.logger.log('Homebridge
|
|
81
|
-
this.logger.log('Homebridge Reset: "accessories" directory removed.');
|
|
133
|
+
this.logger.log('Homebridge bridge reset: accessories and persist directories were removed.');
|
|
82
134
|
}
|
|
83
135
|
async getDevicePairings() {
|
|
84
136
|
const persistPath = (0, node_path_1.join)(this.configService.storagePath, 'persist');
|
|
85
137
|
const devices = (await (0, fs_extra_1.readdir)(persistPath))
|
|
86
138
|
.filter(x => x.match(/AccessoryInfo\.([A-F,a-f0-9]+)\.json/));
|
|
139
|
+
const configFile = await this.configEditorService.getConfigFile();
|
|
87
140
|
return Promise.all(devices.map(async (x) => {
|
|
88
|
-
return await this.getDevicePairingById(x.split('.')[1]);
|
|
141
|
+
return await this.getDevicePairingById(x.split('.')[1], configFile);
|
|
89
142
|
}));
|
|
90
143
|
}
|
|
91
|
-
async getDevicePairingById(deviceId) {
|
|
144
|
+
async getDevicePairingById(deviceId, configFile = null) {
|
|
92
145
|
const persistPath = (0, node_path_1.join)(this.configService.storagePath, 'persist');
|
|
93
146
|
let device;
|
|
94
147
|
try {
|
|
@@ -97,53 +150,71 @@ let ServerService = class ServerService {
|
|
|
97
150
|
catch (e) {
|
|
98
151
|
throw new common_1.NotFoundException();
|
|
99
152
|
}
|
|
153
|
+
if (!configFile) {
|
|
154
|
+
configFile = await this.configEditorService.getConfigFile();
|
|
155
|
+
}
|
|
156
|
+
const username = deviceId.match(/.{1,2}/g).join(':');
|
|
157
|
+
const isMain = this.configService.homebridgeConfig.bridge.username.toUpperCase() === username.toUpperCase();
|
|
158
|
+
const pluginBlock = configFile.accessories
|
|
159
|
+
.concat(configFile.platforms)
|
|
160
|
+
.concat([{ _bridge: configFile.bridge }])
|
|
161
|
+
.find((block) => block._bridge?.username?.toUpperCase() === username.toUpperCase());
|
|
162
|
+
try {
|
|
163
|
+
device._category = Object.entries(hap_types_1.Categories).find(([, value]) => value === device.category)[0].toLowerCase();
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
device._category = 'Other';
|
|
167
|
+
}
|
|
168
|
+
device.name = pluginBlock?._bridge.name || pluginBlock?.name || device.displayName;
|
|
100
169
|
device._id = deviceId;
|
|
101
|
-
device._username =
|
|
102
|
-
device._main =
|
|
170
|
+
device._username = username;
|
|
171
|
+
device._main = isMain;
|
|
103
172
|
device._isPaired = device.pairedClients && Object.keys(device.pairedClients).length > 0;
|
|
104
173
|
device._setupCode = this.generateSetupCode(device);
|
|
174
|
+
device._couldBeStale = !device._main && device._category === 'bridge' && !pluginBlock;
|
|
105
175
|
delete device.signSk;
|
|
106
176
|
delete device.signPk;
|
|
107
177
|
delete device.configHash;
|
|
108
178
|
delete device.pairedClients;
|
|
109
179
|
delete device.pairedClientsPermission;
|
|
110
|
-
try {
|
|
111
|
-
device._category = Object.entries(hap_types_1.Categories).find(([, value]) => value === device.category)[0].toLowerCase();
|
|
112
|
-
}
|
|
113
|
-
catch (e) {
|
|
114
|
-
device._category = 'Other';
|
|
115
|
-
}
|
|
116
180
|
return device;
|
|
117
181
|
}
|
|
118
|
-
async deleteDevicePairing(id) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
182
|
+
async deleteDevicePairing(id, resetPairingInfo) {
|
|
183
|
+
this.logger.warn(`Shutting down Homebridge before resetting paired bridge ${id}...`);
|
|
184
|
+
await this.homebridgeIpcService.restartAndWaitForClose();
|
|
185
|
+
await this.deleteSingleDevicePairing(id, resetPairingInfo);
|
|
186
|
+
return { ok: true };
|
|
187
|
+
}
|
|
188
|
+
async deleteDevicesPairing(bridges) {
|
|
189
|
+
this.logger.warn(`Shutting down Homebridge before resetting paired bridges ${bridges.map(x => x.id).join(', ')}...`);
|
|
190
|
+
await this.homebridgeIpcService.restartAndWaitForClose();
|
|
191
|
+
for (const { id, resetPairingInfo } of bridges) {
|
|
192
|
+
try {
|
|
193
|
+
await this.deleteSingleDevicePairing(id, resetPairingInfo);
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
this.logger.error(`Failed to reset paired bridge ${id} as ${e.message}.`);
|
|
197
|
+
}
|
|
133
198
|
}
|
|
134
|
-
|
|
199
|
+
return { ok: true };
|
|
135
200
|
}
|
|
136
201
|
async deleteDeviceAccessories(id) {
|
|
202
|
+
this.logger.warn(`Shutting down Homebridge before removing accessories for paired bridge ${id}...`);
|
|
203
|
+
await this.homebridgeIpcService.restartAndWaitForClose();
|
|
137
204
|
const cachedAccessoriesDir = (0, node_path_1.join)(this.configService.storagePath, 'accessories');
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
205
|
+
await this.deleteSingleDeviceAccessories(id, cachedAccessoriesDir);
|
|
206
|
+
}
|
|
207
|
+
async deleteDevicesAccessories(bridges) {
|
|
208
|
+
this.logger.warn(`Shutting down Homebridge before removing accessories for paired bridges ${bridges.map(x => x.id).join(', ')}...`);
|
|
209
|
+
await this.homebridgeIpcService.restartAndWaitForClose();
|
|
210
|
+
const cachedAccessoriesDir = (0, node_path_1.join)(this.configService.storagePath, 'accessories');
|
|
211
|
+
for (const { id } of bridges) {
|
|
212
|
+
try {
|
|
213
|
+
await this.deleteSingleDeviceAccessories(id, cachedAccessoriesDir);
|
|
214
|
+
}
|
|
215
|
+
catch (e) {
|
|
216
|
+
this.logger.error(`Failed to remove accessories for bridge ${id} as ${e.message}.`);
|
|
217
|
+
}
|
|
147
218
|
}
|
|
148
219
|
}
|
|
149
220
|
async getCachedAccessories() {
|
|
@@ -162,31 +233,56 @@ let ServerService = class ServerService {
|
|
|
162
233
|
}
|
|
163
234
|
async deleteCachedAccessory(uuid, cacheFile) {
|
|
164
235
|
cacheFile = cacheFile || 'cachedAccessories';
|
|
165
|
-
if (!this.configService.serviceMode) {
|
|
166
|
-
this.logger.error('The reset accessories cache command is only available in service mode');
|
|
167
|
-
throw new common_1.BadRequestException('This command is only available in service mode');
|
|
168
|
-
}
|
|
169
236
|
const cachedAccessoriesPath = (0, node_path_1.resolve)(this.configService.storagePath, 'accessories', cacheFile);
|
|
170
|
-
this.logger.warn(`Shutting down Homebridge before removing cached accessory
|
|
237
|
+
this.logger.warn(`Shutting down Homebridge before removing cached accessory ${uuid}...`);
|
|
171
238
|
await this.homebridgeIpcService.restartAndWaitForClose();
|
|
172
239
|
const cachedAccessories = await (0, fs_extra_1.readJson)(cachedAccessoriesPath);
|
|
173
240
|
const accessoryIndex = cachedAccessories.findIndex(x => x.UUID === uuid);
|
|
174
241
|
if (accessoryIndex > -1) {
|
|
175
242
|
cachedAccessories.splice(accessoryIndex, 1);
|
|
176
243
|
await (0, fs_extra_1.writeJson)(cachedAccessoriesPath, cachedAccessories);
|
|
177
|
-
this.logger.warn(`Removed cached accessory with UUID
|
|
244
|
+
this.logger.warn(`Removed cached accessory with UUID ${uuid} from file ${cacheFile}.`);
|
|
178
245
|
}
|
|
179
246
|
else {
|
|
180
|
-
this.logger.error(`Cannot find cached accessory with UUID
|
|
247
|
+
this.logger.error(`Cannot find cached accessory with UUID ${uuid} from file ${cacheFile}.`);
|
|
181
248
|
throw new common_1.NotFoundException();
|
|
182
249
|
}
|
|
183
250
|
return { ok: true };
|
|
184
251
|
}
|
|
185
|
-
async
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
252
|
+
async deleteCachedAccessories(accessories) {
|
|
253
|
+
this.logger.warn(`Shutting down Homebridge before removing cached accessories ${accessories.map(x => x.uuid).join(', ')}.`);
|
|
254
|
+
await this.homebridgeIpcService.restartAndWaitForClose();
|
|
255
|
+
const accessoriesByCacheFile = new Map();
|
|
256
|
+
for (const { cacheFile, uuid } of accessories) {
|
|
257
|
+
const accessoryCacheFile = cacheFile || 'cachedAccessories';
|
|
258
|
+
if (!accessoriesByCacheFile.has(accessoryCacheFile)) {
|
|
259
|
+
accessoriesByCacheFile.set(accessoryCacheFile, []);
|
|
260
|
+
}
|
|
261
|
+
accessoriesByCacheFile.get(accessoryCacheFile).push({ uuid });
|
|
189
262
|
}
|
|
263
|
+
for (const [cacheFile, accessories] of accessoriesByCacheFile.entries()) {
|
|
264
|
+
const cachedAccessoriesPath = (0, node_path_1.resolve)(this.configService.storagePath, 'accessories', cacheFile);
|
|
265
|
+
const cachedAccessories = await (0, fs_extra_1.readJson)(cachedAccessoriesPath);
|
|
266
|
+
for (const { uuid } of accessories) {
|
|
267
|
+
try {
|
|
268
|
+
const accessoryIndex = cachedAccessories.findIndex(x => x.UUID === uuid);
|
|
269
|
+
if (accessoryIndex > -1) {
|
|
270
|
+
cachedAccessories.splice(accessoryIndex, 1);
|
|
271
|
+
this.logger.warn(`Removed cached accessory with UUID ${uuid} from file ${cacheFile}.`);
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
this.logger.error(`Cannot find cached accessory with UUID ${uuid} from file ${cacheFile}.`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
catch (e) {
|
|
278
|
+
this.logger.error(`Failed to remove cached accessory with UUID ${uuid} from file ${cacheFile} as ${e.message}.`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
await (0, fs_extra_1.writeJson)(cachedAccessoriesPath, cachedAccessories);
|
|
282
|
+
}
|
|
283
|
+
return { ok: true };
|
|
284
|
+
}
|
|
285
|
+
async deleteAllCachedAccessories() {
|
|
190
286
|
const cachedAccessoriesDir = (0, node_path_1.join)(this.configService.storagePath, 'accessories');
|
|
191
287
|
const cachedAccessoryPaths = (await (0, fs_extra_1.readdir)(cachedAccessoriesDir))
|
|
192
288
|
.filter(x => x.match(/cachedAccessories\.([A-F,0-9]+)/) || x === 'cachedAccessories' || x === '.cachedAccessories.bak')
|
|
@@ -195,16 +291,16 @@ let ServerService = class ServerService {
|
|
|
195
291
|
await this.homebridgeIpcService.restartAndWaitForClose();
|
|
196
292
|
this.logger.warn('Shutting down Homebridge before removing cached accessories');
|
|
197
293
|
try {
|
|
198
|
-
this.logger.log('Clearing
|
|
294
|
+
this.logger.log('Clearing all cached accessories...');
|
|
199
295
|
for (const thisCachedAccessoriesPath of cachedAccessoryPaths) {
|
|
200
296
|
if (await (0, fs_extra_1.pathExists)(thisCachedAccessoriesPath)) {
|
|
201
297
|
await (0, fs_extra_1.unlink)(thisCachedAccessoriesPath);
|
|
202
|
-
this.logger.warn(`Removed ${thisCachedAccessoriesPath}
|
|
298
|
+
this.logger.warn(`Removed ${thisCachedAccessoriesPath}.`);
|
|
203
299
|
}
|
|
204
300
|
}
|
|
205
301
|
}
|
|
206
302
|
catch (e) {
|
|
207
|
-
this.logger.error(`Failed to clear
|
|
303
|
+
this.logger.error(`Failed to clear all cached accessories at ${cachedAccessoriesPath} as ${e.message}.`);
|
|
208
304
|
console.error(e);
|
|
209
305
|
throw new common_1.InternalServerErrorException('Failed to clear Homebridge accessory cache - see logs.');
|
|
210
306
|
}
|
|
@@ -224,7 +320,7 @@ let ServerService = class ServerService {
|
|
|
224
320
|
}
|
|
225
321
|
}
|
|
226
322
|
generateSetupCode(accessoryInfo) {
|
|
227
|
-
const buffer =
|
|
323
|
+
const buffer = node_buffer_1.Buffer.allocUnsafe(8);
|
|
228
324
|
let valueLow = Number.parseInt(accessoryInfo.pincode.replace(/-/g, ''), 10);
|
|
229
325
|
const valueHigh = accessoryInfo.category >> 1;
|
|
230
326
|
valueLow |= 1 << 28;
|
|
@@ -316,19 +412,79 @@ let ServerService = class ServerService {
|
|
|
316
412
|
const config = await this.configEditorService.getConfigFile();
|
|
317
413
|
return { port: config.bridge.port };
|
|
318
414
|
}
|
|
415
|
+
async getUsablePorts() {
|
|
416
|
+
const config = await this.configEditorService.getConfigFile();
|
|
417
|
+
let start;
|
|
418
|
+
let end;
|
|
419
|
+
if (config.ports && typeof config.ports === 'object') {
|
|
420
|
+
if (config.ports.start) {
|
|
421
|
+
start = config.ports.start;
|
|
422
|
+
}
|
|
423
|
+
if (config.ports.end) {
|
|
424
|
+
end = config.ports.end;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return { start, end };
|
|
428
|
+
}
|
|
429
|
+
async setHomebridgeName(name) {
|
|
430
|
+
if (!name || !(/^[\p{L}\p{N}][\p{L}\p{N} ']*[\p{L}\p{N}]$/u).test(name)) {
|
|
431
|
+
throw new common_1.BadRequestException('Invalid name');
|
|
432
|
+
}
|
|
433
|
+
const config = await this.configEditorService.getConfigFile();
|
|
434
|
+
config.bridge.name = name;
|
|
435
|
+
await this.configEditorService.updateConfigFile(config);
|
|
436
|
+
}
|
|
319
437
|
async setHomebridgePort(port) {
|
|
320
438
|
if (!port || typeof port !== 'number' || !Number.isInteger(port) || port < 1025 || port > 65533) {
|
|
321
439
|
throw new common_1.BadRequestException('Invalid port number');
|
|
322
440
|
}
|
|
323
441
|
const config = await this.configEditorService.getConfigFile();
|
|
324
442
|
config.bridge.port = port;
|
|
325
|
-
|
|
443
|
+
await this.configEditorService.updateConfigFile(config);
|
|
444
|
+
}
|
|
445
|
+
async setUsablePorts(value) {
|
|
446
|
+
let config = await this.configEditorService.getConfigFile();
|
|
447
|
+
if (value.start === null) {
|
|
448
|
+
delete value.start;
|
|
449
|
+
}
|
|
450
|
+
if (value.end === null) {
|
|
451
|
+
delete value.end;
|
|
452
|
+
}
|
|
453
|
+
if ('start' in value && (typeof value.start !== 'number' || value.start < 1025 || value.start > 65533)) {
|
|
454
|
+
throw new common_1.BadRequestException('Port start must be a number between 1025 and 65533.');
|
|
455
|
+
}
|
|
456
|
+
if ('end' in value && (typeof value.end !== 'number' || value.end < 1025 || value.end > 65533)) {
|
|
457
|
+
throw new common_1.BadRequestException('Port end must be a number between 1025 and 65533.');
|
|
458
|
+
}
|
|
459
|
+
if ('start' in value && 'end' in value && value.start >= value.end) {
|
|
460
|
+
throw new common_1.BadRequestException('Ports start must be less than end.');
|
|
461
|
+
}
|
|
462
|
+
if ('start' in value && !('end' in value) && config.ports?.end && value.start >= config.ports.end) {
|
|
463
|
+
throw new common_1.BadRequestException('Ports start must be less than end.');
|
|
464
|
+
}
|
|
465
|
+
if ('end' in value && !('start' in value) && config.ports?.start && config.ports.start >= value.end) {
|
|
466
|
+
throw new common_1.BadRequestException('Ports start must be less than end.');
|
|
467
|
+
}
|
|
468
|
+
if (!value.start && !value.end) {
|
|
469
|
+
delete config.ports;
|
|
470
|
+
}
|
|
471
|
+
else {
|
|
472
|
+
config.ports = {};
|
|
473
|
+
if (value.start) {
|
|
474
|
+
config.ports.start = value.start;
|
|
475
|
+
}
|
|
476
|
+
if (value.end) {
|
|
477
|
+
config.ports.end = value.end;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
const { bridge, ports, ...rest } = config;
|
|
481
|
+
config = ports ? { bridge, ports, ...rest } : { bridge, ...rest };
|
|
326
482
|
await this.configEditorService.updateConfigFile(config);
|
|
327
483
|
}
|
|
328
484
|
async nodeVersionChanged() {
|
|
329
485
|
return new Promise((res) => {
|
|
330
486
|
let result = false;
|
|
331
|
-
const child = (0, node_child_process_1.spawn)(node_process_1.default.execPath, ['-v']);
|
|
487
|
+
const child = (0, node_child_process_1.spawn)(node_process_1.default.execPath, ['-v'], { shell: true });
|
|
332
488
|
child.stdout.once('data', (data) => {
|
|
333
489
|
result = data.toString().trim() !== node_process_1.default.version;
|
|
334
490
|
});
|
|
@@ -340,6 +496,50 @@ let ServerService = class ServerService {
|
|
|
340
496
|
});
|
|
341
497
|
});
|
|
342
498
|
}
|
|
499
|
+
async uploadWallpaper(data) {
|
|
500
|
+
const configFile = await this.configEditorService.getConfigFile();
|
|
501
|
+
const uiConfigBlock = configFile.platforms.find(x => x.platform === 'config');
|
|
502
|
+
if (uiConfigBlock) {
|
|
503
|
+
if (uiConfigBlock.wallpaper) {
|
|
504
|
+
const oldPath = (0, node_path_1.join)(this.configService.storagePath, uiConfigBlock.wallpaper);
|
|
505
|
+
if (await (0, fs_extra_1.pathExists)(oldPath)) {
|
|
506
|
+
try {
|
|
507
|
+
await (0, fs_extra_1.unlink)(oldPath);
|
|
508
|
+
this.logger.log(`Old wallpaper file ${oldPath} deleted successfully.`);
|
|
509
|
+
}
|
|
510
|
+
catch (e) {
|
|
511
|
+
this.logger.error(`Failed to delete old wallpaper ${oldPath} as ${e.message}.`);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
const fileExtension = (0, node_path_1.extname)(data.filename);
|
|
516
|
+
const newPath = (0, node_path_1.join)(this.configService.storagePath, `ui-wallpaper${fileExtension}`);
|
|
517
|
+
await pump(data.file, (0, fs_extra_1.createWriteStream)(newPath));
|
|
518
|
+
uiConfigBlock.wallpaper = `ui-wallpaper${fileExtension}`;
|
|
519
|
+
await this.configEditorService.updateConfigFile(configFile);
|
|
520
|
+
this.logger.log('Wallpaper uploaded and set in the config file.');
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
async deleteWallpaper() {
|
|
524
|
+
const configFile = await this.configEditorService.getConfigFile();
|
|
525
|
+
const uiConfigBlock = configFile.platforms.find(x => x.platform === 'config');
|
|
526
|
+
const fullPath = (0, node_path_1.join)(this.configService.storagePath, uiConfigBlock.wallpaper);
|
|
527
|
+
if (uiConfigBlock && uiConfigBlock.wallpaper) {
|
|
528
|
+
if (await (0, fs_extra_1.pathExists)(fullPath)) {
|
|
529
|
+
try {
|
|
530
|
+
await (0, fs_extra_1.unlink)(fullPath);
|
|
531
|
+
this.logger.log(`Wallpaper file ${uiConfigBlock.wallpaper} deleted successfully.`);
|
|
532
|
+
}
|
|
533
|
+
catch (e) {
|
|
534
|
+
this.logger.error(`Failed to delete wallpaper file (${uiConfigBlock.wallpaper}) as ${e.message}.`);
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
delete uiConfigBlock.wallpaper;
|
|
538
|
+
await this.configEditorService.updateConfigFile(configFile);
|
|
539
|
+
this.configService.removeWallpaperCache();
|
|
540
|
+
this.logger.log('Wallpaper reference removed from the config file.');
|
|
541
|
+
}
|
|
542
|
+
}
|
|
343
543
|
};
|
|
344
544
|
exports.ServerService = ServerService;
|
|
345
545
|
exports.ServerService = ServerService = __decorate([
|
|
@@ -347,7 +547,6 @@ exports.ServerService = ServerService = __decorate([
|
|
|
347
547
|
__metadata("design:paramtypes", [config_service_1.ConfigService,
|
|
348
548
|
config_editor_service_1.ConfigEditorService,
|
|
349
549
|
accessories_service_1.AccessoriesService,
|
|
350
|
-
child_bridges_service_1.ChildBridgesService,
|
|
351
550
|
homebridge_ipc_service_1.HomebridgeIpcService,
|
|
352
551
|
logger_service_1.Logger])
|
|
353
552
|
], ServerService);
|