homebridge 2.0.0-beta.44 → 2.0.0-beta.46
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/dist/api.d.ts +3 -365
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +13 -85
- package/dist/api.js.map +1 -1
- package/dist/bridgeService.d.ts +0 -25
- package/dist/bridgeService.d.ts.map +1 -1
- package/dist/bridgeService.js +32 -85
- package/dist/bridgeService.js.map +1 -1
- package/dist/childBridgeFork.d.ts +12 -15
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +152 -83
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/childBridgeService.d.ts +21 -105
- package/dist/childBridgeService.d.ts.map +1 -1
- package/dist/childBridgeService.js +57 -134
- package/dist/childBridgeService.js.map +1 -1
- package/dist/cli.js +0 -2
- package/dist/cli.js.map +1 -1
- package/dist/externalPortService.d.ts +0 -21
- package/dist/externalPortService.d.ts.map +1 -1
- package/dist/externalPortService.js +0 -28
- package/dist/externalPortService.js.map +1 -1
- package/dist/index.d.ts +0 -112
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -44
- package/dist/index.js.map +1 -1
- package/dist/ipcService.d.ts +23 -15
- package/dist/ipcService.d.ts.map +1 -1
- package/dist/ipcService.js +6 -12
- package/dist/ipcService.js.map +1 -1
- package/dist/logger.d.ts +0 -46
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +13 -57
- package/dist/logger.js.map +1 -1
- package/dist/matter/BaseMatterManager.d.ts +19 -0
- package/dist/matter/BaseMatterManager.d.ts.map +1 -0
- package/dist/matter/BaseMatterManager.js +170 -0
- package/dist/matter/BaseMatterManager.js.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts +7 -69
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -1
- package/dist/matter/ChildBridgeMatterManager.js +51 -234
- package/dist/matter/ChildBridgeMatterManager.js.map +1 -1
- package/dist/matter/ClusterCommandMapper.d.ts +5 -0
- package/dist/matter/ClusterCommandMapper.d.ts.map +1 -0
- package/dist/matter/ClusterCommandMapper.js +203 -0
- package/dist/matter/ClusterCommandMapper.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +0 -27
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -1
- package/dist/matter/ExternalMatterAccessoryPublisher.js +3 -28
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -1
- package/dist/matter/MatterAPIImpl.d.ts +0 -68
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -1
- package/dist/matter/MatterAPIImpl.js +7 -107
- package/dist/matter/MatterAPIImpl.js.map +1 -1
- package/dist/matter/MatterBridgeManager.d.ts +9 -60
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -1
- package/dist/matter/MatterBridgeManager.js +140 -216
- package/dist/matter/MatterBridgeManager.js.map +1 -1
- package/dist/matter/MatterConfigCollector.d.ts +1 -20
- package/dist/matter/MatterConfigCollector.d.ts.map +1 -1
- package/dist/matter/MatterConfigCollector.js +15 -28
- package/dist/matter/MatterConfigCollector.js.map +1 -1
- package/dist/matter/accessoryCache.d.ts +0 -48
- package/dist/matter/accessoryCache.d.ts.map +1 -1
- package/dist/matter/accessoryCache.js +1 -60
- package/dist/matter/accessoryCache.js.map +1 -1
- package/dist/matter/behaviors/AirQualityBehavior.d.ts +0 -42
- package/dist/matter/behaviors/AirQualityBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/AirQualityBehavior.js +0 -44
- package/dist/matter/behaviors/AirQualityBehavior.js.map +1 -1
- package/dist/matter/behaviors/BehaviorRegistry.d.ts +4 -42
- package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -1
- package/dist/matter/behaviors/BehaviorRegistry.js +12 -42
- package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -1
- package/dist/matter/behaviors/ColorControlBehavior.d.ts +0 -49
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ColorControlBehavior.js +0 -90
- package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts +0 -91
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js +0 -96
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js.map +1 -1
- package/dist/matter/behaviors/DoorLockBehavior.d.ts +0 -11
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/DoorLockBehavior.js +0 -25
- package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -1
- package/dist/matter/behaviors/FanControlBehavior.d.ts +0 -11
- package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/FanControlBehavior.js +0 -25
- package/dist/matter/behaviors/FanControlBehavior.js.map +1 -1
- package/dist/matter/behaviors/IdentifyBehavior.d.ts +0 -11
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/IdentifyBehavior.js +0 -17
- package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -1
- package/dist/matter/behaviors/LevelControlBehavior.d.ts +0 -20
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/LevelControlBehavior.js +0 -52
- package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -1
- package/dist/matter/behaviors/OnOffBehavior.d.ts +0 -17
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/OnOffBehavior.js +0 -38
- package/dist/matter/behaviors/OnOffBehavior.js.map +1 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +0 -11
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.js +0 -17
- package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +0 -11
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +0 -29
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +0 -11
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.js +0 -17
- package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +0 -11
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.js +0 -23
- package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -1
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +0 -11
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ThermostatBehavior.js +0 -39
- package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +0 -17
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.js +0 -56
- package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -1
- package/dist/matter/behaviors/index.d.ts +0 -5
- package/dist/matter/behaviors/index.d.ts.map +1 -1
- package/dist/matter/behaviors/index.js +0 -5
- package/dist/matter/behaviors/index.js.map +1 -1
- package/dist/matter/configValidator.d.ts +0 -55
- package/dist/matter/configValidator.d.ts.map +1 -1
- package/dist/matter/configValidator.js +1 -68
- package/dist/matter/configValidator.js.map +1 -1
- package/dist/matter/errorHandler.d.ts +0 -22
- package/dist/matter/errorHandler.d.ts.map +1 -1
- package/dist/matter/errorHandler.js +0 -32
- package/dist/matter/errorHandler.js.map +1 -1
- package/dist/matter/errors.d.ts +0 -132
- package/dist/matter/errors.d.ts.map +1 -1
- package/dist/matter/errors.js +0 -132
- package/dist/matter/errors.js.map +1 -1
- package/dist/matter/index.d.ts +0 -30
- package/dist/matter/index.d.ts.map +1 -1
- package/dist/matter/index.js +0 -13
- package/dist/matter/index.js.map +1 -1
- package/dist/matter/logFormatter.d.ts +0 -17
- package/dist/matter/logFormatter.d.ts.map +1 -1
- package/dist/matter/logFormatter.js +5 -63
- package/dist/matter/logFormatter.js.map +1 -1
- package/dist/matter/server.d.ts +12 -236
- package/dist/matter/server.d.ts.map +1 -1
- package/dist/matter/server.js +177 -488
- package/dist/matter/server.js.map +1 -1
- package/dist/matter/serverHelpers.d.ts +0 -56
- package/dist/matter/serverHelpers.d.ts.map +1 -1
- package/dist/matter/serverHelpers.js +1 -66
- package/dist/matter/serverHelpers.js.map +1 -1
- package/dist/matter/sharedTypes.d.ts +0 -83
- package/dist/matter/sharedTypes.d.ts.map +1 -1
- package/dist/matter/sharedTypes.js +0 -26
- package/dist/matter/sharedTypes.js.map +1 -1
- package/dist/matter/storage.d.ts +0 -90
- package/dist/matter/storage.d.ts.map +1 -1
- package/dist/matter/storage.js +2 -130
- package/dist/matter/storage.js.map +1 -1
- package/dist/matter/typeHelpers.d.ts +0 -30
- package/dist/matter/typeHelpers.d.ts.map +1 -1
- package/dist/matter/typeHelpers.js +0 -24
- package/dist/matter/typeHelpers.js.map +1 -1
- package/dist/matter/types.d.ts +0 -273
- package/dist/matter/types.d.ts.map +1 -1
- package/dist/matter/types.js +0 -83
- package/dist/matter/types.js.map +1 -1
- package/dist/platformAccessory.d.ts +0 -15
- package/dist/platformAccessory.d.ts.map +1 -1
- package/dist/platformAccessory.js +6 -32
- package/dist/platformAccessory.js.map +1 -1
- package/dist/plugin.d.ts +0 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +6 -29
- package/dist/plugin.js.map +1 -1
- package/dist/pluginManager.d.ts +0 -22
- package/dist/pluginManager.d.ts.map +1 -1
- package/dist/pluginManager.js +18 -41
- package/dist/pluginManager.js.map +1 -1
- package/dist/server.d.ts +9 -29
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +308 -157
- package/dist/server.js.map +1 -1
- package/dist/user.d.ts +0 -3
- package/dist/user.d.ts.map +1 -1
- package/dist/user.js +2 -5
- package/dist/user.js.map +1 -1
- package/dist/util/mac.js +0 -1
- package/dist/util/mac.js.map +1 -1
- package/package.json +4 -4
- package/dist/api.spec.d.ts +0 -2
- package/dist/api.spec.d.ts.map +0 -1
- package/dist/api.spec.js +0 -413
- package/dist/api.spec.js.map +0 -1
- package/dist/logger.spec.d.ts +0 -2
- package/dist/logger.spec.d.ts.map +0 -1
- package/dist/logger.spec.js +0 -95
- package/dist/logger.spec.js.map +0 -1
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +0 -2
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +0 -1
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +0 -293
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +0 -1
- package/dist/matter/accessoryCache.spec.d.ts +0 -2
- package/dist/matter/accessoryCache.spec.d.ts.map +0 -1
- package/dist/matter/accessoryCache.spec.js +0 -452
- package/dist/matter/accessoryCache.spec.js.map +0 -1
- package/dist/matter/behaviors/AirQualityBehavior.spec.d.ts +0 -5
- package/dist/matter/behaviors/AirQualityBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/AirQualityBehavior.spec.js +0 -46
- package/dist/matter/behaviors/AirQualityBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +0 -2
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/BehaviorRegistry.spec.js +0 -307
- package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +0 -1
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ColorControlBehavior.spec.js +0 -29
- package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.d.ts +0 -5
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.js +0 -95
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/DoorLockBehavior.spec.js +0 -120
- package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/FanControlBehavior.spec.js +0 -23
- package/dist/matter/behaviors/FanControlBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/IdentifyBehavior.spec.js +0 -64
- package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/LevelControlBehavior.spec.js +0 -145
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/OnOffBehavior.spec.js +0 -128
- package/dist/matter/behaviors/OnOffBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +0 -57
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +0 -55
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +0 -57
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +0 -53
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ThermostatBehavior.spec.js +0 -23
- package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +0 -27
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +0 -1
- package/dist/matter/configValidator.spec.d.ts +0 -2
- package/dist/matter/configValidator.spec.d.ts.map +0 -1
- package/dist/matter/configValidator.spec.js +0 -390
- package/dist/matter/configValidator.spec.js.map +0 -1
- package/dist/matter/errorHandler.spec.d.ts +0 -2
- package/dist/matter/errorHandler.spec.d.ts.map +0 -1
- package/dist/matter/errorHandler.spec.js +0 -159
- package/dist/matter/errorHandler.spec.js.map +0 -1
- package/dist/matter/logFormatter.spec.d.ts +0 -2
- package/dist/matter/logFormatter.spec.d.ts.map +0 -1
- package/dist/matter/logFormatter.spec.js +0 -252
- package/dist/matter/logFormatter.spec.js.map +0 -1
- package/dist/matter/serverHelpers.spec.d.ts +0 -2
- package/dist/matter/serverHelpers.spec.d.ts.map +0 -1
- package/dist/matter/serverHelpers.spec.js +0 -527
- package/dist/matter/serverHelpers.spec.js.map +0 -1
- package/dist/matter/storage.spec.d.ts +0 -2
- package/dist/matter/storage.spec.d.ts.map +0 -1
- package/dist/matter/storage.spec.js +0 -570
- package/dist/matter/storage.spec.js.map +0 -1
- package/dist/matter/typeHelpers.spec.d.ts +0 -2
- package/dist/matter/typeHelpers.spec.d.ts.map +0 -1
- package/dist/matter/typeHelpers.spec.js +0 -127
- package/dist/matter/typeHelpers.spec.js.map +0 -1
- package/dist/platformAccessory.spec.d.ts +0 -2
- package/dist/platformAccessory.spec.d.ts.map +0 -1
- package/dist/platformAccessory.spec.js +0 -126
- package/dist/platformAccessory.spec.js.map +0 -1
- package/dist/pluginManager.spec.d.ts +0 -2
- package/dist/pluginManager.spec.d.ts.map +0 -1
- package/dist/pluginManager.spec.js +0 -43
- package/dist/pluginManager.spec.js.map +0 -1
- package/dist/server.spec.d.ts +0 -2
- package/dist/server.spec.d.ts.map +0 -1
- package/dist/server.spec.js +0 -57
- package/dist/server.spec.js.map +0 -1
- package/dist/user.spec.d.ts +0 -2
- package/dist/user.spec.d.ts.map +0 -1
- package/dist/user.spec.js +0 -31
- package/dist/user.spec.js.map +0 -1
- package/dist/util/mac.spec.d.ts +0 -2
- package/dist/util/mac.spec.d.ts.map +0 -1
- package/dist/util/mac.spec.js +0 -36
- package/dist/util/mac.spec.js.map +0 -1
- package/dist/version.spec.d.ts +0 -2
- package/dist/version.spec.d.ts.map +0 -1
- package/dist/version.spec.js +0 -20
- package/dist/version.spec.js.map +0 -1
|
@@ -8,51 +8,24 @@ import type { Plugin } from './plugin.js';
|
|
|
8
8
|
import type { HomebridgeOptions } from './server.js';
|
|
9
9
|
import { PluginType } from './api.js';
|
|
10
10
|
export declare const enum ChildProcessMessageEventType {
|
|
11
|
-
/**
|
|
12
|
-
* Sent from the child process when it is ready to accept config
|
|
13
|
-
*/
|
|
14
11
|
READY = "ready",
|
|
15
|
-
/**
|
|
16
|
-
* Sent to the child process with a ChildProcessLoadEventData payload
|
|
17
|
-
*/
|
|
18
12
|
LOAD = "load",
|
|
19
|
-
/**
|
|
20
|
-
* Sent from the child process once it has loaded the plugin
|
|
21
|
-
*/
|
|
22
13
|
LOADED = "loaded",
|
|
23
|
-
/**
|
|
24
|
-
* Sent to the child process telling it to start
|
|
25
|
-
*/
|
|
26
14
|
START = "start",
|
|
27
|
-
/**
|
|
28
|
-
* Sent from the child process when the bridge is online
|
|
29
|
-
*/
|
|
30
15
|
ONLINE = "online",
|
|
31
|
-
/**
|
|
32
|
-
* Sent from the child when it wants to request port allocation for an external accessory
|
|
33
|
-
*/
|
|
34
16
|
PORT_REQUEST = "portRequest",
|
|
35
|
-
/**
|
|
36
|
-
* Sent from the parent with the port allocation response
|
|
37
|
-
*/
|
|
38
17
|
PORT_ALLOCATED = "portAllocated",
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
18
|
+
STATUS_UPDATE = "status",
|
|
19
|
+
START_MATTER_MONITORING = "startMatterMonitoring",
|
|
20
|
+
STOP_MATTER_MONITORING = "stopMatterMonitoring",
|
|
21
|
+
GET_MATTER_ACCESSORIES = "getMatterAccessories",
|
|
22
|
+
GET_MATTER_ACCESSORY_INFO = "getMatterAccessoryInfo",
|
|
23
|
+
MATTER_ACCESSORY_CONTROL = "matterAccessoryControl",
|
|
24
|
+
MATTER_EVENT = "matterEvent"
|
|
43
25
|
}
|
|
44
26
|
export declare const enum ChildBridgeStatus {
|
|
45
|
-
/**
|
|
46
|
-
* When the child bridge is loading, or restarting
|
|
47
|
-
*/
|
|
48
27
|
PENDING = "pending",
|
|
49
|
-
/**
|
|
50
|
-
* The child bridge is online and has published it's accessory
|
|
51
|
-
*/
|
|
52
28
|
OK = "ok",
|
|
53
|
-
/**
|
|
54
|
-
* The bridge is shutting down, or the process ended unexpectedly
|
|
55
|
-
*/
|
|
56
29
|
DOWN = "down"
|
|
57
30
|
}
|
|
58
31
|
export interface ChildProcessMessageEvent<T> {
|
|
@@ -90,15 +63,6 @@ export interface ChildBridgePairedStatusEventData {
|
|
|
90
63
|
deviceCount: number;
|
|
91
64
|
};
|
|
92
65
|
}
|
|
93
|
-
/**
|
|
94
|
-
* Child bridge metadata
|
|
95
|
-
*
|
|
96
|
-
* Contains all metadata for a child bridge, including HAP properties
|
|
97
|
-
* like paired status, setupUri, and pin.
|
|
98
|
-
*
|
|
99
|
-
* When Matter is enabled (_bridge.matter is configured), this interface
|
|
100
|
-
* also includes Matter commissioning information for unified status reporting.
|
|
101
|
-
*/
|
|
102
66
|
export interface ChildMetadata {
|
|
103
67
|
status: ChildBridgeStatus;
|
|
104
68
|
paired?: boolean | null;
|
|
@@ -119,10 +83,6 @@ export interface ChildMetadata {
|
|
|
119
83
|
matterCommissioned?: boolean;
|
|
120
84
|
matterDeviceCount?: number;
|
|
121
85
|
}
|
|
122
|
-
/**
|
|
123
|
-
* Manages the child processes of platforms/accessories being exposed as separate forked bridges.
|
|
124
|
-
* A child bridge runs a single platform or accessory.
|
|
125
|
-
*/
|
|
126
86
|
export declare class ChildBridgeService {
|
|
127
87
|
type: PluginType;
|
|
128
88
|
identifier: string;
|
|
@@ -147,83 +107,39 @@ export declare class ChildBridgeService {
|
|
|
147
107
|
private displayName?;
|
|
148
108
|
private restartCount;
|
|
149
109
|
private readonly maxRestarts;
|
|
110
|
+
lastMatterAccessoriesResponse?: {
|
|
111
|
+
accessories: any[];
|
|
112
|
+
bridgeUsername: string;
|
|
113
|
+
};
|
|
150
114
|
constructor(type: PluginType, identifier: string, plugin: Plugin, bridgeConfig: BridgeConfiguration, homebridgeConfig: HomebridgeConfig, homebridgeOptions: HomebridgeOptions, api: HomebridgeAPI, ipcService: IpcService, externalPortService: ExternalPortService);
|
|
151
|
-
/**
|
|
152
|
-
* Start the child bridge service
|
|
153
|
-
*/
|
|
154
115
|
start(): void;
|
|
155
|
-
/**
|
|
156
|
-
* Add a config block to a child bridge.
|
|
157
|
-
* Platform child bridges can only contain one config block.
|
|
158
|
-
* @param config
|
|
159
|
-
*/
|
|
160
116
|
addConfig(config: PlatformConfig | AccessoryConfig): void;
|
|
117
|
+
startMatterMonitoring(): void;
|
|
118
|
+
stopMatterMonitoring(): void;
|
|
119
|
+
getMatterAccessories(): void;
|
|
120
|
+
getMatterAccessoryInfo(uuid: string): void;
|
|
121
|
+
controlMatterAccessory(data: {
|
|
122
|
+
uuid: string;
|
|
123
|
+
cluster: string;
|
|
124
|
+
attributes: Record<string, unknown>;
|
|
125
|
+
partId?: string;
|
|
126
|
+
}): void;
|
|
161
127
|
private get bridgeStatus();
|
|
162
128
|
private set bridgeStatus(value);
|
|
163
|
-
/**
|
|
164
|
-
* Start the child bridge process
|
|
165
|
-
*/
|
|
166
129
|
private startChildProcess;
|
|
167
|
-
/**
|
|
168
|
-
* Called when the child bridge process exits, if Homebridge is not shutting down, it will restart the process
|
|
169
|
-
* @param code
|
|
170
|
-
* @param signal
|
|
171
|
-
*/
|
|
172
130
|
private handleProcessClose;
|
|
173
|
-
/**
|
|
174
|
-
* Helper function to send a message to the child process
|
|
175
|
-
* @param type
|
|
176
|
-
* @param data
|
|
177
|
-
*/
|
|
178
131
|
private sendMessage;
|
|
179
|
-
/**
|
|
180
|
-
* Some plugins may make use of the homebridge process flags
|
|
181
|
-
* These will be passed through to the forked process
|
|
182
|
-
*/
|
|
183
132
|
private setProcessFlags;
|
|
184
|
-
/**
|
|
185
|
-
* Set environment variables for the child process
|
|
186
|
-
*/
|
|
187
133
|
private setProcessEnv;
|
|
188
|
-
/**
|
|
189
|
-
* Tell the child process to load the given plugin
|
|
190
|
-
*/
|
|
191
134
|
private loadPlugin;
|
|
192
|
-
/**
|
|
193
|
-
* Tell the child bridge to start broadcasting
|
|
194
|
-
*/
|
|
195
135
|
private startBridge;
|
|
196
|
-
/**
|
|
197
|
-
* Handle external port requests from child
|
|
198
|
-
*/
|
|
199
136
|
private handlePortRequest;
|
|
200
|
-
/**
|
|
201
|
-
* Send sigterm to the child bridge
|
|
202
|
-
*/
|
|
203
137
|
private teardown;
|
|
204
|
-
/**
|
|
205
|
-
* Trigger sending child bridge metadata to the process parent via IPC
|
|
206
|
-
*/
|
|
207
138
|
private sendStatusUpdate;
|
|
208
|
-
/**
|
|
209
|
-
* Restarts the child bridge process
|
|
210
|
-
*/
|
|
211
139
|
restartChildBridge(): void;
|
|
212
|
-
/**
|
|
213
|
-
* Stops the child bridge, not starting it again
|
|
214
|
-
*/
|
|
215
140
|
stopChildBridge(): void;
|
|
216
|
-
/**
|
|
217
|
-
* Starts the child bridge, only if it was manually stopped and is no longer running
|
|
218
|
-
*/
|
|
219
141
|
startChildBridge(): void;
|
|
220
|
-
/**
|
|
221
|
-
* Read the config.json file from disk and refresh the plugin config block for just this plugin
|
|
222
|
-
*/
|
|
223
142
|
refreshConfig(): Promise<void>;
|
|
224
|
-
/**
|
|
225
|
-
* Returns metadata about this child bridge
|
|
226
|
-
*/
|
|
227
143
|
getMetadata(): ChildMetadata;
|
|
228
144
|
}
|
|
229
145
|
//# sourceMappingURL=childBridgeService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"childBridgeService.d.ts","sourceRoot":"","sources":["../src/childBridgeService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAC7C,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"childBridgeService.d.ts","sourceRoot":"","sources":["../src/childBridgeService.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,62 +7,29 @@ import { Logger } from './logger.js';
|
|
|
7
7
|
import { User } from './user.js';
|
|
8
8
|
const __filename = fileURLToPath(import.meta.url);
|
|
9
9
|
const __dirname = dirname(__filename);
|
|
10
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
11
10
|
export var ChildProcessMessageEventType;
|
|
12
11
|
(function (ChildProcessMessageEventType) {
|
|
13
|
-
/**
|
|
14
|
-
* Sent from the child process when it is ready to accept config
|
|
15
|
-
*/
|
|
16
12
|
ChildProcessMessageEventType["READY"] = "ready";
|
|
17
|
-
/**
|
|
18
|
-
* Sent to the child process with a ChildProcessLoadEventData payload
|
|
19
|
-
*/
|
|
20
13
|
ChildProcessMessageEventType["LOAD"] = "load";
|
|
21
|
-
/**
|
|
22
|
-
* Sent from the child process once it has loaded the plugin
|
|
23
|
-
*/
|
|
24
14
|
ChildProcessMessageEventType["LOADED"] = "loaded";
|
|
25
|
-
/**
|
|
26
|
-
* Sent to the child process telling it to start
|
|
27
|
-
*/
|
|
28
15
|
ChildProcessMessageEventType["START"] = "start";
|
|
29
|
-
/**
|
|
30
|
-
* Sent from the child process when the bridge is online
|
|
31
|
-
*/
|
|
32
16
|
ChildProcessMessageEventType["ONLINE"] = "online";
|
|
33
|
-
/**
|
|
34
|
-
* Sent from the child when it wants to request port allocation for an external accessory
|
|
35
|
-
*/
|
|
36
17
|
ChildProcessMessageEventType["PORT_REQUEST"] = "portRequest";
|
|
37
|
-
/**
|
|
38
|
-
* Sent from the parent with the port allocation response
|
|
39
|
-
*/
|
|
40
18
|
ChildProcessMessageEventType["PORT_ALLOCATED"] = "portAllocated";
|
|
41
|
-
/**
|
|
42
|
-
* Sent from the child to update its current status
|
|
43
|
-
*/
|
|
44
19
|
ChildProcessMessageEventType["STATUS_UPDATE"] = "status";
|
|
20
|
+
ChildProcessMessageEventType["START_MATTER_MONITORING"] = "startMatterMonitoring";
|
|
21
|
+
ChildProcessMessageEventType["STOP_MATTER_MONITORING"] = "stopMatterMonitoring";
|
|
22
|
+
ChildProcessMessageEventType["GET_MATTER_ACCESSORIES"] = "getMatterAccessories";
|
|
23
|
+
ChildProcessMessageEventType["GET_MATTER_ACCESSORY_INFO"] = "getMatterAccessoryInfo";
|
|
24
|
+
ChildProcessMessageEventType["MATTER_ACCESSORY_CONTROL"] = "matterAccessoryControl";
|
|
25
|
+
ChildProcessMessageEventType["MATTER_EVENT"] = "matterEvent";
|
|
45
26
|
})(ChildProcessMessageEventType || (ChildProcessMessageEventType = {}));
|
|
46
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
47
27
|
export var ChildBridgeStatus;
|
|
48
28
|
(function (ChildBridgeStatus) {
|
|
49
|
-
/**
|
|
50
|
-
* When the child bridge is loading, or restarting
|
|
51
|
-
*/
|
|
52
29
|
ChildBridgeStatus["PENDING"] = "pending";
|
|
53
|
-
/**
|
|
54
|
-
* The child bridge is online and has published it's accessory
|
|
55
|
-
*/
|
|
56
30
|
ChildBridgeStatus["OK"] = "ok";
|
|
57
|
-
/**
|
|
58
|
-
* The bridge is shutting down, or the process ended unexpectedly
|
|
59
|
-
*/
|
|
60
31
|
ChildBridgeStatus["DOWN"] = "down";
|
|
61
32
|
})(ChildBridgeStatus || (ChildBridgeStatus = {}));
|
|
62
|
-
/**
|
|
63
|
-
* Manages the child processes of platforms/accessories being exposed as separate forked bridges.
|
|
64
|
-
* A child bridge runs a single platform or accessory.
|
|
65
|
-
*/
|
|
66
33
|
export class ChildBridgeService {
|
|
67
34
|
type;
|
|
68
35
|
identifier;
|
|
@@ -77,7 +44,7 @@ export class ChildBridgeService {
|
|
|
77
44
|
args = [];
|
|
78
45
|
processEnv = {};
|
|
79
46
|
shuttingDown = false;
|
|
80
|
-
lastBridgeStatus = "pending"
|
|
47
|
+
lastBridgeStatus = "pending";
|
|
81
48
|
pairedStatus = null;
|
|
82
49
|
manuallyStopped = false;
|
|
83
50
|
setupUri = null;
|
|
@@ -87,6 +54,7 @@ export class ChildBridgeService {
|
|
|
87
54
|
displayName;
|
|
88
55
|
restartCount = 0;
|
|
89
56
|
maxRestarts = 4;
|
|
57
|
+
lastMatterAccessoriesResponse;
|
|
90
58
|
constructor(type, identifier, plugin, bridgeConfig, homebridgeConfig, homebridgeOptions, api, ipcService, externalPortService) {
|
|
91
59
|
this.type = type;
|
|
92
60
|
this.identifier = identifier;
|
|
@@ -102,34 +70,38 @@ export class ChildBridgeService {
|
|
|
102
70
|
this.shuttingDown = true;
|
|
103
71
|
this.teardown();
|
|
104
72
|
});
|
|
105
|
-
// make sure we don't hit the max listeners limit
|
|
106
73
|
this.api.setMaxListeners(this.api.getMaxListeners() + 1);
|
|
107
74
|
}
|
|
108
|
-
/**
|
|
109
|
-
* Start the child bridge service
|
|
110
|
-
*/
|
|
111
75
|
start() {
|
|
112
76
|
this.setProcessFlags();
|
|
113
77
|
this.setProcessEnv();
|
|
114
78
|
this.startChildProcess();
|
|
115
|
-
// set display name
|
|
116
79
|
if (this.pluginConfig.length > 1 || this.pluginConfig.length === 0) {
|
|
117
80
|
this.displayName = this.plugin.getPluginIdentifier();
|
|
118
81
|
}
|
|
119
82
|
else {
|
|
120
83
|
this.displayName = this.pluginConfig[0]?.name || this.plugin.getPluginIdentifier();
|
|
121
84
|
}
|
|
122
|
-
// re-configured log with display name
|
|
123
85
|
this.log = Logger.withPrefix(this.displayName);
|
|
124
86
|
}
|
|
125
|
-
/**
|
|
126
|
-
* Add a config block to a child bridge.
|
|
127
|
-
* Platform child bridges can only contain one config block.
|
|
128
|
-
* @param config
|
|
129
|
-
*/
|
|
130
87
|
addConfig(config) {
|
|
131
88
|
this.pluginConfig.push(config);
|
|
132
89
|
}
|
|
90
|
+
startMatterMonitoring() {
|
|
91
|
+
this.sendMessage("startMatterMonitoring");
|
|
92
|
+
}
|
|
93
|
+
stopMatterMonitoring() {
|
|
94
|
+
this.sendMessage("stopMatterMonitoring");
|
|
95
|
+
}
|
|
96
|
+
getMatterAccessories() {
|
|
97
|
+
this.sendMessage("getMatterAccessories");
|
|
98
|
+
}
|
|
99
|
+
getMatterAccessoryInfo(uuid) {
|
|
100
|
+
this.sendMessage("getMatterAccessoryInfo", { uuid });
|
|
101
|
+
}
|
|
102
|
+
controlMatterAccessory(data) {
|
|
103
|
+
this.sendMessage("matterAccessoryControl", data);
|
|
104
|
+
}
|
|
133
105
|
get bridgeStatus() {
|
|
134
106
|
return this.lastBridgeStatus;
|
|
135
107
|
}
|
|
@@ -137,11 +109,8 @@ export class ChildBridgeService {
|
|
|
137
109
|
this.lastBridgeStatus = value;
|
|
138
110
|
this.sendStatusUpdate();
|
|
139
111
|
}
|
|
140
|
-
/**
|
|
141
|
-
* Start the child bridge process
|
|
142
|
-
*/
|
|
143
112
|
startChildProcess() {
|
|
144
|
-
this.bridgeStatus = "pending"
|
|
113
|
+
this.bridgeStatus = "pending";
|
|
145
114
|
this.child = fork(resolve(__dirname, 'childBridgeFork.js'), this.args, this.processEnv);
|
|
146
115
|
this.child.stdout?.on('data', (data) => {
|
|
147
116
|
process.stdout.write(data);
|
|
@@ -150,24 +119,23 @@ export class ChildBridgeService {
|
|
|
150
119
|
process.stderr.write(data);
|
|
151
120
|
});
|
|
152
121
|
this.child.on('error', (e) => {
|
|
153
|
-
this.bridgeStatus = "down"
|
|
122
|
+
this.bridgeStatus = "down";
|
|
154
123
|
this.log.error('Child bridge process error', e);
|
|
155
124
|
});
|
|
156
125
|
this.child.once('close', (code, signal) => {
|
|
157
126
|
this.handleProcessClose(code, signal);
|
|
158
127
|
});
|
|
159
|
-
// handle incoming ipc messages from the child process
|
|
160
128
|
this.child.on('message', (message) => {
|
|
161
129
|
if (typeof message !== 'object' || !message.id) {
|
|
162
130
|
return;
|
|
163
131
|
}
|
|
164
132
|
switch (message.id) {
|
|
165
|
-
case "ready"
|
|
133
|
+
case "ready": {
|
|
166
134
|
this.log(`Child bridge starting${this.child?.pid ? ` (pid ${this.child.pid})` : ''}...`);
|
|
167
135
|
this.loadPlugin();
|
|
168
136
|
break;
|
|
169
137
|
}
|
|
170
|
-
case "loaded"
|
|
138
|
+
case "loaded": {
|
|
171
139
|
const version = message.data.version;
|
|
172
140
|
if (this.pluginConfig.length > 1) {
|
|
173
141
|
this.log.success(`Child bridge started successfully with ${this.pluginConfig.length} accessories (plugin v${version}).`);
|
|
@@ -178,21 +146,18 @@ export class ChildBridgeService {
|
|
|
178
146
|
this.startBridge();
|
|
179
147
|
break;
|
|
180
148
|
}
|
|
181
|
-
case "online"
|
|
182
|
-
this.bridgeStatus = "ok"
|
|
149
|
+
case "online": {
|
|
150
|
+
this.bridgeStatus = "ok";
|
|
183
151
|
break;
|
|
184
152
|
}
|
|
185
|
-
case "portRequest"
|
|
153
|
+
case "portRequest": {
|
|
186
154
|
this.handlePortRequest(message.data);
|
|
187
155
|
break;
|
|
188
156
|
}
|
|
189
|
-
case "status"
|
|
190
|
-
// Handle unified status update with HAP and Matter info
|
|
157
|
+
case "status": {
|
|
191
158
|
const statusData = message.data;
|
|
192
|
-
// Update HAP status
|
|
193
159
|
this.pairedStatus = statusData.paired;
|
|
194
160
|
this.setupUri = statusData.setupUri;
|
|
195
|
-
// Update Matter commissioning info if included
|
|
196
161
|
if (statusData.matter) {
|
|
197
162
|
this.matterCommissioningInfo = {
|
|
198
163
|
qrCode: statusData.matter.qrCode,
|
|
@@ -202,18 +167,22 @@ export class ChildBridgeService {
|
|
|
202
167
|
deviceCount: statusData.matter.deviceCount,
|
|
203
168
|
};
|
|
204
169
|
}
|
|
205
|
-
// Send unified status update
|
|
206
170
|
this.sendStatusUpdate();
|
|
207
171
|
break;
|
|
208
172
|
}
|
|
173
|
+
case "matterEvent": {
|
|
174
|
+
const matterEvent = message.data;
|
|
175
|
+
if (matterEvent.type === 'accessoriesData') {
|
|
176
|
+
this.lastMatterAccessoriesResponse = matterEvent.data;
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
this.ipcService.sendMessage("matterEvent", matterEvent);
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
209
183
|
}
|
|
210
184
|
});
|
|
211
185
|
}
|
|
212
|
-
/**
|
|
213
|
-
* Called when the child bridge process exits, if Homebridge is not shutting down, it will restart the process
|
|
214
|
-
* @param code
|
|
215
|
-
* @param signal
|
|
216
|
-
*/
|
|
217
186
|
handleProcessClose(code, signal) {
|
|
218
187
|
const isLikelyPluginCrash = code === 1 && signal === null;
|
|
219
188
|
this.log.warn(`Child bridge ended (code ${code}, signal ${signal}).${isLikelyPluginCrash
|
|
@@ -222,9 +191,9 @@ export class ChildBridgeService {
|
|
|
222
191
|
: ''}`);
|
|
223
192
|
if (isLikelyPluginCrash) {
|
|
224
193
|
if (this.restartCount < this.maxRestarts) {
|
|
225
|
-
this.bridgeStatus = "pending"
|
|
194
|
+
this.bridgeStatus = "pending";
|
|
226
195
|
this.restartCount += 1;
|
|
227
|
-
const delay = this.restartCount * 10;
|
|
196
|
+
const delay = this.restartCount * 10;
|
|
228
197
|
this.log(`Child bridge will automatically restart in ${delay} seconds (restart attempt ${this.restartCount} of ${this.maxRestarts}).`);
|
|
229
198
|
setTimeout(() => {
|
|
230
199
|
if (!this.shuttingDown) {
|
|
@@ -233,23 +202,18 @@ export class ChildBridgeService {
|
|
|
233
202
|
}, delay * 1000);
|
|
234
203
|
}
|
|
235
204
|
else {
|
|
236
|
-
this.bridgeStatus = "down"
|
|
205
|
+
this.bridgeStatus = "down";
|
|
237
206
|
this.manuallyStopped = true;
|
|
238
207
|
this.log.error(`Child bridge will no longer restart after failing ${this.maxRestarts + 1} times, you will need to manually start this child bridge from the Homebridge UI.`);
|
|
239
208
|
}
|
|
240
209
|
return;
|
|
241
210
|
}
|
|
242
211
|
if (!this.shuttingDown) {
|
|
243
|
-
this.bridgeStatus = "down"
|
|
212
|
+
this.bridgeStatus = "down";
|
|
244
213
|
this.restartCount = 0;
|
|
245
214
|
this.startChildProcess();
|
|
246
215
|
}
|
|
247
216
|
}
|
|
248
|
-
/**
|
|
249
|
-
* Helper function to send a message to the child process
|
|
250
|
-
* @param type
|
|
251
|
-
* @param data
|
|
252
|
-
*/
|
|
253
217
|
sendMessage(type, data) {
|
|
254
218
|
if (this.child && this.child.connected) {
|
|
255
219
|
this.child.send({
|
|
@@ -258,10 +222,6 @@ export class ChildBridgeService {
|
|
|
258
222
|
});
|
|
259
223
|
}
|
|
260
224
|
}
|
|
261
|
-
/**
|
|
262
|
-
* Some plugins may make use of the homebridge process flags
|
|
263
|
-
* These will be passed through to the forked process
|
|
264
|
-
*/
|
|
265
225
|
setProcessFlags() {
|
|
266
226
|
if (this.bridgeConfig.debugModeEnabled) {
|
|
267
227
|
this.args.push('-D');
|
|
@@ -285,9 +245,6 @@ export class ChildBridgeService {
|
|
|
285
245
|
this.args.push('-P', this.homebridgeOptions.customPluginPath);
|
|
286
246
|
}
|
|
287
247
|
}
|
|
288
|
-
/**
|
|
289
|
-
* Set environment variables for the child process
|
|
290
|
-
*/
|
|
291
248
|
setProcessEnv() {
|
|
292
249
|
this.processEnv = {
|
|
293
250
|
env: {
|
|
@@ -298,9 +255,6 @@ export class ChildBridgeService {
|
|
|
298
255
|
silent: true,
|
|
299
256
|
};
|
|
300
257
|
}
|
|
301
|
-
/**
|
|
302
|
-
* Tell the child process to load the given plugin
|
|
303
|
-
*/
|
|
304
258
|
loadPlugin() {
|
|
305
259
|
const bridgeConfig = {
|
|
306
260
|
name: this.bridgeConfig.name || this.displayName || this.plugin.getPluginIdentifier(),
|
|
@@ -320,13 +274,11 @@ export class ChildBridgeService {
|
|
|
320
274
|
cachedAccessoriesDir: User.cachedAccessoryPath(),
|
|
321
275
|
cachedAccessoriesItemName: `cachedAccessories.${this.bridgeConfig.username.replace(/:/g, '').toUpperCase()}`,
|
|
322
276
|
};
|
|
323
|
-
// shallow copy the homebridge options to the bridge options object
|
|
324
277
|
Object.assign(bridgeOptions, this.homebridgeOptions);
|
|
325
|
-
// Override with child bridge specific settings
|
|
326
278
|
if (this.bridgeConfig.debugModeEnabled !== undefined) {
|
|
327
279
|
bridgeOptions.debugModeEnabled = this.bridgeConfig.debugModeEnabled;
|
|
328
280
|
}
|
|
329
|
-
this.sendMessage("load"
|
|
281
|
+
this.sendMessage("load", {
|
|
330
282
|
type: this.type,
|
|
331
283
|
identifier: this.identifier,
|
|
332
284
|
pluginPath: this.plugin.getPluginPath(),
|
|
@@ -336,54 +288,37 @@ export class ChildBridgeService {
|
|
|
336
288
|
homebridgeConfig: {
|
|
337
289
|
bridge: this.homebridgeConfig.bridge,
|
|
338
290
|
ports: this.homebridgeConfig.ports,
|
|
339
|
-
disabledPlugins: [],
|
|
340
|
-
accessories: [],
|
|
341
|
-
platforms: [],
|
|
291
|
+
disabledPlugins: [],
|
|
292
|
+
accessories: [],
|
|
293
|
+
platforms: [],
|
|
342
294
|
},
|
|
343
295
|
});
|
|
344
296
|
}
|
|
345
|
-
/**
|
|
346
|
-
* Tell the child bridge to start broadcasting
|
|
347
|
-
*/
|
|
348
297
|
startBridge() {
|
|
349
|
-
this.sendMessage("start"
|
|
298
|
+
this.sendMessage("start");
|
|
350
299
|
}
|
|
351
|
-
/**
|
|
352
|
-
* Handle external port requests from child
|
|
353
|
-
*/
|
|
354
300
|
async handlePortRequest(request) {
|
|
355
301
|
let port;
|
|
356
302
|
if (request.portType === 'matter') {
|
|
357
|
-
// Request from Matter port pool
|
|
358
303
|
port = await this.externalPortService.requestMatterPort(request.username);
|
|
359
304
|
}
|
|
360
305
|
else {
|
|
361
|
-
// Request from HAP port pool (default)
|
|
362
306
|
port = await this.externalPortService.requestPort(request.username);
|
|
363
307
|
}
|
|
364
|
-
this.sendMessage("portAllocated"
|
|
308
|
+
this.sendMessage("portAllocated", {
|
|
365
309
|
username: request.username,
|
|
366
310
|
port,
|
|
367
311
|
});
|
|
368
312
|
}
|
|
369
|
-
/**
|
|
370
|
-
* Send sigterm to the child bridge
|
|
371
|
-
*/
|
|
372
313
|
teardown() {
|
|
373
314
|
if (this.child && this.child.connected) {
|
|
374
|
-
this.bridgeStatus = "down"
|
|
315
|
+
this.bridgeStatus = "down";
|
|
375
316
|
this.child.kill('SIGTERM');
|
|
376
317
|
}
|
|
377
318
|
}
|
|
378
|
-
/**
|
|
379
|
-
* Trigger sending child bridge metadata to the process parent via IPC
|
|
380
|
-
*/
|
|
381
319
|
sendStatusUpdate() {
|
|
382
|
-
this.ipcService.sendMessage("childBridgeStatusUpdate"
|
|
320
|
+
this.ipcService.sendMessage("childBridgeStatusUpdate", this.getMetadata());
|
|
383
321
|
}
|
|
384
|
-
/**
|
|
385
|
-
* Restarts the child bridge process
|
|
386
|
-
*/
|
|
387
322
|
restartChildBridge() {
|
|
388
323
|
if (this.manuallyStopped) {
|
|
389
324
|
this.restartCount = 0;
|
|
@@ -395,16 +330,13 @@ export class ChildBridgeService {
|
|
|
395
330
|
this.teardown();
|
|
396
331
|
}
|
|
397
332
|
}
|
|
398
|
-
/**
|
|
399
|
-
* Stops the child bridge, not starting it again
|
|
400
|
-
*/
|
|
401
333
|
stopChildBridge() {
|
|
402
334
|
if (!this.shuttingDown) {
|
|
403
335
|
this.log.warn('Child bridge stopping, will not restart.');
|
|
404
336
|
this.shuttingDown = true;
|
|
405
337
|
this.manuallyStopped = true;
|
|
406
338
|
this.restartCount = 0;
|
|
407
|
-
this.bridgeStatus = "down"
|
|
339
|
+
this.bridgeStatus = "down";
|
|
408
340
|
this.child?.removeAllListeners('close');
|
|
409
341
|
this.teardown();
|
|
410
342
|
}
|
|
@@ -412,11 +344,8 @@ export class ChildBridgeService {
|
|
|
412
344
|
this.log.warn('Child bridge already shutting down or stopped.');
|
|
413
345
|
}
|
|
414
346
|
}
|
|
415
|
-
/**
|
|
416
|
-
* Starts the child bridge, only if it was manually stopped and is no longer running
|
|
417
|
-
*/
|
|
418
347
|
startChildBridge() {
|
|
419
|
-
if (this.manuallyStopped && this.bridgeStatus === "down"
|
|
348
|
+
if (this.manuallyStopped && this.bridgeStatus === "down" && (!this.child || !this.child.connected)) {
|
|
420
349
|
this.refreshConfig();
|
|
421
350
|
this.startChildProcess();
|
|
422
351
|
this.shuttingDown = false;
|
|
@@ -426,13 +355,10 @@ export class ChildBridgeService {
|
|
|
426
355
|
this.log.warn('Child bridge cannot be started, it is still running or was not manually stopped.');
|
|
427
356
|
}
|
|
428
357
|
}
|
|
429
|
-
/**
|
|
430
|
-
* Read the config.json file from disk and refresh the plugin config block for just this plugin
|
|
431
|
-
*/
|
|
432
358
|
async refreshConfig() {
|
|
433
359
|
try {
|
|
434
360
|
const homebridgeConfig = await fs.readJson(User.configPath());
|
|
435
|
-
if (this.type === "platform"
|
|
361
|
+
if (this.type === "platform") {
|
|
436
362
|
const config = homebridgeConfig.platforms?.filter(x => x.platform === this.identifier && x._bridge?.username === this.bridgeConfig.username);
|
|
437
363
|
if (config.length) {
|
|
438
364
|
this.pluginConfig = config;
|
|
@@ -442,7 +368,7 @@ export class ChildBridgeService {
|
|
|
442
368
|
this.log.warn('Platform config could not be found, using existing config.');
|
|
443
369
|
}
|
|
444
370
|
}
|
|
445
|
-
else if (this.type === "accessory"
|
|
371
|
+
else if (this.type === "accessory") {
|
|
446
372
|
const config = homebridgeConfig.accessories?.filter(x => x.accessory === this.identifier && x._bridge?.username === this.bridgeConfig.username);
|
|
447
373
|
if (config.length) {
|
|
448
374
|
this.pluginConfig = config;
|
|
@@ -457,9 +383,6 @@ export class ChildBridgeService {
|
|
|
457
383
|
this.log.error('Failed to refresh plugin config:', error.message);
|
|
458
384
|
}
|
|
459
385
|
}
|
|
460
|
-
/**
|
|
461
|
-
* Returns metadata about this child bridge
|
|
462
|
-
*/
|
|
463
386
|
getMetadata() {
|
|
464
387
|
return {
|
|
465
388
|
status: this.bridgeStatus,
|