homebridge 2.0.0-beta.43 → 2.0.0-beta.45
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 +126 -80
- 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 +5 -69
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -1
- package/dist/matter/ChildBridgeMatterManager.js +36 -227
- 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 +2 -27
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -1
- package/dist/matter/MatterAPIImpl.d.ts +7 -68
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -1
- package/dist/matter/MatterAPIImpl.js +6 -106
- 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 +139 -215
- 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 +14 -27
- 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 +7 -273
- package/dist/matter/types.d.ts.map +1 -1
- package/dist/matter/types.js +7 -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 +304 -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
package/dist/api.js
CHANGED
|
@@ -8,28 +8,16 @@ import { PluginManager } from './pluginManager.js';
|
|
|
8
8
|
import { User } from './user.js';
|
|
9
9
|
import getVersion from './version.js';
|
|
10
10
|
const log = Logger.internal;
|
|
11
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
12
11
|
export var PluginType;
|
|
13
12
|
(function (PluginType) {
|
|
14
13
|
PluginType["ACCESSORY"] = "accessory";
|
|
15
14
|
PluginType["PLATFORM"] = "platform";
|
|
16
15
|
})(PluginType || (PluginType = {}));
|
|
17
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
18
16
|
export var APIEvent;
|
|
19
17
|
(function (APIEvent) {
|
|
20
|
-
/**
|
|
21
|
-
* Event is fired once homebridge has finished with booting up and initializing all components and plugins.
|
|
22
|
-
* When this event is fired it is possible that the Bridge accessory isn't published yet, if homebridge still needs
|
|
23
|
-
* to wait for some {@see StaticPlatformPlugin | StaticPlatformPlugins} to finish accessory creation.
|
|
24
|
-
*/
|
|
25
18
|
APIEvent["DID_FINISH_LAUNCHING"] = "didFinishLaunching";
|
|
26
|
-
/**
|
|
27
|
-
* This event is fired when homebridge gets shutdown. This could be a regular shutdown or an unexpected crash.
|
|
28
|
-
* At this stage all Accessories are already unpublished and all PlatformAccessories are already saved to disk!
|
|
29
|
-
*/
|
|
30
19
|
APIEvent["SHUTDOWN"] = "shutdown";
|
|
31
20
|
})(APIEvent || (APIEvent = {}));
|
|
32
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
33
21
|
export var InternalAPIEvent;
|
|
34
22
|
(function (InternalAPIEvent) {
|
|
35
23
|
InternalAPIEvent["REGISTER_ACCESSORY"] = "registerAccessory";
|
|
@@ -38,7 +26,6 @@ export var InternalAPIEvent;
|
|
|
38
26
|
InternalAPIEvent["REGISTER_PLATFORM_ACCESSORIES"] = "registerPlatformAccessories";
|
|
39
27
|
InternalAPIEvent["UPDATE_PLATFORM_ACCESSORIES"] = "updatePlatformAccessories";
|
|
40
28
|
InternalAPIEvent["UNREGISTER_PLATFORM_ACCESSORIES"] = "unregisterPlatformAccessories";
|
|
41
|
-
// Matter events (matching HAP pattern)
|
|
42
29
|
InternalAPIEvent["PUBLISH_EXTERNAL_MATTER_ACCESSORIES"] = "publishExternalMatterAccessories";
|
|
43
30
|
InternalAPIEvent["REGISTER_MATTER_PLATFORM_ACCESSORIES"] = "registerMatterPlatformAccessories";
|
|
44
31
|
InternalAPIEvent["UPDATE_MATTER_PLATFORM_ACCESSORIES"] = "updateMatterPlatformAccessories";
|
|
@@ -46,44 +33,18 @@ export var InternalAPIEvent;
|
|
|
46
33
|
InternalAPIEvent["UNREGISTER_EXTERNAL_MATTER_ACCESSORIES"] = "unregisterExternalMatterAccessories";
|
|
47
34
|
InternalAPIEvent["UPDATE_MATTER_ACCESSORY_STATE"] = "updateMatterAccessoryState";
|
|
48
35
|
})(InternalAPIEvent || (InternalAPIEvent = {}));
|
|
49
|
-
// eslint-disable-next-line ts/no-unsafe-declaration-merging
|
|
50
36
|
export class HomebridgeAPI extends EventEmitter {
|
|
51
|
-
version = 2.7;
|
|
52
|
-
serverVersion = getVersion();
|
|
53
|
-
// ------------------ LEGACY EXPORTS FOR PRE TYPESCRIPT ------------------
|
|
37
|
+
version = 2.7;
|
|
38
|
+
serverVersion = getVersion();
|
|
54
39
|
user = User;
|
|
55
40
|
hap = hapNodeJs;
|
|
56
|
-
hapLegacyTypes = hapNodeJs.LegacyTypes;
|
|
41
|
+
hapLegacyTypes = hapNodeJs.LegacyTypes;
|
|
57
42
|
platformAccessory = PlatformAccessory;
|
|
58
|
-
// ------------------------------------------------------------------------
|
|
59
|
-
/**
|
|
60
|
-
* Internal state tracking whether Matter is enabled for this bridge
|
|
61
|
-
*/
|
|
62
43
|
matterEnabled = false;
|
|
63
|
-
/**
|
|
64
|
-
* Internal reference to MatterServer for API methods that need return values
|
|
65
|
-
* @internal
|
|
66
|
-
*/
|
|
67
44
|
_matterServer = null;
|
|
68
|
-
/**
|
|
69
|
-
* Internal reference to MatterBridgeManager for checking external servers
|
|
70
|
-
* @internal
|
|
71
|
-
*/
|
|
72
45
|
_matterManager = null;
|
|
73
|
-
/**
|
|
74
|
-
* Pending external accessory registrations
|
|
75
|
-
* Map of registration ID to resolve function
|
|
76
|
-
* @internal
|
|
77
|
-
*/
|
|
78
46
|
_pendingExternalRegistrations = new Map();
|
|
79
|
-
/**
|
|
80
|
-
* Lazy-loaded Matter API implementation
|
|
81
|
-
*/
|
|
82
47
|
_matterAPI;
|
|
83
|
-
/**
|
|
84
|
-
* Matter Protocol API (lazy-loaded)
|
|
85
|
-
* Only instantiated when first accessed
|
|
86
|
-
*/
|
|
87
48
|
get matter() {
|
|
88
49
|
if (!this._matterAPI) {
|
|
89
50
|
this._matterAPI = new MatterAPIImpl(this);
|
|
@@ -93,35 +54,15 @@ export class HomebridgeAPI extends EventEmitter {
|
|
|
93
54
|
constructor() {
|
|
94
55
|
super();
|
|
95
56
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Internal method to set Matter enabled status
|
|
98
|
-
* Called by Server or ChildBridgeFork after Matter initialization
|
|
99
|
-
* @internal
|
|
100
|
-
*/
|
|
101
57
|
_setMatterEnabled(enabled) {
|
|
102
58
|
this.matterEnabled = enabled;
|
|
103
59
|
}
|
|
104
|
-
/**
|
|
105
|
-
* Internal method to set MatterServer reference
|
|
106
|
-
* Called by Server or ChildBridgeFork after creating MatterServer
|
|
107
|
-
* @internal
|
|
108
|
-
*/
|
|
109
60
|
_setMatterServer(server) {
|
|
110
61
|
this._matterServer = server;
|
|
111
62
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Internal method to set MatterBridgeManager reference
|
|
114
|
-
* Called by Server or ChildBridgeFork to allow API access to external servers
|
|
115
|
-
* @internal
|
|
116
|
-
*/
|
|
117
63
|
_setMatterManager(manager) {
|
|
118
64
|
this._matterManager = manager;
|
|
119
65
|
}
|
|
120
|
-
/**
|
|
121
|
-
* Internal method to resolve pending external accessory registrations
|
|
122
|
-
* Called by MatterBridgeManager when external accessories finish publishing
|
|
123
|
-
* @internal
|
|
124
|
-
*/
|
|
125
66
|
_resolveExternalRegistration(registrationId) {
|
|
126
67
|
const resolve = this._pendingExternalRegistrations.get(registrationId);
|
|
127
68
|
if (resolve) {
|
|
@@ -139,29 +80,29 @@ export class HomebridgeAPI extends EventEmitter {
|
|
|
139
80
|
return 'accessories' in platformPlugin;
|
|
140
81
|
}
|
|
141
82
|
signalFinished() {
|
|
142
|
-
this.emit("didFinishLaunching"
|
|
83
|
+
this.emit("didFinishLaunching");
|
|
143
84
|
}
|
|
144
85
|
signalShutdown() {
|
|
145
|
-
this.emit("shutdown"
|
|
86
|
+
this.emit("shutdown");
|
|
146
87
|
}
|
|
147
88
|
registerAccessory(pluginIdentifier, accessoryName, constructor) {
|
|
148
89
|
if (typeof accessoryName === 'function') {
|
|
149
90
|
constructor = accessoryName;
|
|
150
91
|
accessoryName = pluginIdentifier;
|
|
151
|
-
this.emit("registerAccessory"
|
|
92
|
+
this.emit("registerAccessory", accessoryName, constructor);
|
|
152
93
|
}
|
|
153
94
|
else {
|
|
154
|
-
this.emit("registerAccessory"
|
|
95
|
+
this.emit("registerAccessory", accessoryName, constructor, pluginIdentifier);
|
|
155
96
|
}
|
|
156
97
|
}
|
|
157
98
|
registerPlatform(pluginIdentifier, platformName, constructor) {
|
|
158
99
|
if (typeof platformName === 'function') {
|
|
159
100
|
constructor = platformName;
|
|
160
101
|
platformName = pluginIdentifier;
|
|
161
|
-
this.emit("registerPlatform"
|
|
102
|
+
this.emit("registerPlatform", platformName, constructor);
|
|
162
103
|
}
|
|
163
104
|
else {
|
|
164
|
-
this.emit("registerPlatform"
|
|
105
|
+
this.emit("registerPlatform", platformName, constructor, pluginIdentifier);
|
|
165
106
|
}
|
|
166
107
|
}
|
|
167
108
|
publishCameraAccessories(pluginIdentifier, accessories) {
|
|
@@ -172,50 +113,37 @@ export class HomebridgeAPI extends EventEmitter {
|
|
|
172
113
|
log.info(`One of your plugins incorrectly registered an external accessory using the platform name (${pluginIdentifier}) and not the plugin identifier. Please report this to the developer!`);
|
|
173
114
|
}
|
|
174
115
|
accessories.forEach((accessory) => {
|
|
175
|
-
// noinspection SuspiciousTypeOfGuard
|
|
176
116
|
if (!(accessory instanceof PlatformAccessory)) {
|
|
177
117
|
throw new TypeError(`${pluginIdentifier} attempt to register an accessory that isn't PlatformAccessory!`);
|
|
178
118
|
}
|
|
179
119
|
accessory._associatedPlugin = pluginIdentifier;
|
|
180
120
|
});
|
|
181
|
-
this.emit("publishExternalAccessories"
|
|
121
|
+
this.emit("publishExternalAccessories", accessories);
|
|
182
122
|
}
|
|
183
123
|
registerPlatformAccessories(pluginIdentifier, platformName, accessories) {
|
|
184
124
|
accessories.forEach((accessory) => {
|
|
185
|
-
// noinspection SuspiciousTypeOfGuard
|
|
186
125
|
if (!(accessory instanceof PlatformAccessory)) {
|
|
187
126
|
throw new TypeError(`${pluginIdentifier} - ${platformName} attempt to register an accessory that isn't PlatformAccessory!`);
|
|
188
127
|
}
|
|
189
128
|
accessory._associatedPlugin = pluginIdentifier;
|
|
190
129
|
accessory._associatedPlatform = platformName;
|
|
191
130
|
});
|
|
192
|
-
this.emit("registerPlatformAccessories"
|
|
131
|
+
this.emit("registerPlatformAccessories", accessories);
|
|
193
132
|
}
|
|
194
133
|
updatePlatformAccessories(accessories) {
|
|
195
|
-
this.emit("updatePlatformAccessories"
|
|
134
|
+
this.emit("updatePlatformAccessories", accessories);
|
|
196
135
|
}
|
|
197
136
|
unregisterPlatformAccessories(pluginIdentifier, platformName, accessories) {
|
|
198
137
|
accessories.forEach((accessory) => {
|
|
199
|
-
// noinspection SuspiciousTypeOfGuard
|
|
200
138
|
if (!(accessory instanceof PlatformAccessory)) {
|
|
201
139
|
throw new TypeError(`${pluginIdentifier} - ${platformName} attempt to unregister an accessory that isn't PlatformAccessory!`);
|
|
202
140
|
}
|
|
203
141
|
});
|
|
204
|
-
this.emit("unregisterPlatformAccessories"
|
|
142
|
+
this.emit("unregisterPlatformAccessories", accessories);
|
|
205
143
|
}
|
|
206
|
-
/**
|
|
207
|
-
* Check if Matter is available in this version of Homebridge
|
|
208
|
-
* @returns true if Homebridge version satisfies >= 2.0.0-alpha.0
|
|
209
|
-
*/
|
|
210
144
|
isMatterAvailable() {
|
|
211
145
|
return semver.gte(this.serverVersion, '2.0.0-alpha.0');
|
|
212
146
|
}
|
|
213
|
-
/**
|
|
214
|
-
* Check if Matter is enabled for this bridge
|
|
215
|
-
* For main bridge: returns true if Matter is enabled in `bridge.matter` config
|
|
216
|
-
* For child bridge: returns true if Matter is enabled in the `_bridge.matter` config
|
|
217
|
-
* @returns true if Matter is enabled
|
|
218
|
-
*/
|
|
219
147
|
isMatterEnabled() {
|
|
220
148
|
return this.matterEnabled;
|
|
221
149
|
}
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/bridgeService.d.ts
CHANGED
|
@@ -41,18 +41,10 @@ export interface PlatformConfig extends Record<string, any> {
|
|
|
41
41
|
}
|
|
42
42
|
export interface HomebridgeConfig {
|
|
43
43
|
bridge: BridgeConfiguration;
|
|
44
|
-
/**
|
|
45
|
-
* @deprecated
|
|
46
|
-
*/
|
|
47
44
|
mdns?: any;
|
|
48
45
|
accessories: AccessoryConfig[];
|
|
49
46
|
platforms: PlatformConfig[];
|
|
50
47
|
plugins?: PluginIdentifier[];
|
|
51
|
-
/**
|
|
52
|
-
* Array of disabled plugins.
|
|
53
|
-
* Unlike the plugins[] config which prevents plugins from being initialised at all, disabled plugins still have their alias loaded, so
|
|
54
|
-
* we can match config blocks of disabled plugins and show an appropriate message in the logs.
|
|
55
|
-
*/
|
|
56
48
|
disabledPlugins?: PluginIdentifier[];
|
|
57
49
|
ports?: ExternalPortsConfiguration;
|
|
58
50
|
matterPorts?: ExternalPortsConfiguration;
|
|
@@ -79,28 +71,11 @@ export declare class BridgeService {
|
|
|
79
71
|
constructor(api: HomebridgeAPI, pluginManager: PluginManager, externalPortService: ExternalPortService, bridgeOptions: BridgeOptions, bridgeConfig: BridgeConfiguration);
|
|
80
72
|
static printCharacteristicWriteWarning(plugin: Plugin, accessory: Accessory, opts: CharacteristicWarningOpts, warning: CharacteristicWarning): void;
|
|
81
73
|
publishBridge(): void;
|
|
82
|
-
/**
|
|
83
|
-
* Attempt to load the cached accessories from disk.
|
|
84
|
-
*/
|
|
85
74
|
loadCachedPlatformAccessoriesFromDisk(): Promise<void>;
|
|
86
|
-
/**
|
|
87
|
-
* Return the name of the backup cache file
|
|
88
|
-
*/
|
|
89
75
|
private get backupCacheFileName();
|
|
90
|
-
/**
|
|
91
|
-
* Create a backup of the cached file
|
|
92
|
-
* This is used if we ever have trouble reading the main cache file
|
|
93
|
-
*/
|
|
94
76
|
private createCachedAccessoriesBackup;
|
|
95
|
-
/**
|
|
96
|
-
* Restore a cached accessories backup
|
|
97
|
-
* This is used if the main cache file has a JSON syntax error / is corrupted
|
|
98
|
-
*/
|
|
99
77
|
private restoreCachedAccessoriesBackup;
|
|
100
78
|
restoreCachedPlatformAccessories(): void;
|
|
101
|
-
/**
|
|
102
|
-
* Save the cached accessories back to disk.
|
|
103
|
-
*/
|
|
104
79
|
saveCachedPlatformAccessoriesOnDisk(): void;
|
|
105
80
|
handleRegisterPlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
106
81
|
handleUpdatePlatformAccessories(accessories: PlatformAccessory[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridgeService.d.ts","sourceRoot":"","sources":["../src/bridgeService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACb,SAAS,EACT,UAAU,EACV,cAAc,EAGf,MAAM,YAAY,CAAA;AAEnB,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC/F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,EACL,SAAS,EAET,MAAM,EASP,MAAM,YAAY,CAAA;AAInB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAOlD,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,UAAU,CAAA;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,cAAc,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,aAAa,GAAG,SAAS,CAAC,EAAE,CAAA;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,GAAG,CAAC,EAAE;QACJ,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,YAAY,CAAC,EAAE,MAAM,CAAA;KACtB,CAAA;CACF;AAED,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC1D,SAAS,EAAE,aAAa,GAAG,mBAAmB,CAAA;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED,MAAM,WAAW,cAAe,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACzD,QAAQ,EAAE,YAAY,GAAG,kBAAkB,CAAA;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"bridgeService.d.ts","sourceRoot":"","sources":["../src/bridgeService.ts"],"names":[],"mappings":"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"}
|
package/dist/bridgeService.js
CHANGED
|
@@ -26,47 +26,38 @@ export class BridgeService {
|
|
|
26
26
|
this.bridgeConfig = bridgeConfig;
|
|
27
27
|
this.storageService = new StorageService(this.bridgeOptions.cachedAccessoriesDir);
|
|
28
28
|
this.storageService.initSync();
|
|
29
|
-
// Server is "secure by default", meaning it creates a top-level Bridge accessory that
|
|
30
|
-
// will not allow unauthenticated requests. This matches the behavior of actual HomeKit
|
|
31
|
-
// accessories. However, you can set this to true to allow all requests without authentication,
|
|
32
|
-
// which can be useful for easy hacking. Note that this will expose all functions of your
|
|
33
|
-
// bridged accessories, like changing characteristics (i.e. flipping your lights on and off).
|
|
34
29
|
this.allowInsecureAccess = this.bridgeOptions.insecureAccess || false;
|
|
35
|
-
this.api.on("registerPlatformAccessories"
|
|
36
|
-
this.api.on("updatePlatformAccessories"
|
|
37
|
-
this.api.on("unregisterPlatformAccessories"
|
|
38
|
-
this.api.on("publishExternalAccessories"
|
|
30
|
+
this.api.on("registerPlatformAccessories", this.handleRegisterPlatformAccessories.bind(this));
|
|
31
|
+
this.api.on("updatePlatformAccessories", this.handleUpdatePlatformAccessories.bind(this));
|
|
32
|
+
this.api.on("unregisterPlatformAccessories", this.handleUnregisterPlatformAccessories.bind(this));
|
|
33
|
+
this.api.on("publishExternalAccessories", this.handlePublishExternalAccessories.bind(this));
|
|
39
34
|
this.bridge = new Bridge(bridgeConfig.name, uuid.generate('HomeBridge'));
|
|
40
|
-
this.bridge.on("characteristic-warning"
|
|
41
|
-
// We register characteristic warning handlers on every bridged accessory (to have a reference to the plugin).
|
|
42
|
-
// For Bridges the warnings will propagate to the main Bridge accessory, thus we need to silence them here.
|
|
43
|
-
// Otherwise, those would be printed twice (by us and HAP-NodeJS as it detects no handlers on the bridge).
|
|
35
|
+
this.bridge.on("characteristic-warning", () => {
|
|
44
36
|
});
|
|
45
37
|
}
|
|
46
|
-
// characteristic warning event has additional parameter originatorChain: string[] which is currently unused
|
|
47
38
|
static printCharacteristicWriteWarning(plugin, accessory, opts, warning) {
|
|
48
39
|
const wikiInfo = 'See https://homebridge.io/w/JtMGR for more info.';
|
|
49
40
|
switch (warning.type) {
|
|
50
|
-
case "slow-read"
|
|
51
|
-
case "slow-write"
|
|
41
|
+
case "slow-read":
|
|
42
|
+
case "slow-write":
|
|
52
43
|
if (!opts.ignoreSlow) {
|
|
53
44
|
log.info(getLogPrefix(plugin.getPluginIdentifier()), 'This plugin slows down Homebridge.', warning.message, wikiInfo);
|
|
54
45
|
}
|
|
55
46
|
break;
|
|
56
|
-
case "timeout-read"
|
|
57
|
-
case "timeout-write"
|
|
47
|
+
case "timeout-read":
|
|
48
|
+
case "timeout-write":
|
|
58
49
|
log.error(getLogPrefix(plugin.getPluginIdentifier()), 'This plugin slows down Homebridge.', warning.message, wikiInfo);
|
|
59
50
|
break;
|
|
60
|
-
case "warn-message"
|
|
51
|
+
case "warn-message":
|
|
61
52
|
log.info(getLogPrefix(plugin.getPluginIdentifier()), `This plugin generated a warning from the characteristic '${warning.characteristic.displayName}':`, `${warning.message}.`, wikiInfo);
|
|
62
53
|
break;
|
|
63
|
-
case "error-message"
|
|
54
|
+
case "error-message":
|
|
64
55
|
log.error(getLogPrefix(plugin.getPluginIdentifier()), `This plugin threw an error from the characteristic '${warning.characteristic.displayName}':`, `${warning.message}.`, wikiInfo);
|
|
65
56
|
break;
|
|
66
|
-
case "debug-message"
|
|
57
|
+
case "debug-message":
|
|
67
58
|
log.debug(getLogPrefix(plugin.getPluginIdentifier()), `Characteristic '${warning.characteristic.displayName}':`, `${warning.message}.`, wikiInfo);
|
|
68
59
|
break;
|
|
69
|
-
default:
|
|
60
|
+
default:
|
|
70
61
|
log.info(getLogPrefix(plugin.getPluginIdentifier()), `This plugin generated a warning from the characteristic '${warning.characteristic.displayName}':`, `${warning.message}.`, wikiInfo);
|
|
71
62
|
break;
|
|
72
63
|
}
|
|
@@ -81,14 +72,14 @@ export class BridgeService {
|
|
|
81
72
|
info.setCharacteristic(Characteristic.Model, bridgeConfig.model || 'homebridge');
|
|
82
73
|
info.setCharacteristic(Characteristic.SerialNumber, bridgeConfig.serialNumber || bridgeConfig.username);
|
|
83
74
|
info.setCharacteristic(Characteristic.FirmwareRevision, bridgeConfig.firmwareRevision || getVersion());
|
|
84
|
-
this.bridge.on("listening"
|
|
75
|
+
this.bridge.on("listening", (port) => {
|
|
85
76
|
log.success('Homebridge v%s (HAP v%s) (%s) is running on port %s.', getVersion(), HAPLibraryVersion(), bridgeConfig.name, port);
|
|
86
77
|
});
|
|
87
78
|
const publishInfo = {
|
|
88
79
|
username: bridgeConfig.username,
|
|
89
80
|
port: bridgeConfig.port,
|
|
90
81
|
pincode: bridgeConfig.pin,
|
|
91
|
-
category: 2
|
|
82
|
+
category: 2,
|
|
92
83
|
bind: bridgeConfig.bind,
|
|
93
84
|
addIdentifyingMaterial: true,
|
|
94
85
|
advertiser: bridgeConfig.advertiser,
|
|
@@ -99,9 +90,6 @@ export class BridgeService {
|
|
|
99
90
|
log.debug('Publishing bridge accessory (name: %s, publishInfo: %o).', this.bridge.displayName, BridgeService.strippingPinCode(publishInfo));
|
|
100
91
|
this.bridge.publish(publishInfo, this.allowInsecureAccess);
|
|
101
92
|
}
|
|
102
|
-
/**
|
|
103
|
-
* Attempt to load the cached accessories from disk.
|
|
104
|
-
*/
|
|
105
93
|
async loadCachedPlatformAccessoriesFromDisk() {
|
|
106
94
|
let cachedAccessories = null;
|
|
107
95
|
try {
|
|
@@ -110,7 +98,6 @@ export class BridgeService {
|
|
|
110
98
|
catch (error) {
|
|
111
99
|
log.error('Failed to load cached accessories from disk:', error.message);
|
|
112
100
|
if (error instanceof SyntaxError) {
|
|
113
|
-
// syntax error probably means invalid json / corrupted file; try and restore from backup
|
|
114
101
|
cachedAccessories = await this.restoreCachedAccessoriesBackup();
|
|
115
102
|
}
|
|
116
103
|
else {
|
|
@@ -123,22 +110,14 @@ export class BridgeService {
|
|
|
123
110
|
return PlatformAccessory.deserialize(serialized);
|
|
124
111
|
});
|
|
125
112
|
if (cachedAccessories.length) {
|
|
126
|
-
// create a backup of the cache file
|
|
127
113
|
await this.createCachedAccessoriesBackup();
|
|
128
114
|
}
|
|
129
115
|
}
|
|
130
116
|
this.cachedAccessoriesFileLoaded = true;
|
|
131
117
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Return the name of the backup cache file
|
|
134
|
-
*/
|
|
135
118
|
get backupCacheFileName() {
|
|
136
119
|
return `.${this.bridgeOptions.cachedAccessoriesItemName}.bak`;
|
|
137
120
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Create a backup of the cached file
|
|
140
|
-
* This is used if we ever have trouble reading the main cache file
|
|
141
|
-
*/
|
|
142
121
|
async createCachedAccessoriesBackup() {
|
|
143
122
|
try {
|
|
144
123
|
await this.storageService.copyItem(this.bridgeOptions.cachedAccessoriesItemName, this.backupCacheFileName);
|
|
@@ -147,10 +126,6 @@ export class BridgeService {
|
|
|
147
126
|
log.warn(`Failed to create a backup of the ${this.bridgeOptions.cachedAccessoriesItemName} cached accessories file:`, error.message);
|
|
148
127
|
}
|
|
149
128
|
}
|
|
150
|
-
/**
|
|
151
|
-
* Restore a cached accessories backup
|
|
152
|
-
* This is used if the main cache file has a JSON syntax error / is corrupted
|
|
153
|
-
*/
|
|
154
129
|
async restoreCachedAccessoriesBackup() {
|
|
155
130
|
try {
|
|
156
131
|
const cachedAccessories = await this.storageService.getItem(this.backupCacheFileName);
|
|
@@ -166,37 +141,32 @@ export class BridgeService {
|
|
|
166
141
|
restoreCachedPlatformAccessories() {
|
|
167
142
|
this.cachedPlatformAccessories = this.cachedPlatformAccessories.filter((accessory) => {
|
|
168
143
|
let plugin = this.pluginManager.getPlugin(accessory._associatedPlugin);
|
|
169
|
-
if (!plugin) {
|
|
144
|
+
if (!plugin) {
|
|
170
145
|
try {
|
|
171
|
-
// resolve platform accessories by searching for plugins which registered a dynamic platform for the given name
|
|
172
146
|
plugin = this.pluginManager.getPluginByActiveDynamicPlatform(accessory._associatedPlatform);
|
|
173
|
-
if (plugin) {
|
|
174
|
-
// could improve on this by calculating the Levenshtein distance to only allow platform ownership changes
|
|
175
|
-
// when something like a typo happened. Are there other reasons the name could change?
|
|
176
|
-
// And how would we define the threshold?
|
|
147
|
+
if (plugin) {
|
|
177
148
|
log.info(`When searching for the associated plugin of the accessory '${accessory.displayName}' `
|
|
178
149
|
+ `it seems like the plugin name changed from '${accessory._associatedPlugin}' to '${plugin.getPluginIdentifier()}'. Plugin association is now being transformed!`);
|
|
179
|
-
accessory._associatedPlugin = plugin.getPluginIdentifier();
|
|
150
|
+
accessory._associatedPlugin = plugin.getPluginIdentifier();
|
|
180
151
|
}
|
|
181
152
|
}
|
|
182
|
-
catch (error) {
|
|
153
|
+
catch (error) {
|
|
183
154
|
log.info(`Could not find the associated plugin for the accessory '${accessory.displayName}'. `
|
|
184
155
|
+ `Tried to find the plugin by the platform name but ${error.message}`);
|
|
185
156
|
}
|
|
186
157
|
}
|
|
187
158
|
const platformPlugins = plugin && plugin.getActiveDynamicPlatform(accessory._associatedPlatform);
|
|
188
159
|
if (plugin) {
|
|
189
|
-
accessory._associatedHAPAccessory.on("characteristic-warning"
|
|
160
|
+
accessory._associatedHAPAccessory.on("characteristic-warning", BridgeService.printCharacteristicWriteWarning.bind(this, plugin, accessory._associatedHAPAccessory, {}));
|
|
190
161
|
}
|
|
191
162
|
if (!platformPlugins) {
|
|
192
163
|
log.info(`Failed to find plugin to handle accessory ${accessory._associatedHAPAccessory.displayName}`);
|
|
193
164
|
if (!this.bridgeOptions.keepOrphanedCachedAccessories) {
|
|
194
165
|
log.info(`Removing orphaned accessory ${accessory._associatedHAPAccessory.displayName}`);
|
|
195
|
-
return false;
|
|
166
|
+
return false;
|
|
196
167
|
}
|
|
197
168
|
}
|
|
198
169
|
else {
|
|
199
|
-
// We set a placeholder for FirmwareRevision before configureAccessory is called so the plugin has the opportunity to override it.
|
|
200
170
|
accessory.getService(Service.AccessoryInformation)?.setCharacteristic(Characteristic.FirmwareRevision, '0');
|
|
201
171
|
platformPlugins.configureAccessory(accessory);
|
|
202
172
|
}
|
|
@@ -205,18 +175,13 @@ export class BridgeService {
|
|
|
205
175
|
}
|
|
206
176
|
catch (error) {
|
|
207
177
|
log.warn(`${accessory._associatedPlugin ? getLogPrefix(accessory._associatedPlugin) : ''} Could not restore cached accessory '${accessory._associatedHAPAccessory.displayName}':`, error.message);
|
|
208
|
-
return false;
|
|
178
|
+
return false;
|
|
209
179
|
}
|
|
210
|
-
return true;
|
|
180
|
+
return true;
|
|
211
181
|
});
|
|
212
182
|
}
|
|
213
|
-
/**
|
|
214
|
-
* Save the cached accessories back to disk.
|
|
215
|
-
*/
|
|
216
183
|
saveCachedPlatformAccessoriesOnDisk() {
|
|
217
184
|
try {
|
|
218
|
-
// only save the cache file back to disk if we have already attempted to load it
|
|
219
|
-
// this should prevent the cache being deleted should homebridge be shutdown before it has finished launching
|
|
220
185
|
if (this.cachedAccessoriesFileLoaded) {
|
|
221
186
|
const serializedAccessories = this.cachedPlatformAccessories.map(accessory => PlatformAccessory.serialize(accessory));
|
|
222
187
|
this.storageService.setItemSync(this.bridgeOptions.cachedAccessoriesItemName, serializedAccessories);
|
|
@@ -236,7 +201,7 @@ export class BridgeService {
|
|
|
236
201
|
if (!platforms) {
|
|
237
202
|
log.warn('The plugin \'%s\' registered a new accessory for the platform \'%s\'. The platform couldn\'t be found though!', accessory._associatedPlugin, accessory._associatedPlatform);
|
|
238
203
|
}
|
|
239
|
-
accessory._associatedHAPAccessory.on("characteristic-warning"
|
|
204
|
+
accessory._associatedHAPAccessory.on("characteristic-warning", BridgeService.printCharacteristicWriteWarning.bind(this, plugin, accessory._associatedHAPAccessory, {}));
|
|
240
205
|
}
|
|
241
206
|
else {
|
|
242
207
|
log.warn('A platform configured a new accessory under the plugin name \'%s\'. However no loaded plugin could be found for the name!', accessory._associatedPlugin);
|
|
@@ -248,12 +213,10 @@ export class BridgeService {
|
|
|
248
213
|
}
|
|
249
214
|
handleUpdatePlatformAccessories(accessories) {
|
|
250
215
|
if (!Array.isArray(accessories)) {
|
|
251
|
-
// This could be quite destructive if a non-array is passed in, so we'll just ignore it.
|
|
252
216
|
return;
|
|
253
217
|
}
|
|
254
218
|
const nonUpdatedPlugins = this.cachedPlatformAccessories.filter(cachedPlatformAccessory => (accessories.find(accessory => accessory.UUID === cachedPlatformAccessory._associatedHAPAccessory.UUID) === undefined));
|
|
255
219
|
this.cachedPlatformAccessories = [...nonUpdatedPlugins, ...accessories];
|
|
256
|
-
// Update persisted accessories
|
|
257
220
|
this.saveCachedPlatformAccessoriesOnDisk();
|
|
258
221
|
}
|
|
259
222
|
handleUnregisterPlatformAccessories(accessories) {
|
|
@@ -272,7 +235,6 @@ export class BridgeService {
|
|
|
272
235
|
for (const accessory of accessories) {
|
|
273
236
|
const hapAccessory = accessory._associatedHAPAccessory;
|
|
274
237
|
const advertiseAddress = generate(hapAccessory.UUID);
|
|
275
|
-
// get external port allocation
|
|
276
238
|
const accessoryPort = await this.externalPortService.requestPort(advertiseAddress);
|
|
277
239
|
if (this.publishedExternalAccessories.has(advertiseAddress)) {
|
|
278
240
|
throw new Error(`Accessory ${hapAccessory.displayName} experienced an address collision.`);
|
|
@@ -282,13 +244,12 @@ export class BridgeService {
|
|
|
282
244
|
}
|
|
283
245
|
const plugin = this.pluginManager.getPlugin(accessory._associatedPlugin);
|
|
284
246
|
if (plugin) {
|
|
285
|
-
hapAccessory.on("characteristic-warning"
|
|
247
|
+
hapAccessory.on("characteristic-warning", BridgeService.printCharacteristicWriteWarning.bind(this, plugin, hapAccessory, { ignoreSlow: true }));
|
|
286
248
|
}
|
|
287
249
|
else if (PluginManager.isQualifiedPluginIdentifier(accessory._associatedPlugin)) {
|
|
288
|
-
// we did already complain in api.ts if it wasn't a qualified name
|
|
289
250
|
log.warn('A platform configured a external accessory under the plugin name \'%s\'. However no loaded plugin could be found for the name!', accessory._associatedPlugin);
|
|
290
251
|
}
|
|
291
|
-
hapAccessory.on("listening"
|
|
252
|
+
hapAccessory.on("listening", (port) => {
|
|
292
253
|
log.success('%s is running on port %s.', hapAccessory.displayName, port);
|
|
293
254
|
log.info('Please add [%s] manually in Home app. Setup Code: %s', hapAccessory.displayName, accessoryPin);
|
|
294
255
|
});
|
|
@@ -307,60 +268,46 @@ export class BridgeService {
|
|
|
307
268
|
}
|
|
308
269
|
createHAPAccessory(plugin, accessoryInstance, displayName, accessoryType, uuidBase) {
|
|
309
270
|
const services = (accessoryInstance.getServices() || [])
|
|
310
|
-
.filter(service => !!service);
|
|
271
|
+
.filter(service => !!service);
|
|
311
272
|
const controllers = ((accessoryInstance.getControllers && accessoryInstance.getControllers()) || [])
|
|
312
273
|
.filter(controller => !!controller);
|
|
313
|
-
if (services.length === 0 && controllers.length === 0) {
|
|
274
|
+
if (services.length === 0 && controllers.length === 0) {
|
|
314
275
|
return undefined;
|
|
315
276
|
}
|
|
316
|
-
// The returned "services" for this accessory are simply an array of new-API-style
|
|
317
|
-
// Service instances which we can add to a created HAP-NodeJS Accessory directly.
|
|
318
277
|
const accessoryUUID = uuid.generate(`${accessoryType}:${uuidBase || displayName}`);
|
|
319
278
|
const accessory = new Accessory(displayName, accessoryUUID);
|
|
320
|
-
// listen for the identify event if the accessory instance has defined an identify() method
|
|
321
279
|
if (accessoryInstance.identify) {
|
|
322
|
-
accessory.on("identify"
|
|
323
|
-
// @ts-expect-error: empty callback for backwards compatibility
|
|
280
|
+
accessory.on("identify", (paired, callback) => {
|
|
324
281
|
accessoryInstance.identify(() => { });
|
|
325
282
|
callback();
|
|
326
283
|
});
|
|
327
284
|
}
|
|
328
285
|
const informationService = accessory.getService(Service.AccessoryInformation);
|
|
329
286
|
services.forEach((service) => {
|
|
330
|
-
// if you returned an AccessoryInformation service, merge its values with ours
|
|
331
287
|
if (service instanceof Service.AccessoryInformation) {
|
|
332
|
-
service.setCharacteristic(Characteristic.Name, displayName);
|
|
333
|
-
|
|
334
|
-
// Otherwise, they would override our identify listener registered by the HAP-NodeJS accessory
|
|
335
|
-
service.getCharacteristic(Characteristic.Identify).removeAllListeners("set" /* CharacteristicEventTypes.SET */);
|
|
336
|
-
// pull out any values and listeners (get and set) you may have defined
|
|
288
|
+
service.setCharacteristic(Characteristic.Name, displayName);
|
|
289
|
+
service.getCharacteristic(Characteristic.Identify).removeAllListeners("set");
|
|
337
290
|
informationService.replaceCharacteristicsFromService(service);
|
|
338
291
|
}
|
|
339
292
|
else {
|
|
340
293
|
accessory.addService(service);
|
|
341
294
|
}
|
|
342
295
|
});
|
|
343
|
-
accessory.on("characteristic-warning"
|
|
296
|
+
accessory.on("characteristic-warning", BridgeService.printCharacteristicWriteWarning.bind(this, plugin, accessory, {}));
|
|
344
297
|
controllers.forEach((controller) => {
|
|
345
298
|
accessory.configureController(controller);
|
|
346
299
|
});
|
|
347
300
|
return accessory;
|
|
348
301
|
}
|
|
349
302
|
async loadPlatformAccessories(plugin, platformInstance, platformType, logger) {
|
|
350
|
-
// Plugin 1.0, load accessories
|
|
351
303
|
return new Promise((resolve) => {
|
|
352
|
-
// warn the user if the static platform is blocking the startup of Homebridge for to long
|
|
353
304
|
const loadDelayWarningInterval = setInterval(() => {
|
|
354
305
|
log.warn(getLogPrefix(plugin.getPluginIdentifier()), 'This plugin is taking long time to load and preventing Homebridge from starting. See https://homebridge.io/w/JtMGR for more info.');
|
|
355
306
|
}, 20000);
|
|
356
307
|
platformInstance.accessories(once((accessories) => {
|
|
357
|
-
// clear the load delay warning interval
|
|
358
308
|
clearInterval(loadDelayWarningInterval);
|
|
359
|
-
// loop through accessories adding them to the list and registering them
|
|
360
309
|
accessories.forEach((accessoryInstance, index) => {
|
|
361
|
-
// @ts-expect-error: assume this property was set
|
|
362
310
|
const accessoryName = accessoryInstance.name;
|
|
363
|
-
// @ts-expect-error: optional base uuid
|
|
364
311
|
const uuidBase = accessoryInstance.uuid_base;
|
|
365
312
|
log.info('Initializing platform accessory \'%s\'...', accessoryName);
|
|
366
313
|
const accessory = this.createHAPAccessory(plugin, accessoryInstance, accessoryName, platformType, uuidBase);
|