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,27 @@
1
+ /**
2
+ * RvcCleanMode Cluster Behavior
3
+ *
4
+ * Handles robotic vacuum cleaner cleaning mode changes
5
+ */
6
+ import { RvcCleanModeServer } from '@matter/main/behaviors/rvc-clean-mode';
7
+ /**
8
+ * Custom RvcCleanMode Server that calls plugin handlers
9
+ */
10
+ export class HomebridgeRvcCleanModeServer extends RvcCleanModeServer {
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
+ changeToMode(request) {
19
+ const endpointId = this.endpoint.id;
20
+ // Execute user handler (errors are logged by registry)
21
+ HomebridgeRvcCleanModeServer.registry.executeHandler(endpointId, 'rvcCleanMode', 'changeToMode', request).catch(() => {
22
+ // Error already logged by registry
23
+ });
24
+ return super.changeToMode(request);
25
+ }
26
+ }
27
+ //# sourceMappingURL=RvcCleanModeBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcCleanModeBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcCleanModeBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAA;AAE1E;;GAEG;AACH,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,YAAY,CAAC,OAAY;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,4BAA4B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACnH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RvcCleanModeBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcCleanModeBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcCleanModeBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { HomebridgeRvcCleanModeServer } from './RvcCleanModeBehavior.js';
3
+ describe('homebridgeRvcCleanModeServer', () => {
4
+ let mockRegistry;
5
+ let behavior;
6
+ let mockEndpoint;
7
+ beforeEach(() => {
8
+ // Create mock registry
9
+ mockRegistry = {
10
+ executeHandler: vi.fn().mockResolvedValue(true),
11
+ };
12
+ // Set registry on behavior class
13
+ HomebridgeRvcCleanModeServer.setRegistry(mockRegistry);
14
+ // Create mock endpoint
15
+ mockEndpoint = {
16
+ id: 'test-endpoint-123',
17
+ };
18
+ // Create behavior instance with mocked properties
19
+ behavior = Object.create(HomebridgeRvcCleanModeServer.prototype);
20
+ Object.defineProperty(behavior, 'endpoint', {
21
+ get: () => mockEndpoint,
22
+ configurable: true,
23
+ });
24
+ // Mock super method
25
+ vi.spyOn(Object.getPrototypeOf(HomebridgeRvcCleanModeServer.prototype), 'changeToMode').mockReturnValue(undefined);
26
+ });
27
+ describe('setRegistry', () => {
28
+ it('should set the registry', () => {
29
+ const newRegistry = {};
30
+ HomebridgeRvcCleanModeServer.setRegistry(newRegistry);
31
+ expect(true).toBe(true);
32
+ });
33
+ });
34
+ describe('changeToMode', () => {
35
+ it('should execute handler with request', () => {
36
+ const request = { newMode: 0 }; // Vacuum mode
37
+ behavior.changeToMode(request);
38
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcCleanMode', 'changeToMode', request);
39
+ });
40
+ it('should handle different cleaning mode values', () => {
41
+ const modes = [0, 1, 2]; // Vacuum, Mop, VacuumAndMop
42
+ for (const mode of modes) {
43
+ const request = { newMode: mode };
44
+ behavior.changeToMode(request);
45
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcCleanMode', 'changeToMode', request);
46
+ vi.clearAllMocks();
47
+ }
48
+ });
49
+ it('should handle handler execution errors gracefully', () => {
50
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
51
+ const request = { newMode: 0 };
52
+ expect(() => behavior.changeToMode(request)).not.toThrow();
53
+ });
54
+ });
55
+ });
56
+ //# sourceMappingURL=RvcCleanModeBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcCleanModeBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcCleanModeBehavior.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAExE,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,YAA8B,CAAA;IAClC,IAAI,QAAsC,CAAA;IAC1C,IAAI,YAAiB,CAAA;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,uBAAuB;QACvB,YAAY,GAAG;YACb,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;SACzC,CAAA;QAER,iCAAiC;QACjC,4BAA4B,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAEtD,uBAAuB;QACvB,YAAY,GAAG;YACb,EAAE,EAAE,mBAAmB;SACxB,CAAA;QAED,kDAAkD;QAClD,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAA;QAChE,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;YAC1C,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;QAEF,oBAAoB;QACpB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,4BAA4B,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IACpH,CAAC,CAAC,CAAA;IAEF,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,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA,CAAC,cAAc;YAE7C,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAE9B,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACtD,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,OAAO,CACR,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA,CAAC,4BAA4B;YAEpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;gBACjC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;gBAE9B,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACtD,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,OAAO,CACR,CAAA;gBAED,EAAE,CAAC,aAAa,EAAE,CAAA;YACpB,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;YACpF,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAA;YAE9B,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * RvcOperationalState Cluster Behavior
3
+ *
4
+ * Handles robotic vacuum cleaner operational state commands
5
+ */
6
+ import type { MaybePromise } from '@matter/main';
7
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
8
+ import { RvcOperationalStateServer } from '@matter/main/behaviors/rvc-operational-state';
9
+ import { RvcOperationalState } from '@matter/main/clusters';
10
+ /**
11
+ * Custom RvcOperationalState Server that calls plugin handlers
12
+ */
13
+ export declare class HomebridgeRvcOperationalStateServer extends RvcOperationalStateServer {
14
+ private static registry;
15
+ /**
16
+ * Set the behavior registry (called once during server initialization)
17
+ */
18
+ static setRegistry(registry: BehaviorRegistry): void;
19
+ pause(): MaybePromise<RvcOperationalState.OperationalCommandResponse>;
20
+ resume(): MaybePromise<RvcOperationalState.OperationalCommandResponse>;
21
+ goHome(): MaybePromise<RvcOperationalState.OperationalCommandResponse>;
22
+ }
23
+ //# sourceMappingURL=RvcOperationalStateBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcOperationalStateBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.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,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;GAEG;AACH,qBAAa,mCAAoC,SAAQ,yBAAyB;IAChF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI3C,KAAK,IAAI,YAAY,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;IAWrE,MAAM,IAAI,YAAY,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;IAWtE,MAAM,IAAI,YAAY,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;CAehF"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * RvcOperationalState Cluster Behavior
3
+ *
4
+ * Handles robotic vacuum cleaner operational state commands
5
+ */
6
+ import { RvcOperationalStateServer } from '@matter/main/behaviors/rvc-operational-state';
7
+ import { RvcOperationalState } from '@matter/main/clusters';
8
+ /**
9
+ * Custom RvcOperationalState Server that calls plugin handlers
10
+ */
11
+ export class HomebridgeRvcOperationalStateServer extends RvcOperationalStateServer {
12
+ static registry;
13
+ /**
14
+ * Set the behavior registry (called once during server initialization)
15
+ */
16
+ static setRegistry(registry) {
17
+ this.registry = registry;
18
+ }
19
+ pause() {
20
+ const endpointId = this.endpoint.id;
21
+ // Execute user handler (errors are logged by registry)
22
+ HomebridgeRvcOperationalStateServer.registry.executeHandler(endpointId, 'rvcOperationalState', 'pause').catch(() => {
23
+ // Error already logged by registry
24
+ });
25
+ return super.pause();
26
+ }
27
+ resume() {
28
+ const endpointId = this.endpoint.id;
29
+ // Execute user handler (errors are logged by registry)
30
+ HomebridgeRvcOperationalStateServer.registry.executeHandler(endpointId, 'rvcOperationalState', 'resume').catch(() => {
31
+ // Error already logged by registry
32
+ });
33
+ return super.resume();
34
+ }
35
+ goHome() {
36
+ const endpointId = this.endpoint.id;
37
+ // Execute user handler (errors are logged by registry)
38
+ HomebridgeRvcOperationalStateServer.registry.executeHandler(endpointId, 'rvcOperationalState', 'goHome').catch(() => {
39
+ // Error already logged by registry
40
+ });
41
+ // Return success response instead of calling unimplemented base method
42
+ return {
43
+ commandResponseState: {
44
+ errorStateId: RvcOperationalState.ErrorState.NoError,
45
+ },
46
+ };
47
+ }
48
+ }
49
+ //# sourceMappingURL=RvcOperationalStateBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcOperationalStateBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3D;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,yBAAyB;IACxE,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,KAAK;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,mCAAmC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACjH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAEQ,MAAM;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,mCAAmC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,MAAM,EAAE,CAAA;IACvB,CAAC;IAEQ,MAAM;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,mCAAmC,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAClH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,uEAAuE;QACvE,OAAO;YACL,oBAAoB,EAAE;gBACpB,YAAY,EAAE,mBAAmB,CAAC,UAAU,CAAC,OAAO;aACrD;SACF,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RvcOperationalStateBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcOperationalStateBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { HomebridgeRvcOperationalStateServer } from './RvcOperationalStateBehavior.js';
3
+ describe('homebridgeRvcOperationalStateServer', () => {
4
+ let mockRegistry;
5
+ let behavior;
6
+ let mockEndpoint;
7
+ beforeEach(() => {
8
+ // Create mock registry
9
+ mockRegistry = {
10
+ executeHandler: vi.fn().mockResolvedValue(true),
11
+ };
12
+ // Set registry on behavior class
13
+ HomebridgeRvcOperationalStateServer.setRegistry(mockRegistry);
14
+ // Create mock endpoint
15
+ mockEndpoint = {
16
+ id: 'test-endpoint-123',
17
+ };
18
+ // Create behavior instance with mocked properties
19
+ behavior = Object.create(HomebridgeRvcOperationalStateServer.prototype);
20
+ Object.defineProperty(behavior, 'endpoint', {
21
+ get: () => mockEndpoint,
22
+ configurable: true,
23
+ });
24
+ // Mock super methods
25
+ vi.spyOn(Object.getPrototypeOf(HomebridgeRvcOperationalStateServer.prototype), 'pause').mockReturnValue(undefined);
26
+ vi.spyOn(Object.getPrototypeOf(HomebridgeRvcOperationalStateServer.prototype), 'resume').mockReturnValue(undefined);
27
+ vi.spyOn(Object.getPrototypeOf(HomebridgeRvcOperationalStateServer.prototype), 'goHome').mockReturnValue(undefined);
28
+ });
29
+ describe('setRegistry', () => {
30
+ it('should set the registry', () => {
31
+ const newRegistry = {};
32
+ HomebridgeRvcOperationalStateServer.setRegistry(newRegistry);
33
+ expect(true).toBe(true);
34
+ });
35
+ });
36
+ describe('pause', () => {
37
+ it('should execute handler for pause command', () => {
38
+ behavior.pause();
39
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcOperationalState', 'pause');
40
+ });
41
+ });
42
+ describe('resume', () => {
43
+ it('should execute handler for resume command', () => {
44
+ behavior.resume();
45
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcOperationalState', 'resume');
46
+ });
47
+ });
48
+ describe('goHome', () => {
49
+ it('should execute handler for goHome command', () => {
50
+ behavior.goHome();
51
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcOperationalState', 'goHome');
52
+ });
53
+ });
54
+ });
55
+ //# sourceMappingURL=RvcOperationalStateBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcOperationalStateBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcOperationalStateBehavior.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * RvcRunMode Cluster Behavior
3
+ *
4
+ * Handles robotic vacuum cleaner run mode changes
5
+ */
6
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
7
+ import { RvcRunModeServer } from '@matter/main/behaviors/rvc-run-mode';
8
+ /**
9
+ * Custom RvcRunMode Server that calls plugin handlers
10
+ */
11
+ export declare class HomebridgeRvcRunModeServer extends RvcRunModeServer {
12
+ private static registry;
13
+ /**
14
+ * Set the behavior registry (called once during server initialization)
15
+ */
16
+ static setRegistry(registry: BehaviorRegistry): void;
17
+ changeToMode(request: any): any;
18
+ }
19
+ //# sourceMappingURL=RvcRunModeBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcRunModeBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAEtE;;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,YAAY,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG;CAUzC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * RvcRunMode Cluster Behavior
3
+ *
4
+ * Handles robotic vacuum cleaner run mode changes
5
+ */
6
+ import { RvcRunModeServer } from '@matter/main/behaviors/rvc-run-mode';
7
+ /**
8
+ * Custom RvcRunMode Server that calls plugin handlers
9
+ */
10
+ export class HomebridgeRvcRunModeServer extends RvcRunModeServer {
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
+ changeToMode(request) {
19
+ const endpointId = this.endpoint.id;
20
+ // Execute user handler (errors are logged by registry)
21
+ HomebridgeRvcRunModeServer.registry.executeHandler(endpointId, 'rvcRunMode', 'changeToMode', request).catch(() => {
22
+ // Error already logged by registry
23
+ });
24
+ return super.changeToMode(request);
25
+ }
26
+ }
27
+ //# sourceMappingURL=RvcRunModeBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcRunModeBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAEtE;;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,YAAY,CAAC,OAAY;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,0BAA0B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC/G,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RvcRunModeBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcRunModeBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { HomebridgeRvcRunModeServer } from './RvcRunModeBehavior.js';
3
+ describe('homebridgeRvcRunModeServer', () => {
4
+ let mockRegistry;
5
+ let behavior;
6
+ let mockEndpoint;
7
+ beforeEach(() => {
8
+ // Create mock registry
9
+ mockRegistry = {
10
+ executeHandler: vi.fn().mockResolvedValue(true),
11
+ };
12
+ // Set registry on behavior class
13
+ HomebridgeRvcRunModeServer.setRegistry(mockRegistry);
14
+ // Create mock endpoint
15
+ mockEndpoint = {
16
+ id: 'test-endpoint-123',
17
+ };
18
+ // Create behavior instance with mocked properties
19
+ behavior = Object.create(HomebridgeRvcRunModeServer.prototype);
20
+ Object.defineProperty(behavior, 'endpoint', {
21
+ get: () => mockEndpoint,
22
+ configurable: true,
23
+ });
24
+ // Mock super method
25
+ vi.spyOn(Object.getPrototypeOf(HomebridgeRvcRunModeServer.prototype), 'changeToMode').mockReturnValue(undefined);
26
+ });
27
+ describe('setRegistry', () => {
28
+ it('should set the registry', () => {
29
+ const newRegistry = {};
30
+ HomebridgeRvcRunModeServer.setRegistry(newRegistry);
31
+ expect(true).toBe(true);
32
+ });
33
+ });
34
+ describe('changeToMode', () => {
35
+ it('should execute handler with request', () => {
36
+ const request = { newMode: 1 };
37
+ behavior.changeToMode(request);
38
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcRunMode', 'changeToMode', request);
39
+ });
40
+ it('should handle different mode values', () => {
41
+ const modes = [0, 1, 2, 3];
42
+ for (const mode of modes) {
43
+ const request = { newMode: mode };
44
+ behavior.changeToMode(request);
45
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'rvcRunMode', 'changeToMode', request);
46
+ vi.clearAllMocks();
47
+ }
48
+ });
49
+ it('should handle handler execution errors gracefully', () => {
50
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
51
+ const request = { newMode: 1 };
52
+ expect(() => behavior.changeToMode(request)).not.toThrow();
53
+ });
54
+ });
55
+ });
56
+ //# sourceMappingURL=RvcRunModeBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RvcRunModeBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/RvcRunModeBehavior.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * ServiceArea Cluster Behavior
3
+ *
4
+ * Handles service area selection for robotic vacuum cleaners
5
+ */
6
+ import type { MaybePromise } from '@matter/main';
7
+ import type { ServiceArea } from '@matter/main/clusters';
8
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
9
+ import { ServiceAreaServer } from '@matter/main/behaviors/service-area';
10
+ /**
11
+ * Custom ServiceArea Server that calls plugin handlers
12
+ */
13
+ export declare class HomebridgeServiceAreaServer extends ServiceAreaServer {
14
+ private static registry;
15
+ /**
16
+ * Set the behavior registry (called once during server initialization)
17
+ */
18
+ static setRegistry(registry: BehaviorRegistry): void;
19
+ selectAreas(request: ServiceArea.SelectAreasRequest): MaybePromise<ServiceArea.SelectAreasResponse>;
20
+ skipArea(request: ServiceArea.SkipAreaRequest): MaybePromise<ServiceArea.SkipAreaResponse>;
21
+ }
22
+ //# sourceMappingURL=ServiceAreaBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceAreaBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAEvE;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,iBAAiB;IAChE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI3C,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,kBAAkB,GAAG,YAAY,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAWnG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC;CAUpG"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * ServiceArea Cluster Behavior
3
+ *
4
+ * Handles service area selection for robotic vacuum cleaners
5
+ */
6
+ import { ServiceAreaServer } from '@matter/main/behaviors/service-area';
7
+ /**
8
+ * Custom ServiceArea Server that calls plugin handlers
9
+ */
10
+ export class HomebridgeServiceAreaServer extends ServiceAreaServer {
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
+ selectAreas(request) {
19
+ const endpointId = this.endpoint.id;
20
+ // Execute user handler (errors are logged by registry)
21
+ HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'selectAreas', request).catch(() => {
22
+ // Error already logged by registry
23
+ });
24
+ return super.selectAreas(request);
25
+ }
26
+ skipArea(request) {
27
+ const endpointId = this.endpoint.id;
28
+ // Execute user handler (errors are logged by registry)
29
+ HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'skipArea', request).catch(() => {
30
+ // Error already logged by registry
31
+ });
32
+ return super.skipArea(request);
33
+ }
34
+ }
35
+ //# sourceMappingURL=ServiceAreaBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceAreaBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAEvE;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,iBAAiB;IACxD,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEQ,WAAW,CAAC,OAAuC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChH,mCAAmC;QACrC,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACnC,CAAC;IAEQ,QAAQ,CAAC,OAAoC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,uDAAuD;QACvD,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAC7G,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=ServiceAreaBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceAreaBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { HomebridgeServiceAreaServer } from './ServiceAreaBehavior.js';
3
+ describe('homebridgeServiceAreaServer', () => {
4
+ let mockRegistry;
5
+ let behavior;
6
+ let mockEndpoint;
7
+ beforeEach(() => {
8
+ // Create mock registry
9
+ mockRegistry = {
10
+ executeHandler: vi.fn().mockResolvedValue(true),
11
+ };
12
+ // Set registry on behavior class
13
+ HomebridgeServiceAreaServer.setRegistry(mockRegistry);
14
+ // Create mock endpoint
15
+ mockEndpoint = {
16
+ id: 'test-endpoint-123',
17
+ };
18
+ // Create behavior instance with mocked properties
19
+ behavior = Object.create(HomebridgeServiceAreaServer.prototype);
20
+ Object.defineProperty(behavior, 'endpoint', {
21
+ get: () => mockEndpoint,
22
+ configurable: true,
23
+ });
24
+ // Mock super method
25
+ vi.spyOn(Object.getPrototypeOf(HomebridgeServiceAreaServer.prototype), 'selectAreas').mockReturnValue(undefined);
26
+ });
27
+ describe('setRegistry', () => {
28
+ it('should set the registry', () => {
29
+ const newRegistry = {};
30
+ HomebridgeServiceAreaServer.setRegistry(newRegistry);
31
+ expect(true).toBe(true);
32
+ });
33
+ });
34
+ describe('selectAreas', () => {
35
+ it('should execute handler with request', () => {
36
+ const request = { newAreas: [0, 1, 2] };
37
+ behavior.selectAreas(request);
38
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'serviceArea', 'selectAreas', request);
39
+ });
40
+ it('should handle empty area selection', () => {
41
+ const request = { newAreas: [] };
42
+ behavior.selectAreas(request);
43
+ expect(mockRegistry.executeHandler).toHaveBeenCalledWith('test-endpoint-123', 'serviceArea', 'selectAreas', request);
44
+ });
45
+ it('should handle handler execution errors gracefully', () => {
46
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
47
+ const request = { newAreas: [0, 1] };
48
+ expect(() => behavior.selectAreas(request)).not.toThrow();
49
+ });
50
+ });
51
+ });
52
+ //# sourceMappingURL=ServiceAreaBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceAreaBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAA;AAEtE,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,YAA8B,CAAA;IAClC,IAAI,QAAqC,CAAA;IACzC,IAAI,YAAiB,CAAA;IAErB,UAAU,CAAC,GAAG,EAAE;QACd,uBAAuB;QACvB,YAAY,GAAG;YACb,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;SACzC,CAAA;QAER,iCAAiC;QACjC,2BAA2B,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;QAErD,uBAAuB;QACvB,YAAY,GAAG;YACb,EAAE,EAAE,mBAAmB;SACxB,CAAA;QAED,kDAAkD;QAClD,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAA;QAC/D,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,UAAU,EAAE;YAC1C,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY;YACvB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;QAEF,oBAAoB;QACpB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,2BAA2B,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;IAClH,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,WAAW,GAAG,EAAsB,CAAA;YAC1C,2BAA2B,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;YACpD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;YAEvC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAE7B,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACtD,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,OAAO,CACR,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;YAEhC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;YAE7B,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACtD,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,OAAO,CACR,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAA;YACpF,MAAM,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;YAEpC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Thermostat Cluster Behavior
3
+ *
4
+ * Handles thermostat commands for heating and cooling systems
5
+ */
6
+ import type { MaybePromise } from '@matter/main';
7
+ import type { Thermostat } from '@matter/main/clusters';
8
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
9
+ import { ThermostatServer } from '@matter/main/behaviors/thermostat';
10
+ /**
11
+ * Custom Thermostat Server that calls plugin handlers
12
+ */
13
+ export declare class HomebridgeThermostatServer extends ThermostatServer {
14
+ #private;
15
+ private static registry;
16
+ /**
17
+ * Set the behavior registry (called once during server initialization)
18
+ */
19
+ static setRegistry(registry: BehaviorRegistry): void;
20
+ initialize(): void;
21
+ setpointRaiseLower(request: Thermostat.SetpointRaiseLowerRequest): MaybePromise;
22
+ }
23
+ //# sourceMappingURL=ThermostatBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThermostatBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAEpE;;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;IAoElB,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,yBAAyB,GAAG,YAAY;CAwBzF"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Thermostat Cluster Behavior
3
+ *
4
+ * Handles thermostat commands for heating and cooling systems
5
+ */
6
+ import { ThermostatServer } from '@matter/main/behaviors/thermostat';
7
+ /**
8
+ * Custom Thermostat Server that calls plugin handlers
9
+ */
10
+ export class HomebridgeThermostatServer extends ThermostatServer {
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 systemMode attribute changes (off, heat, cool, auto, etc.)
21
+ this.reactTo(this.events.systemMode$Changed, this.#handleSystemModeChange);
22
+ // React to occupiedHeatingSetpoint attribute changes (target heating temperature)
23
+ const events = this.events;
24
+ if (events.occupiedHeatingSetpoint$Changing) {
25
+ this.reactTo(events.occupiedHeatingSetpoint$Changing, this.#handleOccupiedHeatingSetpointChanging);
26
+ }
27
+ // React to occupiedCoolingSetpoint attribute changes (target cooling temperature)
28
+ if (events.occupiedCoolingSetpoint$Changing) {
29
+ this.reactTo(events.occupiedCoolingSetpoint$Changing, this.#handleOccupiedCoolingSetpointChanging);
30
+ }
31
+ }
32
+ #handleSystemModeChange(value, oldValue) {
33
+ const endpointId = this.endpoint.id;
34
+ // Execute user handler (errors are logged by registry)
35
+ HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'systemModeChange', { systemMode: value, oldSystemMode: oldValue }).catch(() => {
36
+ // Error already logged by registry
37
+ });
38
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { systemMode: value });
39
+ }
40
+ #handleOccupiedHeatingSetpointChanging(value) {
41
+ const endpointId = this.endpoint.id;
42
+ const oldValue = this.state.occupiedHeatingSetpoint;
43
+ // Execute user handler (errors are logged by registry)
44
+ HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedHeatingSetpointChange', { occupiedHeatingSetpoint: value, oldOccupiedHeatingSetpoint: oldValue }).catch(() => {
45
+ // Error already logged by registry
46
+ });
47
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedHeatingSetpoint: value });
48
+ }
49
+ #handleOccupiedCoolingSetpointChanging(value) {
50
+ const endpointId = this.endpoint.id;
51
+ const oldValue = this.state.occupiedCoolingSetpoint;
52
+ // Execute user handler (errors are logged by registry)
53
+ HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedCoolingSetpointChange', { occupiedCoolingSetpoint: value, oldOccupiedCoolingSetpoint: oldValue }).catch(() => {
54
+ // Error already logged by registry
55
+ });
56
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedCoolingSetpoint: value });
57
+ }
58
+ setpointRaiseLower(request) {
59
+ const endpointId = this.endpoint.id;
60
+ // Execute user handler (errors are logged by registry)
61
+ HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'setpointRaiseLower', request).catch(() => {
62
+ // Error already logged by registry
63
+ });
64
+ // Call base implementation
65
+ const result = super.setpointRaiseLower(request);
66
+ // Sync thermostat setpoints to cache
67
+ const currentState = this.state;
68
+ const stateUpdate = {};
69
+ if (currentState.occupiedCoolingSetpoint !== undefined) {
70
+ stateUpdate.occupiedCoolingSetpoint = currentState.occupiedCoolingSetpoint;
71
+ }
72
+ if (currentState.occupiedHeatingSetpoint !== undefined) {
73
+ stateUpdate.occupiedHeatingSetpoint = currentState.occupiedHeatingSetpoint;
74
+ }
75
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', stateUpdate);
76
+ return result;
77
+ }
78
+ }
79
+ //# sourceMappingURL=ThermostatBehavior.js.map