homebridge 2.0.0-beta.35 → 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 (280) 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/index.d.ts +10 -10
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -3
  16. package/dist/index.js.map +1 -1
  17. package/dist/logger.spec.d.ts +2 -0
  18. package/dist/logger.spec.d.ts.map +1 -0
  19. package/dist/logger.spec.js +95 -0
  20. package/dist/logger.spec.js.map +1 -0
  21. package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
  22. package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
  23. package/dist/matter/ChildBridgeMatterManager.js +397 -0
  24. package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
  25. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
  26. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
  27. package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
  28. package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
  29. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
  30. package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
  31. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
  32. package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
  33. package/dist/matter/{matterServer.d.ts → MatterAPIImpl.d.ts} +203 -367
  34. package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
  35. package/dist/matter/MatterAPIImpl.js +305 -0
  36. package/dist/matter/MatterAPIImpl.js.map +1 -0
  37. package/dist/matter/MatterBridgeManager.d.ts +91 -0
  38. package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
  39. package/dist/matter/MatterBridgeManager.js +426 -0
  40. package/dist/matter/MatterBridgeManager.js.map +1 -0
  41. package/dist/matter/MatterConfigCollector.d.ts +26 -0
  42. package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
  43. package/dist/matter/MatterConfigCollector.js +78 -0
  44. package/dist/matter/MatterConfigCollector.js.map +1 -0
  45. package/dist/matter/{matterAccessoryCache.d.ts → accessoryCache.d.ts} +12 -3
  46. package/dist/matter/accessoryCache.d.ts.map +1 -0
  47. package/dist/matter/{matterAccessoryCache.js → accessoryCache.js} +32 -10
  48. package/dist/matter/accessoryCache.js.map +1 -0
  49. package/dist/matter/accessoryCache.spec.d.ts +2 -0
  50. package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
  51. package/dist/matter/accessoryCache.spec.js +452 -0
  52. package/dist/matter/accessoryCache.spec.js.map +1 -0
  53. package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
  54. package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
  55. package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
  56. package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
  57. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
  58. package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
  59. package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
  60. package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
  61. package/dist/matter/behaviors/ColorControlBehavior.d.ts +64 -0
  62. package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
  63. package/dist/matter/behaviors/ColorControlBehavior.js +160 -0
  64. package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
  65. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
  66. package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
  67. package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
  68. package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
  69. package/dist/matter/behaviors/DoorLockBehavior.d.ts +21 -0
  70. package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
  71. package/dist/matter/behaviors/DoorLockBehavior.js +49 -0
  72. package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
  73. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
  74. package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
  75. package/dist/matter/behaviors/DoorLockBehavior.spec.js +108 -0
  76. package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
  77. package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
  78. package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
  79. package/dist/matter/behaviors/FanControlBehavior.js +45 -0
  80. package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
  81. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
  82. package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
  83. package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
  84. package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
  85. package/dist/matter/behaviors/IdentifyBehavior.d.ts +21 -0
  86. package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
  87. package/dist/matter/behaviors/IdentifyBehavior.js +27 -0
  88. package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
  89. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
  90. package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
  91. package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
  92. package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
  93. package/dist/matter/behaviors/LevelControlBehavior.d.ts +34 -0
  94. package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
  95. package/dist/matter/behaviors/LevelControlBehavior.js +75 -0
  96. package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
  97. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
  98. package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
  99. package/dist/matter/behaviors/LevelControlBehavior.spec.js +140 -0
  100. package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
  101. package/dist/matter/behaviors/OnOffBehavior.d.ts +28 -0
  102. package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
  103. package/dist/matter/behaviors/OnOffBehavior.js +63 -0
  104. package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
  105. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
  106. package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
  107. package/dist/matter/behaviors/OnOffBehavior.spec.js +116 -0
  108. package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
  109. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
  110. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
  111. package/dist/matter/behaviors/RvcCleanModeBehavior.js +27 -0
  112. package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
  113. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
  114. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
  115. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +56 -0
  116. package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
  117. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +23 -0
  118. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
  119. package/dist/matter/behaviors/RvcOperationalStateBehavior.js +49 -0
  120. package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
  121. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
  122. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
  123. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
  124. package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
  125. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
  126. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
  127. package/dist/matter/behaviors/RvcRunModeBehavior.js +27 -0
  128. package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
  129. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
  130. package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
  131. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +56 -0
  132. package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
  133. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +22 -0
  134. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
  135. package/dist/matter/behaviors/ServiceAreaBehavior.js +35 -0
  136. package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
  137. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
  138. package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
  139. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +52 -0
  140. package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
  141. package/dist/matter/behaviors/ThermostatBehavior.d.ts +23 -0
  142. package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
  143. package/dist/matter/behaviors/ThermostatBehavior.js +79 -0
  144. package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
  145. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
  146. package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
  147. package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
  148. package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
  149. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +32 -0
  150. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
  151. package/dist/matter/behaviors/WindowCoveringBehavior.js +106 -0
  152. package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
  153. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
  154. package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
  155. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
  156. package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
  157. package/dist/matter/behaviors/index.d.ts +20 -0
  158. package/dist/matter/behaviors/index.d.ts.map +1 -0
  159. package/dist/matter/behaviors/index.js +21 -0
  160. package/dist/matter/behaviors/index.js.map +1 -0
  161. package/dist/matter/{matterConfigValidator.d.ts → configValidator.d.ts} +1 -1
  162. package/dist/matter/configValidator.d.ts.map +1 -0
  163. package/dist/matter/{matterConfigValidator.js → configValidator.js} +1 -1
  164. package/dist/matter/configValidator.js.map +1 -0
  165. package/dist/matter/configValidator.spec.d.ts +2 -0
  166. package/dist/matter/configValidator.spec.d.ts.map +1 -0
  167. package/dist/matter/configValidator.spec.js +390 -0
  168. package/dist/matter/configValidator.spec.js.map +1 -0
  169. package/dist/matter/errorHandler.d.ts +33 -0
  170. package/dist/matter/errorHandler.d.ts.map +1 -0
  171. package/dist/matter/errorHandler.js +113 -0
  172. package/dist/matter/errorHandler.js.map +1 -0
  173. package/dist/matter/errorHandler.spec.d.ts +2 -0
  174. package/dist/matter/errorHandler.spec.d.ts.map +1 -0
  175. package/dist/matter/errorHandler.spec.js +159 -0
  176. package/dist/matter/errorHandler.spec.js.map +1 -0
  177. package/dist/matter/index.d.ts +7 -4
  178. package/dist/matter/index.d.ts.map +1 -1
  179. package/dist/matter/index.js +7 -4
  180. package/dist/matter/index.js.map +1 -1
  181. package/dist/matter/{matterLogFormatter.d.ts → logFormatter.d.ts} +1 -1
  182. package/dist/matter/logFormatter.d.ts.map +1 -0
  183. package/dist/matter/{matterLogFormatter.js → logFormatter.js} +33 -6
  184. package/dist/matter/logFormatter.js.map +1 -0
  185. package/dist/matter/logFormatter.spec.d.ts +2 -0
  186. package/dist/matter/logFormatter.spec.d.ts.map +1 -0
  187. package/dist/matter/logFormatter.spec.js +284 -0
  188. package/dist/matter/logFormatter.spec.js.map +1 -0
  189. package/dist/matter/server.d.ts +350 -0
  190. package/dist/matter/server.d.ts.map +1 -0
  191. package/dist/matter/{matterServer.js → server.js} +533 -352
  192. package/dist/matter/server.js.map +1 -0
  193. package/dist/matter/{matterServerHelpers.d.ts → serverHelpers.d.ts} +2 -2
  194. package/dist/matter/serverHelpers.d.ts.map +1 -0
  195. package/dist/matter/{matterServerHelpers.js → serverHelpers.js} +11 -8
  196. package/dist/matter/serverHelpers.js.map +1 -0
  197. package/dist/matter/serverHelpers.spec.d.ts +2 -0
  198. package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
  199. package/dist/matter/serverHelpers.spec.js +521 -0
  200. package/dist/matter/serverHelpers.spec.js.map +1 -0
  201. package/dist/matter/{matterSharedTypes.d.ts → sharedTypes.d.ts} +4 -10
  202. package/dist/matter/sharedTypes.d.ts.map +1 -0
  203. package/dist/matter/{matterSharedTypes.js → sharedTypes.js} +4 -10
  204. package/dist/matter/sharedTypes.js.map +1 -0
  205. package/dist/matter/{matterStorage.d.ts → storage.d.ts} +9 -2
  206. package/dist/matter/storage.d.ts.map +1 -0
  207. package/dist/matter/{matterStorage.js → storage.js} +14 -5
  208. package/dist/matter/{matterStorage.js.map → storage.js.map} +1 -1
  209. package/dist/matter/storage.spec.d.ts +2 -0
  210. package/dist/matter/storage.spec.d.ts.map +1 -0
  211. package/dist/matter/storage.spec.js +570 -0
  212. package/dist/matter/storage.spec.js.map +1 -0
  213. package/dist/matter/typeHelpers.d.ts +45 -0
  214. package/dist/matter/typeHelpers.d.ts.map +1 -0
  215. package/dist/matter/typeHelpers.js +57 -0
  216. package/dist/matter/typeHelpers.js.map +1 -0
  217. package/dist/matter/typeHelpers.spec.d.ts +2 -0
  218. package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
  219. package/dist/matter/typeHelpers.spec.js +127 -0
  220. package/dist/matter/typeHelpers.spec.js.map +1 -0
  221. package/dist/matter/{matterTypes.d.ts → types.d.ts} +2 -2
  222. package/dist/matter/types.d.ts.map +1 -0
  223. package/dist/matter/{matterTypes.js → types.js} +1 -2
  224. package/dist/matter/types.js.map +1 -0
  225. package/dist/platformAccessory.spec.d.ts +2 -0
  226. package/dist/platformAccessory.spec.d.ts.map +1 -0
  227. package/dist/platformAccessory.spec.js +126 -0
  228. package/dist/platformAccessory.spec.js.map +1 -0
  229. package/dist/pluginManager.spec.d.ts +2 -0
  230. package/dist/pluginManager.spec.d.ts.map +1 -0
  231. package/dist/pluginManager.spec.js +43 -0
  232. package/dist/pluginManager.spec.js.map +1 -0
  233. package/dist/server.d.ts +4 -13
  234. package/dist/server.d.ts.map +1 -1
  235. package/dist/server.js +43 -346
  236. package/dist/server.js.map +1 -1
  237. package/dist/server.spec.d.ts +2 -0
  238. package/dist/server.spec.d.ts.map +1 -0
  239. package/dist/server.spec.js +57 -0
  240. package/dist/server.spec.js.map +1 -0
  241. package/dist/user.spec.d.ts +2 -0
  242. package/dist/user.spec.d.ts.map +1 -0
  243. package/dist/user.spec.js +31 -0
  244. package/dist/user.spec.js.map +1 -0
  245. package/dist/util/mac.spec.d.ts +2 -0
  246. package/dist/util/mac.spec.d.ts.map +1 -0
  247. package/dist/util/mac.spec.js +36 -0
  248. package/dist/util/mac.spec.js.map +1 -0
  249. package/dist/version.spec.d.ts +2 -0
  250. package/dist/version.spec.d.ts.map +1 -0
  251. package/dist/version.spec.js +20 -0
  252. package/dist/version.spec.js.map +1 -0
  253. package/package.json +4 -4
  254. package/dist/matter/matterAccessoryCache.d.ts.map +0 -1
  255. package/dist/matter/matterAccessoryCache.js.map +0 -1
  256. package/dist/matter/matterBehaviors.d.ts +0 -194
  257. package/dist/matter/matterBehaviors.d.ts.map +0 -1
  258. package/dist/matter/matterBehaviors.js +0 -665
  259. package/dist/matter/matterBehaviors.js.map +0 -1
  260. package/dist/matter/matterConfigValidator.d.ts.map +0 -1
  261. package/dist/matter/matterConfigValidator.js.map +0 -1
  262. package/dist/matter/matterErrorHandler.d.ts +0 -106
  263. package/dist/matter/matterErrorHandler.d.ts.map +0 -1
  264. package/dist/matter/matterErrorHandler.js +0 -495
  265. package/dist/matter/matterErrorHandler.js.map +0 -1
  266. package/dist/matter/matterLogFormatter.d.ts.map +0 -1
  267. package/dist/matter/matterLogFormatter.js.map +0 -1
  268. package/dist/matter/matterNetworkMonitor.d.ts +0 -68
  269. package/dist/matter/matterNetworkMonitor.d.ts.map +0 -1
  270. package/dist/matter/matterNetworkMonitor.js +0 -249
  271. package/dist/matter/matterNetworkMonitor.js.map +0 -1
  272. package/dist/matter/matterServer.d.ts.map +0 -1
  273. package/dist/matter/matterServer.js.map +0 -1
  274. package/dist/matter/matterServerHelpers.d.ts.map +0 -1
  275. package/dist/matter/matterServerHelpers.js.map +0 -1
  276. package/dist/matter/matterSharedTypes.d.ts.map +0 -1
  277. package/dist/matter/matterSharedTypes.js.map +0 -1
  278. package/dist/matter/matterStorage.d.ts.map +0 -1
  279. package/dist/matter/matterTypes.d.ts.map +0 -1
  280. package/dist/matter/matterTypes.js.map +0 -1
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChildBridgeMatterManager.js","sourceRoot":"","sources":["../../src/matter/ChildBridgeMatterManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * External Matter Accessory Publisher
3
+ *
4
+ * Shared logic for publishing external Matter accessories on dedicated bridges.
5
+ * Used by both MatterBridgeManager and ChildBridgeMatterManager to avoid code duplication.
6
+ */
7
+ import type { InternalMatterAccessory } from './types.js';
8
+ import { MatterServer } from './server.js';
9
+ /**
10
+ * Configuration context for publishing external Matter accessories
11
+ */
12
+ export interface ExternalAccessoryPublishContext {
13
+ /** Port service for allocating Matter ports */
14
+ portService: {
15
+ requestMatterPort: (uniqueId: string) => Promise<number | null | undefined>;
16
+ };
17
+ /** Network interfaces to bind to (from bridge config) */
18
+ networkInterfaces?: string[];
19
+ /** Whether debug mode is enabled */
20
+ debugModeEnabled?: boolean;
21
+ }
22
+ /**
23
+ * Result of publishing an external Matter accessory
24
+ */
25
+ export interface PublishedExternalAccessory {
26
+ /** The MatterServer instance for this accessory */
27
+ server: MatterServer;
28
+ /** Port the server is running on */
29
+ port: number;
30
+ /** Commissioning information */
31
+ commissioningInfo: {
32
+ qrCode?: string;
33
+ manualPairingCode?: string;
34
+ serialNumber?: string;
35
+ commissioned: boolean;
36
+ };
37
+ }
38
+ /**
39
+ * Publish an external Matter accessory on its own dedicated Matter server.
40
+ * This is required for devices like Robotic Vacuum Cleaners that Apple Home
41
+ * requires to be on their own bridge.
42
+ *
43
+ * @param accessory - The Matter accessory to publish
44
+ * @param context - Configuration context for publishing
45
+ * @returns Published accessory info, or null if publishing failed
46
+ */
47
+ export declare function publishExternalMatterAccessory(accessory: InternalMatterAccessory, context: ExternalAccessoryPublishContext): Promise<PublishedExternalAccessory | null>;
48
+ //# sourceMappingURL=ExternalMatterAccessoryPublisher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalMatterAccessoryPublisher.d.ts","sourceRoot":"","sources":["../../src/matter/ExternalMatterAccessoryPublisher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAKzD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI1C;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,+CAA+C;IAC/C,WAAW,EAAE;QACX,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;KAC5E,CAAA;IACD,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,oCAAoC;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,mDAAmD;IACnD,MAAM,EAAE,YAAY,CAAA;IACpB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,iBAAiB,EAAE;QACjB,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;QAC1B,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,OAAO,CAAA;KACtB,CAAA;CACF;AAED;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAClD,SAAS,EAAE,uBAAuB,EAClC,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAgE5C"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * External Matter Accessory Publisher
3
+ *
4
+ * Shared logic for publishing external Matter accessories on dedicated bridges.
5
+ * Used by both MatterBridgeManager and ChildBridgeMatterManager to avoid code duplication.
6
+ */
7
+ import { Logger } from '../logger.js';
8
+ import { User } from '../user.js';
9
+ import { generate } from '../util/mac.js';
10
+ import { MatterServer } from './server.js';
11
+ const log = Logger.internal;
12
+ /**
13
+ * Publish an external Matter accessory on its own dedicated Matter server.
14
+ * This is required for devices like Robotic Vacuum Cleaners that Apple Home
15
+ * requires to be on their own bridge.
16
+ *
17
+ * @param accessory - The Matter accessory to publish
18
+ * @param context - Configuration context for publishing
19
+ * @returns Published accessory info, or null if publishing failed
20
+ */
21
+ export async function publishExternalMatterAccessory(accessory, context) {
22
+ // Validate accessory has required fields
23
+ if (!accessory.uuid) {
24
+ log.error('External Matter accessory missing UUID - skipping');
25
+ return null;
26
+ }
27
+ if (!accessory.displayName) {
28
+ log.error(`External Matter accessory ${accessory.uuid} missing displayName - skipping`);
29
+ return null;
30
+ }
31
+ // Generate deterministic MAC address from UUID (same pattern as HAP external accessories)
32
+ const advertiseAddress = generate(accessory.uuid);
33
+ // For Matter, use the MAC without colons as uniqueId
34
+ const uniqueId = advertiseAddress.replace(/:/g, '');
35
+ // Allocate Matter port for the external Matter server
36
+ const port = await context.portService.requestMatterPort(uniqueId);
37
+ if (!port) {
38
+ log.error(`Failed to allocate Matter port for external Matter accessory ${accessory.displayName}`);
39
+ log.error('Please configure matterPorts in config.json or free up ports in the default range (5530-5541)');
40
+ return null;
41
+ }
42
+ log.info(`Allocated port ${port} for external Matter accessory: ${accessory.displayName}`);
43
+ // Create dedicated Matter server for this accessory
44
+ const matterServer = new MatterServer({
45
+ port,
46
+ uniqueId,
47
+ storagePath: User.matterPath(),
48
+ manufacturer: accessory.manufacturer,
49
+ model: accessory.model,
50
+ firmwareRevision: accessory.firmwareRevision,
51
+ serialNumber: accessory.serialNumber || uniqueId, // use uniqueId as fallback serial number
52
+ debugModeEnabled: context.debugModeEnabled,
53
+ externalAccessory: true, // external accessory, added before server runs
54
+ networkInterfaces: context.networkInterfaces,
55
+ });
56
+ // Start the Matter server (but don't run it yet due to externalAccessory mode)
57
+ await matterServer.start();
58
+ // Get plugin identifier from accessory
59
+ const pluginIdentifier = accessory._associatedPlugin || 'unknown';
60
+ // Register the accessory to this dedicated server
61
+ await matterServer.registerPlatformAccessories(pluginIdentifier, 'ExternalMatter', [accessory]);
62
+ // Now run the server with the device already attached (required for external accessories)
63
+ await matterServer.runServer();
64
+ log.info(`✓ External Matter accessory published: ${accessory.displayName} on port ${port}`);
65
+ // Get commissioning info
66
+ const commissioningInfo = matterServer.getCommissioningInfo();
67
+ return {
68
+ server: matterServer,
69
+ port,
70
+ commissioningInfo,
71
+ };
72
+ }
73
+ //# sourceMappingURL=ExternalMatterAccessoryPublisher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExternalMatterAccessoryPublisher.js","sourceRoot":"","sources":["../../src/matter/ExternalMatterAccessoryPublisher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA;AAiC3B;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,SAAkC,EAClC,OAAwC;IAExC,yCAAyC;IACzC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpB,GAAG,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,6BAA6B,SAAS,CAAC,IAAI,iCAAiC,CAAC,CAAA;QACvF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0FAA0F;IAC1F,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAEjD,qDAAqD;IACrD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAEnD,sDAAsD;IACtD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAClE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,GAAG,CAAC,KAAK,CAAC,gEAAgE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;QAClG,GAAG,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAA;QAC1G,OAAO,IAAI,CAAA;IACb,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,mCAAmC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;IAE1F,oDAAoD;IACpD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC;QACpC,IAAI;QACJ,QAAQ;QACR,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE;QAC9B,YAAY,EAAE,SAAS,CAAC,YAAY;QACpC,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,gBAAgB,EAAE,SAAS,CAAC,gBAAgB;QAC5C,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,QAAQ,EAAE,yCAAyC;QAC3F,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,iBAAiB,EAAE,IAAI,EAAE,+CAA+C;QACxE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,CAAA;IAEF,+EAA+E;IAC/E,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;IAE1B,uCAAuC;IACvC,MAAM,gBAAgB,GAAG,SAAS,CAAC,iBAAiB,IAAI,SAAS,CAAA;IAEjE,kDAAkD;IAClD,MAAM,YAAY,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAE/F,0FAA0F;IAC1F,MAAM,YAAY,CAAC,SAAS,EAAE,CAAA;IAE9B,GAAG,CAAC,IAAI,CAAC,0CAA0C,SAAS,CAAC,WAAW,YAAY,IAAI,EAAE,CAAC,CAAA;IAE3F,yBAAyB;IACzB,MAAM,iBAAiB,GAAG,YAAY,CAAC,oBAAoB,EAAE,CAAA;IAE7D,OAAO;QACL,MAAM,EAAE,YAAY;QACpB,IAAI;QACJ,iBAAiB;KAClB,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ExternalMatterAccessoryPublisher.spec.d.ts.map