homebridge 2.0.0-beta.99 → 2.0.0

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 (270) hide show
  1. package/README.md +31 -4
  2. package/dist/api.d.ts +438 -3
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +99 -20
  5. package/dist/api.js.map +1 -1
  6. package/dist/bridgeService.d.ts +40 -1
  7. package/dist/bridgeService.d.ts.map +1 -1
  8. package/dist/bridgeService.js +99 -32
  9. package/dist/bridgeService.js.map +1 -1
  10. package/dist/childBridgeFork.d.ts +30 -0
  11. package/dist/childBridgeFork.d.ts.map +1 -1
  12. package/dist/childBridgeFork.js +139 -28
  13. package/dist/childBridgeFork.js.map +1 -1
  14. package/dist/childBridgeService.d.ts +142 -0
  15. package/dist/childBridgeService.d.ts.map +1 -1
  16. package/dist/childBridgeService.js +207 -37
  17. package/dist/childBridgeService.js.map +1 -1
  18. package/dist/cli.js +2 -0
  19. package/dist/cli.js.map +1 -1
  20. package/dist/externalPortService.d.ts +20 -0
  21. package/dist/externalPortService.d.ts.map +1 -1
  22. package/dist/externalPortService.js +24 -0
  23. package/dist/externalPortService.js.map +1 -1
  24. package/dist/index.d.ts +125 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +44 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/ipcService.d.ts +12 -0
  29. package/dist/ipcService.d.ts.map +1 -1
  30. package/dist/ipcService.js +19 -0
  31. package/dist/ipcService.js.map +1 -1
  32. package/dist/logger.d.ts +46 -0
  33. package/dist/logger.d.ts.map +1 -1
  34. package/dist/logger.js +57 -13
  35. package/dist/logger.js.map +1 -1
  36. package/dist/matter/BaseMatterManager.d.ts +56 -0
  37. package/dist/matter/BaseMatterManager.d.ts.map +1 -1
  38. package/dist/matter/BaseMatterManager.js +98 -7
  39. package/dist/matter/BaseMatterManager.js.map +1 -1
  40. package/dist/matter/ChildBridgeMatterManager.d.ts +54 -0
  41. package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -1
  42. package/dist/matter/ChildBridgeMatterManager.js +96 -12
  43. package/dist/matter/ChildBridgeMatterManager.js.map +1 -1
  44. package/dist/matter/ChildBridgeMatterMessageHandler.d.ts +25 -0
  45. package/dist/matter/ChildBridgeMatterMessageHandler.d.ts.map +1 -1
  46. package/dist/matter/ChildBridgeMatterMessageHandler.js +34 -0
  47. package/dist/matter/ChildBridgeMatterMessageHandler.js.map +1 -1
  48. package/dist/matter/ClusterCommandMapper.d.ts +23 -0
  49. package/dist/matter/ClusterCommandMapper.d.ts.map +1 -1
  50. package/dist/matter/ClusterCommandMapper.js +103 -9
  51. package/dist/matter/ClusterCommandMapper.js.map +1 -1
  52. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +28 -0
  53. package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -1
  54. package/dist/matter/ExternalMatterAccessoryPublisher.js +27 -2
  55. package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -1
  56. package/dist/matter/MatterAPIImpl.d.ts +86 -0
  57. package/dist/matter/MatterAPIImpl.d.ts.map +1 -1
  58. package/dist/matter/MatterAPIImpl.js +132 -6
  59. package/dist/matter/MatterAPIImpl.js.map +1 -1
  60. package/dist/matter/MatterBridgeManager.d.ts +70 -0
  61. package/dist/matter/MatterBridgeManager.d.ts.map +1 -1
  62. package/dist/matter/MatterBridgeManager.js +144 -22
  63. package/dist/matter/MatterBridgeManager.js.map +1 -1
  64. package/dist/matter/MatterPortAllocator.d.ts +22 -0
  65. package/dist/matter/MatterPortAllocator.d.ts.map +1 -1
  66. package/dist/matter/MatterPortAllocator.js +27 -0
  67. package/dist/matter/MatterPortAllocator.js.map +1 -1
  68. package/dist/matter/SwitchAPI.d.ts +123 -0
  69. package/dist/matter/SwitchAPI.d.ts.map +1 -0
  70. package/dist/matter/SwitchAPI.js +80 -0
  71. package/dist/matter/SwitchAPI.js.map +1 -0
  72. package/dist/matter/accessoryCache.d.ts +54 -1
  73. package/dist/matter/accessoryCache.d.ts.map +1 -1
  74. package/dist/matter/accessoryCache.js +63 -2
  75. package/dist/matter/accessoryCache.js.map +1 -1
  76. package/dist/matter/behaviors/AirQualityBehavior.d.ts +39 -0
  77. package/dist/matter/behaviors/AirQualityBehavior.d.ts.map +1 -1
  78. package/dist/matter/behaviors/AirQualityBehavior.js +41 -0
  79. package/dist/matter/behaviors/AirQualityBehavior.js.map +1 -1
  80. package/dist/matter/behaviors/BehaviorRegistry.d.ts +52 -0
  81. package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -1
  82. package/dist/matter/behaviors/BehaviorRegistry.js +54 -0
  83. package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -1
  84. package/dist/matter/behaviors/ColorControlBehavior.d.ts +49 -0
  85. package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -1
  86. package/dist/matter/behaviors/ColorControlBehavior.js +91 -0
  87. package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -1
  88. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts +91 -0
  89. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts.map +1 -1
  90. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js +96 -0
  91. package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js.map +1 -1
  92. package/dist/matter/behaviors/DoorLockBehavior.d.ts +17 -0
  93. package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -1
  94. package/dist/matter/behaviors/DoorLockBehavior.js +31 -0
  95. package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -1
  96. package/dist/matter/behaviors/EndpointContext.d.ts +21 -0
  97. package/dist/matter/behaviors/EndpointContext.d.ts.map +1 -1
  98. package/dist/matter/behaviors/EndpointContext.js +18 -0
  99. package/dist/matter/behaviors/EndpointContext.js.map +1 -1
  100. package/dist/matter/behaviors/FanControlBehavior.d.ts +11 -0
  101. package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -1
  102. package/dist/matter/behaviors/FanControlBehavior.js +28 -0
  103. package/dist/matter/behaviors/FanControlBehavior.js.map +1 -1
  104. package/dist/matter/behaviors/IdentifyBehavior.d.ts +11 -0
  105. package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -1
  106. package/dist/matter/behaviors/IdentifyBehavior.js +17 -0
  107. package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -1
  108. package/dist/matter/behaviors/LevelControlBehavior.d.ts +23 -0
  109. package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -1
  110. package/dist/matter/behaviors/LevelControlBehavior.js +59 -0
  111. package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -1
  112. package/dist/matter/behaviors/OnOffBehavior.d.ts +17 -0
  113. package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -1
  114. package/dist/matter/behaviors/OnOffBehavior.js +38 -0
  115. package/dist/matter/behaviors/OnOffBehavior.js.map +1 -1
  116. package/dist/matter/behaviors/RegistryManager.d.ts +28 -0
  117. package/dist/matter/behaviors/RegistryManager.d.ts.map +1 -1
  118. package/dist/matter/behaviors/RegistryManager.js +28 -0
  119. package/dist/matter/behaviors/RegistryManager.js.map +1 -1
  120. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +18 -0
  121. package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -1
  122. package/dist/matter/behaviors/RvcCleanModeBehavior.js +25 -0
  123. package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -1
  124. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +33 -0
  125. package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -1
  126. package/dist/matter/behaviors/RvcOperationalStateBehavior.js +56 -0
  127. package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -1
  128. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +18 -0
  129. package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -1
  130. package/dist/matter/behaviors/RvcRunModeBehavior.js +25 -0
  131. package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -1
  132. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +31 -0
  133. package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -1
  134. package/dist/matter/behaviors/ServiceAreaBehavior.js +45 -0
  135. package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -1
  136. package/dist/matter/behaviors/ThermostatBehavior.d.ts +11 -0
  137. package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -1
  138. package/dist/matter/behaviors/ThermostatBehavior.js +45 -0
  139. package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -1
  140. package/dist/matter/behaviors/ValveConfigurationAndControlBehavior.d.ts +17 -0
  141. package/dist/matter/behaviors/ValveConfigurationAndControlBehavior.d.ts.map +1 -1
  142. package/dist/matter/behaviors/ValveConfigurationAndControlBehavior.js +31 -0
  143. package/dist/matter/behaviors/ValveConfigurationAndControlBehavior.js.map +1 -1
  144. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +29 -0
  145. package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -1
  146. package/dist/matter/behaviors/WindowCoveringBehavior.js +68 -0
  147. package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -1
  148. package/dist/matter/behaviors/index.d.ts +5 -0
  149. package/dist/matter/behaviors/index.d.ts.map +1 -1
  150. package/dist/matter/behaviors/index.js +5 -0
  151. package/dist/matter/behaviors/index.js.map +1 -1
  152. package/dist/matter/clusterHandlerMap.d.ts +79 -0
  153. package/dist/matter/clusterHandlerMap.d.ts.map +1 -1
  154. package/dist/matter/clusterHandlerMap.js +10 -0
  155. package/dist/matter/clusterHandlerMap.js.map +1 -1
  156. package/dist/matter/clusterStateMap.d.ts +31 -0
  157. package/dist/matter/clusterStateMap.d.ts.map +1 -1
  158. package/dist/matter/clusterStateMap.js +11 -0
  159. package/dist/matter/clusterStateMap.js.map +1 -1
  160. package/dist/matter/clusterTypes.d.ts +79 -0
  161. package/dist/matter/clusterTypes.d.ts.map +1 -1
  162. package/dist/matter/clusterTypes.js +8 -0
  163. package/dist/matter/clusterTypes.js.map +1 -1
  164. package/dist/matter/config.d.ts +32 -0
  165. package/dist/matter/config.d.ts.map +1 -1
  166. package/dist/matter/config.js +40 -0
  167. package/dist/matter/config.js.map +1 -1
  168. package/dist/matter/configValidator.d.ts +55 -0
  169. package/dist/matter/configValidator.d.ts.map +1 -1
  170. package/dist/matter/configValidator.js +68 -1
  171. package/dist/matter/configValidator.js.map +1 -1
  172. package/dist/matter/errorHandler.d.ts +13 -0
  173. package/dist/matter/errorHandler.d.ts.map +1 -1
  174. package/dist/matter/errorHandler.js +33 -0
  175. package/dist/matter/errorHandler.js.map +1 -1
  176. package/dist/matter/errors.d.ts +132 -0
  177. package/dist/matter/errors.d.ts.map +1 -1
  178. package/dist/matter/errors.js +132 -0
  179. package/dist/matter/errors.js.map +1 -1
  180. package/dist/matter/index.d.ts +30 -0
  181. package/dist/matter/index.d.ts.map +1 -1
  182. package/dist/matter/index.js +13 -0
  183. package/dist/matter/index.js.map +1 -1
  184. package/dist/matter/ipc-types.d.ts +18 -0
  185. package/dist/matter/ipc-types.d.ts.map +1 -1
  186. package/dist/matter/ipc-types.js +6 -0
  187. package/dist/matter/ipc-types.js.map +1 -1
  188. package/dist/matter/logFormatter.d.ts +17 -0
  189. package/dist/matter/logFormatter.d.ts.map +1 -1
  190. package/dist/matter/logFormatter.js +63 -5
  191. package/dist/matter/logFormatter.js.map +1 -1
  192. package/dist/matter/managerTypes.d.ts +45 -0
  193. package/dist/matter/managerTypes.d.ts.map +1 -1
  194. package/dist/matter/managerTypes.js +6 -0
  195. package/dist/matter/managerTypes.js.map +1 -1
  196. package/dist/matter/server/AccessoryManager.d.ts +43 -0
  197. package/dist/matter/server/AccessoryManager.d.ts.map +1 -1
  198. package/dist/matter/server/AccessoryManager.js +81 -3
  199. package/dist/matter/server/AccessoryManager.js.map +1 -1
  200. package/dist/matter/server/AccessoryQuery.d.ts +33 -0
  201. package/dist/matter/server/AccessoryQuery.d.ts.map +1 -1
  202. package/dist/matter/server/AccessoryQuery.js +38 -1
  203. package/dist/matter/server/AccessoryQuery.js.map +1 -1
  204. package/dist/matter/server/BehaviorMap.d.ts +19 -0
  205. package/dist/matter/server/BehaviorMap.d.ts.map +1 -1
  206. package/dist/matter/server/BehaviorMap.js +26 -0
  207. package/dist/matter/server/BehaviorMap.js.map +1 -1
  208. package/dist/matter/server/CommissioningManager.d.ts +54 -2
  209. package/dist/matter/server/CommissioningManager.d.ts.map +1 -1
  210. package/dist/matter/server/CommissioningManager.js +136 -20
  211. package/dist/matter/server/CommissioningManager.js.map +1 -1
  212. package/dist/matter/server/FabricManager.d.ts +38 -0
  213. package/dist/matter/server/FabricManager.d.ts.map +1 -1
  214. package/dist/matter/server/FabricManager.js +64 -0
  215. package/dist/matter/server/FabricManager.js.map +1 -1
  216. package/dist/matter/server/ServerConfig.d.ts +9 -0
  217. package/dist/matter/server/ServerConfig.d.ts.map +1 -1
  218. package/dist/matter/server/ServerConfig.js +23 -4
  219. package/dist/matter/server/ServerConfig.js.map +1 -1
  220. package/dist/matter/server/ServerLifecycle.d.ts +31 -0
  221. package/dist/matter/server/ServerLifecycle.d.ts.map +1 -1
  222. package/dist/matter/server/ServerLifecycle.js +92 -7
  223. package/dist/matter/server/ServerLifecycle.js.map +1 -1
  224. package/dist/matter/server/StateManager.d.ts +18 -0
  225. package/dist/matter/server/StateManager.d.ts.map +1 -1
  226. package/dist/matter/server/StateManager.js +20 -0
  227. package/dist/matter/server/StateManager.js.map +1 -1
  228. package/dist/matter/server.d.ts +12 -0
  229. package/dist/matter/server.d.ts.map +1 -1
  230. package/dist/matter/server.js +49 -1
  231. package/dist/matter/server.js.map +1 -1
  232. package/dist/matter/serverHelpers.d.ts +67 -0
  233. package/dist/matter/serverHelpers.d.ts.map +1 -1
  234. package/dist/matter/serverHelpers.js +81 -4
  235. package/dist/matter/serverHelpers.js.map +1 -1
  236. package/dist/matter/sharedTypes.d.ts +93 -0
  237. package/dist/matter/sharedTypes.d.ts.map +1 -1
  238. package/dist/matter/sharedTypes.js +26 -0
  239. package/dist/matter/sharedTypes.js.map +1 -1
  240. package/dist/matter/types.d.ts +346 -3
  241. package/dist/matter/types.d.ts.map +1 -1
  242. package/dist/matter/types.js +133 -0
  243. package/dist/matter/types.js.map +1 -1
  244. package/dist/matter/utils.d.ts +78 -0
  245. package/dist/matter/utils.d.ts.map +1 -1
  246. package/dist/matter/utils.js +95 -0
  247. package/dist/matter/utils.js.map +1 -1
  248. package/dist/platformAccessory.d.ts +15 -0
  249. package/dist/platformAccessory.d.ts.map +1 -1
  250. package/dist/platformAccessory.js +32 -6
  251. package/dist/platformAccessory.js.map +1 -1
  252. package/dist/plugin.d.ts +3 -0
  253. package/dist/plugin.d.ts.map +1 -1
  254. package/dist/plugin.js +29 -6
  255. package/dist/plugin.js.map +1 -1
  256. package/dist/pluginManager.d.ts +22 -0
  257. package/dist/pluginManager.d.ts.map +1 -1
  258. package/dist/pluginManager.js +39 -17
  259. package/dist/pluginManager.js.map +1 -1
  260. package/dist/server.d.ts +58 -0
  261. package/dist/server.d.ts.map +1 -1
  262. package/dist/server.js +260 -65
  263. package/dist/server.js.map +1 -1
  264. package/dist/user.d.ts +3 -0
  265. package/dist/user.d.ts.map +1 -1
  266. package/dist/user.js +5 -2
  267. package/dist/user.js.map +1 -1
  268. package/dist/util/mac.js +1 -0
  269. package/dist/util/mac.js.map +1 -1
  270. package/package.json +3 -3
package/dist/api.js CHANGED
@@ -7,16 +7,28 @@ import { PluginManager } from './pluginManager.js';
7
7
  import { User } from './user.js';
8
8
  import getVersion from './version.js';
9
9
  const log = Logger.internal;
10
+ // eslint-disable-next-line no-restricted-syntax
10
11
  export var PluginType;
11
12
  (function (PluginType) {
12
13
  PluginType["ACCESSORY"] = "accessory";
13
14
  PluginType["PLATFORM"] = "platform";
14
15
  })(PluginType || (PluginType = {}));
16
+ // eslint-disable-next-line no-restricted-syntax
15
17
  export var APIEvent;
16
18
  (function (APIEvent) {
19
+ /**
20
+ * Event is fired once homebridge has finished with booting up and initializing all components and plugins.
21
+ * When this event is fired it is possible that the Bridge accessory isn't published yet, if homebridge still needs
22
+ * to wait for some {@see StaticPlatformPlugin | StaticPlatformPlugins} to finish accessory creation.
23
+ */
17
24
  APIEvent["DID_FINISH_LAUNCHING"] = "didFinishLaunching";
25
+ /**
26
+ * This event is fired when homebridge gets shutdown. This could be a regular shutdown or an unexpected crash.
27
+ * At this stage all Accessories are already unpublished and all PlatformAccessories are already saved to disk!
28
+ */
18
29
  APIEvent["SHUTDOWN"] = "shutdown";
19
30
  })(APIEvent || (APIEvent = {}));
31
+ // eslint-disable-next-line no-restricted-syntax
20
32
  export var InternalAPIEvent;
21
33
  (function (InternalAPIEvent) {
22
34
  InternalAPIEvent["REGISTER_ACCESSORY"] = "registerAccessory";
@@ -25,6 +37,7 @@ export var InternalAPIEvent;
25
37
  InternalAPIEvent["REGISTER_PLATFORM_ACCESSORIES"] = "registerPlatformAccessories";
26
38
  InternalAPIEvent["UPDATE_PLATFORM_ACCESSORIES"] = "updatePlatformAccessories";
27
39
  InternalAPIEvent["UNREGISTER_PLATFORM_ACCESSORIES"] = "unregisterPlatformAccessories";
40
+ // Matter events (matching HAP pattern)
28
41
  InternalAPIEvent["PUBLISH_EXTERNAL_MATTER_ACCESSORIES"] = "publishExternalMatterAccessories";
29
42
  InternalAPIEvent["REGISTER_MATTER_PLATFORM_ACCESSORIES"] = "registerMatterPlatformAccessories";
30
43
  InternalAPIEvent["UPDATE_MATTER_PLATFORM_ACCESSORIES"] = "updateMatterPlatformAccessories";
@@ -32,25 +45,61 @@ export var InternalAPIEvent;
32
45
  InternalAPIEvent["UNREGISTER_EXTERNAL_MATTER_ACCESSORIES"] = "unregisterExternalMatterAccessories";
33
46
  InternalAPIEvent["UPDATE_MATTER_ACCESSORY_STATE"] = "updateMatterAccessoryState";
34
47
  })(InternalAPIEvent || (InternalAPIEvent = {}));
48
+ // eslint-disable-next-line ts/no-unsafe-declaration-merging
35
49
  export class HomebridgeAPI extends EventEmitter {
36
- version = 2.7;
37
- serverVersion = getVersion();
50
+ version = 2.7; // homebridge API version
51
+ serverVersion = getVersion(); // homebridge node module version
52
+ // ------------------ LEGACY EXPORTS FOR PRE TYPESCRIPT ------------------
38
53
  user = User;
39
54
  hap = hapNodeJs;
40
- hapLegacyTypes = hapNodeJs.LegacyTypes;
55
+ hapLegacyTypes = hapNodeJs.LegacyTypes; // used for older accessories/platforms
41
56
  platformAccessory = PlatformAccessory;
57
+ // ------------------------------------------------------------------------
58
+ /**
59
+ * Internal state tracking whether Matter is enabled for this bridge
60
+ */
42
61
  matterEnabled = false;
62
+ /**
63
+ * Internal reference to MatterServer for API methods that need return values
64
+ * @internal
65
+ */
43
66
  _matterServer = null;
67
+ /**
68
+ * Internal reference to MatterBridgeManager for checking external servers
69
+ * @internal
70
+ */
44
71
  _matterManager = null;
72
+ /**
73
+ * Pending external accessory registrations
74
+ * Map of registration ID to resolve function
75
+ * @internal
76
+ */
45
77
  _pendingExternalRegistrations = new Map();
78
+ /**
79
+ * Lazy-loaded Matter API implementation
80
+ */
46
81
  _matterAPI;
82
+ /**
83
+ * Matter Protocol API (lazy-loaded).
84
+ *
85
+ * Returns the loaded MatterAPI instance, or `undefined` when Matter is not
86
+ * configured for this bridge. Server / ChildBridgeFork call
87
+ * {@link loadMatterAPI} before plugins run on Matter-enabled bridges, so
88
+ * plugins observe a defined value here whenever {@link isMatterEnabled}
89
+ * returns true.
90
+ */
47
91
  get matter() {
48
- if (!this._matterAPI) {
49
- throw new Error('Matter API must be pre-loaded before access. '
50
- + 'Call await api.loadMatterAPI() in your plugin constructor or access api.matter in didFinishLaunching().');
51
- }
52
92
  return this._matterAPI;
53
93
  }
94
+ /**
95
+ * Load Matter API implementation. Idempotent.
96
+ *
97
+ * Called by Server / ChildBridgeFork during startup when Matter is
98
+ * configured for the bridge, before plugin initialization. Plugins should
99
+ * not call this directly — use {@link matter} instead.
100
+ *
101
+ * @internal
102
+ */
54
103
  async loadMatterAPI() {
55
104
  if (!this._matterAPI) {
56
105
  const { MatterAPIImpl } = await import('./matter/MatterAPIImpl.js');
@@ -60,15 +109,35 @@ export class HomebridgeAPI extends EventEmitter {
60
109
  constructor() {
61
110
  super();
62
111
  }
112
+ /**
113
+ * Internal method to set Matter enabled status
114
+ * Called by Server or ChildBridgeFork after Matter initialization
115
+ * @internal
116
+ */
63
117
  _setMatterEnabled(enabled) {
64
118
  this.matterEnabled = enabled;
65
119
  }
120
+ /**
121
+ * Internal method to set MatterServer reference
122
+ * Called by Server or ChildBridgeFork after creating MatterServer
123
+ * @internal
124
+ */
66
125
  _setMatterServer(server) {
67
126
  this._matterServer = server;
68
127
  }
128
+ /**
129
+ * Internal method to set MatterBridgeManager reference
130
+ * Called by Server or ChildBridgeFork to allow API access to external servers
131
+ * @internal
132
+ */
69
133
  _setMatterManager(manager) {
70
134
  this._matterManager = manager;
71
135
  }
136
+ /**
137
+ * Internal method to resolve pending external accessory registrations
138
+ * Called by MatterBridgeManager when external accessories finish publishing
139
+ * @internal
140
+ */
72
141
  _resolveExternalRegistration(registrationId) {
73
142
  const resolve = this._pendingExternalRegistrations.get(registrationId);
74
143
  if (resolve) {
@@ -86,70 +155,80 @@ export class HomebridgeAPI extends EventEmitter {
86
155
  return 'accessories' in platformPlugin;
87
156
  }
88
157
  signalFinished() {
89
- this.emit("didFinishLaunching");
158
+ this.emit("didFinishLaunching" /* APIEvent.DID_FINISH_LAUNCHING */);
90
159
  }
91
160
  signalShutdown() {
92
- this.emit("shutdown");
161
+ this.emit("shutdown" /* APIEvent.SHUTDOWN */);
93
162
  }
94
163
  registerAccessory(pluginIdentifier, accessoryName, constructor) {
95
164
  if (typeof accessoryName === 'function') {
96
165
  constructor = accessoryName;
97
166
  accessoryName = pluginIdentifier;
98
- this.emit("registerAccessory", accessoryName, constructor);
167
+ this.emit("registerAccessory" /* InternalAPIEvent.REGISTER_ACCESSORY */, accessoryName, constructor);
99
168
  }
100
169
  else {
101
- this.emit("registerAccessory", accessoryName, constructor, pluginIdentifier);
170
+ this.emit("registerAccessory" /* InternalAPIEvent.REGISTER_ACCESSORY */, accessoryName, constructor, pluginIdentifier);
102
171
  }
103
172
  }
104
173
  registerPlatform(pluginIdentifier, platformName, constructor) {
105
174
  if (typeof platformName === 'function') {
106
175
  constructor = platformName;
107
176
  platformName = pluginIdentifier;
108
- this.emit("registerPlatform", platformName, constructor);
177
+ this.emit("registerPlatform" /* InternalAPIEvent.REGISTER_PLATFORM */, platformName, constructor);
109
178
  }
110
179
  else {
111
- this.emit("registerPlatform", platformName, constructor, pluginIdentifier);
180
+ this.emit("registerPlatform" /* InternalAPIEvent.REGISTER_PLATFORM */, platformName, constructor, pluginIdentifier);
112
181
  }
113
182
  }
114
- publishCameraAccessories(pluginIdentifier, accessories) {
115
- this.publishExternalAccessories(pluginIdentifier, accessories);
116
- }
117
183
  publishExternalAccessories(pluginIdentifier, accessories) {
118
184
  if (!PluginManager.isQualifiedPluginIdentifier(pluginIdentifier)) {
119
185
  log.info(`One of your plugins incorrectly registered an external accessory using the platform name (${pluginIdentifier}) and not the plugin identifier. Please report this to the developer!`);
120
186
  }
121
187
  accessories.forEach((accessory) => {
188
+ // noinspection SuspiciousTypeOfGuard
122
189
  if (!(accessory instanceof PlatformAccessory)) {
123
190
  throw new TypeError(`${pluginIdentifier} attempt to register an accessory that isn't PlatformAccessory!`);
124
191
  }
125
192
  accessory._associatedPlugin = pluginIdentifier;
126
193
  });
127
- this.emit("publishExternalAccessories", accessories);
194
+ this.emit("publishExternalAccessories" /* InternalAPIEvent.PUBLISH_EXTERNAL_ACCESSORIES */, accessories);
128
195
  }
129
196
  registerPlatformAccessories(pluginIdentifier, platformName, accessories) {
130
197
  accessories.forEach((accessory) => {
198
+ // noinspection SuspiciousTypeOfGuard
131
199
  if (!(accessory instanceof PlatformAccessory)) {
132
200
  throw new TypeError(`${pluginIdentifier} - ${platformName} attempt to register an accessory that isn't PlatformAccessory!`);
133
201
  }
134
202
  accessory._associatedPlugin = pluginIdentifier;
135
203
  accessory._associatedPlatform = platformName;
136
204
  });
137
- this.emit("registerPlatformAccessories", accessories);
205
+ this.emit("registerPlatformAccessories" /* InternalAPIEvent.REGISTER_PLATFORM_ACCESSORIES */, accessories);
138
206
  }
139
207
  updatePlatformAccessories(accessories) {
140
- this.emit("updatePlatformAccessories", accessories);
208
+ this.emit("updatePlatformAccessories" /* InternalAPIEvent.UPDATE_PLATFORM_ACCESSORIES */, accessories);
141
209
  }
142
210
  unregisterPlatformAccessories(pluginIdentifier, platformName, accessories) {
143
211
  accessories.forEach((accessory) => {
212
+ // noinspection SuspiciousTypeOfGuard
144
213
  if (!(accessory instanceof PlatformAccessory)) {
145
214
  throw new TypeError(`${pluginIdentifier} - ${platformName} attempt to unregister an accessory that isn't PlatformAccessory!`);
146
215
  }
147
216
  });
148
- this.emit("unregisterPlatformAccessories", accessories);
217
+ this.emit("unregisterPlatformAccessories" /* InternalAPIEvent.UNREGISTER_PLATFORM_ACCESSORIES */, accessories);
149
218
  }
219
+ /**
220
+ * Check if Matter is available in this version of Homebridge
221
+ * @returns true if Homebridge version satisfies >= 2.0.0-alpha.0
222
+ */
150
223
  isMatterAvailable() {
151
224
  return semver.gte(this.serverVersion, '2.0.0-alpha.0');
152
225
  }
226
+ /**
227
+ * Check if Matter is enabled for this bridge
228
+ * For main bridge: returns true if Matter is enabled in `bridge.matter` config
229
+ * For child bridge: returns true if Matter is enabled in the `_bridge.matter` config
230
+ * @returns true if Matter is enabled
231
+ */
153
232
  isMatterEnabled() {
154
233
  return this.matterEnabled;
155
234
  }
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -20,13 +20,23 @@ export interface BridgeConfiguration {
20
20
  advertiser?: MDNSAdvertiser;
21
21
  port?: number;
22
22
  bind?: (InterfaceName | IPAddress) | (InterfaceName | IPAddress)[];
23
- setupID?: string[4];
23
+ /** 4-character HomeKit setup ID (alphanumeric, e.g. "ABCD"). Validated at runtime. */
24
+ setupID?: string;
24
25
  manufacturer?: string;
25
26
  model?: string;
26
27
  disableIpc?: boolean;
27
28
  firmwareRevision?: string;
28
29
  serialNumber?: string;
29
30
  debugModeEnabled?: boolean;
31
+ /**
32
+ * When `false`, this bridge will not publish HAP. Useful for Matter-only
33
+ * bridges where the user does not want to expose a HomeKit bridge accessory.
34
+ * Default: `true` (HAP is published).
35
+ *
36
+ * Note: at least one of `hap` or `matter` must be enabled per bridge —
37
+ * setting `hap: false` without a `matter` configuration is rejected.
38
+ */
39
+ hap?: boolean;
30
40
  matter?: MatterConfig;
31
41
  env?: {
32
42
  DEBUG?: string;
@@ -46,10 +56,18 @@ export interface PlatformConfig extends Record<string, any> {
46
56
  }
47
57
  export interface HomebridgeConfig {
48
58
  bridge: BridgeConfiguration;
59
+ /**
60
+ * @deprecated
61
+ */
49
62
  mdns?: any;
50
63
  accessories: AccessoryConfig[];
51
64
  platforms: PlatformConfig[];
52
65
  plugins?: PluginIdentifier[];
66
+ /**
67
+ * Array of disabled plugins.
68
+ * Unlike the plugins[] config which prevents plugins from being initialized at all, disabled plugins still have their alias loaded, so
69
+ * we can match config blocks of disabled plugins and show an appropriate message in the logs.
70
+ */
53
71
  disabledPlugins?: PluginIdentifier[];
54
72
  ports?: ExternalPortsConfiguration;
55
73
  matterPorts?: ExternalPortsConfiguration;
@@ -73,14 +91,35 @@ export declare class BridgeService {
73
91
  private cachedPlatformAccessories;
74
92
  private cachedAccessoriesFileLoaded;
75
93
  private readonly publishedExternalAccessories;
94
+ private readonly _onRegisterPlatformAccessories;
95
+ private readonly _onUpdatePlatformAccessories;
96
+ private readonly _onUnregisterPlatformAccessories;
97
+ private readonly _onPublishExternalAccessories;
76
98
  constructor(api: HomebridgeAPI, pluginManager: PluginManager, externalPortService: ExternalPortService, bridgeOptions: BridgeOptions, bridgeConfig: BridgeConfiguration);
77
99
  static printCharacteristicWriteWarning(plugin: Plugin, accessory: Accessory, opts: CharacteristicWarningOpts, warning: CharacteristicWarning): void;
78
100
  publishBridge(): void;
101
+ /**
102
+ * Attempt to load the cached accessories from disk.
103
+ */
79
104
  loadCachedPlatformAccessoriesFromDisk(): Promise<void>;
105
+ /**
106
+ * Return the name of the backup cache file
107
+ */
80
108
  private get backupCacheFileName();
109
+ /**
110
+ * Create a backup of the cached file
111
+ * This is used if we ever have trouble reading the main cache file
112
+ */
81
113
  private createCachedAccessoriesBackup;
114
+ /**
115
+ * Restore a cached accessories backup
116
+ * This is used if the main cache file has a JSON syntax error / is corrupted
117
+ */
82
118
  private restoreCachedAccessoriesBackup;
83
119
  restoreCachedPlatformAccessories(): void;
120
+ /**
121
+ * Save the cached accessories back to disk.
122
+ */
84
123
  saveCachedPlatformAccessoriesOnDisk(): void;
85
124
  handleRegisterPlatformAccessories(accessories: PlatformAccessory[]): void;
86
125
  handleUpdatePlatformAccessories(accessories: PlatformAccessory[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"bridgeService.d.ts","sourceRoot":"","sources":["../src/bridgeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridgeService.d.ts","sourceRoot":"","sources":["../src/bridgeService.ts"],"names":[],"mappings":"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"}