homebridge 2.0.0-beta.34 → 2.0.0-beta.36

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.
Files changed (284) hide show
  1. package/dist/api.d.ts +74 -32
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/api.js +48 -46
  4. package/dist/api.js.map +1 -1
  5. package/dist/api.spec.d.ts +2 -0
  6. package/dist/api.spec.d.ts.map +1 -0
  7. package/dist/api.spec.js +413 -0
  8. package/dist/api.spec.js.map +1 -0
  9. package/dist/childBridgeFork.d.ts +1 -18
  10. package/dist/childBridgeFork.d.ts.map +1 -1
  11. package/dist/childBridgeFork.js +21 -258
  12. package/dist/childBridgeFork.js.map +1 -1
  13. package/dist/externalPortService.d.ts +2 -9
  14. package/dist/externalPortService.d.ts.map +1 -1
  15. package/dist/externalPortService.js +20 -40
  16. package/dist/externalPortService.js.map +1 -1
  17. package/dist/index.d.ts +10 -10
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -3
  20. package/dist/index.js.map +1 -1
  21. package/dist/logger.spec.d.ts +2 -0
  22. package/dist/logger.spec.d.ts.map +1 -0
  23. package/dist/logger.spec.js +95 -0
  24. package/dist/logger.spec.js.map +1 -0
  25. package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
  26. package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
  27. package/dist/matter/ChildBridgeMatterManager.js +397 -0
  28. package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
  29. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
  30. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
  31. package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
  32. package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
  33. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
  34. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
  35. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
  36. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
  37. package/dist/matter/{matterServer.d.ts → MatterAPIImpl.d.ts} +203 -367
  38. package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
  39. package/dist/matter/MatterAPIImpl.js +305 -0
  40. package/dist/matter/MatterAPIImpl.js.map +1 -0
  41. package/dist/matter/MatterBridgeManager.d.ts +91 -0
  42. package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
  43. package/dist/matter/MatterBridgeManager.js +426 -0
  44. package/dist/matter/MatterBridgeManager.js.map +1 -0
  45. package/dist/matter/MatterConfigCollector.d.ts +26 -0
  46. package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
  47. package/dist/matter/MatterConfigCollector.js +78 -0
  48. package/dist/matter/MatterConfigCollector.js.map +1 -0
  49. package/dist/matter/{matterAccessoryCache.d.ts → accessoryCache.d.ts} +12 -3
  50. package/dist/matter/accessoryCache.d.ts.map +1 -0
  51. package/dist/matter/{matterAccessoryCache.js → accessoryCache.js} +32 -10
  52. package/dist/matter/accessoryCache.js.map +1 -0
  53. package/dist/matter/accessoryCache.spec.d.ts +2 -0
  54. package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
  55. package/dist/matter/accessoryCache.spec.js +452 -0
  56. package/dist/matter/accessoryCache.spec.js.map +1 -0
  57. package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
  58. package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
  59. package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
  60. package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
  61. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
  62. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
  63. package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
  64. package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
  65. package/dist/matter/behaviors/ColorControlBehavior.d.ts +64 -0
  66. package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
  67. package/dist/matter/behaviors/ColorControlBehavior.js +160 -0
  68. package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
  69. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
  70. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
  71. package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
  72. package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
  73. package/dist/matter/behaviors/DoorLockBehavior.d.ts +21 -0
  74. package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
  75. package/dist/matter/behaviors/DoorLockBehavior.js +49 -0
  76. package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
  77. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
  78. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
  79. package/dist/matter/behaviors/DoorLockBehavior.spec.js +108 -0
  80. package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
  81. package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
  82. package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
  83. package/dist/matter/behaviors/FanControlBehavior.js +45 -0
  84. package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
  85. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
  86. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
  87. package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
  88. package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
  89. package/dist/matter/behaviors/IdentifyBehavior.d.ts +21 -0
  90. package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
  91. package/dist/matter/behaviors/IdentifyBehavior.js +27 -0
  92. package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
  93. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
  94. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
  95. package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
  96. package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
  97. package/dist/matter/behaviors/LevelControlBehavior.d.ts +34 -0
  98. package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
  99. package/dist/matter/behaviors/LevelControlBehavior.js +75 -0
  100. package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
  101. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
  102. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
  103. package/dist/matter/behaviors/LevelControlBehavior.spec.js +140 -0
  104. package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
  105. package/dist/matter/behaviors/OnOffBehavior.d.ts +28 -0
  106. package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
  107. package/dist/matter/behaviors/OnOffBehavior.js +63 -0
  108. package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
  109. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
  110. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
  111. package/dist/matter/behaviors/OnOffBehavior.spec.js +116 -0
  112. package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
  113. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
  114. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
  115. package/dist/matter/behaviors/RvcCleanModeBehavior.js +27 -0
  116. package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
  117. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
  118. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
  119. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +56 -0
  120. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
  121. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +23 -0
  122. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
  123. package/dist/matter/behaviors/RvcOperationalStateBehavior.js +49 -0
  124. package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
  125. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
  126. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
  127. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
  128. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
  129. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
  130. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
  131. package/dist/matter/behaviors/RvcRunModeBehavior.js +27 -0
  132. package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
  133. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
  134. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
  135. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +56 -0
  136. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
  137. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +22 -0
  138. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
  139. package/dist/matter/behaviors/ServiceAreaBehavior.js +35 -0
  140. package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
  141. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
  142. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
  143. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +52 -0
  144. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
  145. package/dist/matter/behaviors/ThermostatBehavior.d.ts +23 -0
  146. package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
  147. package/dist/matter/behaviors/ThermostatBehavior.js +79 -0
  148. package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
  149. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
  150. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
  151. package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
  152. package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
  153. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +32 -0
  154. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
  155. package/dist/matter/behaviors/WindowCoveringBehavior.js +106 -0
  156. package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
  157. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
  158. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
  159. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
  160. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
  161. package/dist/matter/behaviors/index.d.ts +20 -0
  162. package/dist/matter/behaviors/index.d.ts.map +1 -0
  163. package/dist/matter/behaviors/index.js +21 -0
  164. package/dist/matter/behaviors/index.js.map +1 -0
  165. package/dist/matter/{matterConfigValidator.d.ts → configValidator.d.ts} +1 -1
  166. package/dist/matter/configValidator.d.ts.map +1 -0
  167. package/dist/matter/{matterConfigValidator.js → configValidator.js} +1 -1
  168. package/dist/matter/configValidator.js.map +1 -0
  169. package/dist/matter/configValidator.spec.d.ts +2 -0
  170. package/dist/matter/configValidator.spec.d.ts.map +1 -0
  171. package/dist/matter/configValidator.spec.js +390 -0
  172. package/dist/matter/configValidator.spec.js.map +1 -0
  173. package/dist/matter/errorHandler.d.ts +33 -0
  174. package/dist/matter/errorHandler.d.ts.map +1 -0
  175. package/dist/matter/errorHandler.js +113 -0
  176. package/dist/matter/errorHandler.js.map +1 -0
  177. package/dist/matter/errorHandler.spec.d.ts +2 -0
  178. package/dist/matter/errorHandler.spec.d.ts.map +1 -0
  179. package/dist/matter/errorHandler.spec.js +159 -0
  180. package/dist/matter/errorHandler.spec.js.map +1 -0
  181. package/dist/matter/index.d.ts +7 -4
  182. package/dist/matter/index.d.ts.map +1 -1
  183. package/dist/matter/index.js +7 -4
  184. package/dist/matter/index.js.map +1 -1
  185. package/dist/matter/{matterLogFormatter.d.ts → logFormatter.d.ts} +1 -1
  186. package/dist/matter/logFormatter.d.ts.map +1 -0
  187. package/dist/matter/{matterLogFormatter.js → logFormatter.js} +33 -6
  188. package/dist/matter/logFormatter.js.map +1 -0
  189. package/dist/matter/logFormatter.spec.d.ts +2 -0
  190. package/dist/matter/logFormatter.spec.d.ts.map +1 -0
  191. package/dist/matter/logFormatter.spec.js +284 -0
  192. package/dist/matter/logFormatter.spec.js.map +1 -0
  193. package/dist/matter/server.d.ts +350 -0
  194. package/dist/matter/server.d.ts.map +1 -0
  195. package/dist/matter/{matterServer.js → server.js} +533 -352
  196. package/dist/matter/server.js.map +1 -0
  197. package/dist/matter/{matterServerHelpers.d.ts → serverHelpers.d.ts} +2 -2
  198. package/dist/matter/serverHelpers.d.ts.map +1 -0
  199. package/dist/matter/{matterServerHelpers.js → serverHelpers.js} +11 -8
  200. package/dist/matter/serverHelpers.js.map +1 -0
  201. package/dist/matter/serverHelpers.spec.d.ts +2 -0
  202. package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
  203. package/dist/matter/serverHelpers.spec.js +521 -0
  204. package/dist/matter/serverHelpers.spec.js.map +1 -0
  205. package/dist/matter/{matterSharedTypes.d.ts → sharedTypes.d.ts} +4 -10
  206. package/dist/matter/sharedTypes.d.ts.map +1 -0
  207. package/dist/matter/{matterSharedTypes.js → sharedTypes.js} +4 -10
  208. package/dist/matter/sharedTypes.js.map +1 -0
  209. package/dist/matter/{matterStorage.d.ts → storage.d.ts} +9 -2
  210. package/dist/matter/storage.d.ts.map +1 -0
  211. package/dist/matter/{matterStorage.js → storage.js} +14 -5
  212. package/dist/matter/{matterStorage.js.map → storage.js.map} +1 -1
  213. package/dist/matter/storage.spec.d.ts +2 -0
  214. package/dist/matter/storage.spec.d.ts.map +1 -0
  215. package/dist/matter/storage.spec.js +570 -0
  216. package/dist/matter/storage.spec.js.map +1 -0
  217. package/dist/matter/typeHelpers.d.ts +45 -0
  218. package/dist/matter/typeHelpers.d.ts.map +1 -0
  219. package/dist/matter/typeHelpers.js +57 -0
  220. package/dist/matter/typeHelpers.js.map +1 -0
  221. package/dist/matter/typeHelpers.spec.d.ts +2 -0
  222. package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
  223. package/dist/matter/typeHelpers.spec.js +127 -0
  224. package/dist/matter/typeHelpers.spec.js.map +1 -0
  225. package/dist/matter/{matterTypes.d.ts → types.d.ts} +2 -2
  226. package/dist/matter/types.d.ts.map +1 -0
  227. package/dist/matter/{matterTypes.js → types.js} +1 -2
  228. package/dist/matter/types.js.map +1 -0
  229. package/dist/platformAccessory.spec.d.ts +2 -0
  230. package/dist/platformAccessory.spec.d.ts.map +1 -0
  231. package/dist/platformAccessory.spec.js +126 -0
  232. package/dist/platformAccessory.spec.js.map +1 -0
  233. package/dist/pluginManager.spec.d.ts +2 -0
  234. package/dist/pluginManager.spec.d.ts.map +1 -0
  235. package/dist/pluginManager.spec.js +43 -0
  236. package/dist/pluginManager.spec.js.map +1 -0
  237. package/dist/server.d.ts +4 -13
  238. package/dist/server.d.ts.map +1 -1
  239. package/dist/server.js +45 -333
  240. package/dist/server.js.map +1 -1
  241. package/dist/server.spec.d.ts +2 -0
  242. package/dist/server.spec.d.ts.map +1 -0
  243. package/dist/server.spec.js +57 -0
  244. package/dist/server.spec.js.map +1 -0
  245. package/dist/user.spec.d.ts +2 -0
  246. package/dist/user.spec.d.ts.map +1 -0
  247. package/dist/user.spec.js +31 -0
  248. package/dist/user.spec.js.map +1 -0
  249. package/dist/util/mac.spec.d.ts +2 -0
  250. package/dist/util/mac.spec.d.ts.map +1 -0
  251. package/dist/util/mac.spec.js +36 -0
  252. package/dist/util/mac.spec.js.map +1 -0
  253. package/dist/version.spec.d.ts +2 -0
  254. package/dist/version.spec.d.ts.map +1 -0
  255. package/dist/version.spec.js +20 -0
  256. package/dist/version.spec.js.map +1 -0
  257. package/package.json +4 -4
  258. package/dist/matter/matterAccessoryCache.d.ts.map +0 -1
  259. package/dist/matter/matterAccessoryCache.js.map +0 -1
  260. package/dist/matter/matterBehaviors.d.ts +0 -194
  261. package/dist/matter/matterBehaviors.d.ts.map +0 -1
  262. package/dist/matter/matterBehaviors.js +0 -665
  263. package/dist/matter/matterBehaviors.js.map +0 -1
  264. package/dist/matter/matterConfigValidator.d.ts.map +0 -1
  265. package/dist/matter/matterConfigValidator.js.map +0 -1
  266. package/dist/matter/matterErrorHandler.d.ts +0 -106
  267. package/dist/matter/matterErrorHandler.d.ts.map +0 -1
  268. package/dist/matter/matterErrorHandler.js +0 -495
  269. package/dist/matter/matterErrorHandler.js.map +0 -1
  270. package/dist/matter/matterLogFormatter.d.ts.map +0 -1
  271. package/dist/matter/matterLogFormatter.js.map +0 -1
  272. package/dist/matter/matterNetworkMonitor.d.ts +0 -68
  273. package/dist/matter/matterNetworkMonitor.d.ts.map +0 -1
  274. package/dist/matter/matterNetworkMonitor.js +0 -249
  275. package/dist/matter/matterNetworkMonitor.js.map +0 -1
  276. package/dist/matter/matterServer.d.ts.map +0 -1
  277. package/dist/matter/matterServer.js.map +0 -1
  278. package/dist/matter/matterServerHelpers.d.ts.map +0 -1
  279. package/dist/matter/matterServerHelpers.js.map +0 -1
  280. package/dist/matter/matterSharedTypes.d.ts.map +0 -1
  281. package/dist/matter/matterSharedTypes.js.map +0 -1
  282. package/dist/matter/matterStorage.d.ts.map +0 -1
  283. package/dist/matter/matterTypes.d.ts.map +0 -1
  284. package/dist/matter/matterTypes.js.map +0 -1
@@ -0,0 +1,160 @@
1
+ /**
2
+ * ColorControl Cluster Behavior
3
+ *
4
+ * Handles color control commands for RGB lights and color temperature lights
5
+ */
6
+ import { ColorControlServer } from '@matter/main/behaviors/color-control';
7
+ /**
8
+ * Custom ColorControl Server that calls plugin handlers
9
+ *
10
+ * ColorControl handles color changes for lights (hue, saturation, XY color, color temperature).
11
+ * Plugin developers can override these *Logic methods to handle color changes in their hardware.
12
+ *
13
+ * Features (Xy, ColorTemperature, HueSaturation) are added by the device type, not this behavior.
14
+ * This ensures each device only gets the features it needs.
15
+ */
16
+ export class HomebridgeColorControlServer extends ColorControlServer {
17
+ static registry;
18
+ /**
19
+ * Set the behavior registry (called once during server initialization)
20
+ */
21
+ static setRegistry(registry) {
22
+ this.registry = registry;
23
+ }
24
+ /**
25
+ * Called when color temperature is changed
26
+ * @param colorTemperatureMireds - Target color temperature in mireds (micro reciprocal degrees)
27
+ * @param transitionTime - Transition time in seconds (0 = as fast as possible)
28
+ */
29
+ moveToColorTemperatureLogic(colorTemperatureMireds, transitionTime) {
30
+ const endpointId = this.endpoint.id;
31
+ // Execute user handler (errors are logged by registry)
32
+ HomebridgeColorControlServer.registry.executeHandler(endpointId, 'colorControl', 'moveToColorTemperatureLogic', { colorTemperatureMireds, transitionTime }).catch(() => {
33
+ // Error already logged by registry
34
+ });
35
+ // Call base implementation
36
+ const result = super.moveToColorTemperatureLogic(colorTemperatureMireds, transitionTime);
37
+ // Sync color temperature to cache
38
+ const currentState = this.state;
39
+ if (currentState.colorTemperatureMireds !== undefined) {
40
+ HomebridgeColorControlServer.registry.syncStateToCache(endpointId, 'colorControl', {
41
+ colorTemperatureMireds: currentState.colorTemperatureMireds,
42
+ });
43
+ }
44
+ return result;
45
+ }
46
+ /**
47
+ * Called when hue and saturation are changed together
48
+ * @param hue - Target hue value (0-254 for normal hue, 0-65535 for enhanced hue)
49
+ * @param saturation - Target saturation value (0-254)
50
+ * @param transitionTime - Transition time in seconds (0 = as fast as possible)
51
+ */
52
+ moveToHueAndSaturationLogic(hue, saturation, transitionTime) {
53
+ const endpointId = this.endpoint.id;
54
+ // Execute user handler (errors are logged by registry)
55
+ HomebridgeColorControlServer.registry.executeHandler(endpointId, 'colorControl', 'moveToHueAndSaturationLogic', { hue, saturation, transitionTime }).catch(() => {
56
+ // Error already logged by registry
57
+ });
58
+ // Call base implementation
59
+ const result = super.moveToHueAndSaturationLogic(hue, saturation, transitionTime);
60
+ // Sync hue and saturation to cache
61
+ const currentState = this.state;
62
+ const stateUpdate = {};
63
+ if (currentState.currentHue !== undefined) {
64
+ stateUpdate.currentHue = currentState.currentHue;
65
+ }
66
+ if (currentState.currentSaturation !== undefined) {
67
+ stateUpdate.currentSaturation = currentState.currentSaturation;
68
+ }
69
+ HomebridgeColorControlServer.registry.syncStateToCache(endpointId, 'colorControl', stateUpdate);
70
+ return result;
71
+ }
72
+ /**
73
+ * Called when XY color coordinates are changed
74
+ * @param targetX - Target X value (0-65535 representing 0.0-1.0 in CIE color space)
75
+ * @param targetY - Target Y value (0-65535 representing 0.0-1.0 in CIE color space)
76
+ * @param transitionTime - Transition time in seconds (0 = as fast as possible)
77
+ */
78
+ moveToColorLogic(targetX, targetY, transitionTime) {
79
+ const endpointId = this.endpoint.id;
80
+ // Execute user handler (errors are logged by registry)
81
+ HomebridgeColorControlServer.registry.executeHandler(endpointId, 'colorControl', 'moveToColorLogic', { targetX, targetY, transitionTime }).catch(() => {
82
+ // Error already logged by registry
83
+ });
84
+ // Call base implementation
85
+ const result = super.moveToColorLogic(targetX, targetY, transitionTime);
86
+ // Sync XY color to cache
87
+ const currentState = this.state;
88
+ const stateUpdate = {};
89
+ if (currentState.currentX !== undefined) {
90
+ stateUpdate.currentX = currentState.currentX;
91
+ }
92
+ if (currentState.currentY !== undefined) {
93
+ stateUpdate.currentY = currentState.currentY;
94
+ }
95
+ HomebridgeColorControlServer.registry.syncStateToCache(endpointId, 'colorControl', stateUpdate);
96
+ return result;
97
+ }
98
+ /**
99
+ * Called when hue is changed individually
100
+ * @param targetHue - Target hue value
101
+ * @param direction - Direction to move (shortest, longest, up, down)
102
+ * @param transitionTime - Transition time in seconds
103
+ * @param isEnhancedHue - Whether this is enhanced hue (16-bit) or normal hue (8-bit)
104
+ */
105
+ moveToHueLogic(targetHue, direction, transitionTime, isEnhancedHue = false) {
106
+ const endpointId = this.endpoint.id;
107
+ // Execute user handler (errors are logged by registry)
108
+ HomebridgeColorControlServer.registry.executeHandler(endpointId, 'colorControl', 'moveToHueLogic', { targetHue, direction, transitionTime, isEnhancedHue }).catch(() => {
109
+ // Error already logged by registry
110
+ });
111
+ // Call base implementation
112
+ const result = super.moveToHueLogic(targetHue, direction, transitionTime, isEnhancedHue);
113
+ // Sync hue to cache
114
+ const currentState = this.state;
115
+ const stateUpdate = {};
116
+ if (isEnhancedHue && currentState.enhancedCurrentHue !== undefined) {
117
+ stateUpdate.enhancedCurrentHue = currentState.enhancedCurrentHue;
118
+ }
119
+ else if (currentState.currentHue !== undefined) {
120
+ stateUpdate.currentHue = currentState.currentHue;
121
+ }
122
+ HomebridgeColorControlServer.registry.syncStateToCache(endpointId, 'colorControl', stateUpdate);
123
+ return result;
124
+ }
125
+ /**
126
+ * Called when saturation is changed individually
127
+ * @param targetSaturation - Target saturation value (0-254)
128
+ * @param transitionTime - Transition time in seconds
129
+ */
130
+ moveToSaturationLogic(targetSaturation, transitionTime) {
131
+ const endpointId = this.endpoint.id;
132
+ // Execute user handler (errors are logged by registry)
133
+ HomebridgeColorControlServer.registry.executeHandler(endpointId, 'colorControl', 'moveToSaturationLogic', { targetSaturation, transitionTime }).catch(() => {
134
+ // Error already logged by registry
135
+ });
136
+ // Call base implementation
137
+ const result = super.moveToSaturationLogic(targetSaturation, transitionTime);
138
+ // Sync saturation to cache
139
+ const currentState = this.state;
140
+ if (currentState.currentSaturation !== undefined) {
141
+ HomebridgeColorControlServer.registry.syncStateToCache(endpointId, 'colorControl', {
142
+ currentSaturation: currentState.currentSaturation,
143
+ });
144
+ }
145
+ return result;
146
+ }
147
+ /**
148
+ * Called when all color movement should be stopped
149
+ */
150
+ stopAllColorMovement() {
151
+ const endpointId = this.endpoint.id;
152
+ // Execute user handler (errors are logged by registry)
153
+ HomebridgeColorControlServer.registry.executeHandler(endpointId, 'colorControl', 'stopAllColorMovement').catch(() => {
154
+ // Error already logged by registry
155
+ });
156
+ // Call base implementation
157
+ return super.stopAllColorMovement();
158
+ }
159
+ }
160
+ //# sourceMappingURL=ColorControlBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorControlBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ColorControlBehavior.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ColorControlBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorControlBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ColorControlBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { HomebridgeColorControlServer } from './ColorControlBehavior.js';
3
+ describe('homebridgeColorControlServer', () => {
4
+ describe('setRegistry', () => {
5
+ it('should set the registry', () => {
6
+ const newRegistry = {};
7
+ HomebridgeColorControlServer.setRegistry(newRegistry);
8
+ expect(true).toBe(true);
9
+ });
10
+ });
11
+ describe('behavior structure', () => {
12
+ it('should extend ColorControlServer', () => {
13
+ expect(HomebridgeColorControlServer.prototype).toBeDefined();
14
+ });
15
+ it('should have color control logic methods', () => {
16
+ // Check the *Logic methods that we actually override
17
+ expect(typeof HomebridgeColorControlServer.prototype.moveToHueLogic).toBe('function');
18
+ expect(typeof HomebridgeColorControlServer.prototype.moveToSaturationLogic).toBe('function');
19
+ expect(typeof HomebridgeColorControlServer.prototype.moveToHueAndSaturationLogic).toBe('function');
20
+ expect(typeof HomebridgeColorControlServer.prototype.moveToColorLogic).toBe('function');
21
+ expect(typeof HomebridgeColorControlServer.prototype.moveToColorTemperatureLogic).toBe('function');
22
+ expect(typeof HomebridgeColorControlServer.prototype.stopAllColorMovement).toBe('function');
23
+ });
24
+ });
25
+ });
26
+ // Note: ColorControlBehavior has complex color command overrides with state synchronization.
27
+ // Full unit testing would require mocking the entire Matter.js state machine.
28
+ // Integration tests would be more appropriate.
29
+ //# sourceMappingURL=ColorControlBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorControlBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ColorControlBehavior.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAExE,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,WAAW,GAAG,EAAsB,CAAA;YAC1C,4BAA4B,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YACrD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QAC9D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,qDAAqD;YACrD,MAAM,CAAC,OAAO,4BAA4B,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACrF,MAAM,CAAC,OAAO,4BAA4B,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC5F,MAAM,CAAC,OAAO,4BAA4B,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAClG,MAAM,CAAC,OAAO,4BAA4B,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACvF,MAAM,CAAC,OAAO,4BAA4B,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAClG,MAAM,CAAC,OAAO,4BAA4B,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC7F,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,6FAA6F;AAC7F,8EAA8E;AAC9E,+CAA+C"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * DoorLock Cluster Behavior
3
+ *
4
+ * Handles door lock commands for smart locks
5
+ */
6
+ import type { MaybePromise } from '@matter/main';
7
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
8
+ import { DoorLockServer } from '@matter/main/behaviors/door-lock';
9
+ /**
10
+ * Custom DoorLock Server that calls plugin handlers
11
+ */
12
+ export declare class HomebridgeDoorLockServer extends DoorLockServer {
13
+ private static registry;
14
+ /**
15
+ * Set the behavior registry (called once during server initialization)
16
+ */
17
+ static setRegistry(registry: BehaviorRegistry): void;
18
+ lockDoor(): MaybePromise;
19
+ unlockDoor(): MaybePromise;
20
+ }
21
+ //# sourceMappingURL=DoorLockBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoorLockBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/DoorLockBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEjE;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI3C,QAAQ,IAAI,YAAY;IAoBxB,UAAU,IAAI,YAAY;CAmBpC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * DoorLock Cluster Behavior
3
+ *
4
+ * Handles door lock commands for smart locks
5
+ */
6
+ import { DoorLockServer } from '@matter/main/behaviors/door-lock';
7
+ /**
8
+ * Custom DoorLock Server that calls plugin handlers
9
+ */
10
+ export class HomebridgeDoorLockServer extends DoorLockServer {
11
+ static registry;
12
+ /**
13
+ * Set the behavior registry (called once during server initialization)
14
+ */
15
+ static setRegistry(registry) {
16
+ this.registry = registry;
17
+ }
18
+ lockDoor() {
19
+ const endpointId = this.endpoint.id;
20
+ // Execute user handler (errors are logged by registry)
21
+ HomebridgeDoorLockServer.registry.executeHandler(endpointId, 'doorLock', 'lockDoor').catch(() => {
22
+ // Error already logged by registry
23
+ });
24
+ // Call base implementation
25
+ const result = super.lockDoor();
26
+ // Sync lock state to cache
27
+ const currentState = this.state;
28
+ if (currentState.lockState !== undefined) {
29
+ HomebridgeDoorLockServer.registry.syncStateToCache(endpointId, 'doorLock', { lockState: currentState.lockState });
30
+ }
31
+ return result;
32
+ }
33
+ unlockDoor() {
34
+ const endpointId = this.endpoint.id;
35
+ // Execute user handler (errors are logged by registry)
36
+ HomebridgeDoorLockServer.registry.executeHandler(endpointId, 'doorLock', 'unlockDoor').catch(() => {
37
+ // Error already logged by registry
38
+ });
39
+ // Call base implementation
40
+ const result = super.unlockDoor();
41
+ // Sync lock state to cache
42
+ const currentState = this.state;
43
+ if (currentState.lockState !== undefined) {
44
+ HomebridgeDoorLockServer.registry.syncStateToCache(endpointId, 'doorLock', { lockState: currentState.lockState });
45
+ }
46
+ return result;
47
+ }
48
+ }
49
+ //# sourceMappingURL=DoorLockBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoorLockBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/DoorLockBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAA;AAEjE;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IAClD,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,QAAQ;QACf,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,wBAAwB,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC9F,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,2BAA2B;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAE/B,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAY,CAAA;QACtC,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACzC,wBAAwB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAA;QACnH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAEQ,UAAU;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,wBAAwB,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChG,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,2BAA2B;QAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAA;QAEjC,2BAA2B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAY,CAAA;QACtC,IAAI,YAAY,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACzC,wBAAwB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC,CAAA;QACnH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=DoorLockBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoorLockBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/DoorLockBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,108 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { HomebridgeDoorLockServer } from './DoorLockBehavior.js';
3
+ describe('homebridgeDoorLockServer', () => {
4
+ let mockRegistry;
5
+ let behavior;
6
+ let mockEndpoint;
7
+ let mockState;
8
+ beforeEach(() => {
9
+ // Create mock registry
10
+ mockRegistry = {
11
+ executeHandler: vi.fn().mockResolvedValue(true),
12
+ syncStateToCache: vi.fn(),
13
+ };
14
+ // Set registry on behavior class
15
+ HomebridgeDoorLockServer.setRegistry(mockRegistry);
16
+ // Create mock state
17
+ mockState = { lockState: 1 }; // 1 = locked, 2 = unlocked
18
+ // Create mock endpoint
19
+ mockEndpoint = {
20
+ id: 'test-endpoint-123',
21
+ };
22
+ // Create behavior instance with mocked properties
23
+ behavior = Object.create(HomebridgeDoorLockServer.prototype);
24
+ Object.defineProperty(behavior, 'endpoint', {
25
+ get: () => mockEndpoint,
26
+ configurable: true,
27
+ });
28
+ Object.defineProperty(behavior, 'state', {
29
+ get: () => mockState,
30
+ set: (value) => {
31
+ mockState = value;
32
+ },
33
+ configurable: true,
34
+ });
35
+ });
36
+ describe('setRegistry', () => {
37
+ it('should set the registry', () => {
38
+ const newRegistry = {};
39
+ HomebridgeDoorLockServer.setRegistry(newRegistry);
40
+ expect(true).toBe(true);
41
+ });
42
+ });
43
+ describe('lockDoor', () => {
44
+ it('should execute handler for lockDoor command', async () => {
45
+ await behavior.lockDoor();
46
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'doorLock', 'lockDoor');
47
+ });
48
+ it('should sync lockState to cache after locking', async () => {
49
+ mockState.lockState = 1; // locked
50
+ await behavior.lockDoor();
51
+ expect(mockRegistry.syncStateToCache).toHaveBeenCalledWith('test-endpoint-123', 'doorLock', { lockState: 1 });
52
+ });
53
+ it('should handle handler execution errors gracefully', () => {
54
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
55
+ // Should not throw (returns undefined, not a promise)
56
+ expect(() => behavior.lockDoor()).not.toThrow();
57
+ });
58
+ it('should sync state even if handler fails', async () => {
59
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
60
+ mockState.lockState = 1;
61
+ await behavior.lockDoor();
62
+ expect(mockRegistry.syncStateToCache).toHaveBeenCalledWith('test-endpoint-123', 'doorLock', { lockState: 1 });
63
+ });
64
+ it('should check lockState before syncing', async () => {
65
+ // When lockState is defined, it syncs
66
+ mockState.lockState = 1;
67
+ await behavior.lockDoor();
68
+ expect(mockRegistry.syncStateToCache).toHaveBeenCalled();
69
+ });
70
+ });
71
+ describe('unlockDoor', () => {
72
+ it('should execute handler for unlockDoor command', async () => {
73
+ await behavior.unlockDoor();
74
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'doorLock', 'unlockDoor');
75
+ });
76
+ it('should sync lockState to cache after unlocking', async () => {
77
+ mockState.lockState = 2; // unlocked
78
+ await behavior.unlockDoor();
79
+ expect(mockRegistry.syncStateToCache).toHaveBeenCalledWith('test-endpoint-123', 'doorLock', { lockState: 2 });
80
+ });
81
+ it('should handle handler execution errors gracefully', () => {
82
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
83
+ // Should not throw (returns undefined, not a promise)
84
+ expect(() => behavior.unlockDoor()).not.toThrow();
85
+ });
86
+ it('should sync state even if handler fails', async () => {
87
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
88
+ mockState.lockState = 2;
89
+ await behavior.unlockDoor();
90
+ expect(mockRegistry.syncStateToCache).toHaveBeenCalledWith('test-endpoint-123', 'doorLock', { lockState: 2 });
91
+ });
92
+ it('should check lockState before syncing', async () => {
93
+ // When lockState is defined, it syncs
94
+ mockState.lockState = 2;
95
+ await behavior.unlockDoor();
96
+ expect(mockRegistry.syncStateToCache).toHaveBeenCalled();
97
+ });
98
+ });
99
+ describe('lock states', () => {
100
+ it('should sync whatever lockState is set after command', async () => {
101
+ // Test that we sync the current state after lock command
102
+ mockState.lockState = 1;
103
+ await behavior.lockDoor();
104
+ expect(mockRegistry.syncStateToCache).toHaveBeenCalledWith('test-endpoint-123', 'doorLock', { lockState: 1 });
105
+ });
106
+ });
107
+ });
108
+ //# sourceMappingURL=DoorLockBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoorLockBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/DoorLockBehavior.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * FanControl Cluster Behavior
3
+ *
4
+ * Handles fan control commands for fans
5
+ */
6
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
7
+ import { FanControlServer } from '@matter/main/behaviors/fan-control';
8
+ /**
9
+ * Custom FanControl Server that calls plugin handlers
10
+ */
11
+ export declare class HomebridgeFanControlServer extends FanControlServer {
12
+ #private;
13
+ private static registry;
14
+ /**
15
+ * Set the behavior registry (called once during server initialization)
16
+ */
17
+ static setRegistry(registry: BehaviorRegistry): void;
18
+ initialize(): void;
19
+ }
20
+ //# sourceMappingURL=FanControlBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanControlBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/FanControlBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAErE;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,gBAAgB;;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI3C,UAAU,IAAI,IAAI;CA4C5B"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * FanControl Cluster Behavior
3
+ *
4
+ * Handles fan control commands for fans
5
+ */
6
+ import { FanControlServer } from '@matter/main/behaviors/fan-control';
7
+ /**
8
+ * Custom FanControl Server that calls plugin handlers
9
+ */
10
+ export class HomebridgeFanControlServer extends FanControlServer {
11
+ static registry;
12
+ /**
13
+ * Set the behavior registry (called once during server initialization)
14
+ */
15
+ static setRegistry(registry) {
16
+ this.registry = registry;
17
+ }
18
+ initialize() {
19
+ super.initialize();
20
+ // React to fanMode attribute changes (on/off)
21
+ this.reactTo(this.events.fanMode$Changed, this.#handleFanModeChange);
22
+ // React to percentSetting attribute changes (speed)
23
+ this.reactTo(this.events.percentSetting$Changed, this.#handlePercentSettingChange);
24
+ }
25
+ #handleFanModeChange(value, oldValue) {
26
+ const endpointId = this.endpoint.id;
27
+ // Execute user handler (errors are logged by registry)
28
+ HomebridgeFanControlServer.registry.executeHandler(endpointId, 'fanControl', 'fanModeChange', { fanMode: value, oldFanMode: oldValue }).catch(() => {
29
+ // Error already logged by registry
30
+ });
31
+ HomebridgeFanControlServer.registry.syncStateToCache(endpointId, 'fanControl', { fanMode: value });
32
+ }
33
+ #handlePercentSettingChange(value, oldValue) {
34
+ const endpointId = this.endpoint.id;
35
+ // Execute user handler (errors are logged by registry)
36
+ HomebridgeFanControlServer.registry.executeHandler(endpointId, 'fanControl', 'percentSettingChange', { percentSetting: value, oldPercentSetting: oldValue }).catch(() => {
37
+ // Error already logged by registry
38
+ });
39
+ HomebridgeFanControlServer.registry.syncStateToCache(endpointId, 'fanControl', {
40
+ percentSetting: value,
41
+ percentCurrent: value,
42
+ });
43
+ }
44
+ }
45
+ //# sourceMappingURL=FanControlBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanControlBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/FanControlBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAErE;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IACtD,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,UAAU;QACjB,KAAK,CAAC,UAAU,EAAE,CAAA;QAElB,8CAA8C;QAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAA;QAEpE,oDAAoD;QACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAA;IACpF,CAAC;IAED,oBAAoB,CAAC,KAAa,EAAE,QAAgB;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,0BAA0B,CAAC,QAAQ,CAAC,cAAc,CAChD,UAAU,EACV,YAAY,EACZ,eAAe,EACf,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CACzC,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,0BAA0B,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACpG,CAAC;IAED,2BAA2B,CAAC,KAAoB,EAAE,QAAuB;QACvE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,0BAA0B,CAAC,QAAQ,CAAC,cAAc,CAChD,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CACvD,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,0BAA0B,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE;YAC7E,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,KAAK;SACtB,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FanControlBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanControlBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/FanControlBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { HomebridgeFanControlServer } from './FanControlBehavior.js';
3
+ describe('homebridgeFanControlServer', () => {
4
+ describe('setRegistry', () => {
5
+ it('should set the registry', () => {
6
+ const newRegistry = {};
7
+ HomebridgeFanControlServer.setRegistry(newRegistry);
8
+ expect(true).toBe(true);
9
+ });
10
+ });
11
+ describe('behavior structure', () => {
12
+ it('should extend FanControlServer', () => {
13
+ expect(HomebridgeFanControlServer.prototype).toBeDefined();
14
+ });
15
+ it('should have initialize method', () => {
16
+ expect(typeof HomebridgeFanControlServer.prototype.initialize).toBe('function');
17
+ });
18
+ });
19
+ });
20
+ // Note: FanControlBehavior uses private methods (#handleFanModeChange, #handlePercentSettingChange)
21
+ // and reactTo() pattern which makes direct unit testing difficult.
22
+ // Integration tests would be more appropriate for testing the event reaction logic.
23
+ //# sourceMappingURL=FanControlBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FanControlBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/FanControlBehavior.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAA;AAEpE,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,WAAW,GAAG,EAAsB,CAAA;YAC1C,0BAA0B,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YACnD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,CAAC,OAAO,0BAA0B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,oGAAoG;AACpG,mEAAmE;AACnE,oFAAoF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Identify Cluster Behavior
3
+ *
4
+ * Handles identify commands (e.g., flash LED, beep sound)
5
+ */
6
+ import type { MaybePromise } from '@matter/main';
7
+ import type { Identify } from '@matter/main/clusters';
8
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
9
+ import { IdentifyServer } from '@matter/main/behaviors/identify';
10
+ /**
11
+ * Custom Identify Server that calls plugin handlers
12
+ */
13
+ export declare class HomebridgeIdentifyServer extends IdentifyServer {
14
+ private static registry;
15
+ /**
16
+ * Set the behavior registry (called once during server initialization)
17
+ */
18
+ static setRegistry(registry: BehaviorRegistry): void;
19
+ identify(request: Identify.IdentifyRequest): MaybePromise;
20
+ }
21
+ //# sourceMappingURL=IdentifyBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifyBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/IdentifyBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAEhE;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,cAAc;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI3C,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,eAAe,GAAG,YAAY;CAUnE"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Identify Cluster Behavior
3
+ *
4
+ * Handles identify commands (e.g., flash LED, beep sound)
5
+ */
6
+ import { IdentifyServer } from '@matter/main/behaviors/identify';
7
+ /**
8
+ * Custom Identify Server that calls plugin handlers
9
+ */
10
+ export class HomebridgeIdentifyServer extends IdentifyServer {
11
+ static registry;
12
+ /**
13
+ * Set the behavior registry (called once during server initialization)
14
+ */
15
+ static setRegistry(registry) {
16
+ this.registry = registry;
17
+ }
18
+ identify(request) {
19
+ const endpointId = this.endpoint.id;
20
+ // Execute user handler (errors are logged by registry)
21
+ HomebridgeIdentifyServer.registry.executeHandler(endpointId, 'identify', 'identify', request).catch(() => {
22
+ // Error already logged by registry
23
+ });
24
+ return super.identify(request);
25
+ }
26
+ }
27
+ //# sourceMappingURL=IdentifyBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifyBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/IdentifyBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAEhE;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,cAAc;IAClD,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,QAAQ,CAAC,OAAiC;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,wBAAwB,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACvG,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IdentifyBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IdentifyBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/IdentifyBehavior.spec.ts"],"names":[],"mappings":""}