homebridge 2.0.0-beta.5 → 2.0.0-beta.50

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 (286) hide show
  1. package/README.md +16 -17
  2. package/bin/homebridge.js +22 -0
  3. package/config-sample.json +3 -3
  4. package/dist/api.d.ts +137 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +151 -0
  7. package/dist/api.js.map +1 -0
  8. package/{lib → dist}/bridgeService.d.ts +16 -32
  9. package/dist/bridgeService.d.ts.map +1 -0
  10. package/dist/bridgeService.js +341 -0
  11. package/dist/bridgeService.js.map +1 -0
  12. package/dist/childBridgeFork.d.ts +40 -0
  13. package/dist/childBridgeFork.d.ts.map +1 -0
  14. package/dist/childBridgeFork.js +362 -0
  15. package/dist/childBridgeFork.js.map +1 -0
  16. package/dist/childBridgeService.d.ts +146 -0
  17. package/dist/childBridgeService.d.ts.map +1 -0
  18. package/dist/childBridgeService.js +416 -0
  19. package/dist/childBridgeService.js.map +1 -0
  20. package/dist/cli.d.ts +3 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +88 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/externalPortService.d.ts +26 -0
  25. package/dist/externalPortService.d.ts.map +1 -0
  26. package/dist/externalPortService.js +77 -0
  27. package/dist/externalPortService.js.map +1 -0
  28. package/dist/index.d.ts +29 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +9 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/ipcService.d.ts +58 -0
  33. package/dist/ipcService.d.ts.map +1 -0
  34. package/dist/ipcService.js +43 -0
  35. package/dist/ipcService.js.map +1 -0
  36. package/dist/logger.d.ts +38 -0
  37. package/dist/logger.d.ts.map +1 -0
  38. package/dist/logger.js +102 -0
  39. package/dist/logger.js.map +1 -0
  40. package/dist/matter/BaseMatterManager.d.ts +20 -0
  41. package/dist/matter/BaseMatterManager.d.ts.map +1 -0
  42. package/dist/matter/BaseMatterManager.js +183 -0
  43. package/dist/matter/BaseMatterManager.js.map +1 -0
  44. package/dist/matter/ChildBridgeMatterManager.d.ts +35 -0
  45. package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
  46. package/dist/matter/ChildBridgeMatterManager.js +222 -0
  47. package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
  48. package/dist/matter/ClusterCommandMapper.d.ts +5 -0
  49. package/dist/matter/ClusterCommandMapper.d.ts.map +1 -0
  50. package/dist/matter/ClusterCommandMapper.js +222 -0
  51. package/dist/matter/ClusterCommandMapper.js.map +1 -0
  52. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +22 -0
  53. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
  54. package/dist/matter/ExternalMatterAccessoryPublisher.js +49 -0
  55. package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
  56. package/dist/matter/MatterAPIImpl.d.ts +443 -0
  57. package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
  58. package/dist/matter/MatterAPIImpl.js +210 -0
  59. package/dist/matter/MatterAPIImpl.js.map +1 -0
  60. package/dist/matter/MatterBridgeManager.d.ts +40 -0
  61. package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
  62. package/dist/matter/MatterBridgeManager.js +340 -0
  63. package/dist/matter/MatterBridgeManager.js.map +1 -0
  64. package/dist/matter/MatterConfigCollector.d.ts +7 -0
  65. package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
  66. package/dist/matter/MatterConfigCollector.js +65 -0
  67. package/dist/matter/MatterConfigCollector.js.map +1 -0
  68. package/dist/matter/accessoryCache.d.ts +57 -0
  69. package/dist/matter/accessoryCache.d.ts.map +1 -0
  70. package/dist/matter/accessoryCache.js +155 -0
  71. package/dist/matter/accessoryCache.js.map +1 -0
  72. package/dist/matter/behaviors/AirQualityBehavior.d.ts +8 -0
  73. package/dist/matter/behaviors/AirQualityBehavior.d.ts.map +1 -0
  74. package/dist/matter/behaviors/AirQualityBehavior.js +11 -0
  75. package/dist/matter/behaviors/AirQualityBehavior.js.map +1 -0
  76. package/dist/matter/behaviors/BehaviorRegistry.d.ts +27 -0
  77. package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
  78. package/dist/matter/behaviors/BehaviorRegistry.js +110 -0
  79. package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
  80. package/dist/matter/behaviors/ColorControlBehavior.d.ts +12 -0
  81. package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
  82. package/dist/matter/behaviors/ColorControlBehavior.js +139 -0
  83. package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
  84. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts +32 -0
  85. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts.map +1 -0
  86. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js +51 -0
  87. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js.map +1 -0
  88. package/dist/matter/behaviors/DoorLockBehavior.d.ts +7 -0
  89. package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
  90. package/dist/matter/behaviors/DoorLockBehavior.js +48 -0
  91. package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
  92. package/dist/matter/behaviors/FanControlBehavior.d.ts +7 -0
  93. package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
  94. package/dist/matter/behaviors/FanControlBehavior.js +48 -0
  95. package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
  96. package/dist/matter/behaviors/IdentifyBehavior.d.ts +7 -0
  97. package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
  98. package/dist/matter/behaviors/IdentifyBehavior.js +25 -0
  99. package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
  100. package/dist/matter/behaviors/LevelControlBehavior.d.ts +11 -0
  101. package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
  102. package/dist/matter/behaviors/LevelControlBehavior.js +100 -0
  103. package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
  104. package/dist/matter/behaviors/OnOffBehavior.d.ts +8 -0
  105. package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
  106. package/dist/matter/behaviors/OnOffBehavior.js +60 -0
  107. package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
  108. package/dist/matter/behaviors/RegistryManager.d.ts +15 -0
  109. package/dist/matter/behaviors/RegistryManager.d.ts.map +1 -0
  110. package/dist/matter/behaviors/RegistryManager.js +31 -0
  111. package/dist/matter/behaviors/RegistryManager.js.map +1 -0
  112. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +14 -0
  113. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
  114. package/dist/matter/behaviors/RvcCleanModeBehavior.js +29 -0
  115. package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
  116. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +10 -0
  117. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
  118. package/dist/matter/behaviors/RvcOperationalStateBehavior.js +81 -0
  119. package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
  120. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +14 -0
  121. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
  122. package/dist/matter/behaviors/RvcRunModeBehavior.js +29 -0
  123. package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
  124. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +9 -0
  125. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
  126. package/dist/matter/behaviors/ServiceAreaBehavior.js +62 -0
  127. package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
  128. package/dist/matter/behaviors/ThermostatBehavior.d.ts +9 -0
  129. package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
  130. package/dist/matter/behaviors/ThermostatBehavior.js +92 -0
  131. package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
  132. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +12 -0
  133. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
  134. package/dist/matter/behaviors/WindowCoveringBehavior.js +108 -0
  135. package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
  136. package/dist/matter/behaviors/index.d.ts +18 -0
  137. package/dist/matter/behaviors/index.d.ts.map +1 -0
  138. package/dist/matter/behaviors/index.js +17 -0
  139. package/dist/matter/behaviors/index.js.map +1 -0
  140. package/dist/matter/clusterTypes.d.ts +178 -0
  141. package/dist/matter/clusterTypes.d.ts.map +1 -0
  142. package/dist/matter/clusterTypes.js +2 -0
  143. package/dist/matter/clusterTypes.js.map +1 -0
  144. package/dist/matter/configValidator.d.ts +26 -0
  145. package/dist/matter/configValidator.d.ts.map +1 -0
  146. package/dist/matter/configValidator.js +173 -0
  147. package/dist/matter/configValidator.js.map +1 -0
  148. package/dist/matter/errorHandler.d.ts +11 -0
  149. package/dist/matter/errorHandler.d.ts.map +1 -0
  150. package/dist/matter/errorHandler.js +81 -0
  151. package/dist/matter/errorHandler.js.map +1 -0
  152. package/dist/matter/errors.d.ts +46 -0
  153. package/dist/matter/errors.d.ts.map +1 -0
  154. package/dist/matter/errors.js +68 -0
  155. package/dist/matter/errors.js.map +1 -0
  156. package/dist/matter/index.d.ts +97 -0
  157. package/dist/matter/index.d.ts.map +1 -0
  158. package/dist/matter/index.js +10 -0
  159. package/dist/matter/index.js.map +1 -0
  160. package/dist/matter/logFormatter.d.ts +2 -0
  161. package/dist/matter/logFormatter.d.ts.map +1 -0
  162. package/dist/matter/logFormatter.js +100 -0
  163. package/dist/matter/logFormatter.js.map +1 -0
  164. package/dist/matter/managerTypes.d.ts +57 -0
  165. package/dist/matter/managerTypes.d.ts.map +1 -0
  166. package/dist/matter/managerTypes.js +2 -0
  167. package/dist/matter/managerTypes.js.map +1 -0
  168. package/dist/matter/server.d.ts +112 -0
  169. package/dist/matter/server.d.ts.map +1 -0
  170. package/dist/matter/server.js +1508 -0
  171. package/dist/matter/server.js.map +1 -0
  172. package/dist/matter/serverHelpers.d.ts +31 -0
  173. package/dist/matter/serverHelpers.d.ts.map +1 -0
  174. package/dist/matter/serverHelpers.js +273 -0
  175. package/dist/matter/serverHelpers.js.map +1 -0
  176. package/dist/matter/sharedTypes.d.ts +93 -0
  177. package/dist/matter/sharedTypes.d.ts.map +1 -0
  178. package/dist/matter/sharedTypes.js +20 -0
  179. package/dist/matter/sharedTypes.js.map +1 -0
  180. package/dist/matter/storage.d.ts +45 -0
  181. package/dist/matter/storage.d.ts.map +1 -0
  182. package/dist/matter/storage.js +325 -0
  183. package/dist/matter/storage.js.map +1 -0
  184. package/dist/matter/typeHelpers.d.ts +15 -0
  185. package/dist/matter/typeHelpers.d.ts.map +1 -0
  186. package/dist/matter/typeHelpers.js +33 -0
  187. package/dist/matter/typeHelpers.js.map +1 -0
  188. package/dist/matter/types.d.ts +565 -0
  189. package/dist/matter/types.d.ts.map +1 -0
  190. package/dist/matter/types.js +132 -0
  191. package/dist/matter/types.js.map +1 -0
  192. package/dist/matter/utils.d.ts +13 -0
  193. package/dist/matter/utils.d.ts.map +1 -0
  194. package/dist/matter/utils.js +21 -0
  195. package/dist/matter/utils.js.map +1 -0
  196. package/{lib → dist}/platformAccessory.d.ts +8 -21
  197. package/dist/platformAccessory.d.ts.map +1 -0
  198. package/dist/platformAccessory.js +79 -0
  199. package/dist/platformAccessory.js.map +1 -0
  200. package/{lib → dist}/plugin.d.ts +2 -6
  201. package/dist/plugin.d.ts.map +1 -0
  202. package/dist/plugin.js +159 -0
  203. package/dist/plugin.js.map +1 -0
  204. package/{lib → dist}/pluginManager.d.ts +3 -25
  205. package/dist/pluginManager.d.ts.map +1 -0
  206. package/{lib → dist}/pluginManager.js +87 -115
  207. package/dist/pluginManager.js.map +1 -0
  208. package/{lib → dist}/server.d.ts +15 -20
  209. package/dist/server.d.ts.map +1 -0
  210. package/dist/server.js +732 -0
  211. package/dist/server.js.map +1 -0
  212. package/{lib → dist}/storageService.d.ts.map +1 -1
  213. package/dist/storageService.js +41 -0
  214. package/dist/storageService.js.map +1 -0
  215. package/{lib → dist}/user.d.ts +1 -3
  216. package/dist/user.d.ts.map +1 -0
  217. package/dist/user.js +29 -0
  218. package/dist/user.js.map +1 -0
  219. package/{lib → dist}/util/mac.d.ts +1 -0
  220. package/dist/util/mac.d.ts.map +1 -0
  221. package/dist/util/mac.js +13 -0
  222. package/dist/util/mac.js.map +1 -0
  223. package/dist/version.d.ts.map +1 -0
  224. package/dist/version.js +16 -0
  225. package/dist/version.js.map +1 -0
  226. package/package.json +49 -50
  227. package/bin/homebridge +0 -17
  228. package/lib/api.d.ts +0 -210
  229. package/lib/api.d.ts.map +0 -1
  230. package/lib/api.js +0 -155
  231. package/lib/api.js.map +0 -1
  232. package/lib/bridgeService.d.ts.map +0 -1
  233. package/lib/bridgeService.js +0 -426
  234. package/lib/bridgeService.js.map +0 -1
  235. package/lib/childBridgeFork.d.ts +0 -37
  236. package/lib/childBridgeFork.d.ts.map +0 -1
  237. package/lib/childBridgeFork.js +0 -244
  238. package/lib/childBridgeFork.js.map +0 -1
  239. package/lib/childBridgeService.d.ts +0 -199
  240. package/lib/childBridgeService.d.ts.map +0 -1
  241. package/lib/childBridgeService.js +0 -428
  242. package/lib/childBridgeService.js.map +0 -1
  243. package/lib/cli.d.ts +0 -4
  244. package/lib/cli.d.ts.map +0 -1
  245. package/lib/cli.js +0 -111
  246. package/lib/cli.js.map +0 -1
  247. package/lib/externalPortService.d.ts +0 -33
  248. package/lib/externalPortService.d.ts.map +0 -1
  249. package/lib/externalPortService.js +0 -64
  250. package/lib/externalPortService.js.map +0 -1
  251. package/lib/index.d.ts +0 -76
  252. package/lib/index.d.ts.map +0 -1
  253. package/lib/index.js +0 -72
  254. package/lib/index.js.map +0 -1
  255. package/lib/ipcService.d.ts +0 -33
  256. package/lib/ipcService.d.ts.map +0 -1
  257. package/lib/ipcService.js +0 -49
  258. package/lib/ipcService.js.map +0 -1
  259. package/lib/logger.d.ts +0 -78
  260. package/lib/logger.d.ts.map +0 -1
  261. package/lib/logger.js +0 -147
  262. package/lib/logger.js.map +0 -1
  263. package/lib/platformAccessory.d.ts.map +0 -1
  264. package/lib/platformAccessory.js +0 -102
  265. package/lib/platformAccessory.js.map +0 -1
  266. package/lib/plugin.d.ts.map +0 -1
  267. package/lib/plugin.js +0 -194
  268. package/lib/plugin.js.map +0 -1
  269. package/lib/pluginManager.d.ts.map +0 -1
  270. package/lib/pluginManager.js.map +0 -1
  271. package/lib/server.d.ts.map +0 -1
  272. package/lib/server.js +0 -457
  273. package/lib/server.js.map +0 -1
  274. package/lib/storageService.js +0 -70
  275. package/lib/storageService.js.map +0 -1
  276. package/lib/user.d.ts.map +0 -1
  277. package/lib/user.js +0 -36
  278. package/lib/user.js.map +0 -1
  279. package/lib/util/mac.d.ts.map +0 -1
  280. package/lib/util/mac.js +0 -20
  281. package/lib/util/mac.js.map +0 -1
  282. package/lib/version.d.ts.map +0 -1
  283. package/lib/version.js +0 -21
  284. package/lib/version.js.map +0 -1
  285. /package/{lib → dist}/storageService.d.ts +0 -0
  286. /package/{lib → dist}/version.d.ts +0 -0
@@ -0,0 +1,210 @@
1
+ import { Logger } from '../logger.js';
2
+ import { clusterNames, clusters, deviceTypes, MatterTypes } from './index.js';
3
+ const log = Logger.withPrefix('Matter/API');
4
+ const EXTERNAL_DEVICE_TYPES = [
5
+ deviceTypes.RoboticVacuumCleaner,
6
+ ];
7
+ function requiresExternalBridge(deviceType) {
8
+ return EXTERNAL_DEVICE_TYPES.some(externalType => externalType.deviceType === deviceType.deviceType);
9
+ }
10
+ class MatterAccessoryValidationError extends Error {
11
+ accessory;
12
+ constructor(message, accessory) {
13
+ super(message);
14
+ this.accessory = accessory;
15
+ this.name = 'MatterAccessoryValidationError';
16
+ }
17
+ }
18
+ export class MatterAPIImpl {
19
+ api;
20
+ constructor(api) {
21
+ this.api = api;
22
+ }
23
+ validateAccessory(accessory, context) {
24
+ if (!accessory.uuid) {
25
+ throw new MatterAccessoryValidationError(`${context}: Matter accessory missing required 'uuid' field`, accessory);
26
+ }
27
+ if (!accessory.displayName) {
28
+ throw new MatterAccessoryValidationError(`${context}: Matter accessory '${accessory.uuid}' missing required 'displayName' field`, accessory);
29
+ }
30
+ if (!accessory.deviceType) {
31
+ throw new MatterAccessoryValidationError(`${context}: Matter accessory '${accessory.displayName}' (${accessory.uuid}) missing required 'deviceType' field`, accessory);
32
+ }
33
+ if (!accessory.manufacturer) {
34
+ throw new MatterAccessoryValidationError(`${context}: Matter accessory '${accessory.displayName}' (${accessory.uuid}) missing required 'manufacturer' field`, accessory);
35
+ }
36
+ if (!accessory.model) {
37
+ throw new MatterAccessoryValidationError(`${context}: Matter accessory '${accessory.displayName}' (${accessory.uuid}) missing required 'model' field`, accessory);
38
+ }
39
+ if (!accessory.serialNumber) {
40
+ throw new MatterAccessoryValidationError(`${context}: Matter accessory '${accessory.displayName}' (${accessory.uuid}) missing required 'serialNumber' field`, accessory);
41
+ }
42
+ }
43
+ validateAccessories(accessories, context) {
44
+ const validAccessories = [];
45
+ for (const accessory of accessories) {
46
+ try {
47
+ this.validateAccessory(accessory, context);
48
+ validAccessories.push(accessory);
49
+ }
50
+ catch (error) {
51
+ if (error instanceof MatterAccessoryValidationError) {
52
+ log.error(error.message);
53
+ log.error('This accessory will not be registered. Please fix the issue in your plugin.');
54
+ }
55
+ else {
56
+ log.error(`${context}: Unexpected error validating accessory:`, error);
57
+ }
58
+ }
59
+ }
60
+ return validAccessories;
61
+ }
62
+ validateClusterName(clusterName, context) {
63
+ const validClusterNames = Object.values(clusterNames);
64
+ if (!validClusterNames.includes(clusterName)) {
65
+ log.warn(`${context}: Unknown cluster name '${clusterName}'. This might cause issues. `
66
+ + `Valid clusters: ${validClusterNames.join(', ')}`);
67
+ }
68
+ }
69
+ get uuid() {
70
+ return this.api.hap.uuid;
71
+ }
72
+ get deviceTypes() {
73
+ return deviceTypes;
74
+ }
75
+ get clusters() {
76
+ return clusters;
77
+ }
78
+ get clusterNames() {
79
+ return clusterNames;
80
+ }
81
+ get types() {
82
+ return MatterTypes;
83
+ }
84
+ async registerPlatformAccessories(pluginIdentifier, platformName, accessories) {
85
+ if (accessories.length === 0) {
86
+ log.warn(`${pluginIdentifier}: Attempted to register 0 Matter accessories`);
87
+ return;
88
+ }
89
+ const validAccessories = this.validateAccessories(accessories, `registerPlatformAccessories (${pluginIdentifier}/${platformName})`);
90
+ if (validAccessories.length === 0) {
91
+ log.error(`${pluginIdentifier}: All ${accessories.length} Matter accessories failed validation`);
92
+ return;
93
+ }
94
+ if (validAccessories.length < accessories.length) {
95
+ log.warn(`${pluginIdentifier}: ${accessories.length - validAccessories.length} of ${accessories.length} Matter accessories failed validation`);
96
+ }
97
+ const normalAccessories = [];
98
+ const externalAccessories = [];
99
+ for (const accessory of validAccessories) {
100
+ if (requiresExternalBridge(accessory.deviceType)) {
101
+ externalAccessories.push(accessory);
102
+ }
103
+ else {
104
+ normalAccessories.push(accessory);
105
+ }
106
+ }
107
+ if (normalAccessories.length > 0) {
108
+ normalAccessories.forEach((accessory) => {
109
+ const internal = accessory;
110
+ internal._associatedPlugin = pluginIdentifier;
111
+ internal._associatedPlatform = platformName;
112
+ });
113
+ log.debug(`${pluginIdentifier}: Registering ${normalAccessories.length} Matter accessor${normalAccessories.length === 1 ? 'y' : 'ies'} for platform '${platformName}'`);
114
+ this.api.emit("registerMatterPlatformAccessories", pluginIdentifier, platformName, normalAccessories);
115
+ }
116
+ if (externalAccessories.length > 0) {
117
+ externalAccessories.forEach((accessory) => {
118
+ const internal = accessory;
119
+ internal._associatedPlugin = pluginIdentifier;
120
+ });
121
+ log.debug(`${pluginIdentifier}: Publishing ${externalAccessories.length} external Matter accessor${externalAccessories.length === 1 ? 'y' : 'ies'} (${externalAccessories.map(a => a.displayName).join(', ')})`);
122
+ const registrationId = `${pluginIdentifier}-${Date.now()}-${Math.random()}`;
123
+ const registrationPromise = new Promise((resolve) => {
124
+ const internalApi = this.api;
125
+ if (!internalApi._pendingExternalRegistrations) {
126
+ internalApi._pendingExternalRegistrations = new Map();
127
+ }
128
+ internalApi._pendingExternalRegistrations.set(registrationId, resolve);
129
+ });
130
+ this.api.emit("publishExternalMatterAccessories", externalAccessories, registrationId);
131
+ await registrationPromise;
132
+ }
133
+ }
134
+ async updatePlatformAccessories(accessories) {
135
+ if (accessories.length === 0) {
136
+ log.warn('Attempted to update 0 Matter platform accessories');
137
+ return;
138
+ }
139
+ log.debug(`Updating ${accessories.length} Matter platform accessor${accessories.length === 1 ? 'y' : 'ies'} in cache`);
140
+ this.api.emit("updateMatterPlatformAccessories", accessories);
141
+ }
142
+ async unregisterPlatformAccessories(pluginIdentifier, platformName, accessories) {
143
+ if (accessories.length === 0) {
144
+ log.warn(`${pluginIdentifier}: Attempted to unregister 0 Matter accessories`);
145
+ return;
146
+ }
147
+ const normalAccessories = [];
148
+ const externalAccessories = [];
149
+ for (const accessory of accessories) {
150
+ if (requiresExternalBridge(accessory.deviceType)) {
151
+ externalAccessories.push(accessory);
152
+ }
153
+ else {
154
+ normalAccessories.push(accessory);
155
+ }
156
+ }
157
+ if (normalAccessories.length > 0) {
158
+ log.debug(`${pluginIdentifier}: Unregistering ${normalAccessories.length} Matter accessor${normalAccessories.length === 1 ? 'y' : 'ies'} from platform '${platformName}'`);
159
+ this.api.emit("unregisterMatterPlatformAccessories", pluginIdentifier, platformName, normalAccessories);
160
+ }
161
+ if (externalAccessories.length > 0) {
162
+ log.debug(`${pluginIdentifier}: Unregistering ${externalAccessories.length} external Matter accessor${externalAccessories.length === 1 ? 'y' : 'ies'} (${externalAccessories.map(a => a.displayName).join(', ')})`);
163
+ this.api.emit("unregisterExternalMatterAccessories", externalAccessories);
164
+ }
165
+ }
166
+ async updateAccessoryState(uuid, cluster, attributes, partId) {
167
+ if (!uuid) {
168
+ log.error('updateAccessoryState: uuid parameter is required');
169
+ return;
170
+ }
171
+ if (!cluster) {
172
+ log.error(`updateAccessoryState: cluster parameter is required for accessory ${uuid}`);
173
+ return;
174
+ }
175
+ if (!attributes || Object.keys(attributes).length === 0) {
176
+ log.warn(`updateAccessoryState: No attributes provided for accessory ${uuid}, cluster ${cluster}`);
177
+ return;
178
+ }
179
+ this.validateClusterName(cluster, `updateAccessoryState (${uuid})`);
180
+ log.debug(`Updating Matter accessory state: uuid=${uuid}, cluster=${cluster}, attributes=${Object.keys(attributes).join(', ')}${partId ? `, partId=${partId}` : ''}`);
181
+ this.api.emit("updateMatterAccessoryState", uuid, cluster, attributes, partId);
182
+ }
183
+ async getAccessoryState(uuid, cluster, partId) {
184
+ if (!uuid) {
185
+ log.error('getAccessoryState: uuid parameter is required');
186
+ return undefined;
187
+ }
188
+ if (!cluster) {
189
+ log.error(`getAccessoryState: cluster parameter is required for accessory ${uuid}`);
190
+ return undefined;
191
+ }
192
+ this.validateClusterName(cluster, `getAccessoryState (${uuid})`);
193
+ log.debug(`Getting Matter accessory state: uuid=${uuid}, cluster=${cluster}${partId ? `, partId=${partId}` : ''}`);
194
+ const internalApi = this.api;
195
+ const matterManager = internalApi._matterManager;
196
+ if (matterManager) {
197
+ const externalServer = matterManager.getExternalServer(uuid);
198
+ if (externalServer) {
199
+ return externalServer.getAccessoryState(uuid, cluster, partId);
200
+ }
201
+ }
202
+ const matterServer = internalApi._matterServer;
203
+ if (!matterServer) {
204
+ log.debug(`getAccessoryState: Matter server not available for accessory ${uuid}`);
205
+ return undefined;
206
+ }
207
+ return matterServer.getAccessoryState(uuid, cluster, partId);
208
+ }
209
+ }
210
+ //# sourceMappingURL=MatterAPIImpl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatterAPIImpl.js","sourceRoot":"","sources":["../../src/matter/MatterAPIImpl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { HomebridgeAPI } from '../api.js';
2
+ import type { HomebridgeConfig } from '../bridgeService.js';
3
+ import type { ExternalPortService } from '../externalPortService.js';
4
+ import type { HomebridgeOptions } from '../server.js';
5
+ import type { AccessoryInfo } from './managerTypes.js';
6
+ import type { InternalMatterAccessory } from './types.js';
7
+ import { PluginManager } from '../pluginManager.js';
8
+ import { BaseMatterManager } from './BaseMatterManager.js';
9
+ export interface MatterStatusInfo {
10
+ enabled: boolean;
11
+ port?: number;
12
+ setupUri?: string;
13
+ pin?: string;
14
+ serialNumber?: string;
15
+ commissioned?: boolean;
16
+ deviceCount?: number;
17
+ }
18
+ export declare class MatterBridgeManager extends BaseMatterManager {
19
+ private readonly config;
20
+ private readonly api;
21
+ private readonly externalPortService;
22
+ private readonly options;
23
+ private readonly server;
24
+ constructor(config: HomebridgeConfig, api: HomebridgeAPI, externalPortService: ExternalPortService, pluginManager: PluginManager, options: HomebridgeOptions, server: {
25
+ registerExternalMatterBridge: (username: string, owner: string) => void;
26
+ });
27
+ private setupEventListeners;
28
+ static collectConfiguredMatterPorts(config: HomebridgeConfig): number[];
29
+ initialize(): Promise<void>;
30
+ handlePublishExternalAccessories(accessories: InternalMatterAccessory[], registrationId: string): Promise<void>;
31
+ getMatterStatus(): MatterStatusInfo;
32
+ collectAllAccessories(bridgeUsername?: string): AccessoryInfo[];
33
+ getAccessoryInfo(uuid: string): AccessoryInfo | undefined;
34
+ private collectAccessoriesFromServer;
35
+ private transformAccessoryData;
36
+ private getAccessoryDetailFromServer;
37
+ private getCurrentStateFromServer;
38
+ teardown(): Promise<void>;
39
+ }
40
+ //# sourceMappingURL=MatterBridgeManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatterBridgeManager.d.ts","sourceRoot":"","sources":["../../src/matter/MatterBridgeManager.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAErD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAIzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAU1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAKD,qBAAa,mBAAoB,SAAQ,iBAAiB;IAEtD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAEpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBALN,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,aAAa,EAClB,mBAAmB,EAAE,mBAAmB,EACzD,aAAa,EAAE,aAAa,EACX,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE;QAAE,4BAA4B,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAUtG,OAAO,CAAC,mBAAmB;IA4C3B,MAAM,CAAC,4BAA4B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAyBjE,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqG3B,gCAAgC,CAAC,WAAW,EAAE,uBAAuB,EAAE,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4DrH,eAAe,IAAI,gBAAgB;IAgCnC,qBAAqB,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAoC/D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAyCzD,OAAO,CAAC,4BAA4B;IAiCpC,OAAO,CAAC,sBAAsB;IA0E9B,OAAO,CAAC,4BAA4B;IA4BpC,OAAO,CAAC,yBAAyB;IAmC3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBhC"}
@@ -0,0 +1,340 @@
1
+ import { Logger } from '../logger.js';
2
+ import { User } from '../user.js';
3
+ import { BaseMatterManager } from './BaseMatterManager.js';
4
+ import { publishExternalMatterAccessory } from './ExternalMatterAccessoryPublisher.js';
5
+ import { MatterServer } from './server.js';
6
+ import { getErrorCode, normalizeBindConfig } from './utils.js';
7
+ const log = Logger.withPrefix('Matter/MainManager');
8
+ export class MatterBridgeManager extends BaseMatterManager {
9
+ config;
10
+ api;
11
+ externalPortService;
12
+ options;
13
+ server;
14
+ constructor(config, api, externalPortService, pluginManager, options, server) {
15
+ super(pluginManager);
16
+ this.config = config;
17
+ this.api = api;
18
+ this.externalPortService = externalPortService;
19
+ this.options = options;
20
+ this.server = server;
21
+ this.setupEventListeners();
22
+ }
23
+ setupEventListeners() {
24
+ this.api.on("publishExternalMatterAccessories", (accessories, registrationId) => {
25
+ this.handlePublishExternalAccessories(accessories, registrationId).catch((error) => {
26
+ log.error('Failed to publish external Matter accessories:', error);
27
+ this.api._resolveExternalRegistration(registrationId);
28
+ });
29
+ });
30
+ this.api.on("registerMatterPlatformAccessories", (pluginIdentifier, platformName, accessories) => {
31
+ this.handleRegisterPlatformAccessories(pluginIdentifier, platformName, accessories).catch((error) => {
32
+ log.error(`Failed to register Matter accessories for ${pluginIdentifier}:`, error);
33
+ });
34
+ });
35
+ this.api.on("updateMatterPlatformAccessories", (accessories) => {
36
+ this.handleUpdatePlatformAccessories(accessories).catch((error) => {
37
+ log.error('Failed to update Matter platform accessories:', error);
38
+ });
39
+ });
40
+ this.api.on("unregisterMatterPlatformAccessories", (pluginIdentifier, platformName, accessories) => {
41
+ this.handleUnregisterPlatformAccessories(pluginIdentifier, platformName, accessories).catch((error) => {
42
+ log.error(`Failed to unregister Matter accessories for ${pluginIdentifier}:`, error);
43
+ });
44
+ });
45
+ this.api.on("unregisterExternalMatterAccessories", (accessories) => {
46
+ this.handleUnregisterExternalAccessories(accessories).catch((error) => {
47
+ log.error('Failed to unregister external Matter accessories:', error);
48
+ });
49
+ });
50
+ this.api.on("updateMatterAccessoryState", (uuid, cluster, attributes, partId) => {
51
+ this.handleUpdateAccessoryState(uuid, cluster, attributes, partId).catch((error) => {
52
+ log.error('Failed to update Matter accessory state:', error);
53
+ });
54
+ });
55
+ }
56
+ static collectConfiguredMatterPorts(config) {
57
+ const configuredMatterPorts = [];
58
+ if (config.bridge.matter?.port) {
59
+ configuredMatterPorts.push(config.bridge.matter.port);
60
+ }
61
+ for (const platform of config.platforms) {
62
+ if (platform._bridge?.matter?.port) {
63
+ configuredMatterPorts.push(platform._bridge.matter.port);
64
+ }
65
+ }
66
+ for (const accessory of config.accessories) {
67
+ if (accessory._bridge?.matter?.port) {
68
+ configuredMatterPorts.push(accessory._bridge.matter.port);
69
+ }
70
+ }
71
+ return configuredMatterPorts;
72
+ }
73
+ async initialize() {
74
+ if (!this.config.bridge.matter) {
75
+ return;
76
+ }
77
+ let matterPort;
78
+ try {
79
+ log.info('Initializing Matter server for main bridge...');
80
+ matterPort = this.config.bridge.matter.port;
81
+ if (!matterPort) {
82
+ matterPort = await this.externalPortService.requestPort(`${this.config.bridge.username}:MATTER`);
83
+ if (!matterPort) {
84
+ matterPort = 5540;
85
+ log.warn('No port available from pool for main Matter bridge, using default port 5540');
86
+ }
87
+ else {
88
+ log.info(`Allocated port ${matterPort} from pool for main Matter bridge`);
89
+ }
90
+ }
91
+ const serialNumber = this.config.bridge.username.replace(/:/g, '');
92
+ const networkInterfaces = normalizeBindConfig(this.config.bridge.bind);
93
+ this.matterServer = new MatterServer({
94
+ storagePath: User.matterPath(),
95
+ port: matterPort,
96
+ uniqueId: serialNumber,
97
+ manufacturer: this.config.bridge.manufacturer,
98
+ model: this.config.bridge.model,
99
+ firmwareRevision: this.config.bridge.firmwareRevision,
100
+ serialNumber,
101
+ debugModeEnabled: this.options.debugModeEnabled,
102
+ networkInterfaces,
103
+ });
104
+ await this.matterServer.start();
105
+ log.info('Matter server initialized for main bridge');
106
+ this.api._setMatterEnabled(true);
107
+ this.api._setMatterServer(this.matterServer);
108
+ }
109
+ catch (error) {
110
+ log.error('Failed to initialize Matter server for main bridge:', error);
111
+ const errorMessage = error instanceof Error ? error.message : String(error);
112
+ const errorCode = getErrorCode(error);
113
+ if (errorMessage.includes('corrupted')) {
114
+ log.error('');
115
+ log.error('╔════════════════════════════════════════════════════════════════════════════╗');
116
+ log.error('║ MATTER STORAGE CORRUPTED ║');
117
+ log.error('╠════════════════════════════════════════════════════════════════════════════╣');
118
+ log.error('║ Your Matter storage has become corrupted. This can happen when: ║');
119
+ log.error('║ • Matter.js library version changes ║');
120
+ log.error('║ • Storage format upgrades occur ║');
121
+ log.error('║ • Incomplete writes during shutdown ║');
122
+ log.error('║ ║');
123
+ log.error('║ To fix this, delete the corrupted storage directory: ║');
124
+ log.error(`║ rm -rf ~/.homebridge/matter/${this.config.bridge.username} ║`);
125
+ log.error('║ ║');
126
+ log.error('║ Note: You will need to re-pair your Matter devices after deletion. ║');
127
+ log.error('╚════════════════════════════════════════════════════════════════════════════╝');
128
+ log.error('');
129
+ }
130
+ else if (errorCode === 'EADDRINUSE' || errorMessage.includes('address already in use')) {
131
+ log.error('');
132
+ log.error('╔════════════════════════════════════════════════════════════════════════════╗');
133
+ log.error('║ MATTER PORT ALREADY IN USE ║');
134
+ log.error('╠════════════════════════════════════════════════════════════════════════════╣');
135
+ log.error(`║ Port ${matterPort} is already in use by another application. ║`);
136
+ log.error('║ ║');
137
+ log.error('║ To fix this: ║');
138
+ log.error('║ 1. Stop the application using this port, or ║');
139
+ log.error('║ 2. Configure a different port in your config.json: ║');
140
+ log.error('║ "bridge": { ║');
141
+ log.error('║ "matter": { ║');
142
+ log.error('║ "port": <different-port> ║');
143
+ log.error('║ } ║');
144
+ log.error('║ } ║');
145
+ log.error('╚════════════════════════════════════════════════════════════════════════════╝');
146
+ log.error('');
147
+ }
148
+ }
149
+ }
150
+ async handlePublishExternalAccessories(accessories, registrationId) {
151
+ log.info(`Publishing ${accessories.length} external Matter accessor${accessories.length === 1 ? 'y' : 'ies'}`);
152
+ const networkInterfaces = normalizeBindConfig(this.config.bridge.bind);
153
+ try {
154
+ for (const accessory of accessories) {
155
+ try {
156
+ if (this.externalMatterServers.has(accessory.uuid)) {
157
+ log.warn(`External Matter accessory ${accessory.displayName} (${accessory.uuid}) is already published`);
158
+ continue;
159
+ }
160
+ const result = await publishExternalMatterAccessory(accessory, {
161
+ portService: this.externalPortService,
162
+ networkInterfaces,
163
+ debugModeEnabled: this.options.debugModeEnabled,
164
+ });
165
+ if (!result) {
166
+ continue;
167
+ }
168
+ this.externalMatterServers.set(accessory.uuid, result.server);
169
+ this.server.registerExternalMatterBridge(result.username, this.config.bridge.username);
170
+ if (accessory._eventEmitter) {
171
+ accessory._eventEmitter.emit('ready', result.port);
172
+ }
173
+ if (result.commissioningInfo.qrCode && result.commissioningInfo.manualPairingCode) {
174
+ log.info(`📱 Commissioning codes for ${accessory.displayName}:`);
175
+ log.info(` QR Code: ${result.commissioningInfo.qrCode}`);
176
+ log.info(` Manual Code: ${result.commissioningInfo.manualPairingCode}`);
177
+ }
178
+ }
179
+ catch (error) {
180
+ log.error(`Failed to publish external Matter accessory ${accessory.displayName}:`, error);
181
+ }
182
+ }
183
+ }
184
+ finally {
185
+ this.api._resolveExternalRegistration(registrationId);
186
+ }
187
+ }
188
+ getMatterStatus() {
189
+ if (this.matterServer) {
190
+ const commissioningInfo = this.matterServer.getCommissioningInfo();
191
+ return {
192
+ enabled: true,
193
+ port: this.config.bridge.matter?.port,
194
+ setupUri: commissioningInfo.qrCode,
195
+ pin: commissioningInfo.manualPairingCode,
196
+ serialNumber: commissioningInfo.serialNumber,
197
+ commissioned: commissioningInfo.commissioned || false,
198
+ deviceCount: this.matterServer.getAccessories().length,
199
+ };
200
+ }
201
+ else if (this.config.bridge.matter) {
202
+ return {
203
+ enabled: false,
204
+ port: this.config.bridge.matter?.port,
205
+ };
206
+ }
207
+ return {
208
+ enabled: false,
209
+ };
210
+ }
211
+ collectAllAccessories(bridgeUsername) {
212
+ const accessories = [];
213
+ if (!bridgeUsername || bridgeUsername === this.config.bridge.username) {
214
+ if (this.matterServer) {
215
+ const mainAccessories = this.collectAccessoriesFromServer(this.matterServer, this.config.bridge.username, 'main', this.config.bridge.name || 'Homebridge');
216
+ accessories.push(...mainAccessories);
217
+ for (const server of this.externalMatterServers.values()) {
218
+ const externalAccessories = this.collectAccessoriesFromServer(server, server.username, 'external', server.bridgeName);
219
+ accessories.push(...externalAccessories);
220
+ }
221
+ }
222
+ }
223
+ return accessories;
224
+ }
225
+ getAccessoryInfo(uuid) {
226
+ if (this.matterServer) {
227
+ const accessory = this.getAccessoryDetailFromServer(this.matterServer, uuid, this.config.bridge.username, 'main');
228
+ if (accessory) {
229
+ return accessory;
230
+ }
231
+ }
232
+ for (const server of this.externalMatterServers.values()) {
233
+ const accessory = this.getAccessoryDetailFromServer(server, uuid, server.username, 'external');
234
+ if (accessory) {
235
+ return accessory;
236
+ }
237
+ }
238
+ return undefined;
239
+ }
240
+ collectAccessoriesFromServer(server, bridgeUsername, bridgeType, bridgeName) {
241
+ const cached = server.getAllCachedAccessories();
242
+ const accessories = [];
243
+ for (const acc of cached) {
244
+ const accessory = this.transformAccessoryData(acc, server, bridgeUsername, bridgeType, bridgeName);
245
+ accessories.push(accessory);
246
+ }
247
+ return accessories;
248
+ }
249
+ transformAccessoryData(acc, server, bridgeUsername, bridgeType, bridgeName) {
250
+ const currentState = this.getCurrentStateFromServer(server, acc.uuid);
251
+ const deviceTypeStr = acc.deviceType.name || `Device Code ${acc.deviceType.code || 'unknown'}`;
252
+ return {
253
+ uuid: acc.uuid,
254
+ displayName: acc.displayName,
255
+ serialNumber: acc.serialNumber,
256
+ manufacturer: acc.manufacturer,
257
+ model: acc.model,
258
+ firmwareRevision: acc.firmwareRevision,
259
+ deviceType: deviceTypeStr,
260
+ clusters: currentState,
261
+ parts: acc.parts?.map(part => ({
262
+ id: part.id,
263
+ displayName: part.displayName,
264
+ deviceType: part.deviceType.name || `Device Code ${part.deviceType.code || 'unknown'}`,
265
+ clusters: this.getCurrentStateFromServer(server, acc.uuid, part.id),
266
+ })),
267
+ bridge: {
268
+ username: bridgeUsername,
269
+ type: bridgeType,
270
+ name: bridgeName,
271
+ },
272
+ plugin: acc.plugin,
273
+ platform: acc.platform,
274
+ context: acc.context,
275
+ commissioned: server.isCommissioned(),
276
+ fabricCount: server.getCommissionedFabricCount(),
277
+ fabrics: server.getFabricInfo().map(fabric => ({
278
+ fabricIndex: fabric.fabricIndex,
279
+ fabricId: typeof fabric.fabricId === 'string' ? BigInt(fabric.fabricId) : fabric.fabricId,
280
+ nodeId: typeof fabric.nodeId === 'string' ? BigInt(fabric.nodeId) : fabric.nodeId,
281
+ vendorId: fabric.rootVendorId,
282
+ label: fabric.label,
283
+ })),
284
+ };
285
+ }
286
+ getAccessoryDetailFromServer(server, uuid, bridgeUsername, bridgeType) {
287
+ const accessory = server.getAccessory(uuid);
288
+ if (!accessory) {
289
+ return undefined;
290
+ }
291
+ const cached = server.getAllCachedAccessories().find((a) => a.uuid === uuid);
292
+ if (!cached) {
293
+ return undefined;
294
+ }
295
+ return this.transformAccessoryData(cached, server, bridgeUsername, bridgeType, server.bridgeName || 'Matter Bridge');
296
+ }
297
+ getCurrentStateFromServer(server, uuid, partId) {
298
+ const accessory = server.getAccessory(uuid);
299
+ if (!accessory) {
300
+ return {};
301
+ }
302
+ const endpoint = partId
303
+ ? accessory._parts?.find((p) => p.id === partId)?.endpoint
304
+ : accessory.endpoint;
305
+ if (!endpoint) {
306
+ return {};
307
+ }
308
+ const state = {};
309
+ for (const [clusterName, clusterState] of Object.entries(endpoint.state)) {
310
+ state[clusterName] = {};
311
+ for (const [key, value] of Object.entries(clusterState)) {
312
+ if (!key.startsWith('_') && !key.startsWith('$')) {
313
+ state[clusterName][key] = value;
314
+ }
315
+ }
316
+ }
317
+ return state;
318
+ }
319
+ async teardown() {
320
+ if (this.matterServer) {
321
+ try {
322
+ await this.matterServer.stop();
323
+ }
324
+ catch (error) {
325
+ log.error('Failed to stop Matter server:', error);
326
+ }
327
+ }
328
+ for (const [uuid, matterServer] of this.externalMatterServers) {
329
+ try {
330
+ await matterServer.stop();
331
+ log.debug(`Stopped external Matter server for ${uuid}`);
332
+ }
333
+ catch (error) {
334
+ log.error(`Failed to stop external Matter server for ${uuid}:`, error);
335
+ }
336
+ }
337
+ this.externalMatterServers.clear();
338
+ }
339
+ }
340
+ //# sourceMappingURL=MatterBridgeManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatterBridgeManager.js","sourceRoot":"","sources":["../../src/matter/MatterBridgeManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { HomebridgeConfig } from '../bridgeService.js';
2
+ export declare class MatterConfigCollector {
3
+ static validateMatterPortsPool(config: HomebridgeConfig): void;
4
+ static validateMatterConfig(config: HomebridgeConfig): void;
5
+ private static checkPortConflicts;
6
+ }
7
+ //# sourceMappingURL=MatterConfigCollector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatterConfigCollector.d.ts","sourceRoot":"","sources":["../../src/matter/MatterConfigCollector.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAU3D,qBAAa,qBAAqB;IAOhC,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAoB9D,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAwC3D,OAAO,CAAC,MAAM,CAAC,kBAAkB;CA+BlC"}