matterbridge 3.3.3 → 3.3.4-dev-20251020-df40d12

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 (297) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/broadcastServer.js +1 -86
  3. package/dist/broadcastServerTypes.js +0 -24
  4. package/dist/cli.js +112 -445
  5. package/dist/cliEmitter.js +0 -37
  6. package/dist/cliHistory.js +15 -95
  7. package/dist/clusters/export.js +0 -2
  8. package/dist/defaultConfigSchema.js +0 -24
  9. package/dist/deviceManager.js +1 -124
  10. package/dist/devices/airConditioner.js +2 -59
  11. package/dist/devices/batteryStorage.js +4 -51
  12. package/dist/devices/cooktop.js +0 -55
  13. package/dist/devices/dishwasher.js +4 -61
  14. package/dist/devices/evse.js +16 -79
  15. package/dist/devices/export.js +0 -5
  16. package/dist/devices/extractorHood.js +1 -43
  17. package/dist/devices/heatPump.js +4 -52
  18. package/dist/devices/laundryDryer.js +6 -65
  19. package/dist/devices/laundryWasher.js +9 -75
  20. package/dist/devices/microwaveOven.js +10 -93
  21. package/dist/devices/oven.js +5 -90
  22. package/dist/devices/refrigerator.js +4 -106
  23. package/dist/devices/roboticVacuumCleaner.js +20 -111
  24. package/dist/devices/solarPower.js +2 -40
  25. package/dist/devices/speaker.js +2 -85
  26. package/dist/devices/temperatureControl.js +5 -27
  27. package/dist/devices/waterHeater.js +8 -88
  28. package/dist/dgram/coap.js +13 -126
  29. package/dist/dgram/dgram.js +2 -114
  30. package/dist/dgram/mb_coap.js +3 -41
  31. package/dist/dgram/mb_mdns.js +15 -80
  32. package/dist/dgram/mdns.js +137 -299
  33. package/dist/dgram/multicast.js +1 -62
  34. package/dist/dgram/unicast.js +0 -54
  35. package/dist/frontend.js +61 -439
  36. package/dist/frontendTypes.js +0 -45
  37. package/dist/helpers.js +1 -54
  38. package/dist/index.js +0 -25
  39. package/dist/logger/export.js +0 -1
  40. package/dist/matter/behaviors.js +0 -2
  41. package/dist/matter/clusters.js +0 -2
  42. package/dist/matter/devices.js +0 -2
  43. package/dist/matter/endpoints.js +0 -2
  44. package/dist/matter/export.js +0 -3
  45. package/dist/matter/types.js +0 -3
  46. package/dist/matterbridge.js +67 -885
  47. package/dist/matterbridgeAccessoryPlatform.js +2 -36
  48. package/dist/matterbridgeBehaviors.js +25 -91
  49. package/dist/matterbridgeDeviceTypes.js +102 -715
  50. package/dist/matterbridgeDynamicPlatform.js +2 -36
  51. package/dist/matterbridgeEndpoint.js +122 -1473
  52. package/dist/matterbridgeEndpointHelpers.js +88 -443
  53. package/dist/matterbridgePlatform.js +3 -343
  54. package/dist/matterbridgeTypes.js +0 -26
  55. package/dist/pluginManager.js +3 -325
  56. package/dist/shelly.js +7 -168
  57. package/dist/storage/export.js +0 -1
  58. package/dist/update.js +1 -70
  59. package/dist/utils/colorUtils.js +2 -97
  60. package/dist/utils/commandLine.js +6 -55
  61. package/dist/utils/copyDirectory.js +1 -38
  62. package/dist/utils/createDirectory.js +0 -33
  63. package/dist/utils/createZip.js +2 -47
  64. package/dist/utils/deepCopy.js +0 -39
  65. package/dist/utils/deepEqual.js +1 -72
  66. package/dist/utils/error.js +0 -41
  67. package/dist/utils/export.js +0 -1
  68. package/dist/utils/format.js +29 -0
  69. package/dist/utils/hex.js +0 -124
  70. package/dist/utils/inspector.js +200 -0
  71. package/dist/utils/isvalid.js +0 -101
  72. package/dist/utils/jestHelpers.js +10 -156
  73. package/dist/utils/network.js +5 -134
  74. package/dist/utils/spawn.js +0 -71
  75. package/dist/utils/tracker.js +201 -0
  76. package/dist/utils/wait.js +8 -60
  77. package/frontend/build/assets/index.js +4 -4
  78. package/frontend/build/assets/vendor_mdi.js +1 -1
  79. package/frontend/package.json +1 -1
  80. package/npm-shrinkwrap.json +44 -44
  81. package/package.json +2 -3
  82. package/dist/broadcastServer.d.ts +0 -105
  83. package/dist/broadcastServer.d.ts.map +0 -1
  84. package/dist/broadcastServer.js.map +0 -1
  85. package/dist/broadcastServerTypes.d.ts +0 -719
  86. package/dist/broadcastServerTypes.d.ts.map +0 -1
  87. package/dist/broadcastServerTypes.js.map +0 -1
  88. package/dist/cli.d.ts +0 -26
  89. package/dist/cli.d.ts.map +0 -1
  90. package/dist/cli.js.map +0 -1
  91. package/dist/cliEmitter.d.ts +0 -50
  92. package/dist/cliEmitter.d.ts.map +0 -1
  93. package/dist/cliEmitter.js.map +0 -1
  94. package/dist/cliHistory.d.ts +0 -74
  95. package/dist/cliHistory.d.ts.map +0 -1
  96. package/dist/cliHistory.js.map +0 -1
  97. package/dist/clusters/export.d.ts +0 -2
  98. package/dist/clusters/export.d.ts.map +0 -1
  99. package/dist/clusters/export.js.map +0 -1
  100. package/dist/defaultConfigSchema.d.ts +0 -28
  101. package/dist/defaultConfigSchema.d.ts.map +0 -1
  102. package/dist/defaultConfigSchema.js.map +0 -1
  103. package/dist/deviceManager.d.ts +0 -117
  104. package/dist/deviceManager.d.ts.map +0 -1
  105. package/dist/deviceManager.js.map +0 -1
  106. package/dist/devices/airConditioner.d.ts +0 -98
  107. package/dist/devices/airConditioner.d.ts.map +0 -1
  108. package/dist/devices/airConditioner.js.map +0 -1
  109. package/dist/devices/batteryStorage.d.ts +0 -48
  110. package/dist/devices/batteryStorage.d.ts.map +0 -1
  111. package/dist/devices/batteryStorage.js.map +0 -1
  112. package/dist/devices/cooktop.d.ts +0 -60
  113. package/dist/devices/cooktop.d.ts.map +0 -1
  114. package/dist/devices/cooktop.js.map +0 -1
  115. package/dist/devices/dishwasher.d.ts +0 -71
  116. package/dist/devices/dishwasher.d.ts.map +0 -1
  117. package/dist/devices/dishwasher.js.map +0 -1
  118. package/dist/devices/evse.d.ts +0 -75
  119. package/dist/devices/evse.d.ts.map +0 -1
  120. package/dist/devices/evse.js.map +0 -1
  121. package/dist/devices/export.d.ts +0 -17
  122. package/dist/devices/export.d.ts.map +0 -1
  123. package/dist/devices/export.js.map +0 -1
  124. package/dist/devices/extractorHood.d.ts +0 -46
  125. package/dist/devices/extractorHood.d.ts.map +0 -1
  126. package/dist/devices/extractorHood.js.map +0 -1
  127. package/dist/devices/heatPump.d.ts +0 -47
  128. package/dist/devices/heatPump.d.ts.map +0 -1
  129. package/dist/devices/heatPump.js.map +0 -1
  130. package/dist/devices/laundryDryer.d.ts +0 -67
  131. package/dist/devices/laundryDryer.d.ts.map +0 -1
  132. package/dist/devices/laundryDryer.js.map +0 -1
  133. package/dist/devices/laundryWasher.d.ts +0 -81
  134. package/dist/devices/laundryWasher.d.ts.map +0 -1
  135. package/dist/devices/laundryWasher.js.map +0 -1
  136. package/dist/devices/microwaveOven.d.ts +0 -168
  137. package/dist/devices/microwaveOven.d.ts.map +0 -1
  138. package/dist/devices/microwaveOven.js.map +0 -1
  139. package/dist/devices/oven.d.ts +0 -105
  140. package/dist/devices/oven.d.ts.map +0 -1
  141. package/dist/devices/oven.js.map +0 -1
  142. package/dist/devices/refrigerator.d.ts +0 -118
  143. package/dist/devices/refrigerator.d.ts.map +0 -1
  144. package/dist/devices/refrigerator.js.map +0 -1
  145. package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
  146. package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
  147. package/dist/devices/roboticVacuumCleaner.js.map +0 -1
  148. package/dist/devices/solarPower.d.ts +0 -40
  149. package/dist/devices/solarPower.d.ts.map +0 -1
  150. package/dist/devices/solarPower.js.map +0 -1
  151. package/dist/devices/speaker.d.ts +0 -87
  152. package/dist/devices/speaker.d.ts.map +0 -1
  153. package/dist/devices/speaker.js.map +0 -1
  154. package/dist/devices/temperatureControl.d.ts +0 -166
  155. package/dist/devices/temperatureControl.d.ts.map +0 -1
  156. package/dist/devices/temperatureControl.js.map +0 -1
  157. package/dist/devices/waterHeater.d.ts +0 -111
  158. package/dist/devices/waterHeater.d.ts.map +0 -1
  159. package/dist/devices/waterHeater.js.map +0 -1
  160. package/dist/dgram/coap.d.ts +0 -205
  161. package/dist/dgram/coap.d.ts.map +0 -1
  162. package/dist/dgram/coap.js.map +0 -1
  163. package/dist/dgram/dgram.d.ts +0 -141
  164. package/dist/dgram/dgram.d.ts.map +0 -1
  165. package/dist/dgram/dgram.js.map +0 -1
  166. package/dist/dgram/mb_coap.d.ts +0 -24
  167. package/dist/dgram/mb_coap.d.ts.map +0 -1
  168. package/dist/dgram/mb_coap.js.map +0 -1
  169. package/dist/dgram/mb_mdns.d.ts +0 -24
  170. package/dist/dgram/mb_mdns.d.ts.map +0 -1
  171. package/dist/dgram/mb_mdns.js.map +0 -1
  172. package/dist/dgram/mdns.d.ts +0 -290
  173. package/dist/dgram/mdns.d.ts.map +0 -1
  174. package/dist/dgram/mdns.js.map +0 -1
  175. package/dist/dgram/multicast.d.ts +0 -67
  176. package/dist/dgram/multicast.d.ts.map +0 -1
  177. package/dist/dgram/multicast.js.map +0 -1
  178. package/dist/dgram/unicast.d.ts +0 -56
  179. package/dist/dgram/unicast.d.ts.map +0 -1
  180. package/dist/dgram/unicast.js.map +0 -1
  181. package/dist/frontend.d.ts +0 -235
  182. package/dist/frontend.d.ts.map +0 -1
  183. package/dist/frontend.js.map +0 -1
  184. package/dist/frontendTypes.d.ts +0 -529
  185. package/dist/frontendTypes.d.ts.map +0 -1
  186. package/dist/frontendTypes.js.map +0 -1
  187. package/dist/helpers.d.ts +0 -48
  188. package/dist/helpers.d.ts.map +0 -1
  189. package/dist/helpers.js.map +0 -1
  190. package/dist/index.d.ts +0 -33
  191. package/dist/index.d.ts.map +0 -1
  192. package/dist/index.js.map +0 -1
  193. package/dist/logger/export.d.ts +0 -2
  194. package/dist/logger/export.d.ts.map +0 -1
  195. package/dist/logger/export.js.map +0 -1
  196. package/dist/matter/behaviors.d.ts +0 -2
  197. package/dist/matter/behaviors.d.ts.map +0 -1
  198. package/dist/matter/behaviors.js.map +0 -1
  199. package/dist/matter/clusters.d.ts +0 -2
  200. package/dist/matter/clusters.d.ts.map +0 -1
  201. package/dist/matter/clusters.js.map +0 -1
  202. package/dist/matter/devices.d.ts +0 -2
  203. package/dist/matter/devices.d.ts.map +0 -1
  204. package/dist/matter/devices.js.map +0 -1
  205. package/dist/matter/endpoints.d.ts +0 -2
  206. package/dist/matter/endpoints.d.ts.map +0 -1
  207. package/dist/matter/endpoints.js.map +0 -1
  208. package/dist/matter/export.d.ts +0 -5
  209. package/dist/matter/export.d.ts.map +0 -1
  210. package/dist/matter/export.js.map +0 -1
  211. package/dist/matter/types.d.ts +0 -3
  212. package/dist/matter/types.d.ts.map +0 -1
  213. package/dist/matter/types.js.map +0 -1
  214. package/dist/matterbridge.d.ts +0 -469
  215. package/dist/matterbridge.d.ts.map +0 -1
  216. package/dist/matterbridge.js.map +0 -1
  217. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -42
  218. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  219. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  220. package/dist/matterbridgeBehaviors.d.ts +0 -2399
  221. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  222. package/dist/matterbridgeBehaviors.js.map +0 -1
  223. package/dist/matterbridgeDeviceTypes.d.ts +0 -761
  224. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  225. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  226. package/dist/matterbridgeDynamicPlatform.d.ts +0 -42
  227. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  228. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  229. package/dist/matterbridgeEndpoint.d.ts +0 -1545
  230. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  231. package/dist/matterbridgeEndpoint.js.map +0 -1
  232. package/dist/matterbridgeEndpointHelpers.d.ts +0 -560
  233. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  234. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  235. package/dist/matterbridgePlatform.d.ts +0 -402
  236. package/dist/matterbridgePlatform.d.ts.map +0 -1
  237. package/dist/matterbridgePlatform.js.map +0 -1
  238. package/dist/matterbridgeTypes.d.ts +0 -209
  239. package/dist/matterbridgeTypes.d.ts.map +0 -1
  240. package/dist/matterbridgeTypes.js.map +0 -1
  241. package/dist/pluginManager.d.ts +0 -353
  242. package/dist/pluginManager.d.ts.map +0 -1
  243. package/dist/pluginManager.js.map +0 -1
  244. package/dist/shelly.d.ts +0 -174
  245. package/dist/shelly.d.ts.map +0 -1
  246. package/dist/shelly.js.map +0 -1
  247. package/dist/storage/export.d.ts +0 -2
  248. package/dist/storage/export.d.ts.map +0 -1
  249. package/dist/storage/export.js.map +0 -1
  250. package/dist/update.d.ts +0 -75
  251. package/dist/update.d.ts.map +0 -1
  252. package/dist/update.js.map +0 -1
  253. package/dist/utils/colorUtils.d.ts +0 -99
  254. package/dist/utils/colorUtils.d.ts.map +0 -1
  255. package/dist/utils/colorUtils.js.map +0 -1
  256. package/dist/utils/commandLine.d.ts +0 -59
  257. package/dist/utils/commandLine.d.ts.map +0 -1
  258. package/dist/utils/commandLine.js.map +0 -1
  259. package/dist/utils/copyDirectory.d.ts +0 -33
  260. package/dist/utils/copyDirectory.d.ts.map +0 -1
  261. package/dist/utils/copyDirectory.js.map +0 -1
  262. package/dist/utils/createDirectory.d.ts +0 -34
  263. package/dist/utils/createDirectory.d.ts.map +0 -1
  264. package/dist/utils/createDirectory.js.map +0 -1
  265. package/dist/utils/createZip.d.ts +0 -39
  266. package/dist/utils/createZip.d.ts.map +0 -1
  267. package/dist/utils/createZip.js.map +0 -1
  268. package/dist/utils/deepCopy.d.ts +0 -32
  269. package/dist/utils/deepCopy.d.ts.map +0 -1
  270. package/dist/utils/deepCopy.js.map +0 -1
  271. package/dist/utils/deepEqual.d.ts +0 -54
  272. package/dist/utils/deepEqual.d.ts.map +0 -1
  273. package/dist/utils/deepEqual.js.map +0 -1
  274. package/dist/utils/error.d.ts +0 -44
  275. package/dist/utils/error.d.ts.map +0 -1
  276. package/dist/utils/error.js.map +0 -1
  277. package/dist/utils/export.d.ts +0 -13
  278. package/dist/utils/export.d.ts.map +0 -1
  279. package/dist/utils/export.js.map +0 -1
  280. package/dist/utils/hex.d.ts +0 -89
  281. package/dist/utils/hex.d.ts.map +0 -1
  282. package/dist/utils/hex.js.map +0 -1
  283. package/dist/utils/isvalid.d.ts +0 -103
  284. package/dist/utils/isvalid.d.ts.map +0 -1
  285. package/dist/utils/isvalid.js.map +0 -1
  286. package/dist/utils/jestHelpers.d.ts +0 -137
  287. package/dist/utils/jestHelpers.d.ts.map +0 -1
  288. package/dist/utils/jestHelpers.js.map +0 -1
  289. package/dist/utils/network.d.ts +0 -115
  290. package/dist/utils/network.d.ts.map +0 -1
  291. package/dist/utils/network.js.map +0 -1
  292. package/dist/utils/spawn.d.ts +0 -35
  293. package/dist/utils/spawn.d.ts.map +0 -1
  294. package/dist/utils/spawn.js.map +0 -1
  295. package/dist/utils/wait.d.ts +0 -54
  296. package/dist/utils/wait.d.ts.map +0 -1
  297. package/dist/utils/wait.js.map +0 -1
package/dist/cli.js CHANGED
@@ -1,501 +1,168 @@
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 2.1.1
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-next-line no-console
25
1
  if (process.argv.includes('--loader') || process.argv.includes('-loader'))
26
- console.log('\u001B[32mCLI loaded.\u001B[40;0m');
27
- import os from 'node:os';
28
- import { inspect } from 'node:util';
29
- // AnsiLogger module
30
- import { AnsiLogger, BRIGHT, CYAN, db, RED, YELLOW } from 'node-ansi-logger';
31
- // Cli
32
- import { cliEmitter, setLastOsCpuUsage, setLastProcessCpuUsage } from './cliEmitter.js';
33
- import { history, historyIndex, historySize, setHistoryIndex } from './cliHistory.js';
34
- // Matterbridge
35
- import { getIntParameter, hasParameter } from './utils/commandLine.js';
2
+ console.log('\u001B[32mCli loaded.\u001B[40;0m');
3
+ import { AnsiLogger } from 'node-ansi-logger';
4
+ import { cliEmitter } from './cliEmitter.js';
36
5
  import { Matterbridge } from './matterbridge.js';
6
+ import { hasParameter, hasAnyParameter } from './utils/commandLine.js';
7
+ import { inspectError } from './utils/error.js';
8
+ import { Tracker } from './utils/tracker.js';
9
+ import { Inspector } from './utils/inspector.js';
10
+ import { formatBytes, formatUptime } from './utils/format.js';
37
11
  export let instance;
38
- // Inspectop
39
- let session;
40
- let snapshotInterval;
41
- // Cpu and memory check
42
- const trace = hasParameter('trace');
43
- let memoryCheckInterval;
44
- const memoryCheckIntervalMs = getIntParameter('memoryinterval') ?? 10 * 1000;
45
- let memoryPeakResetTimeout;
46
- let prevCpus;
47
- let prevProcessCpu;
48
- let peakCpu = 0;
49
- let peakProcessCpu = 0;
50
- let peakRss = 0;
51
- let peakHeapUsed = 0;
52
- let peakHeapTotal = 0;
53
- let peakExternal = 0;
54
- let peakArrayBuffers = 0;
55
- const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: hasParameter('debug') ? "debug" /* LogLevel.DEBUG */ : "info" /* LogLevel.INFO */ });
56
- const formatCpuUsage = (percent) => {
57
- return `${percent.toFixed(2).padStart(5, ' ')} %`;
58
- };
59
- const formatMemoryUsage = (bytes) => {
60
- if (bytes >= 1024 ** 3) {
61
- return `${(bytes / 1024 ** 3).toFixed(2)} GB`;
62
- }
63
- else if (bytes >= 1024 ** 2) {
64
- return `${(bytes / 1024 ** 2).toFixed(2)} MB`;
65
- }
66
- else {
67
- return `${(bytes / 1024).toFixed(2)} KB`;
68
- }
69
- };
70
- const formatOsUpTime = (seconds) => {
71
- if (seconds >= 86400) {
72
- const days = Math.floor(seconds / 86400);
73
- return `${days} day${days !== 1 ? 's' : ''}`;
74
- }
75
- if (seconds >= 3600) {
76
- const hours = Math.floor(seconds / 3600);
77
- return `${hours} hour${hours !== 1 ? 's' : ''}`;
78
- }
79
- if (seconds >= 60) {
80
- const minutes = Math.floor(seconds / 60);
81
- return `${minutes} minute${minutes !== 1 ? 's' : ''}`;
82
- }
83
- return `${seconds} second${seconds !== 1 ? 's' : ''}`;
84
- };
85
- /**
86
- * Starts the CPU and memory check interval.
87
- *
88
- * @remarks
89
- * Debug parameter
90
- *
91
- * -memoryinterval <milliseconds> can be used to set the interval. Default is 10 seconds.
92
- */
93
- async function startCpuMemoryCheck() {
94
- // const os = await import('node:os');
12
+ export const tracker = new Tracker('Cli', false, false);
13
+ export const inspector = new Inspector('Cli', false, false);
14
+ const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4, logLevel: hasParameter('debug') ? "debug" : "info" });
15
+ function startCpuMemoryCheck() {
16
+ log.debug(`Cpu memory check starting...`);
17
+ tracker.start();
18
+ tracker.on('uptime', (os, process) => {
19
+ cliEmitter.emit('uptime', formatUptime(Math.floor(os)), formatUptime(Math.floor(process)));
20
+ });
21
+ tracker.on('snapshot', (snapshot) => {
22
+ cliEmitter.emit('memory', formatBytes(snapshot.totalMemory), formatBytes(snapshot.freeMemory), formatBytes(snapshot.rss), formatBytes(snapshot.heapTotal), formatBytes(snapshot.heapUsed), formatBytes(snapshot.external), formatBytes(snapshot.arrayBuffers));
23
+ cliEmitter.emit('cpu', snapshot.osCpu, snapshot.processCpu);
24
+ });
95
25
  log.debug(`Cpu memory check started`);
96
- prevCpus = os.cpus();
97
- prevProcessCpu = process.cpuUsage();
98
- const interval = () => {
99
- // Get the os uptime
100
- const systemUptime = formatOsUpTime(Math.floor(os.uptime()));
101
- const processUptime = formatOsUpTime(Math.floor(process.uptime()));
102
- cliEmitter.emit('uptime', systemUptime, processUptime);
103
- // Get the free and total memory
104
- const totalMemory = formatMemoryUsage(os.totalmem());
105
- const freeMemory = formatMemoryUsage(os.freemem());
106
- // Get the memory usage
107
- const memoryUsageRaw = process.memoryUsage();
108
- const rss = formatMemoryUsage(memoryUsageRaw.rss);
109
- const heapTotal = formatMemoryUsage(memoryUsageRaw.heapTotal);
110
- const heapUsed = formatMemoryUsage(memoryUsageRaw.heapUsed);
111
- const external = formatMemoryUsage(memoryUsageRaw.external);
112
- const arrayBuffers = formatMemoryUsage(memoryUsageRaw.arrayBuffers);
113
- if (memoryUsageRaw.rss > peakRss) {
114
- if (peakRss && trace)
115
- log.debug(`****${RED}${BRIGHT}Rss peak detected.${db} Peak rss from ${CYAN}${formatMemoryUsage(peakRss)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.rss)}${db}`);
116
- peakRss = memoryUsageRaw.rss;
117
- }
118
- if (memoryUsageRaw.heapUsed > peakHeapUsed) {
119
- if (peakHeapUsed && trace)
120
- log.debug(`****${RED}${BRIGHT}HeapUsed peak detected.${db} Peak heapUsed from ${CYAN}${formatMemoryUsage(peakHeapUsed)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.heapUsed)}${db}`);
121
- peakHeapUsed = memoryUsageRaw.heapUsed;
122
- }
123
- if (memoryUsageRaw.heapTotal > peakHeapTotal) {
124
- if (peakHeapTotal && trace)
125
- log.debug(`****${RED}${BRIGHT}HeapTotal peak detected.${db} Peak heapTotal from ${CYAN}${formatMemoryUsage(peakHeapTotal)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.heapTotal)}${db}`);
126
- peakHeapTotal = memoryUsageRaw.heapTotal;
127
- }
128
- if (memoryUsageRaw.external > peakExternal) {
129
- if (peakExternal && trace)
130
- log.debug(`****${RED}${BRIGHT}External peak detected.${db} Peak external from ${CYAN}${formatMemoryUsage(peakExternal)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.external)}${db}`);
131
- peakExternal = memoryUsageRaw.external;
132
- }
133
- if (memoryUsageRaw.arrayBuffers > peakArrayBuffers) {
134
- if (peakArrayBuffers && trace)
135
- log.debug(`****${RED}${BRIGHT}ArrayBuffers peak detected.${db} Peak arrayBuffers from ${CYAN}${formatMemoryUsage(peakArrayBuffers)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.arrayBuffers)}${db}`);
136
- peakArrayBuffers = memoryUsageRaw.arrayBuffers;
137
- }
138
- cliEmitter.emit('memory', totalMemory, freeMemory, rss, heapTotal, heapUsed, external, arrayBuffers);
139
- // Get the host cpu usage
140
- const currCpus = os.cpus();
141
- // log.debug(`Cpus: ${JSON.stringify(currCpus)}`);
142
- if (currCpus.length !== prevCpus.length) {
143
- prevCpus = currCpus; // Reset the previous cpus
144
- log.debug(`Cpu check length failed, resetting previous cpus`);
145
- return;
146
- }
147
- let totalIdle = 0, totalTick = 0;
148
- prevCpus.forEach((prevCpu, i) => {
149
- const currCpu = currCpus[i];
150
- const idleDiff = currCpu.times.idle - prevCpu.times.idle;
151
- const totalDiff = Object.keys(currCpu.times).reduce((acc, key) => acc + (currCpu.times[key] - prevCpu.times[key]), 0);
152
- totalIdle += idleDiff;
153
- totalTick += totalDiff;
154
- });
155
- const osCpuUsage = 100 - (totalIdle / totalTick) * 100;
156
- if (totalTick === 0 || isNaN(osCpuUsage) || !isFinite(osCpuUsage) || osCpuUsage <= 0) {
157
- log.debug(`Cpu check failed, using previous cpus`);
158
- }
159
- else {
160
- // istanbul ignore next
161
- setLastOsCpuUsage(osCpuUsage);
162
- // istanbul ignore next if
163
- if (osCpuUsage > peakCpu) {
164
- peakCpu = osCpuUsage;
165
- if (peakCpu && trace)
166
- log.debug(`****${RED}${BRIGHT}Cpu peak detected.${db} Peak cpu from ${CYAN}${formatCpuUsage(peakCpu)}${db} to ${CYAN}${formatCpuUsage(osCpuUsage)}${db}`);
167
- }
168
- }
169
- prevCpus = currCpus;
170
- // Get the process cpu usage https://cdn.jsdelivr.net/npm/chart.js
171
- const diff = process.cpuUsage(prevProcessCpu);
172
- const userMs = diff.user / 1000;
173
- const systemMs = diff.system / 1000;
174
- const totalMs = userMs + systemMs;
175
- const processCpuUsage = Number((((totalMs / memoryCheckIntervalMs) * 100) / currCpus.length).toFixed(2));
176
- // istanbul ignore next if
177
- if (processCpuUsage > peakProcessCpu) {
178
- peakProcessCpu = processCpuUsage;
179
- if (peakProcessCpu && trace)
180
- log.debug(`****${RED}${BRIGHT}Process cpu peak detected.${db} Peak process cpu from ${CYAN}${formatCpuUsage(peakProcessCpu)}${db} to ${CYAN}${formatCpuUsage(processCpuUsage)}${db}`);
181
- }
182
- prevProcessCpu = process.cpuUsage();
183
- setLastProcessCpuUsage(processCpuUsage);
184
- cliEmitter.emit('cpu', osCpuUsage, processCpuUsage);
185
- // Update preallocated history entry in place to avoid per-interval allocations. Keep the same object reference.
186
- const entry = history[historyIndex];
187
- entry.timestamp = Date.now();
188
- entry.cpu = osCpuUsage;
189
- entry.peakCpu = peakCpu;
190
- entry.processCpu = processCpuUsage;
191
- entry.peakProcessCpu = peakProcessCpu;
192
- entry.rss = memoryUsageRaw.rss;
193
- entry.peakRss = peakRss;
194
- entry.heapUsed = memoryUsageRaw.heapUsed;
195
- entry.peakHeapUsed = peakHeapUsed;
196
- entry.heapTotal = memoryUsageRaw.heapTotal;
197
- entry.peakHeapTotal = peakHeapTotal;
198
- entry.external = memoryUsageRaw.external;
199
- entry.peakExternal = peakExternal;
200
- entry.arrayBuffers = memoryUsageRaw.arrayBuffers;
201
- entry.peakArrayBuffers = peakArrayBuffers;
202
- setHistoryIndex((historyIndex + 1) % historySize);
203
- // Show the cpu and memory usage
204
- if (trace)
205
- log.debug(`***${YELLOW}${BRIGHT}Host cpu:${db} ` +
206
- `${CYAN}${formatCpuUsage(osCpuUsage)}${db} (peak ${formatCpuUsage(peakCpu)}) ` +
207
- `${YELLOW}${BRIGHT}Process cpu:${db} ` +
208
- `${CYAN}${formatCpuUsage(processCpuUsage)}${db} (peak ${formatCpuUsage(peakProcessCpu)}) ` +
209
- `${YELLOW}${BRIGHT}Process memory:${db} ` +
210
- `rss ${CYAN}${rss}${db} (peak ${formatMemoryUsage(peakRss)}) ` +
211
- `heapUsed ${CYAN}${heapUsed}${db} (peak ${formatMemoryUsage(peakHeapUsed)}) ` +
212
- `heapTotal ${CYAN}${heapTotal}${db} (peak ${formatMemoryUsage(peakHeapTotal)}) ` +
213
- `external ${CYAN}${external}${db} (peak ${formatMemoryUsage(peakExternal)}) ` +
214
- `arrayBuffers ${CYAN}${arrayBuffers}${db} (peak ${formatMemoryUsage(peakArrayBuffers)})`);
215
- };
216
- clearInterval(memoryCheckInterval);
217
- memoryCheckInterval = setInterval(interval, memoryCheckIntervalMs).unref();
218
- clearTimeout(memoryPeakResetTimeout);
219
- // istanbul ignore next
220
- memoryPeakResetTimeout = setTimeout(() => {
221
- if (trace)
222
- log.debug(`****${RED}${BRIGHT}Cpu and memory peaks reset after first 5 minutes.${db}`);
223
- peakCpu = 0;
224
- peakProcessCpu = 0;
225
- peakRss = 0;
226
- peakHeapUsed = 0;
227
- peakHeapTotal = 0;
228
- }, 5 * 60 * 1000).unref(); // Reset peaks every 5 minutes
229
26
  }
230
- /**
231
- * Stops the CPU and memory check interval.
232
- */
233
- async function stopCpuMemoryCheck() {
234
- if (trace) {
235
- log.debug(`***Cpu memory check stopped. ` +
236
- `Peak cpu: ${CYAN}${peakCpu.toFixed(2)} %${db}. ` +
237
- `Peak rss: ${CYAN}${formatMemoryUsage(peakRss)}${db}. ` +
238
- `Peak heapUsed: ${CYAN}${formatMemoryUsage(peakHeapUsed)}${db}. ` +
239
- `Peak heapTotal: ${CYAN}${formatMemoryUsage(peakHeapTotal)}${db}. ` +
240
- `Peak external: ${CYAN}${formatMemoryUsage(peakExternal)}${db}. ` +
241
- `Peak arrayBuffers: ${CYAN}${formatMemoryUsage(peakArrayBuffers)}${db}.`);
242
- }
243
- clearInterval(memoryCheckInterval);
244
- clearTimeout(memoryPeakResetTimeout);
27
+ function stopCpuMemoryCheck() {
28
+ log.debug(`Cpu memory check stopping...`);
29
+ tracker.stop();
30
+ tracker.removeAllListeners();
31
+ log.debug(`Cpu memory check stopped`);
245
32
  }
246
- /**
247
- * Starts the inspector for heap sampling.
248
- * This function is called when the -inspect parameter is passed.
249
- * The -snapshotinterval parameter can be used to set the heap snapshot interval. Default is undefined. Minimum is 30000 ms.
250
- * The snapshot is saved in the heap_profile directory that is created in the current working directory.
251
- * The snapshot can be analyzed using vscode or Chrome DevTools or other tools that support heap snapshots.
252
- *
253
- * @remarks To use the inspector, Node.js must be started with --inspect.
254
- */
255
33
  async function startInspector() {
256
- const { Session } = await import('node:inspector');
257
- const { mkdirSync } = await import('node:fs');
258
- log.debug(`***Starting heap sampling...`);
259
- // Create the heap snapshots directory if it doesn't exist
260
- mkdirSync('heap_profile', { recursive: true });
261
- try {
262
- session = new Session();
263
- session.connect();
264
- await new Promise((resolve, reject) => {
265
- session?.post('HeapProfiler.startSampling', (err) => (err ? reject(err) : resolve()));
266
- });
267
- log.debug(`***Started heap sampling`);
268
- // Set an interval to take heap snapshots
269
- const interval = getIntParameter('snapshotinterval');
270
- if (interval && interval >= 30000) {
271
- log.debug(`***Started heap snapshot interval of ${CYAN}${interval}${db} ms`);
272
- clearInterval(snapshotInterval);
273
- snapshotInterval = setInterval(async () => {
274
- log.debug(`Run heap snapshot interval`);
275
- await takeHeapSnapshot();
276
- }, interval).unref();
277
- }
278
- }
279
- catch (err) {
280
- log.error(`***Failed to start heap sampling: ${err instanceof Error ? err.message : err}`);
281
- session?.disconnect();
282
- session = undefined;
283
- return;
284
- }
34
+ await inspector.start();
285
35
  }
286
- /**
287
- * Stops the heap sampling and saves the profile to a file.
288
- * This function is called when the inspector is stopped.
289
- */
290
36
  async function stopInspector() {
291
- const { writeFileSync } = await import('node:fs');
292
- const path = await import('node:path');
293
- log.debug(`***Stopping heap sampling...`);
294
- if (snapshotInterval) {
295
- log.debug(`***Clearing heap snapshot interval...`);
296
- // Clear the snapshot interval if it exists
297
- clearInterval(snapshotInterval);
298
- // Take a final heap snapshot before stopping
299
- await takeHeapSnapshot();
300
- }
301
- if (!session) {
302
- log.error('***No active inspector session.');
303
- return;
304
- }
305
- try {
306
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
307
- const result = await new Promise((resolve, reject) => {
308
- session?.post('HeapProfiler.stopSampling', (err, result) => (err ? reject(err) : resolve(result)));
309
- });
310
- const profile = JSON.stringify(result.profile);
311
- const filename = path.join('heap_profile', `Heap-profile-${new Date().toISOString().replace(/[:]/g, '-')}.heapprofile`);
312
- writeFileSync(filename, profile);
313
- log.debug(`***Heap sampling profile saved to ${CYAN}${filename}${db}`);
314
- }
315
- catch (err) {
316
- log.error(`***Failed to stop heap sampling: ${err instanceof Error ? err.message : err}`);
317
- }
318
- finally {
319
- session.disconnect();
320
- session = undefined;
321
- log.debug(`***Stopped heap sampling`);
322
- }
37
+ await inspector.stop();
323
38
  }
324
- /**
325
- * Takes a heap snapshot and saves it to the file name Heap-snapshot-<timestamp>.heapsnapshot.
326
- * This function is called periodically based on the -snapshotinterval parameter.
327
- * The -snapshotinterval parameter must at least 30000 ms.
328
- * The snapshot is saved in the heap_profile directory that is created in the current working directory.
329
- * The snapshot can be analyzed using vscode or Chrome DevTools or other tools that support heap snapshots.
330
- */
331
39
  async function takeHeapSnapshot() {
332
- const { writeFileSync } = await import('node:fs');
333
- const path = await import('node:path');
334
- const filename = path.join('heap_profile', `Heap-snapshot-${new Date().toISOString().replace(/[:]/g, '-')}.heapsnapshot`);
335
- if (!session) {
336
- log.error('No active inspector session.');
337
- return;
338
- }
339
- // Trigger a garbage collection before taking the snapshot to reduce noise
340
- triggerGarbageCollection();
341
- log.debug(`Taking heap snapshot...`);
342
- const chunks = [];
343
- const chunksListener = (notification) => {
344
- chunks.push(Buffer.from(notification.params.chunk));
345
- };
346
- session.on('HeapProfiler.addHeapSnapshotChunk', chunksListener);
347
- await new Promise((resolve) => {
348
- session?.post('HeapProfiler.takeHeapSnapshot', (err) => {
349
- if (!err) {
350
- session?.off('HeapProfiler.addHeapSnapshotChunk', chunksListener);
351
- writeFileSync(filename, Buffer.concat(chunks));
352
- chunks.length = 0; // Clear the chunks array
353
- log.debug(`***Heap sampling snapshot saved to ${CYAN}${filename}${db}`);
354
- // Trigger a garbage collection after the snapshot to clean up
355
- triggerGarbageCollection();
356
- resolve();
357
- }
358
- else {
359
- session?.off('HeapProfiler.addHeapSnapshotChunk', chunksListener);
360
- chunks.length = 0; // Clear the chunks array
361
- log.error(`***Failed to take heap snapshot: ${err instanceof Error ? err.message : err}`);
362
- // Trigger a garbage collection after the snapshot to clean up
363
- triggerGarbageCollection();
364
- resolve();
365
- }
366
- });
367
- });
40
+ await inspector.takeHeapSnapshot();
368
41
  }
369
- /**
370
- * Triggers a manual garbage collection.
371
- * This function is working only if the process is started with --expose_gc.
372
- *
373
- * @remarks To check the effect of the garbage collection, add --trace_gc or --trace_gc_verbose.
374
- */
375
42
  function triggerGarbageCollection() {
376
- if (global.gc && typeof global.gc === 'function') {
377
- try {
378
- global.gc({ type: 'major', execution: 'sync' });
379
- }
380
- catch {
381
- // istanbul ignore next
382
- global.gc();
383
- }
384
- log.debug('Manual garbage collection triggered via global.gc().');
385
- }
386
- else {
387
- log.debug('Garbage collection is not exposed. Start Node.js with --expose-gc to enable manual GC.');
388
- }
43
+ inspector.runGarbageCollector();
389
44
  }
390
- /**
391
- * Registers event handlers for the Matterbridge instance.
392
- */
393
45
  function registerHandlers() {
394
46
  log.debug('Registering event handlers...');
395
- if (instance)
396
- instance.on('shutdown', async () => shutdown());
397
- if (instance)
398
- instance.on('restart', async () => restart());
399
- if (instance)
400
- instance.on('update', async () => update());
401
- if (instance)
402
- instance.on('startmemorycheck', async () => start());
403
- if (instance)
404
- instance.on('stopmemorycheck', async () => stop());
405
- if (instance)
406
- instance.on('startinspector', async () => startInspector());
407
- if (instance)
408
- instance.on('stopinspector', async () => stopInspector());
409
- if (instance)
410
- instance.on('takeheapsnapshot', async () => takeHeapSnapshot());
411
- if (instance)
412
- instance.on('triggergarbagecollection', async () => triggerGarbageCollection());
47
+ if (!instance)
48
+ return;
49
+ instance.on('shutdown', () => shutdown());
50
+ instance.on('restart', () => restart());
51
+ instance.on('update', () => update());
52
+ instance.on('startmemorycheck', () => start());
53
+ instance.on('stopmemorycheck', () => stop());
54
+ instance.on('startinspector', () => startInspector());
55
+ instance.on('stopinspector', () => stopInspector());
56
+ instance.on('takeheapsnapshot', () => takeHeapSnapshot());
57
+ instance.on('triggergarbagecollection', () => triggerGarbageCollection());
413
58
  log.debug('Registered event handlers');
414
59
  }
415
- /**
416
- * Shuts down the Matterbridge instance and exits the process.
417
- */
418
60
  async function shutdown() {
419
61
  log.debug('Received shutdown event, exiting...');
420
62
  if (hasParameter('inspect'))
421
63
  await stopInspector();
422
- await stopCpuMemoryCheck();
64
+ stopCpuMemoryCheck();
423
65
  cliEmitter.emit('shutdown');
424
- // eslint-disable-next-line n/no-process-exit
425
66
  process.exit(0);
426
67
  }
427
- /**
428
- * Restarts the Matterbridge instance.
429
- */
430
68
  async function restart() {
431
69
  log.debug('Received restart event, loading...');
432
70
  instance = await Matterbridge.loadInstance(true);
433
71
  registerHandlers();
434
72
  }
435
- /**
436
- * Updates the Matterbridge instance.
437
- */
438
73
  async function update() {
439
74
  log.debug('Received update event, updating...');
440
- // TODO: Implement update logic outside of matterbridge
441
75
  instance = await Matterbridge.loadInstance(true);
442
76
  registerHandlers();
443
77
  }
444
- /**
445
- * Starts the CPU and memory check when the -startmemorycheck parameter is passed.
446
- */
447
- async function start() {
78
+ function start() {
448
79
  log.debug('Received start memory check event');
449
- await startCpuMemoryCheck();
80
+ startCpuMemoryCheck();
450
81
  }
451
- /**
452
- * Stops the CPU and memory check when the -stopmemorycheck parameter is passed.
453
- */
454
- async function stop() {
82
+ function stop() {
455
83
  log.debug('Received stop memory check event');
456
- await stopCpuMemoryCheck();
84
+ stopCpuMemoryCheck();
457
85
  }
458
- /**
459
- * Main function that initializes the Matterbridge instance and starts the CLI.
460
- *
461
- * @remarks
462
- *
463
- * Debug parameters:
464
- *
465
- * --debug enables debug logging.
466
- *
467
- * --loader enables loader logging.
468
- *
469
- * --trace enables cpu and memory logging and history logging on shutdown.
470
- *
471
- * --memoryinterval <milliseconds> can be used to set the CPU and memory check interval. Default is 10 seconds.
472
- *
473
- * --inspect enables the inspector for heap sampling.
474
- *
475
- * --snapshotinterval <milliseconds> can be used to set the heap snapshot interval. Default is undefined. Minimum is 30000 ms.
476
- */
477
86
  async function main() {
478
87
  log.debug(`Cli main() started`);
479
- await startCpuMemoryCheck();
88
+ startCpuMemoryCheck();
480
89
  if (hasParameter('inspect'))
481
90
  await startInspector();
482
91
  log.debug(`***Matterbridge.loadInstance(true) called`);
483
92
  instance = await Matterbridge.loadInstance(true);
484
93
  log.debug(`***Matterbridge.loadInstance(true) exited`);
485
- // Check if the instance needs to shut down from parseCommandLine()
486
94
  if (!instance || instance.shutdown) {
487
95
  shutdown();
488
96
  }
489
97
  else {
490
98
  registerHandlers();
491
99
  cliEmitter.emit('ready');
100
+ log.debug(`Cli main() ready`);
492
101
  }
493
102
  }
494
- // Run the main function
495
- process.title = 'matterbridge';
103
+ if (hasAnyParameter('help', 'h'))
104
+ help();
105
+ if (hasAnyParameter('version', 'v'))
106
+ await version();
496
107
  main().catch((error) => {
497
- const errorMessage = error instanceof Error ? error.message : error;
498
- const errorInspect = inspect(error, { depth: 10 });
499
- log.error(`Matterbridge.loadInstance() failed with error: ${errorMessage}\nstack: ${errorInspect}`);
108
+ inspectError(log, 'Matterbridge.loadInstance() failed with error', error);
109
+ shutdown();
500
110
  });
501
- //# sourceMappingURL=cli.js.map
111
+ async function version() {
112
+ const { default: pkg } = await import('../package.json', { with: { type: 'json' } });
113
+ console.log(`Matterbridge version ${pkg.version}`);
114
+ process.exit(0);
115
+ }
116
+ function help() {
117
+ console.log(`
118
+ Usage: matterbridge [options] [command]
119
+
120
+ Commands:
121
+ --help: show the help
122
+ --version: show the version
123
+ --add [plugin path]: register the plugin from the given absolute or relative path
124
+ --add [plugin name]: register the globally installed plugin with the given name
125
+ --remove [plugin path]: remove the plugin from the given absolute or relative path
126
+ --remove [plugin name]: remove the globally installed plugin with the given name
127
+ --enable [plugin path]: enable the plugin from the given absolute or relative path
128
+ --enable [plugin name]: enable the globally installed plugin with the given name
129
+ --disable [plugin path]: disable the plugin from the given absolute or relative path
130
+ --disable [plugin name]: disable the globally installed plugin with the given name
131
+
132
+ Reset Commands:
133
+ --reset: remove the commissioning for Matterbridge (bridge mode and childbridge mode). Shutdown Matterbridge before using it!
134
+ --reset [plugin path]: remove the commissioning for the plugin from the given absolute or relative path (childbridge mode). Shutdown Matterbridge before using it!
135
+ --reset [plugin name]: remove the commissioning for the globally installed plugin (childbridge mode). Shutdown Matterbridge before using it!
136
+ --factoryreset: remove all commissioning information and reset all internal storages. Shutdown Matterbridge before using it!
137
+
138
+ Options:
139
+ --bridge: start Matterbridge in bridge mode
140
+ --childbridge: start Matterbridge in childbridge mode
141
+ --port [port]: start the matter commissioning server on the given port (default 5540)
142
+ --mdnsinterface [name]: set the interface to use for the matter server mdnsInterface (default all interfaces)
143
+ --ipv4address [address]: set the ipv4 interface address to use for the matter server listener (default all addresses)
144
+ --ipv6address [address]: set the ipv6 interface address to use for the matter server listener (default all addresses)
145
+ --frontend [port]: start the frontend on the given port (default 8283)
146
+ --logger: set the matterbridge logger level: debug | info | notice | warn | error | fatal (default info)
147
+ --filelogger: enable the matterbridge file logger (matterbridge.log)
148
+ --matterlogger: set the matter.js logger level: debug | info | notice | warn | error | fatal (default info)
149
+ --matterfilelogger: enable the matter.js file logger (matter.log)
150
+ --list: list the registered plugins
151
+ --loginterfaces: log the network interfaces (usefull for finding the name of the interface to use with -mdnsinterface option)
152
+ --logstorage: log the node storage
153
+ --sudo: force the use of sudo to install or update packages if the internal logic fails
154
+ --nosudo: force not to use sudo to install or update packages if the internal logic fails
155
+ --norestore: force not to automatically restore the matterbridge node storage and the matter storage from backup if it is corrupted
156
+ --novirtual: disable the creation of the virtual devices Restart, Update and Reboot Matterbridge
157
+ --ssl: enable SSL for the frontend and the WebSocketServer (the server will use the certificates and switch to https)
158
+ --mtls: enable mTLS for the frontend and the WebSocketServer (both server and client will use and require the certificates and switch to https)
159
+ --vendorId: override the default vendorId 0xfff1
160
+ --vendorName: override the default vendorName "Matterbridge"
161
+ --productId: override the default productId 0x8000
162
+ --productName: override the default productName "Matterbridge aggregator"
163
+ --service: enable the service mode (used in the linux systemctl configuration file and macOS launchctl plist)
164
+ --docker: enable the docker mode (used in the docker image)
165
+ --homedir: override the home directory (default the os homedir)
166
+ `);
167
+ process.exit(0);
168
+ }
@@ -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