matterbridge 3.3.7 → 3.3.8-dev-20251115-920acfc

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 (308) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README-SERVICE-OPT.md +4 -4
  3. package/README.md +4 -0
  4. package/dist/broadcastServer.js +1 -93
  5. package/dist/broadcastServerTypes.js +0 -24
  6. package/dist/cli.js +1 -97
  7. package/dist/cliEmitter.js +0 -37
  8. package/dist/cliHistory.js +0 -38
  9. package/dist/clusters/export.js +0 -2
  10. package/dist/defaultConfigSchema.js +0 -24
  11. package/dist/deviceManager.js +1 -105
  12. package/dist/devices/airConditioner.js +1 -58
  13. package/dist/devices/batteryStorage.js +2 -49
  14. package/dist/devices/cooktop.js +1 -56
  15. package/dist/devices/dishwasher.js +1 -58
  16. package/dist/devices/evse.js +11 -75
  17. package/dist/devices/export.js +0 -5
  18. package/dist/devices/extractorHood.js +1 -43
  19. package/dist/devices/heatPump.js +3 -51
  20. package/dist/devices/laundryDryer.js +4 -63
  21. package/dist/devices/laundryWasher.js +5 -71
  22. package/dist/devices/microwaveOven.js +6 -89
  23. package/dist/devices/oven.js +1 -86
  24. package/dist/devices/refrigerator.js +2 -104
  25. package/dist/devices/roboticVacuumCleaner.js +10 -101
  26. package/dist/devices/solarPower.js +1 -39
  27. package/dist/devices/speaker.js +1 -85
  28. package/dist/devices/temperatureControl.js +3 -24
  29. package/dist/devices/waterHeater.js +3 -83
  30. package/dist/dgram/coap.js +13 -126
  31. package/dist/dgram/dgram.js +2 -114
  32. package/dist/dgram/mb_coap.js +3 -41
  33. package/dist/dgram/mb_mdns.js +15 -80
  34. package/dist/dgram/mdns.js +137 -299
  35. package/dist/dgram/multicast.js +1 -62
  36. package/dist/dgram/unicast.js +0 -54
  37. package/dist/frontend.js +40 -452
  38. package/dist/frontendTypes.js +0 -45
  39. package/dist/helpers.js +0 -53
  40. package/dist/index.js +1 -25
  41. package/dist/jestutils/export.js +1 -0
  42. package/dist/{utils → jestutils}/jestHelpers.js +167 -175
  43. package/dist/logger/export.js +0 -1
  44. package/dist/matter/behaviors.js +0 -2
  45. package/dist/matter/clusters.js +0 -2
  46. package/dist/matter/devices.js +0 -2
  47. package/dist/matter/endpoints.js +0 -2
  48. package/dist/matter/export.js +0 -3
  49. package/dist/matter/types.js +0 -3
  50. package/dist/matterbridge.js +50 -838
  51. package/dist/matterbridgeAccessoryPlatform.js +0 -37
  52. package/dist/matterbridgeBehaviors.js +5 -68
  53. package/dist/matterbridgeDeviceTypes.js +27 -653
  54. package/dist/matterbridgeDynamicPlatform.js +0 -37
  55. package/dist/matterbridgeEndpoint.js +74 -1429
  56. package/dist/matterbridgeEndpointHelpers.js +42 -475
  57. package/dist/matterbridgeEndpointTypes.js +3 -0
  58. package/dist/matterbridgePlatform.js +18 -341
  59. package/dist/matterbridgeTypes.js +0 -26
  60. package/dist/pluginManager.js +5 -340
  61. package/dist/shelly.js +7 -168
  62. package/dist/storage/export.js +0 -1
  63. package/dist/update.js +0 -69
  64. package/dist/utils/colorUtils.js +2 -97
  65. package/dist/utils/commandLine.js +0 -60
  66. package/dist/utils/copyDirectory.js +1 -38
  67. package/dist/utils/createDirectory.js +0 -33
  68. package/dist/utils/createZip.js +2 -47
  69. package/dist/utils/deepCopy.js +0 -39
  70. package/dist/utils/deepEqual.js +1 -72
  71. package/dist/utils/error.js +2 -43
  72. package/dist/utils/export.js +0 -1
  73. package/dist/utils/format.js +0 -49
  74. package/dist/utils/hex.js +0 -124
  75. package/dist/utils/inspector.js +1 -69
  76. package/dist/utils/isvalid.js +0 -101
  77. package/dist/utils/network.js +5 -96
  78. package/dist/utils/spawn.js +0 -71
  79. package/dist/utils/tracker.js +1 -64
  80. package/dist/utils/wait.js +8 -60
  81. package/npm-shrinkwrap.json +8 -8
  82. package/package.json +5 -2
  83. package/scripts/fetch-chip.mjs +100 -0
  84. package/dist/broadcastServer.d.ts +0 -115
  85. package/dist/broadcastServer.d.ts.map +0 -1
  86. package/dist/broadcastServer.js.map +0 -1
  87. package/dist/broadcastServerTypes.d.ts +0 -806
  88. package/dist/broadcastServerTypes.d.ts.map +0 -1
  89. package/dist/broadcastServerTypes.js.map +0 -1
  90. package/dist/cli.d.ts +0 -30
  91. package/dist/cli.d.ts.map +0 -1
  92. package/dist/cli.js.map +0 -1
  93. package/dist/cliEmitter.d.ts +0 -50
  94. package/dist/cliEmitter.d.ts.map +0 -1
  95. package/dist/cliEmitter.js.map +0 -1
  96. package/dist/cliHistory.d.ts +0 -48
  97. package/dist/cliHistory.d.ts.map +0 -1
  98. package/dist/cliHistory.js.map +0 -1
  99. package/dist/clusters/export.d.ts +0 -2
  100. package/dist/clusters/export.d.ts.map +0 -1
  101. package/dist/clusters/export.js.map +0 -1
  102. package/dist/defaultConfigSchema.d.ts +0 -28
  103. package/dist/defaultConfigSchema.d.ts.map +0 -1
  104. package/dist/defaultConfigSchema.js.map +0 -1
  105. package/dist/deviceManager.d.ts +0 -128
  106. package/dist/deviceManager.d.ts.map +0 -1
  107. package/dist/deviceManager.js.map +0 -1
  108. package/dist/devices/airConditioner.d.ts +0 -98
  109. package/dist/devices/airConditioner.d.ts.map +0 -1
  110. package/dist/devices/airConditioner.js.map +0 -1
  111. package/dist/devices/batteryStorage.d.ts +0 -48
  112. package/dist/devices/batteryStorage.d.ts.map +0 -1
  113. package/dist/devices/batteryStorage.js.map +0 -1
  114. package/dist/devices/cooktop.d.ts +0 -60
  115. package/dist/devices/cooktop.d.ts.map +0 -1
  116. package/dist/devices/cooktop.js.map +0 -1
  117. package/dist/devices/dishwasher.d.ts +0 -71
  118. package/dist/devices/dishwasher.d.ts.map +0 -1
  119. package/dist/devices/dishwasher.js.map +0 -1
  120. package/dist/devices/evse.d.ts +0 -76
  121. package/dist/devices/evse.d.ts.map +0 -1
  122. package/dist/devices/evse.js.map +0 -1
  123. package/dist/devices/export.d.ts +0 -17
  124. package/dist/devices/export.d.ts.map +0 -1
  125. package/dist/devices/export.js.map +0 -1
  126. package/dist/devices/extractorHood.d.ts +0 -46
  127. package/dist/devices/extractorHood.d.ts.map +0 -1
  128. package/dist/devices/extractorHood.js.map +0 -1
  129. package/dist/devices/heatPump.d.ts +0 -47
  130. package/dist/devices/heatPump.d.ts.map +0 -1
  131. package/dist/devices/heatPump.js.map +0 -1
  132. package/dist/devices/laundryDryer.d.ts +0 -67
  133. package/dist/devices/laundryDryer.d.ts.map +0 -1
  134. package/dist/devices/laundryDryer.js.map +0 -1
  135. package/dist/devices/laundryWasher.d.ts +0 -81
  136. package/dist/devices/laundryWasher.d.ts.map +0 -1
  137. package/dist/devices/laundryWasher.js.map +0 -1
  138. package/dist/devices/microwaveOven.d.ts +0 -168
  139. package/dist/devices/microwaveOven.d.ts.map +0 -1
  140. package/dist/devices/microwaveOven.js.map +0 -1
  141. package/dist/devices/oven.d.ts +0 -105
  142. package/dist/devices/oven.d.ts.map +0 -1
  143. package/dist/devices/oven.js.map +0 -1
  144. package/dist/devices/refrigerator.d.ts +0 -118
  145. package/dist/devices/refrigerator.d.ts.map +0 -1
  146. package/dist/devices/refrigerator.js.map +0 -1
  147. package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
  148. package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
  149. package/dist/devices/roboticVacuumCleaner.js.map +0 -1
  150. package/dist/devices/solarPower.d.ts +0 -40
  151. package/dist/devices/solarPower.d.ts.map +0 -1
  152. package/dist/devices/solarPower.js.map +0 -1
  153. package/dist/devices/speaker.d.ts +0 -87
  154. package/dist/devices/speaker.d.ts.map +0 -1
  155. package/dist/devices/speaker.js.map +0 -1
  156. package/dist/devices/temperatureControl.d.ts +0 -166
  157. package/dist/devices/temperatureControl.d.ts.map +0 -1
  158. package/dist/devices/temperatureControl.js.map +0 -1
  159. package/dist/devices/waterHeater.d.ts +0 -111
  160. package/dist/devices/waterHeater.d.ts.map +0 -1
  161. package/dist/devices/waterHeater.js.map +0 -1
  162. package/dist/dgram/coap.d.ts +0 -205
  163. package/dist/dgram/coap.d.ts.map +0 -1
  164. package/dist/dgram/coap.js.map +0 -1
  165. package/dist/dgram/dgram.d.ts +0 -141
  166. package/dist/dgram/dgram.d.ts.map +0 -1
  167. package/dist/dgram/dgram.js.map +0 -1
  168. package/dist/dgram/mb_coap.d.ts +0 -24
  169. package/dist/dgram/mb_coap.d.ts.map +0 -1
  170. package/dist/dgram/mb_coap.js.map +0 -1
  171. package/dist/dgram/mb_mdns.d.ts +0 -24
  172. package/dist/dgram/mb_mdns.d.ts.map +0 -1
  173. package/dist/dgram/mb_mdns.js.map +0 -1
  174. package/dist/dgram/mdns.d.ts +0 -290
  175. package/dist/dgram/mdns.d.ts.map +0 -1
  176. package/dist/dgram/mdns.js.map +0 -1
  177. package/dist/dgram/multicast.d.ts +0 -67
  178. package/dist/dgram/multicast.d.ts.map +0 -1
  179. package/dist/dgram/multicast.js.map +0 -1
  180. package/dist/dgram/unicast.d.ts +0 -56
  181. package/dist/dgram/unicast.d.ts.map +0 -1
  182. package/dist/dgram/unicast.js.map +0 -1
  183. package/dist/frontend.d.ts +0 -238
  184. package/dist/frontend.d.ts.map +0 -1
  185. package/dist/frontend.js.map +0 -1
  186. package/dist/frontendTypes.d.ts +0 -529
  187. package/dist/frontendTypes.d.ts.map +0 -1
  188. package/dist/frontendTypes.js.map +0 -1
  189. package/dist/helpers.d.ts +0 -48
  190. package/dist/helpers.d.ts.map +0 -1
  191. package/dist/helpers.js.map +0 -1
  192. package/dist/index.d.ts +0 -33
  193. package/dist/index.d.ts.map +0 -1
  194. package/dist/index.js.map +0 -1
  195. package/dist/logger/export.d.ts +0 -2
  196. package/dist/logger/export.d.ts.map +0 -1
  197. package/dist/logger/export.js.map +0 -1
  198. package/dist/matter/behaviors.d.ts +0 -2
  199. package/dist/matter/behaviors.d.ts.map +0 -1
  200. package/dist/matter/behaviors.js.map +0 -1
  201. package/dist/matter/clusters.d.ts +0 -2
  202. package/dist/matter/clusters.d.ts.map +0 -1
  203. package/dist/matter/clusters.js.map +0 -1
  204. package/dist/matter/devices.d.ts +0 -2
  205. package/dist/matter/devices.d.ts.map +0 -1
  206. package/dist/matter/devices.js.map +0 -1
  207. package/dist/matter/endpoints.d.ts +0 -2
  208. package/dist/matter/endpoints.d.ts.map +0 -1
  209. package/dist/matter/endpoints.js.map +0 -1
  210. package/dist/matter/export.d.ts +0 -5
  211. package/dist/matter/export.d.ts.map +0 -1
  212. package/dist/matter/export.js.map +0 -1
  213. package/dist/matter/types.d.ts +0 -3
  214. package/dist/matter/types.d.ts.map +0 -1
  215. package/dist/matter/types.js.map +0 -1
  216. package/dist/matterbridge.d.ts +0 -478
  217. package/dist/matterbridge.d.ts.map +0 -1
  218. package/dist/matterbridge.js.map +0 -1
  219. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -42
  220. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  221. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  222. package/dist/matterbridgeBehaviors.d.ts +0 -2404
  223. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  224. package/dist/matterbridgeBehaviors.js.map +0 -1
  225. package/dist/matterbridgeDeviceTypes.d.ts +0 -770
  226. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  227. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  228. package/dist/matterbridgeDynamicPlatform.d.ts +0 -42
  229. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  230. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  231. package/dist/matterbridgeEndpoint.d.ts +0 -1556
  232. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  233. package/dist/matterbridgeEndpoint.js.map +0 -1
  234. package/dist/matterbridgeEndpointHelpers.d.ts +0 -758
  235. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  236. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  237. package/dist/matterbridgePlatform.d.ts +0 -402
  238. package/dist/matterbridgePlatform.d.ts.map +0 -1
  239. package/dist/matterbridgePlatform.js.map +0 -1
  240. package/dist/matterbridgeTypes.d.ts +0 -239
  241. package/dist/matterbridgeTypes.d.ts.map +0 -1
  242. package/dist/matterbridgeTypes.js.map +0 -1
  243. package/dist/pluginManager.d.ts +0 -371
  244. package/dist/pluginManager.d.ts.map +0 -1
  245. package/dist/pluginManager.js.map +0 -1
  246. package/dist/shelly.d.ts +0 -174
  247. package/dist/shelly.d.ts.map +0 -1
  248. package/dist/shelly.js.map +0 -1
  249. package/dist/storage/export.d.ts +0 -2
  250. package/dist/storage/export.d.ts.map +0 -1
  251. package/dist/storage/export.js.map +0 -1
  252. package/dist/update.d.ts +0 -75
  253. package/dist/update.d.ts.map +0 -1
  254. package/dist/update.js.map +0 -1
  255. package/dist/utils/colorUtils.d.ts +0 -101
  256. package/dist/utils/colorUtils.d.ts.map +0 -1
  257. package/dist/utils/colorUtils.js.map +0 -1
  258. package/dist/utils/commandLine.d.ts +0 -66
  259. package/dist/utils/commandLine.d.ts.map +0 -1
  260. package/dist/utils/commandLine.js.map +0 -1
  261. package/dist/utils/copyDirectory.d.ts +0 -33
  262. package/dist/utils/copyDirectory.d.ts.map +0 -1
  263. package/dist/utils/copyDirectory.js.map +0 -1
  264. package/dist/utils/createDirectory.d.ts +0 -34
  265. package/dist/utils/createDirectory.d.ts.map +0 -1
  266. package/dist/utils/createDirectory.js.map +0 -1
  267. package/dist/utils/createZip.d.ts +0 -39
  268. package/dist/utils/createZip.d.ts.map +0 -1
  269. package/dist/utils/createZip.js.map +0 -1
  270. package/dist/utils/deepCopy.d.ts +0 -32
  271. package/dist/utils/deepCopy.d.ts.map +0 -1
  272. package/dist/utils/deepCopy.js.map +0 -1
  273. package/dist/utils/deepEqual.d.ts +0 -54
  274. package/dist/utils/deepEqual.d.ts.map +0 -1
  275. package/dist/utils/deepEqual.js.map +0 -1
  276. package/dist/utils/error.d.ts +0 -44
  277. package/dist/utils/error.d.ts.map +0 -1
  278. package/dist/utils/error.js.map +0 -1
  279. package/dist/utils/export.d.ts +0 -13
  280. package/dist/utils/export.d.ts.map +0 -1
  281. package/dist/utils/export.js.map +0 -1
  282. package/dist/utils/format.d.ts +0 -53
  283. package/dist/utils/format.d.ts.map +0 -1
  284. package/dist/utils/format.js.map +0 -1
  285. package/dist/utils/hex.d.ts +0 -89
  286. package/dist/utils/hex.d.ts.map +0 -1
  287. package/dist/utils/hex.js.map +0 -1
  288. package/dist/utils/inspector.d.ts +0 -87
  289. package/dist/utils/inspector.d.ts.map +0 -1
  290. package/dist/utils/inspector.js.map +0 -1
  291. package/dist/utils/isvalid.d.ts +0 -103
  292. package/dist/utils/isvalid.d.ts.map +0 -1
  293. package/dist/utils/isvalid.js.map +0 -1
  294. package/dist/utils/jestHelpers.d.ts +0 -139
  295. package/dist/utils/jestHelpers.d.ts.map +0 -1
  296. package/dist/utils/jestHelpers.js.map +0 -1
  297. package/dist/utils/network.d.ts +0 -101
  298. package/dist/utils/network.d.ts.map +0 -1
  299. package/dist/utils/network.js.map +0 -1
  300. package/dist/utils/spawn.d.ts +0 -35
  301. package/dist/utils/spawn.d.ts.map +0 -1
  302. package/dist/utils/spawn.js.map +0 -1
  303. package/dist/utils/tracker.d.ts +0 -108
  304. package/dist/utils/tracker.d.ts.map +0 -1
  305. package/dist/utils/tracker.js.map +0 -1
  306. package/dist/utils/wait.d.ts +0 -54
  307. package/dist/utils/wait.d.ts.map +0 -1
  308. package/dist/utils/wait.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -28,6 +28,42 @@ Advantages:
28
28
  - individual plugin isolation in childbridge mode;
29
29
  - ability to update the plugin in childbridge mode without restarting matterbridge;
30
30
 
31
+ ## [3.3.8] - 2025-11-15
32
+
33
+ ### Development Breaking Changes
34
+
35
+ This will be the last release with the following long deprecated elements:
36
+
37
+ - [platform]: Matterbridge instead of PlatformMatterbridge in the platform constructor (deprecated since 3.0.0).
38
+ - [endpoint]: uniqueStorageKey instead of id in MatterbridgeEndpointOptions (deprecated since months).
39
+ - [endpoint]: endpointId instead of number in MatterbridgeEndpointOptions (deprecated since months).
40
+
41
+ So please update your plugin.
42
+
43
+ ### Added
44
+
45
+ - [endpoint]: Added matterbridgeEndpointTypes.
46
+ - [devices]: Added tests for device types and their revision changes.
47
+ - [clusters]: Added test for clusters and their revision changes.
48
+ - [chip]: Added fetch script to download zcl data from connectedhomeip.
49
+ - [endpoint]: Added createDefaultPowerSourceBatteryClusterServer(). Add Power Source cluster for a generic battery device.
50
+ - [platform]: Added setSchema() to temporarly set the schema for the config editor.
51
+ - [platform]: Added getSchema() to retrieve the schema from the Matterbridge plugin manager.
52
+ - [platform]: Added return value to registerVirtualDevice().
53
+
54
+ ### Changed
55
+
56
+ - [package]: Updated dependencies.
57
+ - [package]: Bumped jestHelpers v.1.0.12.
58
+ - [endpoint]: Changed long deprecated uniqueStorageKey with id in MatterbridgeEndpointOptions.
59
+ - [endpoint]: Changed long deprecated endpointId with number in MatterbridgeEndpointOptions.
60
+ - [endpoint]: Added property originalId in MatterbridgeEndpoint to store the original id passed in MatterbridgeEndpointOptions (since it can be changed for matter.js storage compatibility).
61
+ - [endpoint]: Changed logger level of single device classes.
62
+
63
+ <a href="https://www.buymeacoffee.com/luligugithub">
64
+ <img src="bmc-button.svg" alt="Buy me a coffee" width="80">
65
+ </a>
66
+
31
67
  ## [3.3.7] - 2025-11-08
32
68
 
33
69
  ### Breaking Changes
@@ -41,6 +77,7 @@ Advantages:
41
77
 
42
78
  ### Changed
43
79
 
80
+ - [package]: Updated dependencies.
44
81
  - [frontend]: Bumped `frontend` version to 3.3.1.
45
82
  - [PluginManager]: Bumped `PluginManager` version to 1.3.0.
46
83
  - [DeviceManager]: Bumped `DeviceManager` version to 1.1.0.
@@ -162,23 +162,23 @@ sudo systemctl stop matterbridge
162
162
  ### Show Matterbridge status
163
163
 
164
164
  ```bash
165
- sudo systemctl status matterbridge.service
165
+ sudo systemctl status matterbridge
166
166
  ```
167
167
 
168
168
  ### Enable Matterbridge to start automatically on boot
169
169
 
170
170
  ```bash
171
- sudo systemctl enable matterbridge.service
171
+ sudo systemctl enable matterbridge
172
172
  ```
173
173
 
174
174
  ### Disable Matterbridge from starting automatically on boot
175
175
 
176
176
  ```bash
177
- sudo systemctl disable matterbridge.service
177
+ sudo systemctl disable matterbridge
178
178
  ```
179
179
 
180
180
  ### View the log of Matterbridge in real time (this will show the log with colors)
181
181
 
182
182
  ```bash
183
- sudo journalctl -u matterbridge.service -n 1000 -f --output cat
183
+ sudo journalctl -u matterbridge -n 1000 -f --output cat
184
184
  ```
package/README.md CHANGED
@@ -354,6 +354,10 @@ The plugin uses local connection to Daikin Wifi modules. The plugin does not wor
354
354
 
355
355
  Matterbridge Roborock Platform Plugin is a dynamic platform plugin for Matterbridge that integrates Roborock vacuums into the Matter ecosystem, enabling control via Apple Home and other Matter-compatible apps.
356
356
 
357
+ ### [Wyze Robot Vacuum](https://github.com/RMCob/matterbridge-wyze-robovac)
358
+
359
+ Matterbridge plugin to control and report status of the Wyze S200 Robot Vacuum
360
+
357
361
  ## How to install and add a plugin with the frontend (best option)
358
362
 
359
363
  Just open the frontend on the link provided in the log, select a plugin and click install.
@@ -1,36 +1,9 @@
1
- /**
2
- * This file contains the BroadcastServer class.
3
- *
4
- * @file broadcastServer.ts
5
- * @author Luca Liguori
6
- * @created 2025-10-05
7
- * @version 1.0.2
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2024, 2025, 2026 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
- // eslint-disable-next-line no-console
25
1
  if (process.argv.includes('--loader') || process.argv.includes('-loader'))
26
2
  console.log('\u001B[32mBroadcastServer loaded.\u001B[40;0m');
27
3
  import { EventEmitter } from 'node:events';
28
4
  import { BroadcastChannel } from 'node:worker_threads';
29
5
  import { debugStringify } from 'node-ansi-logger';
30
6
  import { hasParameter } from './utils/commandLine.js';
31
- /**
32
- * BroadcastServer class to handle broadcast messages between workers with BroadcastChannel.
33
- */
34
7
  export class BroadcastServer extends EventEmitter {
35
8
  name;
36
9
  log;
@@ -38,13 +11,6 @@ export class BroadcastServer extends EventEmitter {
38
11
  broadcastChannel;
39
12
  debug = hasParameter('debug') || hasParameter('verbose');
40
13
  verbose = hasParameter('verbose');
41
- /**
42
- * Creates an instance of BroadcastServer.
43
- *
44
- * @param {string} name - The name of the broadcast server.
45
- * @param {AnsiLogger} log - The logger instance to use for logging.
46
- * @param {string} channel - The channel name for the broadcast. Default is 'broadcast-channel'.
47
- */
48
14
  constructor(name, log, channel = 'broadcast-channel') {
49
15
  super();
50
16
  this.name = name;
@@ -53,72 +19,30 @@ export class BroadcastServer extends EventEmitter {
53
19
  this.broadcastChannel = new BroadcastChannel(this.channel);
54
20
  this.broadcastChannel.onmessage = this.broadcastMessageHandler.bind(this);
55
21
  }
56
- /**
57
- * Closes the broadcast channel.
58
- *
59
- * @returns {void}
60
- */
61
22
  close() {
62
- // @ts-expect-error: wrong type definition in node.d.ts
63
23
  this.broadcastChannel.onmessage = null;
64
24
  this.broadcastChannel.close();
65
25
  }
66
- /**
67
- * Generates a unique ID with range 100000-999999.
68
- *
69
- * @returns {number} - A unique ID between 100000 and 999999
70
- */
71
26
  getUniqueId() {
72
- return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000; // random int between 100000 and 999999
27
+ return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000;
73
28
  }
74
- /**
75
- * Type guard to check if a message is a request of a specific type.
76
- *
77
- * @param {unknown} msg - The message to check.
78
- * @param {T} type - The type to check against.
79
- * @returns {msg is WorkerRequest<T>} True if the message is a request of the specified type.
80
- */
81
29
  isWorkerRequest(msg, type) {
82
30
  return typeof msg === 'object' && msg !== null && 'id' in msg && 'timestamp' in msg && 'type' in msg && msg.type === type && !('response' in msg) && 'src' in msg && 'dst' in msg;
83
31
  }
84
- /**
85
- * Type guard to check if a message is a response of a specific type.
86
- *
87
- * @param {unknown} msg - The message to check.
88
- * @param {T} type - The type to check against.
89
- * @returns {msg is WorkerResponse<T>} True if the message is a response of the specified type.
90
- */
91
32
  isWorkerResponse(msg, type) {
92
33
  return typeof msg === 'object' && msg !== null && 'id' in msg && 'timestamp' in msg && 'type' in msg && msg.type === type && 'response' in msg && 'src' in msg && 'dst' in msg;
93
34
  }
94
- /**
95
- * Handles incoming broadcast messages.
96
- *
97
- * @param {MessageEvent} event - The message event containing the broadcast message.
98
- * @returns {void}
99
- */
100
35
  broadcastMessageHandler(event) {
101
36
  const data = event.data;
102
37
  if (this.verbose)
103
38
  this.log.debug(`Received broadcast message: ${debugStringify(data)}`);
104
39
  this.emit('broadcast_message', data);
105
40
  }
106
- /**
107
- * Broadcast a message to all workers.
108
- *
109
- * @param {WorkerMessage} message - The message to broadcast.
110
- */
111
41
  broadcast(message) {
112
42
  if (this.verbose)
113
43
  this.log.debug(`Broadcasting message: ${debugStringify(message)}`);
114
44
  this.broadcastChannel.postMessage(message);
115
45
  }
116
- /**
117
- * Broadcast a request message to all workers.
118
- *
119
- * @param {WorkerRequest<T>} message - The typed request message to broadcast.
120
- * @returns {void}
121
- */
122
46
  request(message) {
123
47
  if (message.id === undefined) {
124
48
  message.id = this.getUniqueId();
@@ -134,12 +58,6 @@ export class BroadcastServer extends EventEmitter {
134
58
  this.log.debug(`Broadcasting request message: ${debugStringify(message)}`);
135
59
  this.broadcastChannel.postMessage(message);
136
60
  }
137
- /**
138
- * Broadcast a response message to all workers.
139
- *
140
- * @param {WorkerResponse<T>} message - The typed response message to broadcast.
141
- * @returns {void}
142
- */
143
61
  respond(message) {
144
62
  if (message.timestamp === undefined) {
145
63
  message.timestamp = Date.now();
@@ -152,15 +70,6 @@ export class BroadcastServer extends EventEmitter {
152
70
  this.log.debug(`Broadcasting response message: ${debugStringify(message)}`);
153
71
  this.broadcastChannel.postMessage(message);
154
72
  }
155
- /**
156
- * Fetch data from a worker.
157
- * It broadcasts a request message and waits for a response with the same id.
158
- *
159
- * @param {WorkerRequest<T>} message - The typed request message to broadcast.
160
- * @param {number} timeout - The timeout in milliseconds to wait for a response. Default is 100ms.
161
- * @returns {Promise<WorkerResponse<T>>} A promise that resolves with the response from the worker or rejects on timeout.
162
- * @throws {Error} If the fetch operation times out after 100ms.
163
- */
164
73
  async fetch(message, timeout = 100) {
165
74
  if (message.id === undefined) {
166
75
  message.id = this.getUniqueId();
@@ -189,4 +98,3 @@ export class BroadcastServer extends EventEmitter {
189
98
  });
190
99
  }
191
100
  }
192
- //# sourceMappingURL=broadcastServer.js.map
@@ -1,25 +1 @@
1
- /**
2
- * This file contains the BroadcastServer types.
3
- *
4
- * @file broadcastServerTypes.ts
5
- * @author Luca Liguori
6
- * @created 2025-10-05
7
- * @version 1.0.0
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2025, 2026, 2027 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
1
  export {};
25
- //# sourceMappingURL=broadcastServerTypes.js.map
package/dist/cli.js CHANGED
@@ -1,33 +1,6 @@
1
- /**
2
- * This file contains the CLI entry point of Matterbridge.
3
- *
4
- * @file cli.ts
5
- * @author Luca Liguori
6
- * @created 2023-12-29
7
- * @version 3.0.0
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2023, 2024, 2025 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
- /* eslint-disable no-console */
25
- /* eslint-disable n/no-process-exit */
26
1
  if (process.argv.includes('--loader') || process.argv.includes('-loader'))
27
2
  console.log('\u001B[32mCli loaded.\u001B[40;0m');
28
- // AnsiLogger module
29
3
  import { AnsiLogger } from 'node-ansi-logger';
30
- // Cli
31
4
  import { cliEmitter } from './cliEmitter.js';
32
5
  import { hasParameter, hasAnyParameter } from './utils/commandLine.js';
33
6
  import { inspectError } from './utils/error.js';
@@ -37,10 +10,7 @@ import { formatBytes, formatUptime } from './utils/format.js';
37
10
  export let instance;
38
11
  export const tracker = new Tracker('Cli', false, false);
39
12
  export const inspector = new Inspector('Cli', false, false);
40
- const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: hasParameter('debug') ? "debug" /* LogLevel.DEBUG */ : "info" /* LogLevel.INFO */ });
41
- /**
42
- * Starts the CPU and memory tracker.
43
- */
13
+ const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4, logLevel: hasParameter('debug') ? "debug" : "info" });
44
14
  function startCpuMemoryCheck() {
45
15
  log.debug(`Cpu memory check starting...`);
46
16
  tracker.start();
@@ -53,50 +23,26 @@ function startCpuMemoryCheck() {
53
23
  });
54
24
  log.debug(`Cpu memory check started`);
55
25
  }
56
- /**
57
- * Stops the CPU and memory tracker.
58
- */
59
26
  function stopCpuMemoryCheck() {
60
27
  log.debug(`Cpu memory check stopping...`);
61
28
  tracker.stop();
62
29
  tracker.removeAllListeners();
63
30
  log.debug(`Cpu memory check stopped`);
64
31
  }
65
- /**
66
- * Starts the inspector for heap sampling.
67
- * This function is called when the -inspect parameter is passed.
68
- */
69
32
  async function startInspector() {
70
33
  await inspector.start();
71
34
  }
72
- /**
73
- * Stops the heap sampling and saves the profile.
74
- * This function is called when the -inspect parameter is passed.
75
- */
76
35
  async function stopInspector() {
77
36
  await inspector.stop();
78
37
  }
79
- /**
80
- * Takes a heap snapshot
81
- */
82
38
  async function takeHeapSnapshot() {
83
39
  await inspector.takeHeapSnapshot();
84
40
  }
85
- /**
86
- * Triggers a manual garbage collection.
87
- * This function is working only if the node process is started with --expose_gc.
88
- *
89
- * @remarks To check the effect of the garbage collection, add also --trace_gc or --trace_gc_verbose.
90
- */
91
41
  function triggerGarbageCollection() {
92
42
  inspector.runGarbageCollector();
93
43
  }
94
- /**
95
- * Registers event handlers for the Matterbridge instance.
96
- */
97
44
  function registerHandlers() {
98
45
  log.debug('Registering event handlers...');
99
- // istanbul ignore next cause registerHandlers is called only if instance is defined
100
46
  if (!instance)
101
47
  return;
102
48
  instance.on('shutdown', () => shutdown());
@@ -110,9 +56,6 @@ function registerHandlers() {
110
56
  instance.on('triggergarbagecollection', () => triggerGarbageCollection());
111
57
  log.debug('Registered event handlers');
112
58
  }
113
- /**
114
- * Shuts down the Matterbridge instance and exits the process.
115
- */
116
59
  async function shutdown() {
117
60
  log.debug('Received shutdown event, exiting...');
118
61
  if (hasParameter('inspect'))
@@ -121,56 +64,26 @@ async function shutdown() {
121
64
  cliEmitter.emit('shutdown');
122
65
  process.exit(0);
123
66
  }
124
- /**
125
- * Restarts the Matterbridge instance.
126
- */
127
67
  async function restart() {
128
68
  log.debug('Received restart event, loading...');
129
69
  const { Matterbridge } = await import('./matterbridge.js');
130
70
  instance = await Matterbridge.loadInstance(true);
131
71
  registerHandlers();
132
72
  }
133
- /**
134
- * Updates the Matterbridge instance.
135
- */
136
73
  async function update() {
137
74
  log.debug('Received update event, updating...');
138
- // TODO: Implement update logic outside of matterbridge
139
75
  const { Matterbridge } = await import('./matterbridge.js');
140
76
  instance = await Matterbridge.loadInstance(true);
141
77
  registerHandlers();
142
78
  }
143
- /**
144
- * Starts the CPU and memory check when the -startmemorycheck parameter is passed.
145
- */
146
79
  function start() {
147
80
  log.debug('Received start memory check event');
148
81
  startCpuMemoryCheck();
149
82
  }
150
- /**
151
- * Stops the CPU and memory check when the -stopmemorycheck parameter is passed.
152
- */
153
83
  function stop() {
154
84
  log.debug('Received stop memory check event');
155
85
  stopCpuMemoryCheck();
156
86
  }
157
- /**
158
- * Main function that initializes the Matterbridge instance and starts the CLI.
159
- *
160
- * @remarks
161
- *
162
- * Debug parameters:
163
- *
164
- * --debug enables debug logging.
165
- *
166
- * --verbose enables verbose logging.
167
- *
168
- * --loader enables loader logging.
169
- *
170
- * --inspect enables the inspector for heap sampling.
171
- *
172
- * --snapshotinterval <milliseconds> can be used to set the heap snapshot interval. Default is undefined. Minimum is 30000 ms.
173
- */
174
87
  async function main() {
175
88
  log.debug(`Cli main() started`);
176
89
  startCpuMemoryCheck();
@@ -180,7 +93,6 @@ async function main() {
180
93
  const { Matterbridge } = await import('./matterbridge.js');
181
94
  instance = await Matterbridge.loadInstance(true);
182
95
  log.debug(`***Matterbridge.loadInstance(true) exited`);
183
- // Check if the instance needs to shut down from parseCommandLine()
184
96
  if (!instance || instance.shutdown) {
185
97
  shutdown();
186
98
  }
@@ -198,18 +110,11 @@ main().catch((error) => {
198
110
  inspectError(log, 'Matterbridge.loadInstance() failed with error', error);
199
111
  shutdown();
200
112
  });
201
- /**
202
- * Displays the version.
203
- */
204
113
  async function version() {
205
- // Dynamic JSON import (Node >= 20) with import attributes
206
114
  const { default: pkg } = await import('../package.json', { with: { type: 'json' } });
207
115
  console.log(`Matterbridge version ${pkg.version}`);
208
116
  process.exit(0);
209
117
  }
210
- /**
211
- * Displays the help.
212
- */
213
118
  function help() {
214
119
  console.log(`
215
120
  Usage: matterbridge [options] [command]
@@ -263,4 +168,3 @@ function help() {
263
168
  `);
264
169
  process.exit(0);
265
170
  }
266
- //# sourceMappingURL=cli.js.map
@@ -1,49 +1,12 @@
1
- /**
2
- * This file contains the CLI emitter.
3
- *
4
- * @file cliEmitter.ts
5
- * @author Luca Liguori
6
- * @created 2025-07-04
7
- * @version 1.0.2
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2025, 2026, 2027 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
- // eslint-disable-next-line no-console
25
1
  if (process.argv.includes('--loader') || process.argv.includes('-loader'))
26
2
  console.log('\u001B[32mCli emitter loaded.\u001B[40;0m');
27
3
  import { EventEmitter } from 'node:events';
28
4
  export const cliEmitter = new EventEmitter();
29
5
  export let lastOsCpuUsage = 0;
30
6
  export let lastProcessCpuUsage = 0;
31
- /**
32
- * Sets the last os CPU usage.
33
- *
34
- * @param {number} val - The os CPU usage percentage to set.
35
- * @returns {void}
36
- */
37
7
  export function setLastOsCpuUsage(val) {
38
8
  lastOsCpuUsage = val;
39
9
  }
40
- /**
41
- * Sets the last process CPU usage.
42
- *
43
- * @param {number} val - The process CPU usage percentage to set.
44
- * @returns {void}
45
- */
46
10
  export function setLastProcessCpuUsage(val) {
47
11
  lastProcessCpuUsage = val;
48
12
  }
49
- //# sourceMappingURL=cliEmitter.js.map
@@ -1,40 +1,9 @@
1
- /**
2
- * This file contains the CLI history page generator.
3
- *
4
- * @file cliHistory.ts
5
- * @author Luca Liguori
6
- * @created 2025-10-09
7
- * @version 1.0.1
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2025, 2026, 2027 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
- // eslint-disable-next-line no-console
25
1
  if (process.argv.includes('--loader') || process.argv.includes('-loader'))
26
2
  console.log('\u001B[32mCli history loaded.\u001B[40;0m');
27
3
  import { writeFileSync } from 'node:fs';
28
4
  import path from 'node:path';
29
5
  import os from 'node:os';
30
6
  import { Tracker } from './utils/tracker.js';
31
- /**
32
- * Generates a static HTML dashboard displaying CPU and memory history.
33
- *
34
- * @param {GenerateHistoryPageOptions} [options] - Optional configuration for output path, page title, and refresh interval.
35
- *
36
- * @returns {string | undefined} The absolute path to the generated HTML file, or undefined if no samples exist.
37
- */
38
7
  export function generateHistoryPage(options = {}) {
39
8
  const pageTitle = options.pageTitle ?? 'Matterbridge CPU & Memory History';
40
9
  const hostname = options.hostname ?? os.hostname();
@@ -814,13 +783,6 @@ export function generateHistoryPage(options = {}) {
814
783
  writeFileSync(outputPath, html, { encoding: 'utf-8' });
815
784
  return outputPath;
816
785
  }
817
- /**
818
- * Escapes HTML special characters to prevent breaking embedded markup.
819
- *
820
- * @param {string} input - The string to escape.
821
- * @returns {string} The escaped string safe for HTML contexts.
822
- */
823
786
  function escapeHtml(input) {
824
787
  return input.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
825
788
  }
826
- //# sourceMappingURL=cliHistory.js.map
@@ -1,3 +1 @@
1
1
  export {};
2
- // Nothing to export right now, but this file is here to make it easier to add exports in the future
3
- //# sourceMappingURL=export.js.map
@@ -1,26 +1,3 @@
1
- /**
2
- * This file contains the default config for the plugins.
3
- *
4
- * @file defaultConfigSchema.ts
5
- * @author Luca Liguori
6
- * @created 2024-05-07
7
- * @version 1.0.1
8
- * @license Apache-2.0
9
- *
10
- * Copyright 2024, 2025, 2026 Luca Liguori.
11
- *
12
- * Licensed under the Apache License, Version 2.0 (the "License");
13
- * you may not use this file except in compliance with the License.
14
- * You may obtain a copy of the License at
15
- *
16
- * http://www.apache.org/licenses/LICENSE-2.0
17
- *
18
- * Unless required by applicable law or agreed to in writing, software
19
- * distributed under the License is distributed on an "AS IS" BASIS,
20
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- * See the License for the specific language governing permissions and
22
- * limitations under the License.
23
- */
24
1
  export const zigbee2mqtt_config = {
25
2
  name: 'matterbridge-zigbee2mqtt',
26
3
  type: 'DynamicPlatform',
@@ -82,4 +59,3 @@ export const shelly_config = {
82
59
  debugWs: false,
83
60
  unregisterOnShutdown: false,
84
61
  };
85
- //# sourceMappingURL=defaultConfigSchema.js.map