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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/dist/api.d.ts +74 -32
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/api.js +48 -46
  4. package/dist/api.js.map +1 -1
  5. package/dist/api.spec.d.ts +2 -0
  6. package/dist/api.spec.d.ts.map +1 -0
  7. package/dist/api.spec.js +413 -0
  8. package/dist/api.spec.js.map +1 -0
  9. package/dist/childBridgeFork.d.ts +1 -18
  10. package/dist/childBridgeFork.d.ts.map +1 -1
  11. package/dist/childBridgeFork.js +21 -258
  12. package/dist/childBridgeFork.js.map +1 -1
  13. package/dist/externalPortService.d.ts +2 -9
  14. package/dist/externalPortService.d.ts.map +1 -1
  15. package/dist/externalPortService.js +20 -40
  16. package/dist/externalPortService.js.map +1 -1
  17. package/dist/index.d.ts +10 -10
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +3 -3
  20. package/dist/index.js.map +1 -1
  21. package/dist/logger.spec.d.ts +2 -0
  22. package/dist/logger.spec.d.ts.map +1 -0
  23. package/dist/logger.spec.js +95 -0
  24. package/dist/logger.spec.js.map +1 -0
  25. package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
  26. package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
  27. package/dist/matter/ChildBridgeMatterManager.js +397 -0
  28. package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
  29. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
  30. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
  31. package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
  32. package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
  33. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
  34. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
  35. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
  36. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
  37. package/dist/matter/{matterServer.d.ts → MatterAPIImpl.d.ts} +203 -367
  38. package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
  39. package/dist/matter/MatterAPIImpl.js +305 -0
  40. package/dist/matter/MatterAPIImpl.js.map +1 -0
  41. package/dist/matter/MatterBridgeManager.d.ts +91 -0
  42. package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
  43. package/dist/matter/MatterBridgeManager.js +426 -0
  44. package/dist/matter/MatterBridgeManager.js.map +1 -0
  45. package/dist/matter/MatterConfigCollector.d.ts +26 -0
  46. package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
  47. package/dist/matter/MatterConfigCollector.js +78 -0
  48. package/dist/matter/MatterConfigCollector.js.map +1 -0
  49. package/dist/matter/{matterAccessoryCache.d.ts → accessoryCache.d.ts} +12 -3
  50. package/dist/matter/accessoryCache.d.ts.map +1 -0
  51. package/dist/matter/{matterAccessoryCache.js → accessoryCache.js} +32 -10
  52. package/dist/matter/accessoryCache.js.map +1 -0
  53. package/dist/matter/accessoryCache.spec.d.ts +2 -0
  54. package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
  55. package/dist/matter/accessoryCache.spec.js +452 -0
  56. package/dist/matter/accessoryCache.spec.js.map +1 -0
  57. package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
  58. package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
  59. package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
  60. package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
  61. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
  62. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
  63. package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
  64. package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
  65. package/dist/matter/behaviors/ColorControlBehavior.d.ts +64 -0
  66. package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
  67. package/dist/matter/behaviors/ColorControlBehavior.js +160 -0
  68. package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
  69. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
  70. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
  71. package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
  72. package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
  73. package/dist/matter/behaviors/DoorLockBehavior.d.ts +21 -0
  74. package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
  75. package/dist/matter/behaviors/DoorLockBehavior.js +49 -0
  76. package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
  77. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
  78. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
  79. package/dist/matter/behaviors/DoorLockBehavior.spec.js +108 -0
  80. package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
  81. package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
  82. package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
  83. package/dist/matter/behaviors/FanControlBehavior.js +45 -0
  84. package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
  85. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
  86. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
  87. package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
  88. package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
  89. package/dist/matter/behaviors/IdentifyBehavior.d.ts +21 -0
  90. package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
  91. package/dist/matter/behaviors/IdentifyBehavior.js +27 -0
  92. package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
  93. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
  94. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
  95. package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
  96. package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
  97. package/dist/matter/behaviors/LevelControlBehavior.d.ts +34 -0
  98. package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
  99. package/dist/matter/behaviors/LevelControlBehavior.js +75 -0
  100. package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
  101. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
  102. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
  103. package/dist/matter/behaviors/LevelControlBehavior.spec.js +140 -0
  104. package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
  105. package/dist/matter/behaviors/OnOffBehavior.d.ts +28 -0
  106. package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
  107. package/dist/matter/behaviors/OnOffBehavior.js +63 -0
  108. package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
  109. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
  110. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
  111. package/dist/matter/behaviors/OnOffBehavior.spec.js +116 -0
  112. package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
  113. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
  114. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
  115. package/dist/matter/behaviors/RvcCleanModeBehavior.js +27 -0
  116. package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
  117. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
  118. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
  119. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +56 -0
  120. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
  121. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +23 -0
  122. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
  123. package/dist/matter/behaviors/RvcOperationalStateBehavior.js +49 -0
  124. package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
  125. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
  126. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
  127. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
  128. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
  129. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
  130. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
  131. package/dist/matter/behaviors/RvcRunModeBehavior.js +27 -0
  132. package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
  133. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
  134. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
  135. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +56 -0
  136. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
  137. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +22 -0
  138. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
  139. package/dist/matter/behaviors/ServiceAreaBehavior.js +35 -0
  140. package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
  141. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
  142. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
  143. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +52 -0
  144. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
  145. package/dist/matter/behaviors/ThermostatBehavior.d.ts +23 -0
  146. package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
  147. package/dist/matter/behaviors/ThermostatBehavior.js +79 -0
  148. package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
  149. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
  150. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
  151. package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
  152. package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
  153. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +32 -0
  154. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
  155. package/dist/matter/behaviors/WindowCoveringBehavior.js +106 -0
  156. package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
  157. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
  158. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
  159. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
  160. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
  161. package/dist/matter/behaviors/index.d.ts +20 -0
  162. package/dist/matter/behaviors/index.d.ts.map +1 -0
  163. package/dist/matter/behaviors/index.js +21 -0
  164. package/dist/matter/behaviors/index.js.map +1 -0
  165. package/dist/matter/{matterConfigValidator.d.ts → configValidator.d.ts} +1 -1
  166. package/dist/matter/configValidator.d.ts.map +1 -0
  167. package/dist/matter/{matterConfigValidator.js → configValidator.js} +1 -1
  168. package/dist/matter/configValidator.js.map +1 -0
  169. package/dist/matter/configValidator.spec.d.ts +2 -0
  170. package/dist/matter/configValidator.spec.d.ts.map +1 -0
  171. package/dist/matter/configValidator.spec.js +390 -0
  172. package/dist/matter/configValidator.spec.js.map +1 -0
  173. package/dist/matter/errorHandler.d.ts +33 -0
  174. package/dist/matter/errorHandler.d.ts.map +1 -0
  175. package/dist/matter/errorHandler.js +113 -0
  176. package/dist/matter/errorHandler.js.map +1 -0
  177. package/dist/matter/errorHandler.spec.d.ts +2 -0
  178. package/dist/matter/errorHandler.spec.d.ts.map +1 -0
  179. package/dist/matter/errorHandler.spec.js +159 -0
  180. package/dist/matter/errorHandler.spec.js.map +1 -0
  181. package/dist/matter/index.d.ts +7 -4
  182. package/dist/matter/index.d.ts.map +1 -1
  183. package/dist/matter/index.js +7 -4
  184. package/dist/matter/index.js.map +1 -1
  185. package/dist/matter/{matterLogFormatter.d.ts → logFormatter.d.ts} +1 -1
  186. package/dist/matter/logFormatter.d.ts.map +1 -0
  187. package/dist/matter/{matterLogFormatter.js → logFormatter.js} +33 -6
  188. package/dist/matter/logFormatter.js.map +1 -0
  189. package/dist/matter/logFormatter.spec.d.ts +2 -0
  190. package/dist/matter/logFormatter.spec.d.ts.map +1 -0
  191. package/dist/matter/logFormatter.spec.js +284 -0
  192. package/dist/matter/logFormatter.spec.js.map +1 -0
  193. package/dist/matter/server.d.ts +350 -0
  194. package/dist/matter/server.d.ts.map +1 -0
  195. package/dist/matter/{matterServer.js → server.js} +533 -352
  196. package/dist/matter/server.js.map +1 -0
  197. package/dist/matter/{matterServerHelpers.d.ts → serverHelpers.d.ts} +2 -2
  198. package/dist/matter/serverHelpers.d.ts.map +1 -0
  199. package/dist/matter/{matterServerHelpers.js → serverHelpers.js} +11 -8
  200. package/dist/matter/serverHelpers.js.map +1 -0
  201. package/dist/matter/serverHelpers.spec.d.ts +2 -0
  202. package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
  203. package/dist/matter/serverHelpers.spec.js +521 -0
  204. package/dist/matter/serverHelpers.spec.js.map +1 -0
  205. package/dist/matter/{matterSharedTypes.d.ts → sharedTypes.d.ts} +4 -10
  206. package/dist/matter/sharedTypes.d.ts.map +1 -0
  207. package/dist/matter/{matterSharedTypes.js → sharedTypes.js} +4 -10
  208. package/dist/matter/sharedTypes.js.map +1 -0
  209. package/dist/matter/{matterStorage.d.ts → storage.d.ts} +9 -2
  210. package/dist/matter/storage.d.ts.map +1 -0
  211. package/dist/matter/{matterStorage.js → storage.js} +14 -5
  212. package/dist/matter/{matterStorage.js.map → storage.js.map} +1 -1
  213. package/dist/matter/storage.spec.d.ts +2 -0
  214. package/dist/matter/storage.spec.d.ts.map +1 -0
  215. package/dist/matter/storage.spec.js +570 -0
  216. package/dist/matter/storage.spec.js.map +1 -0
  217. package/dist/matter/typeHelpers.d.ts +45 -0
  218. package/dist/matter/typeHelpers.d.ts.map +1 -0
  219. package/dist/matter/typeHelpers.js +57 -0
  220. package/dist/matter/typeHelpers.js.map +1 -0
  221. package/dist/matter/typeHelpers.spec.d.ts +2 -0
  222. package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
  223. package/dist/matter/typeHelpers.spec.js +127 -0
  224. package/dist/matter/typeHelpers.spec.js.map +1 -0
  225. package/dist/matter/{matterTypes.d.ts → types.d.ts} +2 -2
  226. package/dist/matter/types.d.ts.map +1 -0
  227. package/dist/matter/{matterTypes.js → types.js} +1 -2
  228. package/dist/matter/types.js.map +1 -0
  229. package/dist/platformAccessory.spec.d.ts +2 -0
  230. package/dist/platformAccessory.spec.d.ts.map +1 -0
  231. package/dist/platformAccessory.spec.js +126 -0
  232. package/dist/platformAccessory.spec.js.map +1 -0
  233. package/dist/pluginManager.spec.d.ts +2 -0
  234. package/dist/pluginManager.spec.d.ts.map +1 -0
  235. package/dist/pluginManager.spec.js +43 -0
  236. package/dist/pluginManager.spec.js.map +1 -0
  237. package/dist/server.d.ts +4 -13
  238. package/dist/server.d.ts.map +1 -1
  239. package/dist/server.js +45 -333
  240. package/dist/server.js.map +1 -1
  241. package/dist/server.spec.d.ts +2 -0
  242. package/dist/server.spec.d.ts.map +1 -0
  243. package/dist/server.spec.js +57 -0
  244. package/dist/server.spec.js.map +1 -0
  245. package/dist/user.spec.d.ts +2 -0
  246. package/dist/user.spec.d.ts.map +1 -0
  247. package/dist/user.spec.js +31 -0
  248. package/dist/user.spec.js.map +1 -0
  249. package/dist/util/mac.spec.d.ts +2 -0
  250. package/dist/util/mac.spec.d.ts.map +1 -0
  251. package/dist/util/mac.spec.js +36 -0
  252. package/dist/util/mac.spec.js.map +1 -0
  253. package/dist/version.spec.d.ts +2 -0
  254. package/dist/version.spec.d.ts.map +1 -0
  255. package/dist/version.spec.js +20 -0
  256. package/dist/version.spec.js.map +1 -0
  257. package/package.json +4 -4
  258. package/dist/matter/matterAccessoryCache.d.ts.map +0 -1
  259. package/dist/matter/matterAccessoryCache.js.map +0 -1
  260. package/dist/matter/matterBehaviors.d.ts +0 -194
  261. package/dist/matter/matterBehaviors.d.ts.map +0 -1
  262. package/dist/matter/matterBehaviors.js +0 -665
  263. package/dist/matter/matterBehaviors.js.map +0 -1
  264. package/dist/matter/matterConfigValidator.d.ts.map +0 -1
  265. package/dist/matter/matterConfigValidator.js.map +0 -1
  266. package/dist/matter/matterErrorHandler.d.ts +0 -106
  267. package/dist/matter/matterErrorHandler.d.ts.map +0 -1
  268. package/dist/matter/matterErrorHandler.js +0 -495
  269. package/dist/matter/matterErrorHandler.js.map +0 -1
  270. package/dist/matter/matterLogFormatter.d.ts.map +0 -1
  271. package/dist/matter/matterLogFormatter.js.map +0 -1
  272. package/dist/matter/matterNetworkMonitor.d.ts +0 -68
  273. package/dist/matter/matterNetworkMonitor.d.ts.map +0 -1
  274. package/dist/matter/matterNetworkMonitor.js +0 -249
  275. package/dist/matter/matterNetworkMonitor.js.map +0 -1
  276. package/dist/matter/matterServer.d.ts.map +0 -1
  277. package/dist/matter/matterServer.js.map +0 -1
  278. package/dist/matter/matterServerHelpers.d.ts.map +0 -1
  279. package/dist/matter/matterServerHelpers.js.map +0 -1
  280. package/dist/matter/matterSharedTypes.d.ts.map +0 -1
  281. package/dist/matter/matterSharedTypes.js.map +0 -1
  282. package/dist/matter/matterStorage.d.ts.map +0 -1
  283. package/dist/matter/matterTypes.d.ts.map +0 -1
  284. package/dist/matter/matterTypes.js.map +0 -1
package/dist/index.js CHANGED
@@ -6,12 +6,12 @@ export { APIEvent, PluginType } from './api.js';
6
6
  * Export Logger const enums
7
7
  */
8
8
  export { LogLevel } from './logger.js';
9
- export { ChildMatterMessageType, MatterBridgeStatus } from './matter/matterSharedTypes.js';
9
+ export { ChildMatterMessageType, MatterBridgeStatus } from './matter/sharedTypes.js';
10
10
  /**
11
11
  * Matter device types, clusters, and cluster names
12
12
  * Access via api.matter.deviceTypes, api.matter.clusters, api.matter.clusterNames
13
13
  */
14
- export { clusterNames, clusters, devices, deviceTypes, MatterAccessoryEventTypes } from './matter/matterTypes.js';
14
+ export { clusterNames, clusters, devices, deviceTypes, MatterAccessoryEventTypes } from './matter/types.js';
15
15
  /**
16
16
  * ═══════════════════════════════════════════════════════════════════════
17
17
  * Matter Protocol - UI Integration Types
@@ -20,7 +20,7 @@ export { clusterNames, clusters, devices, deviceTypes, MatterAccessoryEventTypes
20
20
  /**
21
21
  * Matter error types for error handling
22
22
  */
23
- export { MatterCommissioningError, MatterDeviceError, MatterError, MatterErrorType, MatterNetworkError, MatterStorageError, } from './matter/matterTypes.js';
23
+ export { MatterCommissioningError, MatterDeviceError, MatterError, MatterErrorType, MatterNetworkError, MatterStorageError, } from './matter/types.js';
24
24
  /**
25
25
  * Export Platform Accessory const enums
26
26
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAiB/C;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA2CtC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAa1F;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAA;AAEjH;;;;GAIG;AAEH;;GAEG;AACH,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,yBAAyB,CAAA;AAIhC;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAiB/D;;;;GAIG;AACH,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,gCAAgC,EAChC,8BAA8B,EAC9B,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,UAAU,EACV,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,8BAA8B,EAC9B,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,MAAM,EACN,KAAK,GACN,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8BA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAiB/C;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA2CtC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAapF;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAE3G;;;;GAIG;AAEH;;GAEG;AACH,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,mBAAmB,CAAA;AAI1B;;GAEG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAiB/D;;;;GAIG;AACH,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,gCAAgC,EAChC,8BAA8B,EAC9B,YAAY,EACZ,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,UAAU,EACV,YAAY,EACZ,wBAAwB,EACxB,cAAc,EACd,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,kBAAkB,EAClB,OAAO,EACP,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,8BAA8B,EAC9B,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,KAAK,EACL,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,MAAM,EACN,KAAK,GACN,MAAM,YAAY,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=logger.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.spec.d.ts","sourceRoot":"","sources":["../src/logger.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,95 @@
1
+ import chalk from 'chalk';
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
3
+ import { Logger } from './logger.js';
4
+ describe('logger', () => {
5
+ let consoleLogSpy;
6
+ let consoleErrorSpy;
7
+ beforeEach(() => {
8
+ consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
9
+ consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
10
+ });
11
+ afterEach(() => {
12
+ consoleLogSpy.mockRestore();
13
+ consoleErrorSpy.mockRestore();
14
+ });
15
+ it('should create a new logger with a prefix', () => {
16
+ const logger = Logger.withPrefix('test');
17
+ expect(logger.prefix).toBe('test');
18
+ });
19
+ it('should log info level messages', () => {
20
+ const logger = Logger.withPrefix('test');
21
+ logger.info('test message');
22
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('test message'));
23
+ });
24
+ it('should log success level messages', () => {
25
+ const logger = Logger.withPrefix('test');
26
+ logger.success('test message');
27
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('test message'));
28
+ });
29
+ it('should log warn level messages', () => {
30
+ const logger = Logger.withPrefix('test');
31
+ logger.warn('test message');
32
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('test message'));
33
+ });
34
+ it('should log error level messages', () => {
35
+ const logger = Logger.withPrefix('test');
36
+ logger.error('test message');
37
+ expect(consoleErrorSpy).toHaveBeenCalledWith(expect.stringContaining('test message'));
38
+ });
39
+ it('should not log debug level messages when debug is disabled (via method)', () => {
40
+ const logger = Logger.withPrefix('test');
41
+ logger.debug('test message');
42
+ expect(consoleLogSpy).not.toHaveBeenCalled();
43
+ });
44
+ it('should log debug level messages when debug is enabled (via method, no param)', () => {
45
+ Logger.setDebugEnabled();
46
+ const logger = Logger.withPrefix('test');
47
+ logger.debug('test message');
48
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('test message'));
49
+ Logger.setDebugEnabled(false); // reset debug setting
50
+ });
51
+ it('should log debug level messages when debug is enabled (via method, with param)', () => {
52
+ Logger.setDebugEnabled(true);
53
+ const logger = Logger.withPrefix('test');
54
+ logger.debug('test message');
55
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('test message'));
56
+ Logger.setDebugEnabled(false); // reset debug setting
57
+ });
58
+ it('should not include timestamps in log messages when timestamp is disabled (via method)', () => {
59
+ Logger.setTimestampEnabled(false);
60
+ const logger = Logger.withPrefix('test');
61
+ logger.info('test message');
62
+ expect(consoleLogSpy).not.toHaveBeenCalledWith(expect.stringMatching(/\[\d{1,2}\/\d{1,2}\/\d{4}, \d{1,2}:\d{2}:\d{2} (AM|PM)\].*/));
63
+ });
64
+ it('should include timestamps in log messages when timestamp is enabled (via method, no param)', () => {
65
+ Logger.setTimestampEnabled();
66
+ const logger = Logger.withPrefix('test');
67
+ logger.info('test message');
68
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringMatching(/\[\d{1,2}\/\d{1,2}\/\d{4}, \d{1,2}:\d{2}:\d{2} (AM|PM)\].*/));
69
+ Logger.setTimestampEnabled(false); // reset timestamp setting
70
+ });
71
+ it('should include timestamps in log messages when timestamp is enabled (via method, with param)', () => {
72
+ Logger.setTimestampEnabled(true);
73
+ const logger = Logger.withPrefix('test');
74
+ logger.info('test message');
75
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringMatching(/\[\d{1,2}\/\d{1,2}\/\d{4}, \d{1,2}:\d{2}:\d{2} (AM|PM)\].*/));
76
+ Logger.setTimestampEnabled(false); // reset timestamp setting
77
+ });
78
+ it('should set chalk level to 1 when forceColor is enabled (via method)', () => {
79
+ Logger.forceColor();
80
+ expect(chalk.level).toBe(1);
81
+ });
82
+ it('should return the same logger when called with the same prefix', () => {
83
+ const logger1 = Logger.withPrefix('test');
84
+ const logger2 = Logger.withPrefix('test');
85
+ expect(logger1).toBe(logger2);
86
+ });
87
+ it('should create different loggers for different prefixes', () => {
88
+ const logger1 = Logger.withPrefix('test1');
89
+ const logger2 = Logger.withPrefix('test2');
90
+ expect(logger1).not.toBe(logger2);
91
+ expect(logger1.prefix).toBe('test1');
92
+ expect(logger2.prefix).toBe('test2');
93
+ });
94
+ });
95
+ //# sourceMappingURL=logger.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.spec.js","sourceRoot":"","sources":["../src/logger.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Child Bridge Matter Manager
3
+ *
4
+ * Manages Matter server lifecycle and accessories for child bridges.
5
+ * This class extracts Matter-specific logic from childBridgeFork.ts to minimize changes to core files.
6
+ */
7
+ import type { HomebridgeAPI } from '../api.js';
8
+ import type { BridgeConfiguration, BridgeOptions } from '../bridgeService.js';
9
+ import type { ChildBridgeExternalPortService } from '../externalPortService.js';
10
+ import type { InternalMatterAccessory } from './types.js';
11
+ import { PluginManager } from '../pluginManager.js';
12
+ /**
13
+ * Matter status information for child bridge IPC communication
14
+ */
15
+ export interface ChildBridgeMatterStatusInfo {
16
+ qrCode?: string;
17
+ manualPairingCode?: string;
18
+ serialNumber?: string;
19
+ commissioned: boolean;
20
+ deviceCount: number;
21
+ }
22
+ /**
23
+ * Manages Matter server and accessories for a child bridge
24
+ */
25
+ export declare class ChildBridgeMatterManager {
26
+ private readonly bridgeConfig;
27
+ private readonly bridgeOptions;
28
+ private readonly api;
29
+ private readonly externalPortService;
30
+ private readonly pluginManager;
31
+ private matterServer?;
32
+ private readonly externalMatterServers;
33
+ private matterConfig?;
34
+ private matterSerialNumber?;
35
+ constructor(bridgeConfig: BridgeConfiguration, bridgeOptions: BridgeOptions, api: HomebridgeAPI, externalPortService: ChildBridgeExternalPortService, pluginManager: PluginManager);
36
+ /**
37
+ * Initialize Matter server for child bridge if enabled
38
+ * @param onCommissioningChanged - Callback when commissioning state changes
39
+ */
40
+ initialize(onCommissioningChanged: () => void): Promise<void>;
41
+ /**
42
+ * Start Matter server for child bridge
43
+ */
44
+ private startMatterServer;
45
+ /**
46
+ * Set up Matter API event listeners
47
+ */
48
+ private setupEventListeners;
49
+ /**
50
+ * Handle external Matter accessories - each gets its own dedicated Matter server
51
+ * This is required for devices like Robotic Vacuum Cleaners that Apple Home
52
+ * requires to be on their own bridge.
53
+ */
54
+ handlePublishExternalAccessories(accessories: InternalMatterAccessory[], registrationId: string): Promise<void>;
55
+ /**
56
+ * Handle registration of Matter platform accessories
57
+ */
58
+ handleRegisterPlatformAccessories(pluginIdentifier: string, platformName: string, accessories: InternalMatterAccessory[]): Promise<void>;
59
+ /**
60
+ * Handle updating Matter platform accessories in the cache
61
+ * Checks both external servers and child bridge server
62
+ */
63
+ handleUpdatePlatformAccessories(accessories: InternalMatterAccessory[]): Promise<void>;
64
+ /**
65
+ * Handle unregistration of Matter platform accessories
66
+ */
67
+ handleUnregisterPlatformAccessories(pluginIdentifier: string, platformName: string, accessories: InternalMatterAccessory[]): Promise<void>;
68
+ /**
69
+ * Handle unregistration of external Matter accessories
70
+ * Stops dedicated servers and cleans up storage
71
+ */
72
+ handleUnregisterExternalAccessories(accessories: InternalMatterAccessory[]): Promise<void>;
73
+ /**
74
+ * Handle Matter accessory state updates
75
+ * Checks both external servers and child bridge server
76
+ */
77
+ handleUpdateAccessoryState(uuid: string, cluster: string, attributes: Record<string, unknown>, partId?: string): Promise<void>;
78
+ /**
79
+ * Restore cached Matter accessories (matching HAP pattern)
80
+ */
81
+ restoreCachedAccessories(keepOrphaned: boolean): void;
82
+ /**
83
+ * Get Matter status information for IPC communication
84
+ * Returns undefined if Matter is not enabled for this child bridge
85
+ */
86
+ getMatterStatusInfo(): ChildBridgeMatterStatusInfo | undefined;
87
+ /**
88
+ * Check if Matter is enabled for this child bridge
89
+ */
90
+ isMatterEnabled(): boolean;
91
+ /**
92
+ * Teardown Matter servers
93
+ */
94
+ teardown(): Promise<void>;
95
+ }
96
+ //# sourceMappingURL=ChildBridgeMatterManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildBridgeMatterManager.d.ts","sourceRoot":"","sources":["../../src/matter/ChildBridgeMatterManager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAA;AAC/E,OAAO,KAAK,EAAE,uBAAuB,EAAiC,MAAM,YAAY,CAAA;AAOxF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAQnD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,OAAO,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,qBAAa,wBAAwB;IAejC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAjBhC,OAAO,CAAC,YAAY,CAAC,CAAc;IAInC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuC;IAG7E,OAAO,CAAC,YAAY,CAAC,CAAc;IAGnC,OAAO,CAAC,kBAAkB,CAAC,CAAQ;gBAGhB,YAAY,EAAE,mBAAmB,EACjC,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,aAAa,EAClB,mBAAmB,EAAE,8BAA8B,EACnD,aAAa,EAAE,aAAa;IAK/C;;;OAGG;IACG,UAAU,CAAC,sBAAsB,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BnE;;OAEG;YACW,iBAAiB;IAiD/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwC3B;;;;OAIG;IACG,gCAAgC,CAAC,WAAW,EAAE,uBAAuB,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkDrH;;OAEG;IACG,iCAAiC,CAAC,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9I;;;OAGG;IACG,+BAA+B,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB5F;;OAEG;IACG,mCAAmC,CAAC,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhJ;;;OAGG;IACG,mCAAmC,CAAC,WAAW,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyChG;;;OAGG;IACG,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpI;;OAEG;IACH,wBAAwB,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;IAmDrD;;;OAGG;IACH,mBAAmB,IAAI,2BAA2B,GAAG,SAAS;IAe9D;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAsBhC"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Child Bridge Matter Manager
3
+ *
4
+ * Manages Matter server lifecycle and accessories for child bridges.
5
+ * This class extracts Matter-specific logic from childBridgeFork.ts to minimize changes to core files.
6
+ */
7
+ import { rmSync } from 'node:fs';
8
+ import path from 'node:path';
9
+ import { Logger } from '../logger.js';
10
+ import { User } from '../user.js';
11
+ import { generate } from '../util/mac.js';
12
+ import { publishExternalMatterAccessory } from './ExternalMatterAccessoryPublisher.js';
13
+ import { MatterServer } from './server.js';
14
+ const log = Logger.internal;
15
+ /**
16
+ * Manages Matter server and accessories for a child bridge
17
+ */
18
+ export class ChildBridgeMatterManager {
19
+ bridgeConfig;
20
+ bridgeOptions;
21
+ api;
22
+ externalPortService;
23
+ pluginManager;
24
+ // Matter server instance for child bridge (if enabled)
25
+ matterServer;
26
+ // External Matter servers for accessories that need their own bridge
27
+ // Key is accessory UUID, value is MatterServer instance
28
+ externalMatterServers = new Map();
29
+ // Matter configuration from bridge config
30
+ matterConfig;
31
+ // Stored serial number for status updates
32
+ matterSerialNumber;
33
+ constructor(bridgeConfig, bridgeOptions, api, externalPortService, pluginManager) {
34
+ this.bridgeConfig = bridgeConfig;
35
+ this.bridgeOptions = bridgeOptions;
36
+ this.api = api;
37
+ this.externalPortService = externalPortService;
38
+ this.pluginManager = pluginManager;
39
+ this.matterConfig = bridgeConfig.matter;
40
+ }
41
+ /**
42
+ * Initialize Matter server for child bridge if enabled
43
+ * @param onCommissioningChanged - Callback when commissioning state changes
44
+ */
45
+ async initialize(onCommissioningChanged) {
46
+ // Check if Matter is configured
47
+ if (!this.matterConfig) {
48
+ return;
49
+ }
50
+ log.debug('Child bridge has Matter config (Combined HAP+Matter), starting Matter server');
51
+ // If Matter doesn't have a port configured, allocate one
52
+ if (!this.matterConfig.port) {
53
+ // Generate a unique username for Matter port allocation
54
+ const matterUsername = `${this.bridgeConfig.username}:MATTER`;
55
+ const matterPort = await this.externalPortService.requestPort(matterUsername);
56
+ if (!matterPort) {
57
+ throw new Error('Failed to allocate Matter port for child bridge. '
58
+ + 'Please specify a port manually in the _bridge.matter configuration, or free up ports in the configured range.');
59
+ }
60
+ this.matterConfig.port = matterPort;
61
+ log.debug(`Allocated Matter port: ${this.matterConfig.port} (HAP port: ${this.bridgeConfig.port})`);
62
+ }
63
+ // Start Matter server
64
+ await this.startMatterServer(this.matterConfig, onCommissioningChanged);
65
+ }
66
+ /**
67
+ * Start Matter server for child bridge
68
+ */
69
+ async startMatterServer(matterConfig, onCommissioningChanged) {
70
+ log.info('Starting Matter server in child bridge process');
71
+ // Create Matter server with the provided configuration
72
+ const serialNumber = this.bridgeConfig.username.replace(/:/g, '');
73
+ // Normalize bind config to array format
74
+ const networkInterfaces = this.bridgeConfig.bind
75
+ ? Array.isArray(this.bridgeConfig.bind)
76
+ ? this.bridgeConfig.bind
77
+ : [this.bridgeConfig.bind]
78
+ : undefined;
79
+ this.matterServer = new MatterServer({
80
+ port: matterConfig.port || 5540,
81
+ uniqueId: serialNumber,
82
+ storagePath: User.matterPath(),
83
+ debugModeEnabled: this.bridgeOptions.debugModeEnabled,
84
+ manufacturer: this.bridgeConfig.manufacturer,
85
+ model: this.bridgeConfig.model,
86
+ firmwareRevision: this.bridgeConfig.firmwareRevision,
87
+ serialNumber,
88
+ networkInterfaces,
89
+ });
90
+ await this.matterServer.start();
91
+ // Inform the API that Matter is enabled
92
+ this.api._setMatterEnabled(true);
93
+ // Set the Matter server reference for API methods like getAccessoryState
94
+ this.api._setMatterServer(this.matterServer);
95
+ const commissioningInfo = this.matterServer.getCommissioningInfo();
96
+ log.info('Matter server started with commissioning info:', commissioningInfo);
97
+ // Store the serial number for status updates
98
+ this.matterSerialNumber = commissioningInfo.serialNumber;
99
+ // Listen for Matter commissioning events to update status
100
+ this.matterServer.on('commissioning-changed', (commissioned, fabricCount) => {
101
+ log.info(`Matter commissioning state changed: commissioned=${commissioned}, fabricCount=${fabricCount}`);
102
+ onCommissioningChanged();
103
+ });
104
+ // Set up event listeners for Matter API calls
105
+ this.setupEventListeners();
106
+ }
107
+ /**
108
+ * Set up Matter API event listeners
109
+ */
110
+ setupEventListeners() {
111
+ this.api.on("publishExternalMatterAccessories" /* InternalAPIEvent.PUBLISH_EXTERNAL_MATTER_ACCESSORIES */, (accessories, registrationId) => {
112
+ this.handlePublishExternalAccessories(accessories, registrationId).catch((error) => {
113
+ log.error('Failed to publish external Matter accessories:', error);
114
+ // Make sure to resolve the registration even on error
115
+ this.api._resolveExternalRegistration(registrationId);
116
+ });
117
+ });
118
+ this.api.on("registerMatterPlatformAccessories" /* InternalAPIEvent.REGISTER_MATTER_PLATFORM_ACCESSORIES */, (pluginIdentifier, platformName, accessories) => {
119
+ this.handleRegisterPlatformAccessories(pluginIdentifier, platformName, accessories).catch((error) => {
120
+ log.error(`Failed to register Matter accessories for ${pluginIdentifier}:`, error);
121
+ });
122
+ });
123
+ this.api.on("updateMatterPlatformAccessories" /* InternalAPIEvent.UPDATE_MATTER_PLATFORM_ACCESSORIES */, (accessories) => {
124
+ this.handleUpdatePlatformAccessories(accessories).catch((error) => {
125
+ log.error('Failed to update Matter platform accessories:', error);
126
+ });
127
+ });
128
+ this.api.on("unregisterMatterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_MATTER_PLATFORM_ACCESSORIES */, (pluginIdentifier, platformName, accessories) => {
129
+ this.handleUnregisterPlatformAccessories(pluginIdentifier, platformName, accessories).catch((error) => {
130
+ log.error(`Failed to unregister Matter accessories for ${pluginIdentifier}:`, error);
131
+ });
132
+ });
133
+ this.api.on("unregisterExternalMatterAccessories" /* InternalAPIEvent.UNREGISTER_EXTERNAL_MATTER_ACCESSORIES */, (accessories) => {
134
+ this.handleUnregisterExternalAccessories(accessories).catch((error) => {
135
+ log.error('Failed to unregister external Matter accessories:', error);
136
+ });
137
+ });
138
+ this.api.on("updateMatterAccessoryState" /* InternalAPIEvent.UPDATE_MATTER_ACCESSORY_STATE */, (uuid, cluster, attributes, partId) => {
139
+ this.handleUpdateAccessoryState(uuid, cluster, attributes, partId).catch((error) => {
140
+ log.error(`Failed to update Matter accessory state for ${uuid}:`, error);
141
+ });
142
+ });
143
+ }
144
+ /**
145
+ * Handle external Matter accessories - each gets its own dedicated Matter server
146
+ * This is required for devices like Robotic Vacuum Cleaners that Apple Home
147
+ * requires to be on their own bridge.
148
+ */
149
+ async handlePublishExternalAccessories(accessories, registrationId) {
150
+ log.info(`Publishing ${accessories.length} external Matter accessor${accessories.length === 1 ? 'y' : 'ies'} from child bridge`);
151
+ try {
152
+ // Normalize bind config to array format (inherit from bridge)
153
+ const networkInterfaces = this.bridgeConfig.bind
154
+ ? Array.isArray(this.bridgeConfig.bind)
155
+ ? this.bridgeConfig.bind
156
+ : [this.bridgeConfig.bind]
157
+ : undefined;
158
+ for (const accessory of accessories) {
159
+ try {
160
+ // Check if already published
161
+ if (this.externalMatterServers.has(accessory.uuid)) {
162
+ log.warn(`External Matter accessory ${accessory.displayName} (${accessory.uuid}) is already published`);
163
+ continue;
164
+ }
165
+ // Publish the accessory using shared helper
166
+ const result = await publishExternalMatterAccessory(accessory, {
167
+ portService: this.externalPortService,
168
+ networkInterfaces,
169
+ debugModeEnabled: this.bridgeOptions.debugModeEnabled,
170
+ });
171
+ if (!result) {
172
+ // Validation or publishing failed (errors already logged by helper)
173
+ continue;
174
+ }
175
+ // Store the server instance
176
+ this.externalMatterServers.set(accessory.uuid, result.server);
177
+ // Log commissioning info
178
+ if (result.commissioningInfo.qrCode && result.commissioningInfo.manualPairingCode) {
179
+ log.info(`📱 Commissioning codes for ${accessory.displayName}:`);
180
+ log.info(` QR Code: ${result.commissioningInfo.qrCode}`);
181
+ log.info(` Manual Code: ${result.commissioningInfo.manualPairingCode}`);
182
+ }
183
+ }
184
+ catch (error) {
185
+ log.error(`Failed to publish external Matter accessory ${accessory.displayName}:`, error);
186
+ }
187
+ }
188
+ }
189
+ finally {
190
+ // Notify that registration is complete (whether successful or not)
191
+ this.api._resolveExternalRegistration(registrationId);
192
+ }
193
+ }
194
+ /**
195
+ * Handle registration of Matter platform accessories
196
+ */
197
+ async handleRegisterPlatformAccessories(pluginIdentifier, platformName, accessories) {
198
+ if (!this.matterServer) {
199
+ log.warn('Cannot register Matter accessories - Matter server is not running');
200
+ return;
201
+ }
202
+ await this.matterServer.registerPlatformAccessories(pluginIdentifier, platformName, accessories);
203
+ }
204
+ /**
205
+ * Handle updating Matter platform accessories in the cache
206
+ * Checks both external servers and child bridge server
207
+ */
208
+ async handleUpdatePlatformAccessories(accessories) {
209
+ const bridgeAccessories = [];
210
+ // Route each accessory to the appropriate server
211
+ for (const accessory of accessories) {
212
+ const externalServer = this.externalMatterServers.get(accessory.uuid);
213
+ if (externalServer) {
214
+ // Update external accessory
215
+ await externalServer.updatePlatformAccessories([accessory]);
216
+ }
217
+ else {
218
+ // Collect accessories for child bridge
219
+ bridgeAccessories.push(accessory);
220
+ }
221
+ }
222
+ // Update accessories on child bridge server if any
223
+ if (bridgeAccessories.length > 0) {
224
+ if (!this.matterServer) {
225
+ log.warn('Cannot update Matter platform accessories - Matter server is not running');
226
+ return;
227
+ }
228
+ await this.matterServer.updatePlatformAccessories(bridgeAccessories);
229
+ }
230
+ }
231
+ /**
232
+ * Handle unregistration of Matter platform accessories
233
+ */
234
+ async handleUnregisterPlatformAccessories(pluginIdentifier, platformName, accessories) {
235
+ if (!this.matterServer) {
236
+ log.warn('Cannot unregister Matter accessories - Matter server is not running');
237
+ return;
238
+ }
239
+ await this.matterServer.unregisterPlatformAccessories(pluginIdentifier, platformName, accessories);
240
+ }
241
+ /**
242
+ * Handle unregistration of external Matter accessories
243
+ * Stops dedicated servers and cleans up storage
244
+ */
245
+ async handleUnregisterExternalAccessories(accessories) {
246
+ log.info(`Unregistering ${accessories.length} external Matter accessor${accessories.length === 1 ? 'y' : 'ies'} from child bridge`);
247
+ for (const accessory of accessories) {
248
+ try {
249
+ // Check if this external server exists
250
+ const matterServer = this.externalMatterServers.get(accessory.uuid);
251
+ if (!matterServer) {
252
+ log.warn(`External Matter accessory ${accessory.displayName} (${accessory.uuid}) is not registered`);
253
+ continue;
254
+ }
255
+ log.info(`Stopping external Matter server for ${accessory.displayName}`);
256
+ // Stop the Matter server
257
+ await matterServer.stop();
258
+ // Remove from the map
259
+ this.externalMatterServers.delete(accessory.uuid);
260
+ // Clean up storage folder
261
+ // Generate the same uniqueId that was used when creating the server
262
+ const advertiseAddress = generate(accessory.uuid);
263
+ const uniqueId = advertiseAddress.replace(/:/g, '');
264
+ const storagePath = path.join(User.matterPath(), uniqueId);
265
+ try {
266
+ log.debug(`Removing Matter storage for external accessory at: ${storagePath}`);
267
+ rmSync(storagePath, { recursive: true, force: true });
268
+ log.info(`✓ Cleaned up storage for external Matter accessory: ${accessory.displayName}`);
269
+ }
270
+ catch (error) {
271
+ log.error(`Failed to clean up storage for external Matter accessory ${accessory.displayName}:`, error);
272
+ }
273
+ log.info(`✓ External Matter accessory unregistered: ${accessory.displayName}`);
274
+ }
275
+ catch (error) {
276
+ log.error(`Failed to unregister external Matter accessory ${accessory.displayName}:`, error);
277
+ }
278
+ }
279
+ }
280
+ /**
281
+ * Handle Matter accessory state updates
282
+ * Checks both external servers and child bridge server
283
+ */
284
+ async handleUpdateAccessoryState(uuid, cluster, attributes, partId) {
285
+ // Check if this is an external accessory first (each has its own MatterServer)
286
+ const externalServer = this.externalMatterServers.get(uuid);
287
+ if (externalServer) {
288
+ await externalServer.updateAccessoryState(uuid, cluster, attributes, partId);
289
+ return;
290
+ }
291
+ // Otherwise, try the main child bridge Matter server
292
+ if (!this.matterServer) {
293
+ log.warn(`Cannot update Matter accessory state for ${uuid} - accessory not found in external servers and child bridge Matter server is not running`);
294
+ return;
295
+ }
296
+ await this.matterServer.updateAccessoryState(uuid, cluster, attributes, partId);
297
+ }
298
+ /**
299
+ * Restore cached Matter accessories (matching HAP pattern)
300
+ */
301
+ restoreCachedAccessories(keepOrphaned) {
302
+ if (!this.matterServer) {
303
+ log.debug('Matter server not available for restoring cached accessories');
304
+ return;
305
+ }
306
+ const cachedAccessories = this.matterServer.getAllCachedAccessories();
307
+ log.debug(`Restoring ${cachedAccessories.length} cached Matter accessories`);
308
+ for (const cachedAccessory of cachedAccessories) {
309
+ let plugin = this.pluginManager.getPlugin(cachedAccessory.plugin);
310
+ if (!plugin) {
311
+ try {
312
+ // Try to find plugin by platform name (handles plugin renames)
313
+ plugin = this.pluginManager.getPluginByActiveDynamicPlatform(cachedAccessory.platform);
314
+ if (plugin) {
315
+ log.info(`When searching for the associated plugin of the Matter accessory '${cachedAccessory.displayName}' `
316
+ + `it seems like the plugin name changed from '${cachedAccessory.plugin}' to '${plugin.getPluginIdentifier()}'. Plugin association is now being transformed!`);
317
+ }
318
+ }
319
+ catch (error) {
320
+ const errorMessage = error instanceof Error ? error.message : String(error);
321
+ log.warn(`Could not find the associated plugin for the Matter accessory '${cachedAccessory.displayName}'. `
322
+ + `Tried to find the plugin by the platform name but ${errorMessage}`);
323
+ }
324
+ }
325
+ const platformPlugin = plugin && plugin.getActiveDynamicPlatform(cachedAccessory.platform);
326
+ if (!platformPlugin) {
327
+ log.warn(`Failed to find plugin to handle Matter accessory ${cachedAccessory.displayName} (plugin: ${cachedAccessory.plugin}, platform: ${cachedAccessory.platform})`);
328
+ if (!keepOrphaned) {
329
+ log.info(`Removing orphaned Matter accessory ${cachedAccessory.displayName}`);
330
+ this.matterServer.unregisterAccessory(cachedAccessory.uuid).catch((error) => {
331
+ log.warn(`Failed to unregister orphaned Matter accessory ${cachedAccessory.displayName}:`, error);
332
+ });
333
+ }
334
+ }
335
+ else {
336
+ // Call configureMatterAccessory if the plugin implements it
337
+ if (platformPlugin.configureMatterAccessory) {
338
+ log.debug(`Calling configureMatterAccessory for ${cachedAccessory.displayName}`);
339
+ platformPlugin.configureMatterAccessory(cachedAccessory);
340
+ }
341
+ else {
342
+ log.debug(`Platform ${cachedAccessory.platform} does not implement configureMatterAccessory`);
343
+ }
344
+ }
345
+ }
346
+ }
347
+ /**
348
+ * Get Matter status information for IPC communication
349
+ * Returns undefined if Matter is not enabled for this child bridge
350
+ */
351
+ getMatterStatusInfo() {
352
+ if (!this.matterConfig || !this.matterServer) {
353
+ return undefined;
354
+ }
355
+ const commissioningInfo = this.matterServer.getCommissioningInfo();
356
+ return {
357
+ qrCode: commissioningInfo.qrCode,
358
+ manualPairingCode: commissioningInfo.manualPairingCode,
359
+ serialNumber: this.matterSerialNumber || commissioningInfo.serialNumber,
360
+ commissioned: commissioningInfo.commissioned || false,
361
+ deviceCount: this.matterServer.getAccessories().length,
362
+ };
363
+ }
364
+ /**
365
+ * Check if Matter is enabled for this child bridge
366
+ */
367
+ isMatterEnabled() {
368
+ return this.matterServer !== undefined;
369
+ }
370
+ /**
371
+ * Teardown Matter servers
372
+ */
373
+ async teardown() {
374
+ // Stop main Matter server if it was initialized
375
+ if (this.matterServer) {
376
+ log.debug('Stopping Matter server');
377
+ try {
378
+ await this.matterServer.stop();
379
+ }
380
+ catch (error) {
381
+ log.error('Error stopping Matter server:', error);
382
+ }
383
+ }
384
+ // Stop all external Matter servers
385
+ for (const [uuid, matterServer] of this.externalMatterServers) {
386
+ log.debug(`Stopping external Matter server for ${uuid}`);
387
+ try {
388
+ await matterServer.stop();
389
+ }
390
+ catch (error) {
391
+ log.error(`Error stopping external Matter server for ${uuid}:`, error);
392
+ }
393
+ }
394
+ this.externalMatterServers.clear();
395
+ }
396
+ }
397
+ //# sourceMappingURL=ChildBridgeMatterManager.js.map