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