homebridge 2.0.0-beta.4 → 2.0.0-beta.40
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/README.md +16 -17
- package/bin/homebridge.js +22 -0
- package/config-sample.json +3 -3
- package/dist/api.d.ts +499 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +223 -0
- package/dist/api.js.map +1 -0
- package/dist/api.spec.d.ts +2 -0
- package/dist/api.spec.d.ts.map +1 -0
- package/dist/api.spec.js +413 -0
- package/dist/api.spec.js.map +1 -0
- package/{lib → dist}/bridgeService.d.ts +19 -10
- package/dist/bridgeService.d.ts.map +1 -0
- package/{lib → dist}/bridgeService.js +85 -117
- package/dist/bridgeService.js.map +1 -0
- package/{lib → dist}/childBridgeFork.d.ts +11 -5
- package/dist/childBridgeFork.d.ts.map +1 -0
- package/{lib → dist}/childBridgeFork.js +93 -44
- package/dist/childBridgeFork.js.map +1 -0
- package/{lib → dist}/childBridgeService.d.ts +37 -7
- package/dist/childBridgeService.d.ts.map +1 -0
- package/{lib → dist}/childBridgeService.js +127 -69
- package/dist/childBridgeService.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +90 -0
- package/dist/cli.js.map +1 -0
- package/dist/externalPortService.d.ts +47 -0
- package/dist/externalPortService.d.ts.map +1 -0
- package/dist/externalPortService.js +105 -0
- package/dist/externalPortService.js.map +1 -0
- package/dist/index.d.ts +141 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/ipcService.d.ts +48 -0
- package/dist/ipcService.d.ts.map +1 -0
- package/{lib → dist}/ipcService.js +12 -14
- package/dist/ipcService.js.map +1 -0
- package/{lib → dist}/logger.d.ts +12 -6
- package/dist/logger.d.ts.map +1 -0
- package/{lib → dist}/logger.js +27 -28
- package/dist/logger.js.map +1 -0
- package/dist/logger.spec.d.ts +2 -0
- package/dist/logger.spec.d.ts.map +1 -0
- package/dist/logger.spec.js +95 -0
- package/dist/logger.spec.js.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.js +399 -0
- package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
- package/dist/matter/MatterAPIImpl.d.ts +504 -0
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
- package/dist/matter/MatterAPIImpl.js +305 -0
- package/dist/matter/MatterAPIImpl.js.map +1 -0
- package/dist/matter/MatterBridgeManager.d.ts +87 -0
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
- package/dist/matter/MatterBridgeManager.js +413 -0
- package/dist/matter/MatterBridgeManager.js.map +1 -0
- package/dist/matter/MatterConfigCollector.d.ts +26 -0
- package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
- package/dist/matter/MatterConfigCollector.js +78 -0
- package/dist/matter/MatterConfigCollector.js.map +1 -0
- package/dist/matter/accessoryCache.d.ts +105 -0
- package/dist/matter/accessoryCache.d.ts.map +1 -0
- package/dist/matter/accessoryCache.js +214 -0
- package/dist/matter/accessoryCache.js.map +1 -0
- package/dist/matter/accessoryCache.spec.d.ts +2 -0
- package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
- package/dist/matter/accessoryCache.spec.js +452 -0
- package/dist/matter/accessoryCache.spec.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
- package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts +63 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.js +223 -0
- package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts +20 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.js +71 -0
- package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js +120 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.js +71 -0
- package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts +20 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.js +41 -0
- package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts +33 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.js +138 -0
- package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js +145 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts +27 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.js +95 -0
- package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js +128 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js +41 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +57 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +22 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +86 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js +41 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +57 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +21 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js +61 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +53 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +22 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.js +127 -0
- package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +31 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js +158 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/index.d.ts +20 -0
- package/dist/matter/behaviors/index.d.ts.map +1 -0
- package/dist/matter/behaviors/index.js +21 -0
- package/dist/matter/behaviors/index.js.map +1 -0
- package/dist/matter/configValidator.d.ts +81 -0
- package/dist/matter/configValidator.d.ts.map +1 -0
- package/dist/matter/configValidator.js +240 -0
- package/dist/matter/configValidator.js.map +1 -0
- package/dist/matter/configValidator.spec.d.ts +2 -0
- package/dist/matter/configValidator.spec.d.ts.map +1 -0
- package/dist/matter/configValidator.spec.js +390 -0
- package/dist/matter/configValidator.spec.js.map +1 -0
- package/dist/matter/errorHandler.d.ts +33 -0
- package/dist/matter/errorHandler.d.ts.map +1 -0
- package/dist/matter/errorHandler.js +113 -0
- package/dist/matter/errorHandler.js.map +1 -0
- package/dist/matter/errorHandler.spec.d.ts +2 -0
- package/dist/matter/errorHandler.spec.d.ts.map +1 -0
- package/dist/matter/errorHandler.spec.js +159 -0
- package/dist/matter/errorHandler.spec.js.map +1 -0
- package/dist/matter/errors.d.ts +178 -0
- package/dist/matter/errors.d.ts.map +1 -0
- package/dist/matter/errors.js +200 -0
- package/dist/matter/errors.js.map +1 -0
- package/dist/matter/index.d.ts +127 -0
- package/dist/matter/index.d.ts.map +1 -0
- package/dist/matter/index.js +23 -0
- package/dist/matter/index.js.map +1 -0
- package/dist/matter/logFormatter.d.ts +19 -0
- package/dist/matter/logFormatter.d.ts.map +1 -0
- package/dist/matter/logFormatter.js +158 -0
- package/dist/matter/logFormatter.js.map +1 -0
- package/dist/matter/logFormatter.spec.d.ts +2 -0
- package/dist/matter/logFormatter.spec.d.ts.map +1 -0
- package/dist/matter/logFormatter.spec.js +252 -0
- package/dist/matter/logFormatter.spec.js.map +1 -0
- package/dist/matter/server.d.ts +336 -0
- package/dist/matter/server.d.ts.map +1 -0
- package/dist/matter/server.js +1810 -0
- package/dist/matter/server.js.map +1 -0
- package/dist/matter/serverHelpers.d.ts +81 -0
- package/dist/matter/serverHelpers.d.ts.map +1 -0
- package/dist/matter/serverHelpers.js +326 -0
- package/dist/matter/serverHelpers.js.map +1 -0
- package/dist/matter/serverHelpers.spec.d.ts +2 -0
- package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
- package/dist/matter/serverHelpers.spec.js +521 -0
- package/dist/matter/serverHelpers.spec.js.map +1 -0
- package/dist/matter/sharedTypes.d.ts +164 -0
- package/dist/matter/sharedTypes.d.ts.map +1 -0
- package/dist/matter/sharedTypes.js +46 -0
- package/dist/matter/sharedTypes.js.map +1 -0
- package/dist/matter/storage.d.ts +135 -0
- package/dist/matter/storage.d.ts.map +1 -0
- package/dist/matter/storage.js +424 -0
- package/dist/matter/storage.js.map +1 -0
- package/dist/matter/storage.spec.d.ts +2 -0
- package/dist/matter/storage.spec.d.ts.map +1 -0
- package/dist/matter/storage.spec.js +570 -0
- package/dist/matter/storage.spec.js.map +1 -0
- package/dist/matter/typeHelpers.d.ts +45 -0
- package/dist/matter/typeHelpers.d.ts.map +1 -0
- package/dist/matter/typeHelpers.js +57 -0
- package/dist/matter/typeHelpers.js.map +1 -0
- package/dist/matter/typeHelpers.spec.d.ts +2 -0
- package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
- package/dist/matter/typeHelpers.spec.js +127 -0
- package/dist/matter/typeHelpers.spec.js.map +1 -0
- package/dist/matter/types.d.ts +826 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +204 -0
- package/dist/matter/types.js.map +1 -0
- package/{lib → dist}/platformAccessory.d.ts +8 -6
- package/dist/platformAccessory.d.ts.map +1 -0
- package/{lib → dist}/platformAccessory.js +19 -16
- package/dist/platformAccessory.js.map +1 -0
- package/dist/platformAccessory.spec.d.ts +2 -0
- package/dist/platformAccessory.spec.d.ts.map +1 -0
- package/dist/platformAccessory.spec.js +126 -0
- package/dist/platformAccessory.spec.js.map +1 -0
- package/{lib → dist}/plugin.d.ts +2 -3
- package/dist/plugin.d.ts.map +1 -0
- package/{lib → dist}/plugin.js +39 -51
- package/dist/plugin.js.map +1 -0
- package/{lib → dist}/pluginManager.d.ts +3 -3
- package/dist/pluginManager.d.ts.map +1 -0
- package/{lib → dist}/pluginManager.js +76 -81
- package/dist/pluginManager.js.map +1 -0
- package/dist/pluginManager.spec.d.ts +2 -0
- package/dist/pluginManager.spec.d.ts.map +1 -0
- package/dist/pluginManager.spec.js +43 -0
- package/dist/pluginManager.spec.js.map +1 -0
- package/{lib → dist}/server.d.ts +14 -1
- package/dist/server.d.ts.map +1 -0
- package/{lib → dist}/server.js +193 -123
- package/dist/server.js.map +1 -0
- package/dist/server.spec.d.ts +2 -0
- package/dist/server.spec.d.ts.map +1 -0
- package/dist/server.spec.js +57 -0
- package/dist/server.spec.js.map +1 -0
- package/{lib → dist}/storageService.d.ts.map +1 -1
- package/dist/storageService.js +41 -0
- package/dist/storageService.js.map +1 -0
- package/{lib → dist}/user.d.ts +1 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +32 -0
- package/dist/user.js.map +1 -0
- package/dist/user.spec.d.ts +2 -0
- package/dist/user.spec.d.ts.map +1 -0
- package/dist/user.spec.js +31 -0
- package/dist/user.spec.js.map +1 -0
- package/{lib → dist}/util/mac.d.ts +1 -0
- package/dist/util/mac.d.ts.map +1 -0
- package/dist/util/mac.js +14 -0
- package/dist/util/mac.js.map +1 -0
- package/dist/util/mac.spec.d.ts +2 -0
- package/dist/util/mac.spec.d.ts.map +1 -0
- package/dist/util/mac.spec.js +36 -0
- package/dist/util/mac.spec.js.map +1 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/dist/version.spec.d.ts +2 -0
- package/dist/version.spec.d.ts.map +1 -0
- package/dist/version.spec.js +20 -0
- package/dist/version.spec.js.map +1 -0
- package/package.json +49 -50
- package/bin/homebridge +0 -17
- package/lib/api.d.ts +0 -210
- package/lib/api.d.ts.map +0 -1
- package/lib/api.js +0 -155
- package/lib/api.js.map +0 -1
- package/lib/bridgeService.d.ts.map +0 -1
- package/lib/bridgeService.js.map +0 -1
- package/lib/childBridgeFork.d.ts.map +0 -1
- package/lib/childBridgeFork.js.map +0 -1
- package/lib/childBridgeService.d.ts.map +0 -1
- package/lib/childBridgeService.js.map +0 -1
- package/lib/cli.d.ts +0 -4
- package/lib/cli.d.ts.map +0 -1
- package/lib/cli.js +0 -111
- package/lib/cli.js.map +0 -1
- package/lib/externalPortService.d.ts +0 -33
- package/lib/externalPortService.d.ts.map +0 -1
- package/lib/externalPortService.js +0 -64
- package/lib/externalPortService.js.map +0 -1
- package/lib/index.d.ts +0 -76
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -72
- package/lib/index.js.map +0 -1
- package/lib/ipcService.d.ts +0 -33
- package/lib/ipcService.d.ts.map +0 -1
- package/lib/ipcService.js.map +0 -1
- package/lib/logger.d.ts.map +0 -1
- package/lib/logger.js.map +0 -1
- package/lib/platformAccessory.d.ts.map +0 -1
- package/lib/platformAccessory.js.map +0 -1
- package/lib/plugin.d.ts.map +0 -1
- package/lib/plugin.js.map +0 -1
- package/lib/pluginManager.d.ts.map +0 -1
- package/lib/pluginManager.js.map +0 -1
- package/lib/server.d.ts.map +0 -1
- package/lib/server.js.map +0 -1
- package/lib/storageService.js +0 -70
- package/lib/storageService.js.map +0 -1
- package/lib/user.d.ts.map +0 -1
- package/lib/user.js +0 -36
- package/lib/user.js.map +0 -1
- package/lib/util/mac.d.ts.map +0 -1
- package/lib/util/mac.js +0 -20
- package/lib/util/mac.js.map +0 -1
- package/lib/version.d.ts.map +0 -1
- package/lib/version.js +0 -21
- package/lib/version.js.map +0 -1
- /package/{lib → dist}/storageService.d.ts +0 -0
- /package/{lib → dist}/version.d.ts +0 -0
package/dist/api.js
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import hapNodeJs from 'hap-nodejs';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
import { Logger } from './logger.js';
|
|
5
|
+
import { MatterAPIImpl } from './matter/MatterAPIImpl.js';
|
|
6
|
+
import { PlatformAccessory } from './platformAccessory.js';
|
|
7
|
+
import { PluginManager } from './pluginManager.js';
|
|
8
|
+
import { User } from './user.js';
|
|
9
|
+
import getVersion from './version.js';
|
|
10
|
+
const log = Logger.internal;
|
|
11
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
12
|
+
export var PluginType;
|
|
13
|
+
(function (PluginType) {
|
|
14
|
+
PluginType["ACCESSORY"] = "accessory";
|
|
15
|
+
PluginType["PLATFORM"] = "platform";
|
|
16
|
+
})(PluginType || (PluginType = {}));
|
|
17
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
18
|
+
export var APIEvent;
|
|
19
|
+
(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
|
+
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
|
+
APIEvent["SHUTDOWN"] = "shutdown";
|
|
31
|
+
})(APIEvent || (APIEvent = {}));
|
|
32
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
33
|
+
export var InternalAPIEvent;
|
|
34
|
+
(function (InternalAPIEvent) {
|
|
35
|
+
InternalAPIEvent["REGISTER_ACCESSORY"] = "registerAccessory";
|
|
36
|
+
InternalAPIEvent["REGISTER_PLATFORM"] = "registerPlatform";
|
|
37
|
+
InternalAPIEvent["PUBLISH_EXTERNAL_ACCESSORIES"] = "publishExternalAccessories";
|
|
38
|
+
InternalAPIEvent["REGISTER_PLATFORM_ACCESSORIES"] = "registerPlatformAccessories";
|
|
39
|
+
InternalAPIEvent["UPDATE_PLATFORM_ACCESSORIES"] = "updatePlatformAccessories";
|
|
40
|
+
InternalAPIEvent["UNREGISTER_PLATFORM_ACCESSORIES"] = "unregisterPlatformAccessories";
|
|
41
|
+
// Matter events (matching HAP pattern)
|
|
42
|
+
InternalAPIEvent["PUBLISH_EXTERNAL_MATTER_ACCESSORIES"] = "publishExternalMatterAccessories";
|
|
43
|
+
InternalAPIEvent["REGISTER_MATTER_PLATFORM_ACCESSORIES"] = "registerMatterPlatformAccessories";
|
|
44
|
+
InternalAPIEvent["UPDATE_MATTER_PLATFORM_ACCESSORIES"] = "updateMatterPlatformAccessories";
|
|
45
|
+
InternalAPIEvent["UNREGISTER_MATTER_PLATFORM_ACCESSORIES"] = "unregisterMatterPlatformAccessories";
|
|
46
|
+
InternalAPIEvent["UNREGISTER_EXTERNAL_MATTER_ACCESSORIES"] = "unregisterExternalMatterAccessories";
|
|
47
|
+
InternalAPIEvent["UPDATE_MATTER_ACCESSORY_STATE"] = "updateMatterAccessoryState";
|
|
48
|
+
})(InternalAPIEvent || (InternalAPIEvent = {}));
|
|
49
|
+
// eslint-disable-next-line ts/no-unsafe-declaration-merging
|
|
50
|
+
export class HomebridgeAPI extends EventEmitter {
|
|
51
|
+
version = 2.7; // homebridge API version
|
|
52
|
+
serverVersion = getVersion(); // homebridge node module version
|
|
53
|
+
// ------------------ LEGACY EXPORTS FOR PRE TYPESCRIPT ------------------
|
|
54
|
+
user = User;
|
|
55
|
+
hap = hapNodeJs;
|
|
56
|
+
hapLegacyTypes = hapNodeJs.LegacyTypes; // used for older accessories/platforms
|
|
57
|
+
platformAccessory = PlatformAccessory;
|
|
58
|
+
// ------------------------------------------------------------------------
|
|
59
|
+
/**
|
|
60
|
+
* Internal state tracking whether Matter is enabled for this bridge
|
|
61
|
+
*/
|
|
62
|
+
matterEnabled = false;
|
|
63
|
+
/**
|
|
64
|
+
* Internal reference to MatterServer for API methods that need return values
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
_matterServer = null;
|
|
68
|
+
/**
|
|
69
|
+
* Internal reference to MatterBridgeManager for checking external servers
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
_matterManager = null;
|
|
73
|
+
/**
|
|
74
|
+
* Pending external accessory registrations
|
|
75
|
+
* Map of registration ID to resolve function
|
|
76
|
+
* @internal
|
|
77
|
+
*/
|
|
78
|
+
_pendingExternalRegistrations = new Map();
|
|
79
|
+
/**
|
|
80
|
+
* Lazy-loaded Matter API implementation
|
|
81
|
+
*/
|
|
82
|
+
_matterAPI;
|
|
83
|
+
/**
|
|
84
|
+
* Matter Protocol API (lazy-loaded)
|
|
85
|
+
* Only instantiated when first accessed
|
|
86
|
+
*/
|
|
87
|
+
get matter() {
|
|
88
|
+
if (!this._matterAPI) {
|
|
89
|
+
this._matterAPI = new MatterAPIImpl(this);
|
|
90
|
+
}
|
|
91
|
+
return this._matterAPI;
|
|
92
|
+
}
|
|
93
|
+
constructor() {
|
|
94
|
+
super();
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Internal method to set Matter enabled status
|
|
98
|
+
* Called by Server or ChildBridgeFork after Matter initialization
|
|
99
|
+
* @internal
|
|
100
|
+
*/
|
|
101
|
+
_setMatterEnabled(enabled) {
|
|
102
|
+
this.matterEnabled = enabled;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Internal method to set MatterServer reference
|
|
106
|
+
* Called by Server or ChildBridgeFork after creating MatterServer
|
|
107
|
+
* @internal
|
|
108
|
+
*/
|
|
109
|
+
_setMatterServer(server) {
|
|
110
|
+
this._matterServer = server;
|
|
111
|
+
}
|
|
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
|
+
_setMatterManager(manager) {
|
|
118
|
+
this._matterManager = manager;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Internal method to resolve pending external accessory registrations
|
|
122
|
+
* Called by MatterBridgeManager when external accessories finish publishing
|
|
123
|
+
* @internal
|
|
124
|
+
*/
|
|
125
|
+
_resolveExternalRegistration(registrationId) {
|
|
126
|
+
const resolve = this._pendingExternalRegistrations.get(registrationId);
|
|
127
|
+
if (resolve) {
|
|
128
|
+
resolve();
|
|
129
|
+
this._pendingExternalRegistrations.delete(registrationId);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
versionGreaterOrEqual(version) {
|
|
133
|
+
return semver.gte(this.serverVersion, version);
|
|
134
|
+
}
|
|
135
|
+
static isDynamicPlatformPlugin(platformPlugin) {
|
|
136
|
+
return 'configureAccessory' in platformPlugin;
|
|
137
|
+
}
|
|
138
|
+
static isStaticPlatformPlugin(platformPlugin) {
|
|
139
|
+
return 'accessories' in platformPlugin;
|
|
140
|
+
}
|
|
141
|
+
signalFinished() {
|
|
142
|
+
this.emit("didFinishLaunching" /* APIEvent.DID_FINISH_LAUNCHING */);
|
|
143
|
+
}
|
|
144
|
+
signalShutdown() {
|
|
145
|
+
this.emit("shutdown" /* APIEvent.SHUTDOWN */);
|
|
146
|
+
}
|
|
147
|
+
registerAccessory(pluginIdentifier, accessoryName, constructor) {
|
|
148
|
+
if (typeof accessoryName === 'function') {
|
|
149
|
+
constructor = accessoryName;
|
|
150
|
+
accessoryName = pluginIdentifier;
|
|
151
|
+
this.emit("registerAccessory" /* InternalAPIEvent.REGISTER_ACCESSORY */, accessoryName, constructor);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this.emit("registerAccessory" /* InternalAPIEvent.REGISTER_ACCESSORY */, accessoryName, constructor, pluginIdentifier);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
registerPlatform(pluginIdentifier, platformName, constructor) {
|
|
158
|
+
if (typeof platformName === 'function') {
|
|
159
|
+
constructor = platformName;
|
|
160
|
+
platformName = pluginIdentifier;
|
|
161
|
+
this.emit("registerPlatform" /* InternalAPIEvent.REGISTER_PLATFORM */, platformName, constructor);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
this.emit("registerPlatform" /* InternalAPIEvent.REGISTER_PLATFORM */, platformName, constructor, pluginIdentifier);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
publishCameraAccessories(pluginIdentifier, accessories) {
|
|
168
|
+
this.publishExternalAccessories(pluginIdentifier, accessories);
|
|
169
|
+
}
|
|
170
|
+
publishExternalAccessories(pluginIdentifier, accessories) {
|
|
171
|
+
if (!PluginManager.isQualifiedPluginIdentifier(pluginIdentifier)) {
|
|
172
|
+
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
|
+
}
|
|
174
|
+
accessories.forEach((accessory) => {
|
|
175
|
+
// noinspection SuspiciousTypeOfGuard
|
|
176
|
+
if (!(accessory instanceof PlatformAccessory)) {
|
|
177
|
+
throw new TypeError(`${pluginIdentifier} attempt to register an accessory that isn't PlatformAccessory!`);
|
|
178
|
+
}
|
|
179
|
+
accessory._associatedPlugin = pluginIdentifier;
|
|
180
|
+
});
|
|
181
|
+
this.emit("publishExternalAccessories" /* InternalAPIEvent.PUBLISH_EXTERNAL_ACCESSORIES */, accessories);
|
|
182
|
+
}
|
|
183
|
+
registerPlatformAccessories(pluginIdentifier, platformName, accessories) {
|
|
184
|
+
accessories.forEach((accessory) => {
|
|
185
|
+
// noinspection SuspiciousTypeOfGuard
|
|
186
|
+
if (!(accessory instanceof PlatformAccessory)) {
|
|
187
|
+
throw new TypeError(`${pluginIdentifier} - ${platformName} attempt to register an accessory that isn't PlatformAccessory!`);
|
|
188
|
+
}
|
|
189
|
+
accessory._associatedPlugin = pluginIdentifier;
|
|
190
|
+
accessory._associatedPlatform = platformName;
|
|
191
|
+
});
|
|
192
|
+
this.emit("registerPlatformAccessories" /* InternalAPIEvent.REGISTER_PLATFORM_ACCESSORIES */, accessories);
|
|
193
|
+
}
|
|
194
|
+
updatePlatformAccessories(accessories) {
|
|
195
|
+
this.emit("updatePlatformAccessories" /* InternalAPIEvent.UPDATE_PLATFORM_ACCESSORIES */, accessories);
|
|
196
|
+
}
|
|
197
|
+
unregisterPlatformAccessories(pluginIdentifier, platformName, accessories) {
|
|
198
|
+
accessories.forEach((accessory) => {
|
|
199
|
+
// noinspection SuspiciousTypeOfGuard
|
|
200
|
+
if (!(accessory instanceof PlatformAccessory)) {
|
|
201
|
+
throw new TypeError(`${pluginIdentifier} - ${platformName} attempt to unregister an accessory that isn't PlatformAccessory!`);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
this.emit("unregisterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES */, accessories);
|
|
205
|
+
}
|
|
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
|
+
isMatterAvailable() {
|
|
211
|
+
return semver.gte(this.serverVersion, '2.0.0-alpha.0');
|
|
212
|
+
}
|
|
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
|
+
isMatterEnabled() {
|
|
220
|
+
return this.matterEnabled;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.spec.d.ts","sourceRoot":"","sources":["../src/api.spec.ts"],"names":[],"mappings":""}
|
package/dist/api.spec.js
ADDED
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { Service } from 'hap-nodejs';
|
|
2
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { HomebridgeAPI } from './api.js';
|
|
4
|
+
const api = new HomebridgeAPI();
|
|
5
|
+
const emitSpy = vi.spyOn(api, 'emit');
|
|
6
|
+
class ExampleAccessory {
|
|
7
|
+
getServices() {
|
|
8
|
+
return [new Service.Switch('TestSwitch')];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
class ExamplePlatform {
|
|
12
|
+
configureAccessory() {
|
|
13
|
+
// do nothing
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const pluginName = 'homebridge-example';
|
|
17
|
+
const accessoryName = 'MyCoolAccessory';
|
|
18
|
+
const platformName = 'MyCoolPlatform';
|
|
19
|
+
describe('homebridgeAPI', () => {
|
|
20
|
+
describe('homebridgeAPI.prototype.registerAccessory', () => {
|
|
21
|
+
it('should register accessory with legacy style signature', () => {
|
|
22
|
+
api.registerAccessory(pluginName, accessoryName, ExampleAccessory);
|
|
23
|
+
expect(emitSpy).toHaveBeenLastCalledWith("registerAccessory" /* InternalAPIEvent.REGISTER_ACCESSORY */, accessoryName, ExampleAccessory, pluginName);
|
|
24
|
+
});
|
|
25
|
+
it('should register accessory without passing plugin name', () => {
|
|
26
|
+
api.registerAccessory(accessoryName, ExampleAccessory);
|
|
27
|
+
expect(emitSpy).toHaveBeenLastCalledWith("registerAccessory" /* InternalAPIEvent.REGISTER_ACCESSORY */, accessoryName, ExampleAccessory);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('homebridgeAPI.prototype.registerPlatform', () => {
|
|
31
|
+
it('should register platform with legacy style signature', () => {
|
|
32
|
+
api.registerPlatform(pluginName, platformName, ExamplePlatform);
|
|
33
|
+
expect(emitSpy).toHaveBeenLastCalledWith("registerPlatform" /* InternalAPIEvent.REGISTER_PLATFORM */, platformName, ExamplePlatform, pluginName);
|
|
34
|
+
});
|
|
35
|
+
it('should register platform without passing plugin name', () => {
|
|
36
|
+
api.registerPlatform(platformName, ExamplePlatform);
|
|
37
|
+
expect(emitSpy).toHaveBeenLastCalledWith("registerPlatform" /* InternalAPIEvent.REGISTER_PLATFORM */, platformName, ExamplePlatform);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('matter API', () => {
|
|
41
|
+
const matterPluginName = 'homebridge-matter-example';
|
|
42
|
+
const matterPlatformName = 'MatterExamplePlatform';
|
|
43
|
+
describe('api.matter property access', () => {
|
|
44
|
+
it('should expose matter API', () => {
|
|
45
|
+
expect(api.matter).toBeDefined();
|
|
46
|
+
expect(typeof api.matter).toBe('object');
|
|
47
|
+
});
|
|
48
|
+
it('should expose uuid generator (alias of hap.uuid)', () => {
|
|
49
|
+
expect(api.matter.uuid).toBeDefined();
|
|
50
|
+
expect(api.matter.uuid).toBe(api.hap.uuid);
|
|
51
|
+
});
|
|
52
|
+
it('should expose deviceTypes', () => {
|
|
53
|
+
expect(api.matter.deviceTypes).toBeDefined();
|
|
54
|
+
expect(typeof api.matter.deviceTypes).toBe('object');
|
|
55
|
+
});
|
|
56
|
+
it('should expose clusters', () => {
|
|
57
|
+
expect(api.matter.clusters).toBeDefined();
|
|
58
|
+
expect(typeof api.matter.clusters).toBe('object');
|
|
59
|
+
});
|
|
60
|
+
it('should expose clusterNames', () => {
|
|
61
|
+
expect(api.matter.clusterNames).toBeDefined();
|
|
62
|
+
expect(typeof api.matter.clusterNames).toBe('object');
|
|
63
|
+
});
|
|
64
|
+
it('should expose types', () => {
|
|
65
|
+
expect(api.matter.types).toBeDefined();
|
|
66
|
+
expect(typeof api.matter.types).toBe('object');
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('api.matter.registerPlatformAccessories', () => {
|
|
70
|
+
it('should register Matter platform accessories', () => {
|
|
71
|
+
const matterAccessories = [
|
|
72
|
+
{
|
|
73
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
74
|
+
displayName: 'Test Light 1',
|
|
75
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
76
|
+
serialNumber: 'SN-001',
|
|
77
|
+
manufacturer: 'Test Manufacturer',
|
|
78
|
+
model: 'Test Model',
|
|
79
|
+
clusters: {
|
|
80
|
+
onOff: {
|
|
81
|
+
onOff: false,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
api.matter.registerPlatformAccessories(matterPluginName, matterPlatformName, matterAccessories);
|
|
87
|
+
expect(emitSpy).toHaveBeenLastCalledWith("registerMatterPlatformAccessories" /* InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES */, matterPluginName, matterPlatformName, matterAccessories);
|
|
88
|
+
});
|
|
89
|
+
it('should register multiple Matter platform accessories', () => {
|
|
90
|
+
const matterAccessories = [
|
|
91
|
+
{
|
|
92
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
93
|
+
displayName: 'Test Light 1',
|
|
94
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
95
|
+
serialNumber: 'SN-001',
|
|
96
|
+
manufacturer: 'Test',
|
|
97
|
+
model: 'Test',
|
|
98
|
+
clusters: { onOff: { onOff: false } },
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
uuid: api.matter.uuid.generate('test-light-2'),
|
|
102
|
+
displayName: 'Test Light 2',
|
|
103
|
+
deviceType: api.matter.deviceTypes.DimmableLight,
|
|
104
|
+
serialNumber: 'SN-002',
|
|
105
|
+
manufacturer: 'Test',
|
|
106
|
+
model: 'Test',
|
|
107
|
+
clusters: {
|
|
108
|
+
onOff: { onOff: true },
|
|
109
|
+
levelControl: { currentLevel: 100 },
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
];
|
|
113
|
+
api.matter.registerPlatformAccessories(matterPluginName, matterPlatformName, matterAccessories);
|
|
114
|
+
expect(emitSpy).toHaveBeenLastCalledWith("registerMatterPlatformAccessories" /* InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES */, matterPluginName, matterPlatformName, matterAccessories);
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe('api.matter.updatePlatformAccessories', () => {
|
|
118
|
+
it('should update Matter platform accessories', () => {
|
|
119
|
+
const matterAccessories = [
|
|
120
|
+
{
|
|
121
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
122
|
+
displayName: 'Updated Light Name',
|
|
123
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
124
|
+
serialNumber: 'SN-001',
|
|
125
|
+
manufacturer: 'Updated Manufacturer',
|
|
126
|
+
model: 'Updated Model',
|
|
127
|
+
firmwareRevision: '2.0.0',
|
|
128
|
+
clusters: { onOff: { onOff: true } },
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
api.matter.updatePlatformAccessories(matterAccessories);
|
|
132
|
+
expect(emitSpy).toHaveBeenLastCalledWith("updateMatterPlatformAccessories" /* InternalAPIEvent.UPDATE_MATTER_PLATFORM_ACCESSORIES */, matterAccessories);
|
|
133
|
+
});
|
|
134
|
+
it('should update multiple Matter platform accessories', () => {
|
|
135
|
+
const matterAccessories = [
|
|
136
|
+
{
|
|
137
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
138
|
+
displayName: 'Light 1 - Updated',
|
|
139
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
140
|
+
serialNumber: 'SN-001',
|
|
141
|
+
manufacturer: 'Test',
|
|
142
|
+
model: 'Test',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
uuid: api.matter.uuid.generate('test-light-2'),
|
|
146
|
+
displayName: 'Light 2 - Updated',
|
|
147
|
+
deviceType: api.matter.deviceTypes.DimmableLight,
|
|
148
|
+
serialNumber: 'SN-002',
|
|
149
|
+
manufacturer: 'Test',
|
|
150
|
+
model: 'Test',
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
api.matter.updatePlatformAccessories(matterAccessories);
|
|
154
|
+
expect(emitSpy).toHaveBeenLastCalledWith("updateMatterPlatformAccessories" /* InternalAPIEvent.UPDATE_MATTER_PLATFORM_ACCESSORIES */, matterAccessories);
|
|
155
|
+
});
|
|
156
|
+
it('should handle updating single accessory', () => {
|
|
157
|
+
const accessory = {
|
|
158
|
+
uuid: api.matter.uuid.generate('test-vacuum'),
|
|
159
|
+
displayName: 'Kitchen Vacuum - Renamed',
|
|
160
|
+
deviceType: api.matter.deviceTypes.RoboticVacuumCleaner,
|
|
161
|
+
serialNumber: 'VAC-001',
|
|
162
|
+
manufacturer: 'Test',
|
|
163
|
+
model: 'V2',
|
|
164
|
+
firmwareRevision: '3.1.0',
|
|
165
|
+
};
|
|
166
|
+
api.matter.updatePlatformAccessories([accessory]);
|
|
167
|
+
expect(emitSpy).toHaveBeenLastCalledWith("updateMatterPlatformAccessories" /* InternalAPIEvent.UPDATE_MATTER_PLATFORM_ACCESSORIES */, [accessory]);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('api.matter.unregisterPlatformAccessories', () => {
|
|
171
|
+
it('should unregister Matter platform accessories', () => {
|
|
172
|
+
const matterAccessories = [
|
|
173
|
+
{
|
|
174
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
175
|
+
displayName: 'Test Light 1',
|
|
176
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
177
|
+
serialNumber: 'SN-001',
|
|
178
|
+
manufacturer: 'Test',
|
|
179
|
+
model: 'Test',
|
|
180
|
+
},
|
|
181
|
+
];
|
|
182
|
+
api.matter.unregisterPlatformAccessories(matterPluginName, matterPlatformName, matterAccessories);
|
|
183
|
+
expect(emitSpy).toHaveBeenLastCalledWith("unregisterMatterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES */, matterPluginName, matterPlatformName, matterAccessories);
|
|
184
|
+
});
|
|
185
|
+
it('should unregister multiple Matter platform accessories', () => {
|
|
186
|
+
const matterAccessories = [
|
|
187
|
+
{
|
|
188
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
189
|
+
displayName: 'Light 1',
|
|
190
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
191
|
+
serialNumber: 'SN-001',
|
|
192
|
+
manufacturer: 'Test',
|
|
193
|
+
model: 'Test',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
uuid: api.matter.uuid.generate('test-light-2'),
|
|
197
|
+
displayName: 'Light 2',
|
|
198
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
199
|
+
serialNumber: 'SN-002',
|
|
200
|
+
manufacturer: 'Test',
|
|
201
|
+
model: 'Test',
|
|
202
|
+
},
|
|
203
|
+
];
|
|
204
|
+
api.matter.unregisterPlatformAccessories(matterPluginName, matterPlatformName, matterAccessories);
|
|
205
|
+
expect(emitSpy).toHaveBeenLastCalledWith("unregisterMatterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES */, matterPluginName, matterPlatformName, matterAccessories);
|
|
206
|
+
});
|
|
207
|
+
it('should automatically unregister RoboticVacuumCleaner as external accessory', () => {
|
|
208
|
+
const vacuumAccessory = {
|
|
209
|
+
uuid: api.matter.uuid.generate('test-vacuum-1'),
|
|
210
|
+
displayName: 'Test Vacuum',
|
|
211
|
+
deviceType: api.matter.deviceTypes.RoboticVacuumCleaner,
|
|
212
|
+
serialNumber: 'SN-VAC-001',
|
|
213
|
+
manufacturer: 'Test',
|
|
214
|
+
model: 'Test',
|
|
215
|
+
};
|
|
216
|
+
api.matter.unregisterPlatformAccessories(matterPluginName, matterPlatformName, [vacuumAccessory]);
|
|
217
|
+
expect(emitSpy).toHaveBeenLastCalledWith("unregisterExternalMatterAccessories" /* InternalAPIEvent.UNREGISTER_EXTERNAL_MATTER_ACCESSORIES */, [vacuumAccessory]);
|
|
218
|
+
});
|
|
219
|
+
it('should split unregister into normal and external based on device type', () => {
|
|
220
|
+
emitSpy.mockClear();
|
|
221
|
+
const mixedAccessories = [
|
|
222
|
+
{
|
|
223
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
224
|
+
displayName: 'Light 1',
|
|
225
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
226
|
+
serialNumber: 'SN-001',
|
|
227
|
+
manufacturer: 'Test',
|
|
228
|
+
model: 'Test',
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
uuid: api.matter.uuid.generate('test-vacuum-1'),
|
|
232
|
+
displayName: 'Vacuum 1',
|
|
233
|
+
deviceType: api.matter.deviceTypes.RoboticVacuumCleaner,
|
|
234
|
+
serialNumber: 'SN-002',
|
|
235
|
+
manufacturer: 'Test',
|
|
236
|
+
model: 'Test',
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
uuid: api.matter.uuid.generate('test-light-2'),
|
|
240
|
+
displayName: 'Light 2',
|
|
241
|
+
deviceType: api.matter.deviceTypes.DimmableLight,
|
|
242
|
+
serialNumber: 'SN-003',
|
|
243
|
+
manufacturer: 'Test',
|
|
244
|
+
model: 'Test',
|
|
245
|
+
},
|
|
246
|
+
];
|
|
247
|
+
api.matter.unregisterPlatformAccessories(matterPluginName, matterPlatformName, mixedAccessories);
|
|
248
|
+
expect(emitSpy).toHaveBeenCalledTimes(2);
|
|
249
|
+
const calls = emitSpy.mock.calls;
|
|
250
|
+
const unregisterCall = calls.find(call => call[0] === "unregisterMatterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES */);
|
|
251
|
+
const unregisterExternalCall = calls.find(call => call[0] === "unregisterExternalMatterAccessories" /* InternalAPIEvent.UNREGISTER_EXTERNAL_MATTER_ACCESSORIES */);
|
|
252
|
+
expect(unregisterCall).toBeDefined();
|
|
253
|
+
expect(unregisterCall[3]).toHaveLength(2);
|
|
254
|
+
expect(unregisterCall[3][0].displayName).toBe('Light 1');
|
|
255
|
+
expect(unregisterCall[3][1].displayName).toBe('Light 2');
|
|
256
|
+
expect(unregisterExternalCall).toBeDefined();
|
|
257
|
+
expect(unregisterExternalCall[1]).toHaveLength(1);
|
|
258
|
+
expect(unregisterExternalCall[1][0].displayName).toBe('Vacuum 1');
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
describe('registerPlatformAccessories - external device handling', () => {
|
|
262
|
+
it('should automatically publish RoboticVacuumCleaner as external accessory', () => {
|
|
263
|
+
const vacuumAccessory = {
|
|
264
|
+
uuid: api.matter.uuid.generate('test-vacuum-1'),
|
|
265
|
+
displayName: 'Test Vacuum',
|
|
266
|
+
deviceType: api.matter.deviceTypes.RoboticVacuumCleaner,
|
|
267
|
+
serialNumber: 'SN-VAC-001',
|
|
268
|
+
manufacturer: 'Test Manufacturer',
|
|
269
|
+
model: 'Vacuum Model',
|
|
270
|
+
clusters: {
|
|
271
|
+
onOff: { onOff: false },
|
|
272
|
+
rvcRunMode: { currentMode: 0 },
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
api.matter.registerPlatformAccessories(matterPluginName, matterPlatformName, [vacuumAccessory]);
|
|
276
|
+
expect(emitSpy).toHaveBeenLastCalledWith("publishExternalMatterAccessories" /* InternalAPIEvent.PUBLISH_EXTERNAL_MATTER_ACCESSORIES */, expect.arrayContaining([
|
|
277
|
+
expect.objectContaining({
|
|
278
|
+
uuid: vacuumAccessory.uuid,
|
|
279
|
+
displayName: 'Test Vacuum',
|
|
280
|
+
_associatedPlugin: matterPluginName,
|
|
281
|
+
}),
|
|
282
|
+
]), expect.any(String));
|
|
283
|
+
});
|
|
284
|
+
it('should split accessories into normal and external based on device type', () => {
|
|
285
|
+
emitSpy.mockClear();
|
|
286
|
+
const mixedAccessories = [
|
|
287
|
+
{
|
|
288
|
+
uuid: api.matter.uuid.generate('test-light-1'),
|
|
289
|
+
displayName: 'Light 1',
|
|
290
|
+
deviceType: api.matter.deviceTypes.OnOffLight,
|
|
291
|
+
serialNumber: 'SN-001',
|
|
292
|
+
manufacturer: 'Test',
|
|
293
|
+
model: 'Test',
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
uuid: api.matter.uuid.generate('test-vacuum-1'),
|
|
297
|
+
displayName: 'Vacuum 1',
|
|
298
|
+
deviceType: api.matter.deviceTypes.RoboticVacuumCleaner,
|
|
299
|
+
serialNumber: 'SN-002',
|
|
300
|
+
manufacturer: 'Test',
|
|
301
|
+
model: 'Test',
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
uuid: api.matter.uuid.generate('test-light-2'),
|
|
305
|
+
displayName: 'Light 2',
|
|
306
|
+
deviceType: api.matter.deviceTypes.DimmableLight,
|
|
307
|
+
serialNumber: 'SN-003',
|
|
308
|
+
manufacturer: 'Test',
|
|
309
|
+
model: 'Test',
|
|
310
|
+
},
|
|
311
|
+
];
|
|
312
|
+
api.matter.registerPlatformAccessories(matterPluginName, matterPlatformName, mixedAccessories);
|
|
313
|
+
expect(emitSpy).toHaveBeenCalledTimes(2);
|
|
314
|
+
const calls = emitSpy.mock.calls;
|
|
315
|
+
const registerCall = calls.find(call => call[0] === "registerMatterPlatformAccessories" /* InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES */);
|
|
316
|
+
const publishCall = calls.find(call => call[0] === "publishExternalMatterAccessories" /* InternalAPIEvent.PUBLISH_EXTERNAL_MATTER_ACCESSORIES */);
|
|
317
|
+
expect(registerCall).toBeDefined();
|
|
318
|
+
expect(registerCall[3]).toHaveLength(2);
|
|
319
|
+
expect(registerCall[3][0].displayName).toBe('Light 1');
|
|
320
|
+
expect(registerCall[3][1].displayName).toBe('Light 2');
|
|
321
|
+
expect(publishCall).toBeDefined();
|
|
322
|
+
expect(publishCall[1]).toHaveLength(1);
|
|
323
|
+
expect(publishCall[1][0].displayName).toBe('Vacuum 1');
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
describe('api.matter.updateAccessoryState', () => {
|
|
327
|
+
it('should update Matter accessory state', () => {
|
|
328
|
+
const uuid = api.matter.uuid.generate('test-light-update');
|
|
329
|
+
const cluster = api.matter.clusterNames.OnOff;
|
|
330
|
+
const attributes = { onOff: true };
|
|
331
|
+
api.matter.updateAccessoryState(uuid, cluster, attributes);
|
|
332
|
+
expect(emitSpy).toHaveBeenLastCalledWith("updateMatterAccessoryState" /* InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE */, uuid, cluster, attributes, undefined);
|
|
333
|
+
});
|
|
334
|
+
it('should update Matter accessory state for specific part', () => {
|
|
335
|
+
const uuid = api.matter.uuid.generate('test-power-strip');
|
|
336
|
+
const cluster = api.matter.clusterNames.OnOff;
|
|
337
|
+
const attributes = { onOff: true };
|
|
338
|
+
const partId = 'outlet-2';
|
|
339
|
+
api.matter.updateAccessoryState(uuid, cluster, attributes, partId);
|
|
340
|
+
expect(emitSpy).toHaveBeenLastCalledWith("updateMatterAccessoryState" /* InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE */, uuid, cluster, attributes, partId);
|
|
341
|
+
});
|
|
342
|
+
it('should update different cluster types', () => {
|
|
343
|
+
const uuid = api.matter.uuid.generate('test-dimmable-light');
|
|
344
|
+
// Update OnOff cluster
|
|
345
|
+
api.matter.updateAccessoryState(uuid, api.matter.clusterNames.OnOff, { onOff: true });
|
|
346
|
+
expect(emitSpy).toHaveBeenCalledWith("updateMatterAccessoryState" /* InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE */, uuid, api.matter.clusterNames.OnOff, { onOff: true }, undefined);
|
|
347
|
+
// Update LevelControl cluster
|
|
348
|
+
api.matter.updateAccessoryState(uuid, api.matter.clusterNames.LevelControl, { currentLevel: 200 });
|
|
349
|
+
expect(emitSpy).toHaveBeenLastCalledWith("updateMatterAccessoryState" /* InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE */, uuid, api.matter.clusterNames.LevelControl, { currentLevel: 200 }, undefined);
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
describe('api.matter.getAccessoryState', () => {
|
|
353
|
+
it('should have getAccessoryState method', () => {
|
|
354
|
+
expect(typeof api.matter.getAccessoryState).toBe('function');
|
|
355
|
+
});
|
|
356
|
+
it('should accept uuid and cluster parameters', () => {
|
|
357
|
+
const uuid = api.matter.uuid.generate('test-light-get');
|
|
358
|
+
const cluster = api.matter.clusterNames.OnOff;
|
|
359
|
+
// Just verify it can be called without error
|
|
360
|
+
// Actual state retrieval requires MatterServer to be running
|
|
361
|
+
expect(() => api.matter.getAccessoryState(uuid, cluster)).not.toThrow();
|
|
362
|
+
});
|
|
363
|
+
it('should accept optional partId parameter', () => {
|
|
364
|
+
const uuid = api.matter.uuid.generate('test-power-strip-get');
|
|
365
|
+
const cluster = api.matter.clusterNames.OnOff;
|
|
366
|
+
const partId = 'outlet-1';
|
|
367
|
+
expect(() => api.matter.getAccessoryState(uuid, cluster, partId)).not.toThrow();
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
describe('matter cluster names', () => {
|
|
371
|
+
it('should include common cluster names', () => {
|
|
372
|
+
expect(api.matter.clusterNames.OnOff).toBe('onOff');
|
|
373
|
+
expect(api.matter.clusterNames.LevelControl).toBe('levelControl');
|
|
374
|
+
expect(api.matter.clusterNames.ColorControl).toBe('colorControl');
|
|
375
|
+
expect(api.matter.clusterNames.DoorLock).toBe('doorLock');
|
|
376
|
+
expect(api.matter.clusterNames.Thermostat).toBe('thermostat');
|
|
377
|
+
expect(api.matter.clusterNames.WindowCovering).toBe('windowCovering');
|
|
378
|
+
expect(api.matter.clusterNames.FanControl).toBe('fanControl');
|
|
379
|
+
});
|
|
380
|
+
it('should include RVC cluster names', () => {
|
|
381
|
+
expect(api.matter.clusterNames.RvcRunMode).toBe('rvcRunMode');
|
|
382
|
+
expect(api.matter.clusterNames.RvcCleanMode).toBe('rvcCleanMode');
|
|
383
|
+
expect(api.matter.clusterNames.RvcOperationalState).toBe('rvcOperationalState');
|
|
384
|
+
expect(api.matter.clusterNames.ServiceArea).toBe('serviceArea');
|
|
385
|
+
});
|
|
386
|
+
});
|
|
387
|
+
describe('matter device types', () => {
|
|
388
|
+
it('should include common device types', () => {
|
|
389
|
+
expect(api.matter.deviceTypes.OnOffLight).toBeDefined();
|
|
390
|
+
expect(api.matter.deviceTypes.DimmableLight).toBeDefined();
|
|
391
|
+
expect(api.matter.deviceTypes.ColorTemperatureLight).toBeDefined();
|
|
392
|
+
expect(api.matter.deviceTypes.ExtendedColorLight).toBeDefined();
|
|
393
|
+
expect(api.matter.deviceTypes.OnOffOutlet).toBeDefined();
|
|
394
|
+
expect(api.matter.deviceTypes.OnOffSwitch).toBeDefined();
|
|
395
|
+
expect(api.matter.deviceTypes.DoorLock).toBeDefined();
|
|
396
|
+
expect(api.matter.deviceTypes.Thermostat).toBeDefined();
|
|
397
|
+
expect(api.matter.deviceTypes.WindowCovering).toBeDefined();
|
|
398
|
+
expect(api.matter.deviceTypes.Fan).toBeDefined();
|
|
399
|
+
});
|
|
400
|
+
it('should include specialized device types', () => {
|
|
401
|
+
expect(api.matter.deviceTypes.RoboticVacuumCleaner).toBeDefined();
|
|
402
|
+
expect(api.matter.deviceTypes.ContactSensor).toBeDefined();
|
|
403
|
+
expect(api.matter.deviceTypes.LightSensor).toBeDefined();
|
|
404
|
+
expect(api.matter.deviceTypes.MotionSensor).toBeDefined();
|
|
405
|
+
expect(api.matter.deviceTypes.TemperatureSensor).toBeDefined();
|
|
406
|
+
expect(api.matter.deviceTypes.HumiditySensor).toBeDefined();
|
|
407
|
+
expect(api.matter.deviceTypes.LeakSensor).toBeDefined();
|
|
408
|
+
expect(api.matter.deviceTypes.SmokeSensor).toBeDefined();
|
|
409
|
+
});
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
//# sourceMappingURL=api.spec.js.map
|