homebridge 2.0.0-beta.4 → 2.0.0-beta.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/README.md +16 -17
  2. package/bin/homebridge.js +22 -0
  3. package/config-sample.json +3 -3
  4. package/dist/api.d.ts +499 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +223 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/api.spec.d.ts +2 -0
  9. package/dist/api.spec.d.ts.map +1 -0
  10. package/dist/api.spec.js +413 -0
  11. package/dist/api.spec.js.map +1 -0
  12. package/{lib → dist}/bridgeService.d.ts +19 -10
  13. package/dist/bridgeService.d.ts.map +1 -0
  14. package/{lib → dist}/bridgeService.js +85 -117
  15. package/dist/bridgeService.js.map +1 -0
  16. package/{lib → dist}/childBridgeFork.d.ts +11 -5
  17. package/dist/childBridgeFork.d.ts.map +1 -0
  18. package/{lib → dist}/childBridgeFork.js +93 -44
  19. package/dist/childBridgeFork.js.map +1 -0
  20. package/{lib → dist}/childBridgeService.d.ts +37 -7
  21. package/dist/childBridgeService.d.ts.map +1 -0
  22. package/{lib → dist}/childBridgeService.js +127 -69
  23. package/dist/childBridgeService.js.map +1 -0
  24. package/dist/cli.d.ts +3 -0
  25. package/dist/cli.d.ts.map +1 -0
  26. package/dist/cli.js +90 -0
  27. package/dist/cli.js.map +1 -0
  28. package/dist/externalPortService.d.ts +47 -0
  29. package/dist/externalPortService.d.ts.map +1 -0
  30. package/dist/externalPortService.js +105 -0
  31. package/dist/externalPortService.js.map +1 -0
  32. package/dist/index.d.ts +141 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +53 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/ipcService.d.ts +48 -0
  37. package/dist/ipcService.d.ts.map +1 -0
  38. package/{lib → dist}/ipcService.js +12 -14
  39. package/dist/ipcService.js.map +1 -0
  40. package/{lib → dist}/logger.d.ts +12 -6
  41. package/dist/logger.d.ts.map +1 -0
  42. package/{lib → dist}/logger.js +27 -28
  43. package/dist/logger.js.map +1 -0
  44. package/dist/logger.spec.d.ts +2 -0
  45. package/dist/logger.spec.d.ts.map +1 -0
  46. package/dist/logger.spec.js +95 -0
  47. package/dist/logger.spec.js.map +1 -0
  48. package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
  49. package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
  50. package/dist/matter/ChildBridgeMatterManager.js +399 -0
  51. package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
  52. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
  53. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
  54. package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
  55. package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
  56. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
  57. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
  58. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
  59. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
  60. package/dist/matter/MatterAPIImpl.d.ts +504 -0
  61. package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
  62. package/dist/matter/MatterAPIImpl.js +305 -0
  63. package/dist/matter/MatterAPIImpl.js.map +1 -0
  64. package/dist/matter/MatterBridgeManager.d.ts +87 -0
  65. package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
  66. package/dist/matter/MatterBridgeManager.js +413 -0
  67. package/dist/matter/MatterBridgeManager.js.map +1 -0
  68. package/dist/matter/MatterConfigCollector.d.ts +26 -0
  69. package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
  70. package/dist/matter/MatterConfigCollector.js +78 -0
  71. package/dist/matter/MatterConfigCollector.js.map +1 -0
  72. package/dist/matter/accessoryCache.d.ts +105 -0
  73. package/dist/matter/accessoryCache.d.ts.map +1 -0
  74. package/dist/matter/accessoryCache.js +214 -0
  75. package/dist/matter/accessoryCache.js.map +1 -0
  76. package/dist/matter/accessoryCache.spec.d.ts +2 -0
  77. package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
  78. package/dist/matter/accessoryCache.spec.js +452 -0
  79. package/dist/matter/accessoryCache.spec.js.map +1 -0
  80. package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
  81. package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
  82. package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
  83. package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
  84. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
  85. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
  86. package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
  87. package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
  88. package/dist/matter/behaviors/ColorControlBehavior.d.ts +63 -0
  89. package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
  90. package/dist/matter/behaviors/ColorControlBehavior.js +223 -0
  91. package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
  92. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
  93. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
  94. package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
  95. package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
  96. package/dist/matter/behaviors/DoorLockBehavior.d.ts +20 -0
  97. package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
  98. package/dist/matter/behaviors/DoorLockBehavior.js +71 -0
  99. package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
  100. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
  101. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
  102. package/dist/matter/behaviors/DoorLockBehavior.spec.js +120 -0
  103. package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
  104. package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
  105. package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
  106. package/dist/matter/behaviors/FanControlBehavior.js +71 -0
  107. package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
  108. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
  109. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
  110. package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
  111. package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
  112. package/dist/matter/behaviors/IdentifyBehavior.d.ts +20 -0
  113. package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
  114. package/dist/matter/behaviors/IdentifyBehavior.js +41 -0
  115. package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
  116. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
  117. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
  118. package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
  119. package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
  120. package/dist/matter/behaviors/LevelControlBehavior.d.ts +33 -0
  121. package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
  122. package/dist/matter/behaviors/LevelControlBehavior.js +138 -0
  123. package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
  124. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
  125. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
  126. package/dist/matter/behaviors/LevelControlBehavior.spec.js +145 -0
  127. package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
  128. package/dist/matter/behaviors/OnOffBehavior.d.ts +27 -0
  129. package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
  130. package/dist/matter/behaviors/OnOffBehavior.js +95 -0
  131. package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
  132. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
  133. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
  134. package/dist/matter/behaviors/OnOffBehavior.spec.js +128 -0
  135. package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
  136. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
  137. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
  138. package/dist/matter/behaviors/RvcCleanModeBehavior.js +41 -0
  139. package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
  140. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
  141. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
  142. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +57 -0
  143. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
  144. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +22 -0
  145. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
  146. package/dist/matter/behaviors/RvcOperationalStateBehavior.js +86 -0
  147. package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
  148. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
  149. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
  150. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
  151. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
  152. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
  153. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
  154. package/dist/matter/behaviors/RvcRunModeBehavior.js +41 -0
  155. package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
  156. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
  157. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
  158. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +57 -0
  159. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
  160. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +21 -0
  161. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
  162. package/dist/matter/behaviors/ServiceAreaBehavior.js +61 -0
  163. package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
  164. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
  165. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
  166. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +53 -0
  167. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
  168. package/dist/matter/behaviors/ThermostatBehavior.d.ts +22 -0
  169. package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
  170. package/dist/matter/behaviors/ThermostatBehavior.js +127 -0
  171. package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
  172. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
  173. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
  174. package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
  175. package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
  176. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +31 -0
  177. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
  178. package/dist/matter/behaviors/WindowCoveringBehavior.js +158 -0
  179. package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
  180. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
  181. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
  182. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
  183. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
  184. package/dist/matter/behaviors/index.d.ts +20 -0
  185. package/dist/matter/behaviors/index.d.ts.map +1 -0
  186. package/dist/matter/behaviors/index.js +21 -0
  187. package/dist/matter/behaviors/index.js.map +1 -0
  188. package/dist/matter/configValidator.d.ts +81 -0
  189. package/dist/matter/configValidator.d.ts.map +1 -0
  190. package/dist/matter/configValidator.js +240 -0
  191. package/dist/matter/configValidator.js.map +1 -0
  192. package/dist/matter/configValidator.spec.d.ts +2 -0
  193. package/dist/matter/configValidator.spec.d.ts.map +1 -0
  194. package/dist/matter/configValidator.spec.js +390 -0
  195. package/dist/matter/configValidator.spec.js.map +1 -0
  196. package/dist/matter/errorHandler.d.ts +33 -0
  197. package/dist/matter/errorHandler.d.ts.map +1 -0
  198. package/dist/matter/errorHandler.js +113 -0
  199. package/dist/matter/errorHandler.js.map +1 -0
  200. package/dist/matter/errorHandler.spec.d.ts +2 -0
  201. package/dist/matter/errorHandler.spec.d.ts.map +1 -0
  202. package/dist/matter/errorHandler.spec.js +159 -0
  203. package/dist/matter/errorHandler.spec.js.map +1 -0
  204. package/dist/matter/errors.d.ts +178 -0
  205. package/dist/matter/errors.d.ts.map +1 -0
  206. package/dist/matter/errors.js +200 -0
  207. package/dist/matter/errors.js.map +1 -0
  208. package/dist/matter/index.d.ts +127 -0
  209. package/dist/matter/index.d.ts.map +1 -0
  210. package/dist/matter/index.js +23 -0
  211. package/dist/matter/index.js.map +1 -0
  212. package/dist/matter/logFormatter.d.ts +19 -0
  213. package/dist/matter/logFormatter.d.ts.map +1 -0
  214. package/dist/matter/logFormatter.js +158 -0
  215. package/dist/matter/logFormatter.js.map +1 -0
  216. package/dist/matter/logFormatter.spec.d.ts +2 -0
  217. package/dist/matter/logFormatter.spec.d.ts.map +1 -0
  218. package/dist/matter/logFormatter.spec.js +252 -0
  219. package/dist/matter/logFormatter.spec.js.map +1 -0
  220. package/dist/matter/server.d.ts +336 -0
  221. package/dist/matter/server.d.ts.map +1 -0
  222. package/dist/matter/server.js +1810 -0
  223. package/dist/matter/server.js.map +1 -0
  224. package/dist/matter/serverHelpers.d.ts +81 -0
  225. package/dist/matter/serverHelpers.d.ts.map +1 -0
  226. package/dist/matter/serverHelpers.js +326 -0
  227. package/dist/matter/serverHelpers.js.map +1 -0
  228. package/dist/matter/serverHelpers.spec.d.ts +2 -0
  229. package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
  230. package/dist/matter/serverHelpers.spec.js +521 -0
  231. package/dist/matter/serverHelpers.spec.js.map +1 -0
  232. package/dist/matter/sharedTypes.d.ts +164 -0
  233. package/dist/matter/sharedTypes.d.ts.map +1 -0
  234. package/dist/matter/sharedTypes.js +46 -0
  235. package/dist/matter/sharedTypes.js.map +1 -0
  236. package/dist/matter/storage.d.ts +135 -0
  237. package/dist/matter/storage.d.ts.map +1 -0
  238. package/dist/matter/storage.js +424 -0
  239. package/dist/matter/storage.js.map +1 -0
  240. package/dist/matter/storage.spec.d.ts +2 -0
  241. package/dist/matter/storage.spec.d.ts.map +1 -0
  242. package/dist/matter/storage.spec.js +570 -0
  243. package/dist/matter/storage.spec.js.map +1 -0
  244. package/dist/matter/typeHelpers.d.ts +45 -0
  245. package/dist/matter/typeHelpers.d.ts.map +1 -0
  246. package/dist/matter/typeHelpers.js +57 -0
  247. package/dist/matter/typeHelpers.js.map +1 -0
  248. package/dist/matter/typeHelpers.spec.d.ts +2 -0
  249. package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
  250. package/dist/matter/typeHelpers.spec.js +127 -0
  251. package/dist/matter/typeHelpers.spec.js.map +1 -0
  252. package/dist/matter/types.d.ts +826 -0
  253. package/dist/matter/types.d.ts.map +1 -0
  254. package/dist/matter/types.js +204 -0
  255. package/dist/matter/types.js.map +1 -0
  256. package/{lib → dist}/platformAccessory.d.ts +8 -6
  257. package/dist/platformAccessory.d.ts.map +1 -0
  258. package/{lib → dist}/platformAccessory.js +19 -16
  259. package/dist/platformAccessory.js.map +1 -0
  260. package/dist/platformAccessory.spec.d.ts +2 -0
  261. package/dist/platformAccessory.spec.d.ts.map +1 -0
  262. package/dist/platformAccessory.spec.js +126 -0
  263. package/dist/platformAccessory.spec.js.map +1 -0
  264. package/{lib → dist}/plugin.d.ts +2 -3
  265. package/dist/plugin.d.ts.map +1 -0
  266. package/{lib → dist}/plugin.js +39 -51
  267. package/dist/plugin.js.map +1 -0
  268. package/{lib → dist}/pluginManager.d.ts +3 -3
  269. package/dist/pluginManager.d.ts.map +1 -0
  270. package/{lib → dist}/pluginManager.js +76 -81
  271. package/dist/pluginManager.js.map +1 -0
  272. package/dist/pluginManager.spec.d.ts +2 -0
  273. package/dist/pluginManager.spec.d.ts.map +1 -0
  274. package/dist/pluginManager.spec.js +43 -0
  275. package/dist/pluginManager.spec.js.map +1 -0
  276. package/{lib → dist}/server.d.ts +14 -1
  277. package/dist/server.d.ts.map +1 -0
  278. package/{lib → dist}/server.js +193 -123
  279. package/dist/server.js.map +1 -0
  280. package/dist/server.spec.d.ts +2 -0
  281. package/dist/server.spec.d.ts.map +1 -0
  282. package/dist/server.spec.js +57 -0
  283. package/dist/server.spec.js.map +1 -0
  284. package/{lib → dist}/storageService.d.ts.map +1 -1
  285. package/dist/storageService.js +41 -0
  286. package/dist/storageService.js.map +1 -0
  287. package/{lib → dist}/user.d.ts +1 -0
  288. package/dist/user.d.ts.map +1 -0
  289. package/dist/user.js +32 -0
  290. package/dist/user.js.map +1 -0
  291. package/dist/user.spec.d.ts +2 -0
  292. package/dist/user.spec.d.ts.map +1 -0
  293. package/dist/user.spec.js +31 -0
  294. package/dist/user.spec.js.map +1 -0
  295. package/{lib → dist}/util/mac.d.ts +1 -0
  296. package/dist/util/mac.d.ts.map +1 -0
  297. package/dist/util/mac.js +14 -0
  298. package/dist/util/mac.js.map +1 -0
  299. package/dist/util/mac.spec.d.ts +2 -0
  300. package/dist/util/mac.spec.d.ts.map +1 -0
  301. package/dist/util/mac.spec.js +36 -0
  302. package/dist/util/mac.spec.js.map +1 -0
  303. package/dist/version.d.ts.map +1 -0
  304. package/dist/version.js +16 -0
  305. package/dist/version.js.map +1 -0
  306. package/dist/version.spec.d.ts +2 -0
  307. package/dist/version.spec.d.ts.map +1 -0
  308. package/dist/version.spec.js +20 -0
  309. package/dist/version.spec.js.map +1 -0
  310. package/package.json +49 -50
  311. package/bin/homebridge +0 -17
  312. package/lib/api.d.ts +0 -210
  313. package/lib/api.d.ts.map +0 -1
  314. package/lib/api.js +0 -155
  315. package/lib/api.js.map +0 -1
  316. package/lib/bridgeService.d.ts.map +0 -1
  317. package/lib/bridgeService.js.map +0 -1
  318. package/lib/childBridgeFork.d.ts.map +0 -1
  319. package/lib/childBridgeFork.js.map +0 -1
  320. package/lib/childBridgeService.d.ts.map +0 -1
  321. package/lib/childBridgeService.js.map +0 -1
  322. package/lib/cli.d.ts +0 -4
  323. package/lib/cli.d.ts.map +0 -1
  324. package/lib/cli.js +0 -111
  325. package/lib/cli.js.map +0 -1
  326. package/lib/externalPortService.d.ts +0 -33
  327. package/lib/externalPortService.d.ts.map +0 -1
  328. package/lib/externalPortService.js +0 -64
  329. package/lib/externalPortService.js.map +0 -1
  330. package/lib/index.d.ts +0 -76
  331. package/lib/index.d.ts.map +0 -1
  332. package/lib/index.js +0 -72
  333. package/lib/index.js.map +0 -1
  334. package/lib/ipcService.d.ts +0 -33
  335. package/lib/ipcService.d.ts.map +0 -1
  336. package/lib/ipcService.js.map +0 -1
  337. package/lib/logger.d.ts.map +0 -1
  338. package/lib/logger.js.map +0 -1
  339. package/lib/platformAccessory.d.ts.map +0 -1
  340. package/lib/platformAccessory.js.map +0 -1
  341. package/lib/plugin.d.ts.map +0 -1
  342. package/lib/plugin.js.map +0 -1
  343. package/lib/pluginManager.d.ts.map +0 -1
  344. package/lib/pluginManager.js.map +0 -1
  345. package/lib/server.d.ts.map +0 -1
  346. package/lib/server.js.map +0 -1
  347. package/lib/storageService.js +0 -70
  348. package/lib/storageService.js.map +0 -1
  349. package/lib/user.d.ts.map +0 -1
  350. package/lib/user.js +0 -36
  351. package/lib/user.js.map +0 -1
  352. package/lib/util/mac.d.ts.map +0 -1
  353. package/lib/util/mac.js +0 -20
  354. package/lib/util/mac.js.map +0 -1
  355. package/lib/version.d.ts.map +0 -1
  356. package/lib/version.js +0 -21
  357. package/lib/version.js.map +0 -1
  358. /package/{lib → dist}/storageService.d.ts +0 -0
  359. /package/{lib → dist}/version.d.ts +0 -0
@@ -0,0 +1,41 @@
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
+ import { Status, StatusResponseError } from '@matter/main/types';
8
+ import { MatterStatus } from '../errors.js';
9
+ /**
10
+ * Custom RvcRunMode Server that calls plugin handlers
11
+ */
12
+ export class HomebridgeRvcRunModeServer extends RvcRunModeServer {
13
+ static registry;
14
+ /**
15
+ * Set the behavior registry (called once during server initialization)
16
+ */
17
+ static setRegistry(registry) {
18
+ this.registry = registry;
19
+ }
20
+ async changeToMode(request) {
21
+ const endpointId = this.endpoint.id;
22
+ try {
23
+ // Execute user handler
24
+ await HomebridgeRvcRunModeServer.registry.executeHandler(endpointId, 'rvcRunMode', 'changeToMode', request);
25
+ // Only reached if handler succeeded - call base implementation
26
+ return await super.changeToMode(request);
27
+ }
28
+ catch (error) {
29
+ // If user handler already threw a StatusResponseError, propagate it as-is
30
+ // This sends a proper Matter protocol error response to the controller
31
+ if (MatterStatus.isMatterProtocolError(error)) {
32
+ throw error;
33
+ }
34
+ // For other errors, wrap in appropriate StatusResponseError
35
+ // This prevents the endpoint from crashing and keeps the device online
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ throw new StatusResponseError(`Failed to change run mode: ${message}`, Status.Failure);
38
+ }
39
+ }
40
+ }
41
+ //# 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;AACtE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C;;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,KAAK,CAAC,YAAY,CAAC,OAAY;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,0BAA0B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;YAE3G,+DAA+D;YAC/D,OAAO,MAAM,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAA;YACb,CAAC;YAED,4DAA4D;YAC5D,uEAAuE;YACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,mBAAmB,CAAC,8BAA8B,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACxF,CAAC;IACH,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,57 @@
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', async () => {
50
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
51
+ const request = { newMode: 1 };
52
+ // Errors are wrapped in StatusResponseError and propagated to Matter.js
53
+ await expect(behavior.changeToMode(request)).rejects.toThrow('Failed to change run mode: Handler failed');
54
+ });
55
+ });
56
+ });
57
+ //# 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,21 @@
1
+ /**
2
+ * ServiceArea Cluster Behavior
3
+ *
4
+ * Handles service area selection for robotic vacuum cleaners
5
+ */
6
+ import type { ServiceArea } from '@matter/main/clusters';
7
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
8
+ import { ServiceAreaServer } from '@matter/main/behaviors/service-area';
9
+ /**
10
+ * Custom ServiceArea Server that calls plugin handlers
11
+ */
12
+ export declare class HomebridgeServiceAreaServer extends ServiceAreaServer {
13
+ private static registry;
14
+ /**
15
+ * Set the behavior registry (called once during server initialization)
16
+ */
17
+ static setRegistry(registry: BehaviorRegistry): void;
18
+ selectAreas(request: ServiceArea.SelectAreasRequest): Promise<ServiceArea.SelectAreasResponse>;
19
+ skipArea(request: ServiceArea.SkipAreaRequest): Promise<ServiceArea.SkipAreaResponse>;
20
+ }
21
+ //# 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,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAKvE;;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;IAIrC,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC;IAuB9F,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;CAsBrG"}
@@ -0,0 +1,61 @@
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
+ import { Status, StatusResponseError } from '@matter/main/types';
8
+ import { MatterStatus } from '../errors.js';
9
+ /**
10
+ * Custom ServiceArea Server that calls plugin handlers
11
+ */
12
+ export class HomebridgeServiceAreaServer extends ServiceAreaServer {
13
+ static registry;
14
+ /**
15
+ * Set the behavior registry (called once during server initialization)
16
+ */
17
+ static setRegistry(registry) {
18
+ this.registry = registry;
19
+ }
20
+ async selectAreas(request) {
21
+ const endpointId = this.endpoint.id;
22
+ try {
23
+ // Execute user handler
24
+ await HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'selectAreas', request);
25
+ // Only reached if handler succeeded - call base implementation
26
+ return await super.selectAreas(request);
27
+ }
28
+ catch (error) {
29
+ // If user handler already threw a StatusResponseError, propagate it as-is
30
+ // This sends a proper Matter protocol error response to the controller
31
+ if (MatterStatus.isMatterProtocolError(error)) {
32
+ throw error;
33
+ }
34
+ // For other errors, wrap in appropriate StatusResponseError
35
+ // This prevents the endpoint from crashing and keeps the device online
36
+ const message = error instanceof Error ? error.message : String(error);
37
+ throw new StatusResponseError(`Failed to select areas: ${message}`, Status.Failure);
38
+ }
39
+ }
40
+ async skipArea(request) {
41
+ const endpointId = this.endpoint.id;
42
+ try {
43
+ // Execute user handler
44
+ await HomebridgeServiceAreaServer.registry.executeHandler(endpointId, 'serviceArea', 'skipArea', request);
45
+ // Only reached if handler succeeded - call base implementation
46
+ return await super.skipArea(request);
47
+ }
48
+ catch (error) {
49
+ // If user handler already threw a StatusResponseError, propagate it as-is
50
+ // This sends a proper Matter protocol error response to the controller
51
+ if (MatterStatus.isMatterProtocolError(error)) {
52
+ throw error;
53
+ }
54
+ // For other errors, wrap in appropriate StatusResponseError
55
+ // This prevents the endpoint from crashing and keeps the device online
56
+ const message = error instanceof Error ? error.message : String(error);
57
+ throw new StatusResponseError(`Failed to skip area: ${message}`, Status.Failure);
58
+ }
59
+ }
60
+ }
61
+ //# sourceMappingURL=ServiceAreaBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceAreaBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ServiceAreaBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE3C;;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,KAAK,CAAC,WAAW,CAAC,OAAuC;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,CAAC,CAAA;YAE5G,+DAA+D;YAC/D,OAAO,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAA;YACb,CAAC;YAED,4DAA4D;YAC5D,uEAAuE;YACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,mBAAmB,CAAC,2BAA2B,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,QAAQ,CAAC,OAAoC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;QAEnC,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,2BAA2B,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAEzG,+DAA+D;YAC/D,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0EAA0E;YAC1E,uEAAuE;YACvE,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,KAAK,CAAA;YACb,CAAC;YAED,4DAA4D;YAC5D,uEAAuE;YACvE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,mBAAmB,CAAC,wBAAwB,OAAO,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAClF,CAAC;IACH,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,53 @@
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', async () => {
46
+ mockRegistry.executeHandler = vi.fn().mockRejectedValue(new Error('Handler failed'));
47
+ const request = { newAreas: [0, 1] };
48
+ // Errors are wrapped in StatusResponseError and propagated to Matter.js
49
+ await expect(behavior.selectAreas(request)).rejects.toThrow('Failed to select areas: Handler failed');
50
+ });
51
+ });
52
+ });
53
+ //# 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":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Thermostat Cluster Behavior
3
+ *
4
+ * Handles thermostat commands for heating and cooling systems
5
+ */
6
+ import type { Thermostat } from '@matter/main/clusters';
7
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
8
+ import { ThermostatServer } from '@matter/main/behaviors/thermostat';
9
+ /**
10
+ * Custom Thermostat Server that calls plugin handlers
11
+ */
12
+ export declare class HomebridgeThermostatServer extends ThermostatServer {
13
+ #private;
14
+ private static registry;
15
+ /**
16
+ * Set the behavior registry (called once during server initialization)
17
+ */
18
+ static setRegistry(registry: BehaviorRegistry): void;
19
+ initialize(): void;
20
+ setpointRaiseLower(request: Thermostat.SetpointRaiseLowerRequest): Promise<void>;
21
+ }
22
+ //# 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,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAKpE;;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;IAwGZ,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CAiChG"}
@@ -0,0 +1,127 @@
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
+ import { Status, StatusResponseError } from '@matter/main/types';
8
+ import { MatterStatus } from '../errors.js';
9
+ /**
10
+ * Custom Thermostat Server that calls plugin handlers
11
+ */
12
+ export class HomebridgeThermostatServer extends ThermostatServer {
13
+ static registry;
14
+ /**
15
+ * Set the behavior registry (called once during server initialization)
16
+ */
17
+ static setRegistry(registry) {
18
+ this.registry = registry;
19
+ }
20
+ initialize() {
21
+ super.initialize();
22
+ // React to systemMode attribute changes (off, heat, cool, auto, etc.)
23
+ this.reactTo(this.events.systemMode$Changed, this.#handleSystemModeChange);
24
+ // React to occupiedHeatingSetpoint attribute changes (target heating temperature)
25
+ const events = this.events;
26
+ if (events.occupiedHeatingSetpoint$Changing) {
27
+ this.reactTo(events.occupiedHeatingSetpoint$Changing, this.#handleOccupiedHeatingSetpointChanging);
28
+ }
29
+ // React to occupiedCoolingSetpoint attribute changes (target cooling temperature)
30
+ if (events.occupiedCoolingSetpoint$Changing) {
31
+ this.reactTo(events.occupiedCoolingSetpoint$Changing, this.#handleOccupiedCoolingSetpointChanging);
32
+ }
33
+ }
34
+ async #handleSystemModeChange(value, oldValue) {
35
+ const endpointId = this.endpoint.id;
36
+ try {
37
+ // Execute user handler
38
+ await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'systemModeChange', { systemMode: value, oldSystemMode: oldValue });
39
+ // Sync state to cache
40
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { systemMode: value });
41
+ }
42
+ catch (error) {
43
+ // If user handler already threw a StatusResponseError, propagate it as-is
44
+ // This sends a proper Matter protocol error response to the controller
45
+ if (MatterStatus.isMatterProtocolError(error)) {
46
+ throw error;
47
+ }
48
+ // For other errors, wrap in appropriate StatusResponseError
49
+ // This prevents the endpoint from crashing and keeps the device online
50
+ const message = error instanceof Error ? error.message : String(error);
51
+ throw new StatusResponseError(`Failed to change system mode: ${message}`, Status.Failure);
52
+ }
53
+ }
54
+ async #handleOccupiedHeatingSetpointChanging(value) {
55
+ const endpointId = this.endpoint.id;
56
+ const oldValue = this.state.occupiedHeatingSetpoint;
57
+ try {
58
+ // Execute user handler
59
+ await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedHeatingSetpointChange', { occupiedHeatingSetpoint: value, oldOccupiedHeatingSetpoint: oldValue });
60
+ // Sync state to cache
61
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedHeatingSetpoint: value });
62
+ }
63
+ catch (error) {
64
+ // If user handler already threw a StatusResponseError, propagate it as-is
65
+ // This sends a proper Matter protocol error response to the controller
66
+ if (MatterStatus.isMatterProtocolError(error)) {
67
+ throw error;
68
+ }
69
+ // For other errors, wrap in appropriate StatusResponseError
70
+ // This prevents the endpoint from crashing and keeps the device online
71
+ const message = error instanceof Error ? error.message : String(error);
72
+ throw new StatusResponseError(`Failed to change heating setpoint: ${message}`, Status.Failure);
73
+ }
74
+ }
75
+ async #handleOccupiedCoolingSetpointChanging(value) {
76
+ const endpointId = this.endpoint.id;
77
+ const oldValue = this.state.occupiedCoolingSetpoint;
78
+ try {
79
+ // Execute user handler
80
+ await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'occupiedCoolingSetpointChange', { occupiedCoolingSetpoint: value, oldOccupiedCoolingSetpoint: oldValue });
81
+ // Sync state to cache
82
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', { occupiedCoolingSetpoint: value });
83
+ }
84
+ catch (error) {
85
+ // If user handler already threw a StatusResponseError, propagate it as-is
86
+ // This sends a proper Matter protocol error response to the controller
87
+ if (MatterStatus.isMatterProtocolError(error)) {
88
+ throw error;
89
+ }
90
+ // For other errors, wrap in appropriate StatusResponseError
91
+ // This prevents the endpoint from crashing and keeps the device online
92
+ const message = error instanceof Error ? error.message : String(error);
93
+ throw new StatusResponseError(`Failed to change cooling setpoint: ${message}`, Status.Failure);
94
+ }
95
+ }
96
+ async setpointRaiseLower(request) {
97
+ const endpointId = this.endpoint.id;
98
+ try {
99
+ // Execute user handler
100
+ await HomebridgeThermostatServer.registry.executeHandler(endpointId, 'thermostat', 'setpointRaiseLower', request);
101
+ // Only reached if handler succeeded - update Matter state
102
+ await super.setpointRaiseLower(request);
103
+ // Sync thermostat setpoints to cache
104
+ const currentState = this.state;
105
+ const stateUpdate = {};
106
+ if (currentState.occupiedCoolingSetpoint !== undefined) {
107
+ stateUpdate.occupiedCoolingSetpoint = currentState.occupiedCoolingSetpoint;
108
+ }
109
+ if (currentState.occupiedHeatingSetpoint !== undefined) {
110
+ stateUpdate.occupiedHeatingSetpoint = currentState.occupiedHeatingSetpoint;
111
+ }
112
+ HomebridgeThermostatServer.registry.syncStateToCache(endpointId, 'thermostat', stateUpdate);
113
+ }
114
+ catch (error) {
115
+ // If user handler already threw a StatusResponseError, propagate it as-is
116
+ // This sends a proper Matter protocol error response to the controller
117
+ if (MatterStatus.isMatterProtocolError(error)) {
118
+ throw error;
119
+ }
120
+ // For other errors, wrap in appropriate StatusResponseError
121
+ // This prevents the endpoint from crashing and keeps the device online
122
+ const message = error instanceof Error ? error.message : String(error);
123
+ throw new StatusResponseError(`Failed to adjust setpoint: ${message}`, Status.Failure);
124
+ }
125
+ }
126
+ }
127
+ //# sourceMappingURL=ThermostatBehavior.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThermostatBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ThermostatBehavior.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThermostatBehavior.spec.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { HomebridgeThermostatServer } from './ThermostatBehavior.js';
3
+ describe('homebridgeThermostatServer', () => {
4
+ describe('setRegistry', () => {
5
+ it('should set the registry', () => {
6
+ const newRegistry = {};
7
+ HomebridgeThermostatServer.setRegistry(newRegistry);
8
+ expect(true).toBe(true);
9
+ });
10
+ });
11
+ describe('behavior structure', () => {
12
+ it('should extend ThermostatServer', () => {
13
+ expect(HomebridgeThermostatServer.prototype).toBeDefined();
14
+ });
15
+ it('should have initialize method', () => {
16
+ expect(typeof HomebridgeThermostatServer.prototype.initialize).toBe('function');
17
+ });
18
+ });
19
+ });
20
+ // Note: ThermostatBehavior uses reactTo() pattern with private handlers for multiple attributes
21
+ // (systemMode, occupiedCoolingSetpoint, occupiedHeatingSetpoint, etc.)
22
+ // Integration tests would be more appropriate for testing the event reaction logic.
23
+ //# sourceMappingURL=ThermostatBehavior.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThermostatBehavior.spec.js","sourceRoot":"","sources":["../../../src/matter/behaviors/ThermostatBehavior.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,gGAAgG;AAChG,uEAAuE;AACvE,oFAAoF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * WindowCovering Cluster Behavior
3
+ *
4
+ * Handles window covering commands for blinds, shades, and curtains
5
+ */
6
+ import type { WindowCovering } from '@matter/main/clusters';
7
+ import type { BehaviorRegistry } from './BehaviorRegistry.js';
8
+ import { WindowCoveringBaseServer } from '@matter/main/behaviors/window-covering';
9
+ /**
10
+ * Custom WindowCovering Server that calls plugin handlers
11
+ */
12
+ export declare class HomebridgeWindowCoveringServer extends WindowCoveringBaseServer {
13
+ private static registry;
14
+ /**
15
+ * Set the behavior registry (called once during server initialization)
16
+ */
17
+ static setRegistry(registry: BehaviorRegistry): void;
18
+ /**
19
+ * Sync window covering position state to cache
20
+ * @param endpointId - The endpoint ID
21
+ * @param targetProperty - Target position property name (e.g., 'targetPositionLiftPercent100ths')
22
+ * @param currentProperty - Current position property name (e.g., 'currentPositionLiftPercent100ths')
23
+ */
24
+ private syncPositionStateToCache;
25
+ upOrOpen(): Promise<void>;
26
+ downOrClose(): Promise<void>;
27
+ stopMotion(): Promise<void>;
28
+ goToLiftPercentage(request: WindowCovering.GoToLiftPercentageRequest): Promise<void>;
29
+ goToTiltPercentage(request: WindowCovering.GoToTiltPercentageRequest): Promise<void>;
30
+ }
31
+ //# sourceMappingURL=WindowCoveringBehavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WindowCoveringBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/WindowCoveringBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAA;AAgBjF;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,wBAAwB;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAEzC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIpD;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAmBjB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BzB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCpF,kBAAkB,CAAC,OAAO,EAAE,cAAc,CAAC,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkCpG"}