matterbridge 3.3.2 → 3.3.3-dev-20251012-1af2e85
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.
- package/CHANGELOG.md +21 -7
- package/dist/broadcastServer.js +1 -86
- package/dist/broadcastServerTypes.js +0 -24
- package/dist/cli.js +5 -135
- package/dist/cliEmitter.js +0 -37
- package/dist/cliHistory.js +0 -44
- package/dist/clusters/export.js +0 -2
- package/dist/defaultConfigSchema.js +0 -24
- package/dist/deviceManager.js +1 -124
- package/dist/devices/airConditioner.js +0 -57
- package/dist/devices/batteryStorage.js +1 -48
- package/dist/devices/cooktop.js +0 -55
- package/dist/devices/dishwasher.js +0 -57
- package/dist/devices/evse.js +10 -74
- package/dist/devices/export.js +0 -5
- package/dist/devices/extractorHood.js +0 -42
- package/dist/devices/heatPump.js +2 -50
- package/dist/devices/laundryDryer.js +3 -62
- package/dist/devices/laundryWasher.js +4 -70
- package/dist/devices/microwaveOven.js +5 -88
- package/dist/devices/oven.js +0 -85
- package/dist/devices/refrigerator.js +0 -102
- package/dist/devices/roboticVacuumCleaner.js +9 -100
- package/dist/devices/solarPower.js +0 -38
- package/dist/devices/speaker.js +0 -84
- package/dist/devices/temperatureControl.js +3 -25
- package/dist/devices/waterHeater.js +2 -82
- package/dist/dgram/coap.js +13 -126
- package/dist/dgram/dgram.js +2 -114
- package/dist/dgram/mb_coap.js +3 -41
- package/dist/dgram/mb_mdns.js +15 -80
- package/dist/dgram/mdns.js +137 -299
- package/dist/dgram/multicast.js +1 -62
- package/dist/dgram/unicast.js +0 -54
- package/dist/frontend.js +29 -402
- package/dist/frontendTypes.js +0 -45
- package/dist/helpers.js +0 -53
- package/dist/index.js +0 -25
- package/dist/logger/export.js +0 -1
- package/dist/matter/behaviors.js +0 -2
- package/dist/matter/clusters.js +0 -2
- package/dist/matter/devices.js +0 -2
- package/dist/matter/endpoints.js +0 -2
- package/dist/matter/export.js +0 -3
- package/dist/matter/types.js +0 -3
- package/dist/matterbridge.js +45 -795
- package/dist/matterbridgeAccessoryPlatform.js +0 -36
- package/dist/matterbridgeBehaviors.js +5 -65
- package/dist/matterbridgeDeviceTypes.js +17 -630
- package/dist/matterbridgeDynamicPlatform.js +0 -36
- package/dist/matterbridgeEndpoint.js +58 -1398
- package/dist/matterbridgeEndpointHelpers.js +12 -345
- package/dist/matterbridgePlatform.js +1 -341
- package/dist/matterbridgeTypes.js +0 -26
- package/dist/pluginManager.js +3 -325
- package/dist/shelly.js +7 -168
- package/dist/storage/export.js +0 -1
- package/dist/update.js +0 -69
- package/dist/utils/colorUtils.js +2 -97
- package/dist/utils/commandLine.js +0 -54
- package/dist/utils/copyDirectory.js +1 -38
- package/dist/utils/createDirectory.js +0 -33
- package/dist/utils/createZip.js +2 -47
- package/dist/utils/deepCopy.js +0 -39
- package/dist/utils/deepEqual.js +1 -72
- package/dist/utils/error.js +0 -41
- package/dist/utils/export.js +0 -1
- package/dist/utils/hex.js +0 -124
- package/dist/utils/isvalid.js +0 -101
- package/dist/utils/jestHelpers.js +3 -153
- package/dist/utils/network.js +5 -108
- package/dist/utils/spawn.js +0 -71
- package/dist/utils/wait.js +8 -60
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -2
- package/dist/broadcastServer.d.ts +0 -105
- package/dist/broadcastServer.d.ts.map +0 -1
- package/dist/broadcastServer.js.map +0 -1
- package/dist/broadcastServerTypes.d.ts +0 -717
- package/dist/broadcastServerTypes.d.ts.map +0 -1
- package/dist/broadcastServerTypes.js.map +0 -1
- package/dist/cli.d.ts +0 -26
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/cliEmitter.d.ts +0 -50
- package/dist/cliEmitter.d.ts.map +0 -1
- package/dist/cliEmitter.js.map +0 -1
- package/dist/cliHistory.d.ts +0 -70
- package/dist/cliHistory.d.ts.map +0 -1
- package/dist/cliHistory.js.map +0 -1
- package/dist/clusters/export.d.ts +0 -2
- package/dist/clusters/export.d.ts.map +0 -1
- package/dist/clusters/export.js.map +0 -1
- package/dist/defaultConfigSchema.d.ts +0 -28
- package/dist/defaultConfigSchema.d.ts.map +0 -1
- package/dist/defaultConfigSchema.js.map +0 -1
- package/dist/deviceManager.d.ts +0 -117
- package/dist/deviceManager.d.ts.map +0 -1
- package/dist/deviceManager.js.map +0 -1
- package/dist/devices/airConditioner.d.ts +0 -98
- package/dist/devices/airConditioner.d.ts.map +0 -1
- package/dist/devices/airConditioner.js.map +0 -1
- package/dist/devices/batteryStorage.d.ts +0 -48
- package/dist/devices/batteryStorage.d.ts.map +0 -1
- package/dist/devices/batteryStorage.js.map +0 -1
- package/dist/devices/cooktop.d.ts +0 -60
- package/dist/devices/cooktop.d.ts.map +0 -1
- package/dist/devices/cooktop.js.map +0 -1
- package/dist/devices/dishwasher.d.ts +0 -71
- package/dist/devices/dishwasher.d.ts.map +0 -1
- package/dist/devices/dishwasher.js.map +0 -1
- package/dist/devices/evse.d.ts +0 -75
- package/dist/devices/evse.d.ts.map +0 -1
- package/dist/devices/evse.js.map +0 -1
- package/dist/devices/export.d.ts +0 -17
- package/dist/devices/export.d.ts.map +0 -1
- package/dist/devices/export.js.map +0 -1
- package/dist/devices/extractorHood.d.ts +0 -46
- package/dist/devices/extractorHood.d.ts.map +0 -1
- package/dist/devices/extractorHood.js.map +0 -1
- package/dist/devices/heatPump.d.ts +0 -47
- package/dist/devices/heatPump.d.ts.map +0 -1
- package/dist/devices/heatPump.js.map +0 -1
- package/dist/devices/laundryDryer.d.ts +0 -67
- package/dist/devices/laundryDryer.d.ts.map +0 -1
- package/dist/devices/laundryDryer.js.map +0 -1
- package/dist/devices/laundryWasher.d.ts +0 -81
- package/dist/devices/laundryWasher.d.ts.map +0 -1
- package/dist/devices/laundryWasher.js.map +0 -1
- package/dist/devices/microwaveOven.d.ts +0 -168
- package/dist/devices/microwaveOven.d.ts.map +0 -1
- package/dist/devices/microwaveOven.js.map +0 -1
- package/dist/devices/oven.d.ts +0 -105
- package/dist/devices/oven.d.ts.map +0 -1
- package/dist/devices/oven.js.map +0 -1
- package/dist/devices/refrigerator.d.ts +0 -118
- package/dist/devices/refrigerator.d.ts.map +0 -1
- package/dist/devices/refrigerator.js.map +0 -1
- package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
- package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
- package/dist/devices/roboticVacuumCleaner.js.map +0 -1
- package/dist/devices/solarPower.d.ts +0 -40
- package/dist/devices/solarPower.d.ts.map +0 -1
- package/dist/devices/solarPower.js.map +0 -1
- package/dist/devices/speaker.d.ts +0 -87
- package/dist/devices/speaker.d.ts.map +0 -1
- package/dist/devices/speaker.js.map +0 -1
- package/dist/devices/temperatureControl.d.ts +0 -166
- package/dist/devices/temperatureControl.d.ts.map +0 -1
- package/dist/devices/temperatureControl.js.map +0 -1
- package/dist/devices/waterHeater.d.ts +0 -111
- package/dist/devices/waterHeater.d.ts.map +0 -1
- package/dist/devices/waterHeater.js.map +0 -1
- package/dist/dgram/coap.d.ts +0 -205
- package/dist/dgram/coap.d.ts.map +0 -1
- package/dist/dgram/coap.js.map +0 -1
- package/dist/dgram/dgram.d.ts +0 -141
- package/dist/dgram/dgram.d.ts.map +0 -1
- package/dist/dgram/dgram.js.map +0 -1
- package/dist/dgram/mb_coap.d.ts +0 -24
- package/dist/dgram/mb_coap.d.ts.map +0 -1
- package/dist/dgram/mb_coap.js.map +0 -1
- package/dist/dgram/mb_mdns.d.ts +0 -24
- package/dist/dgram/mb_mdns.d.ts.map +0 -1
- package/dist/dgram/mb_mdns.js.map +0 -1
- package/dist/dgram/mdns.d.ts +0 -290
- package/dist/dgram/mdns.d.ts.map +0 -1
- package/dist/dgram/mdns.js.map +0 -1
- package/dist/dgram/multicast.d.ts +0 -67
- package/dist/dgram/multicast.d.ts.map +0 -1
- package/dist/dgram/multicast.js.map +0 -1
- package/dist/dgram/unicast.d.ts +0 -56
- package/dist/dgram/unicast.d.ts.map +0 -1
- package/dist/dgram/unicast.js.map +0 -1
- package/dist/frontend.d.ts +0 -234
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js.map +0 -1
- package/dist/frontendTypes.d.ts +0 -522
- package/dist/frontendTypes.d.ts.map +0 -1
- package/dist/frontendTypes.js.map +0 -1
- package/dist/helpers.d.ts +0 -48
- package/dist/helpers.d.ts.map +0 -1
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts +0 -33
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/logger/export.d.ts +0 -2
- package/dist/logger/export.d.ts.map +0 -1
- package/dist/logger/export.js.map +0 -1
- package/dist/matter/behaviors.d.ts +0 -2
- package/dist/matter/behaviors.d.ts.map +0 -1
- package/dist/matter/behaviors.js.map +0 -1
- package/dist/matter/clusters.d.ts +0 -2
- package/dist/matter/clusters.d.ts.map +0 -1
- package/dist/matter/clusters.js.map +0 -1
- package/dist/matter/devices.d.ts +0 -2
- package/dist/matter/devices.d.ts.map +0 -1
- package/dist/matter/devices.js.map +0 -1
- package/dist/matter/endpoints.d.ts +0 -2
- package/dist/matter/endpoints.d.ts.map +0 -1
- package/dist/matter/endpoints.js.map +0 -1
- package/dist/matter/export.d.ts +0 -5
- package/dist/matter/export.d.ts.map +0 -1
- package/dist/matter/export.js.map +0 -1
- package/dist/matter/types.d.ts +0 -3
- package/dist/matter/types.d.ts.map +0 -1
- package/dist/matter/types.js.map +0 -1
- package/dist/matterbridge.d.ts +0 -469
- package/dist/matterbridge.d.ts.map +0 -1
- package/dist/matterbridge.js.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.d.ts +0 -42
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
- package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
- package/dist/matterbridgeBehaviors.d.ts +0 -1747
- package/dist/matterbridgeBehaviors.d.ts.map +0 -1
- package/dist/matterbridgeBehaviors.js.map +0 -1
- package/dist/matterbridgeDeviceTypes.d.ts +0 -761
- package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
- package/dist/matterbridgeDeviceTypes.js.map +0 -1
- package/dist/matterbridgeDynamicPlatform.d.ts +0 -42
- package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
- package/dist/matterbridgeDynamicPlatform.js.map +0 -1
- package/dist/matterbridgeEndpoint.d.ts +0 -1534
- package/dist/matterbridgeEndpoint.d.ts.map +0 -1
- package/dist/matterbridgeEndpoint.js.map +0 -1
- package/dist/matterbridgeEndpointHelpers.d.ts +0 -407
- package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
- package/dist/matterbridgeEndpointHelpers.js.map +0 -1
- package/dist/matterbridgePlatform.d.ts +0 -402
- package/dist/matterbridgePlatform.d.ts.map +0 -1
- package/dist/matterbridgePlatform.js.map +0 -1
- package/dist/matterbridgeTypes.d.ts +0 -209
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/pluginManager.d.ts +0 -353
- package/dist/pluginManager.d.ts.map +0 -1
- package/dist/pluginManager.js.map +0 -1
- package/dist/shelly.d.ts +0 -174
- package/dist/shelly.d.ts.map +0 -1
- package/dist/shelly.js.map +0 -1
- package/dist/storage/export.d.ts +0 -2
- package/dist/storage/export.d.ts.map +0 -1
- package/dist/storage/export.js.map +0 -1
- package/dist/update.d.ts +0 -75
- package/dist/update.d.ts.map +0 -1
- package/dist/update.js.map +0 -1
- package/dist/utils/colorUtils.d.ts +0 -99
- package/dist/utils/colorUtils.d.ts.map +0 -1
- package/dist/utils/colorUtils.js.map +0 -1
- package/dist/utils/commandLine.d.ts +0 -59
- package/dist/utils/commandLine.d.ts.map +0 -1
- package/dist/utils/commandLine.js.map +0 -1
- package/dist/utils/copyDirectory.d.ts +0 -33
- package/dist/utils/copyDirectory.d.ts.map +0 -1
- package/dist/utils/copyDirectory.js.map +0 -1
- package/dist/utils/createDirectory.d.ts +0 -34
- package/dist/utils/createDirectory.d.ts.map +0 -1
- package/dist/utils/createDirectory.js.map +0 -1
- package/dist/utils/createZip.d.ts +0 -39
- package/dist/utils/createZip.d.ts.map +0 -1
- package/dist/utils/createZip.js.map +0 -1
- package/dist/utils/deepCopy.d.ts +0 -32
- package/dist/utils/deepCopy.d.ts.map +0 -1
- package/dist/utils/deepCopy.js.map +0 -1
- package/dist/utils/deepEqual.d.ts +0 -54
- package/dist/utils/deepEqual.d.ts.map +0 -1
- package/dist/utils/deepEqual.js.map +0 -1
- package/dist/utils/error.d.ts +0 -44
- package/dist/utils/error.d.ts.map +0 -1
- package/dist/utils/error.js.map +0 -1
- package/dist/utils/export.d.ts +0 -13
- package/dist/utils/export.d.ts.map +0 -1
- package/dist/utils/export.js.map +0 -1
- package/dist/utils/hex.d.ts +0 -89
- package/dist/utils/hex.d.ts.map +0 -1
- package/dist/utils/hex.js.map +0 -1
- package/dist/utils/isvalid.d.ts +0 -103
- package/dist/utils/isvalid.d.ts.map +0 -1
- package/dist/utils/isvalid.js.map +0 -1
- package/dist/utils/jestHelpers.d.ts +0 -137
- package/dist/utils/jestHelpers.d.ts.map +0 -1
- package/dist/utils/jestHelpers.js.map +0 -1
- package/dist/utils/network.d.ts +0 -115
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/spawn.d.ts +0 -35
- package/dist/utils/spawn.d.ts.map +0 -1
- package/dist/utils/spawn.js.map +0 -1
- package/dist/utils/wait.d.ts +0 -54
- package/dist/utils/wait.d.ts.map +0 -1
- package/dist/utils/wait.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -23,6 +23,16 @@ Advantages:
|
|
|
23
23
|
- isolation between threads;
|
|
24
24
|
- individual plugin isolation in childbridge mode;
|
|
25
25
|
|
|
26
|
+
## [3.3.3] - Not released
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- [package]: Updated dependencies.
|
|
31
|
+
|
|
32
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
33
|
+
<img src="bmc-button.svg" alt="Buy me a coffee" width="80">
|
|
34
|
+
</a>
|
|
35
|
+
|
|
26
36
|
## [3.3.2] - 2025-10-13
|
|
27
37
|
|
|
28
38
|
### Fixed
|
|
@@ -94,11 +104,15 @@ This change, necessary to achieve plugin isolation, will require all plugins to
|
|
|
94
104
|
- require matterbridge 3.3.0:
|
|
95
105
|
|
|
96
106
|
```typescript
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
if (
|
|
108
|
+
this.verifyMatterbridgeVersion === undefined ||
|
|
109
|
+
typeof this.verifyMatterbridgeVersion !== "function" ||
|
|
110
|
+
!this.verifyMatterbridgeVersion("3.3.0")
|
|
111
|
+
) {
|
|
112
|
+
throw new Error(
|
|
113
|
+
`This plugin requires Matterbridge version >= "3.3.0". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version."`
|
|
114
|
+
);
|
|
115
|
+
}
|
|
102
116
|
```
|
|
103
117
|
|
|
104
118
|
- check that you are not using any matterbridge calls directly (this should not be the case).
|
|
@@ -118,8 +132,8 @@ export type PlatformMatterbridge = {
|
|
|
118
132
|
readonly matterbridgeVersion: string;
|
|
119
133
|
readonly matterbridgeLatestVersion: string;
|
|
120
134
|
readonly matterbridgeDevVersion: string;
|
|
121
|
-
readonly bridgeMode:
|
|
122
|
-
readonly restartMode:
|
|
135
|
+
readonly bridgeMode: "bridge" | "childbridge" | "controller" | "";
|
|
136
|
+
readonly restartMode: "service" | "docker" | "";
|
|
123
137
|
readonly aggregatorVendorId: VendorId;
|
|
124
138
|
readonly aggregatorVendorName: string;
|
|
125
139
|
readonly aggregatorProductId: number;
|
package/dist/broadcastServer.js
CHANGED
|
@@ -1,47 +1,13 @@
|
|
|
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.0
|
|
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
|
-
/**
|
|
31
|
-
* BroadcastServer class to handle broadcast messages between workers with BroadcastChannel.
|
|
32
|
-
*/
|
|
33
6
|
export class BroadcastServer extends EventEmitter {
|
|
34
7
|
name;
|
|
35
8
|
log;
|
|
36
9
|
channel;
|
|
37
10
|
broadcastChannel;
|
|
38
|
-
/**
|
|
39
|
-
* Creates an instance of BroadcastServer.
|
|
40
|
-
*
|
|
41
|
-
* @param {string} name - The name of the broadcast server.
|
|
42
|
-
* @param {AnsiLogger} log - The logger instance to use for logging.
|
|
43
|
-
* @param {string} channel - The channel name for the broadcast. Default is 'broadcast-channel'.
|
|
44
|
-
*/
|
|
45
11
|
constructor(name, log, channel = 'broadcast-channel') {
|
|
46
12
|
super();
|
|
47
13
|
this.name = name;
|
|
@@ -50,61 +16,24 @@ export class BroadcastServer extends EventEmitter {
|
|
|
50
16
|
this.broadcastChannel = new BroadcastChannel(this.channel);
|
|
51
17
|
this.broadcastChannel.onmessage = this.broadcastMessageHandler.bind(this);
|
|
52
18
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Closes the broadcast channel.
|
|
55
|
-
*
|
|
56
|
-
* @returns {void}
|
|
57
|
-
*/
|
|
58
19
|
close() {
|
|
59
|
-
// @ts-expect-error: wrong type definition in node.d.ts
|
|
60
20
|
this.broadcastChannel.onmessage = null;
|
|
61
21
|
this.broadcastChannel.close();
|
|
62
22
|
}
|
|
63
|
-
/**
|
|
64
|
-
* Generates a unique ID with range 100000-999999.
|
|
65
|
-
*
|
|
66
|
-
* @returns {number} - A unique ID between 100000 and 999999
|
|
67
|
-
*/
|
|
68
23
|
getUniqueId() {
|
|
69
|
-
return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000;
|
|
24
|
+
return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000;
|
|
70
25
|
}
|
|
71
|
-
/**
|
|
72
|
-
* Type guard to check if a message is a request of a specific type.
|
|
73
|
-
*
|
|
74
|
-
* @param {unknown} msg - The message to check.
|
|
75
|
-
* @param {T} type - The type to check against.
|
|
76
|
-
* @returns {msg is WorkerRequest<T>} True if the message is a request of the specified type.
|
|
77
|
-
*/
|
|
78
26
|
isWorkerRequest(msg, type) {
|
|
79
27
|
return typeof msg === 'object' && msg !== null && 'id' in msg && 'type' in msg && msg.type === type && !('response' in msg) && 'src' in msg && 'dst' in msg;
|
|
80
28
|
}
|
|
81
|
-
/**
|
|
82
|
-
* Type guard to check if a message is a response of a specific type.
|
|
83
|
-
*
|
|
84
|
-
* @param {unknown} msg - The message to check.
|
|
85
|
-
* @param {T} type - The type to check against.
|
|
86
|
-
* @returns {msg is WorkerResponse<T>} True if the message is a response of the specified type.
|
|
87
|
-
*/
|
|
88
29
|
isWorkerResponse(msg, type) {
|
|
89
30
|
return typeof msg === 'object' && msg !== null && 'id' in msg && 'type' in msg && msg.type === type && 'response' in msg && 'src' in msg && 'dst' in msg;
|
|
90
31
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Handles incoming broadcast messages.
|
|
93
|
-
*
|
|
94
|
-
* @param {MessageEvent} event - The message event containing the broadcast message.
|
|
95
|
-
* @returns {void}
|
|
96
|
-
*/
|
|
97
32
|
broadcastMessageHandler(event) {
|
|
98
33
|
const data = event.data;
|
|
99
34
|
this.log.debug(`*Received broadcast message: ${debugStringify(data)}`);
|
|
100
35
|
this.emit('broadcast_message', data);
|
|
101
36
|
}
|
|
102
|
-
/**
|
|
103
|
-
* Broadcast a request message to all workers.
|
|
104
|
-
*
|
|
105
|
-
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
106
|
-
* @returns {void}
|
|
107
|
-
*/
|
|
108
37
|
request(message) {
|
|
109
38
|
if (message.id === undefined) {
|
|
110
39
|
message.id = this.getUniqueId();
|
|
@@ -116,12 +45,6 @@ export class BroadcastServer extends EventEmitter {
|
|
|
116
45
|
this.log.debug(`*Broadcasting message: ${debugStringify(message)}`);
|
|
117
46
|
this.broadcastChannel.postMessage(message);
|
|
118
47
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Broadcast a response message to all workers.
|
|
121
|
-
*
|
|
122
|
-
* @param {WorkerResponse<T>} message - The typed response message to broadcast.
|
|
123
|
-
* @returns {void}
|
|
124
|
-
*/
|
|
125
48
|
respond(message) {
|
|
126
49
|
if (!this.isWorkerResponse(message, message.type)) {
|
|
127
50
|
this.log.error(`Invalid response message format for broadcast: ${debugStringify(message)}`);
|
|
@@ -130,13 +53,6 @@ export class BroadcastServer extends EventEmitter {
|
|
|
130
53
|
this.log.debug(`*Broadcasting message: ${debugStringify(message)}`);
|
|
131
54
|
this.broadcastChannel.postMessage(message);
|
|
132
55
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Fetch data from a worker.
|
|
135
|
-
* It broadcasts a request message and waits for a response with the same id.
|
|
136
|
-
*
|
|
137
|
-
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
138
|
-
* @returns {Promise<WorkerResponse<T>>} A promise that resolves with the response from the worker or rejects on timeout.
|
|
139
|
-
*/
|
|
140
56
|
async fetch(message) {
|
|
141
57
|
this.log.debug(`*Fetching message: ${debugStringify(message)}`);
|
|
142
58
|
return new Promise((resolve, reject) => {
|
|
@@ -157,4 +73,3 @@ export class BroadcastServer extends EventEmitter {
|
|
|
157
73
|
});
|
|
158
74
|
}
|
|
159
75
|
}
|
|
160
|
-
//# 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 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 {};
|
|
25
|
-
//# sourceMappingURL=broadcastServerTypes.js.map
|
package/dist/cli.js
CHANGED
|
@@ -1,44 +1,15 @@
|
|
|
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
2
|
console.log('\u001B[32mCLI loaded.\u001B[40;0m');
|
|
27
3
|
import os from 'node:os';
|
|
28
4
|
import { inspect } from 'node:util';
|
|
29
|
-
// AnsiLogger module
|
|
30
5
|
import { AnsiLogger, BRIGHT, CYAN, db, RED, YELLOW } from 'node-ansi-logger';
|
|
31
|
-
// Cli
|
|
32
6
|
import { cliEmitter, setLastOsCpuUsage, setLastProcessCpuUsage } from './cliEmitter.js';
|
|
33
7
|
import { history, historyIndex, historySize, setHistoryIndex } from './cliHistory.js';
|
|
34
|
-
// Matterbridge
|
|
35
8
|
import { getIntParameter, hasParameter } from './utils/commandLine.js';
|
|
36
9
|
import { Matterbridge } from './matterbridge.js';
|
|
37
10
|
export let instance;
|
|
38
|
-
// Inspectop
|
|
39
11
|
let session;
|
|
40
12
|
let snapshotInterval;
|
|
41
|
-
// Cpu and memory check
|
|
42
13
|
const trace = hasParameter('trace');
|
|
43
14
|
let memoryCheckInterval;
|
|
44
15
|
const memoryCheckIntervalMs = getIntParameter('memoryinterval') ?? 10 * 1000;
|
|
@@ -52,7 +23,7 @@ let peakHeapUsed = 0;
|
|
|
52
23
|
let peakHeapTotal = 0;
|
|
53
24
|
let peakExternal = 0;
|
|
54
25
|
let peakArrayBuffers = 0;
|
|
55
|
-
const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4
|
|
26
|
+
const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4, logLevel: hasParameter('debug') ? "debug" : "info" });
|
|
56
27
|
const formatCpuUsage = (percent) => {
|
|
57
28
|
return `${percent.toFixed(2).padStart(5, ' ')} %`;
|
|
58
29
|
};
|
|
@@ -82,28 +53,16 @@ const formatOsUpTime = (seconds) => {
|
|
|
82
53
|
}
|
|
83
54
|
return `${seconds} second${seconds !== 1 ? 's' : ''}`;
|
|
84
55
|
};
|
|
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
56
|
async function startCpuMemoryCheck() {
|
|
94
|
-
// const os = await import('node:os');
|
|
95
57
|
log.debug(`Cpu memory check started`);
|
|
96
58
|
prevCpus = os.cpus();
|
|
97
59
|
prevProcessCpu = process.cpuUsage();
|
|
98
60
|
const interval = () => {
|
|
99
|
-
// Get the os uptime
|
|
100
61
|
const systemUptime = formatOsUpTime(Math.floor(os.uptime()));
|
|
101
62
|
const processUptime = formatOsUpTime(Math.floor(process.uptime()));
|
|
102
63
|
cliEmitter.emit('uptime', systemUptime, processUptime);
|
|
103
|
-
// Get the free and total memory
|
|
104
64
|
const totalMemory = formatMemoryUsage(os.totalmem());
|
|
105
65
|
const freeMemory = formatMemoryUsage(os.freemem());
|
|
106
|
-
// Get the memory usage
|
|
107
66
|
const memoryUsageRaw = process.memoryUsage();
|
|
108
67
|
const rss = formatMemoryUsage(memoryUsageRaw.rss);
|
|
109
68
|
const heapTotal = formatMemoryUsage(memoryUsageRaw.heapTotal);
|
|
@@ -136,11 +95,9 @@ async function startCpuMemoryCheck() {
|
|
|
136
95
|
peakArrayBuffers = memoryUsageRaw.arrayBuffers;
|
|
137
96
|
}
|
|
138
97
|
cliEmitter.emit('memory', totalMemory, freeMemory, rss, heapTotal, heapUsed, external, arrayBuffers);
|
|
139
|
-
// Get the host cpu usage
|
|
140
98
|
const currCpus = os.cpus();
|
|
141
|
-
// log.debug(`Cpus: ${JSON.stringify(currCpus)}`);
|
|
142
99
|
if (currCpus.length !== prevCpus.length) {
|
|
143
|
-
prevCpus = currCpus;
|
|
100
|
+
prevCpus = currCpus;
|
|
144
101
|
log.debug(`Cpu check length failed, resetting previous cpus`);
|
|
145
102
|
return;
|
|
146
103
|
}
|
|
@@ -157,9 +114,7 @@ async function startCpuMemoryCheck() {
|
|
|
157
114
|
log.debug(`Cpu check failed, using previous cpus`);
|
|
158
115
|
}
|
|
159
116
|
else {
|
|
160
|
-
// istanbul ignore next
|
|
161
117
|
setLastOsCpuUsage(osCpuUsage);
|
|
162
|
-
// istanbul ignore next if
|
|
163
118
|
if (osCpuUsage > peakCpu) {
|
|
164
119
|
peakCpu = osCpuUsage;
|
|
165
120
|
if (peakCpu && trace)
|
|
@@ -167,13 +122,11 @@ async function startCpuMemoryCheck() {
|
|
|
167
122
|
}
|
|
168
123
|
}
|
|
169
124
|
prevCpus = currCpus;
|
|
170
|
-
// Get the process cpu usage https://cdn.jsdelivr.net/npm/chart.js
|
|
171
125
|
const diff = process.cpuUsage(prevProcessCpu);
|
|
172
126
|
const userMs = diff.user / 1000;
|
|
173
127
|
const systemMs = diff.system / 1000;
|
|
174
128
|
const totalMs = userMs + systemMs;
|
|
175
129
|
const processCpuUsage = Number((((totalMs / memoryCheckIntervalMs) * 100) / currCpus.length).toFixed(2));
|
|
176
|
-
// istanbul ignore next if
|
|
177
130
|
if (processCpuUsage > peakProcessCpu) {
|
|
178
131
|
peakProcessCpu = processCpuUsage;
|
|
179
132
|
if (peakProcessCpu && trace)
|
|
@@ -182,7 +135,6 @@ async function startCpuMemoryCheck() {
|
|
|
182
135
|
prevProcessCpu = process.cpuUsage();
|
|
183
136
|
setLastProcessCpuUsage(processCpuUsage);
|
|
184
137
|
cliEmitter.emit('cpu', osCpuUsage, processCpuUsage);
|
|
185
|
-
// Update preallocated history entry in place to avoid per-interval allocations. Keep the same object reference.
|
|
186
138
|
const entry = history[historyIndex];
|
|
187
139
|
entry.timestamp = Date.now();
|
|
188
140
|
entry.cpu = osCpuUsage;
|
|
@@ -200,7 +152,6 @@ async function startCpuMemoryCheck() {
|
|
|
200
152
|
entry.arrayBuffers = memoryUsageRaw.arrayBuffers;
|
|
201
153
|
entry.peakArrayBuffers = peakArrayBuffers;
|
|
202
154
|
setHistoryIndex((historyIndex + 1) % historySize);
|
|
203
|
-
// Show the cpu and memory usage
|
|
204
155
|
if (trace)
|
|
205
156
|
log.debug(`***${YELLOW}${BRIGHT}Host cpu:${db} ` +
|
|
206
157
|
`${CYAN}${formatCpuUsage(osCpuUsage)}${db} (peak ${formatCpuUsage(peakCpu)}) ` +
|
|
@@ -216,7 +167,6 @@ async function startCpuMemoryCheck() {
|
|
|
216
167
|
clearInterval(memoryCheckInterval);
|
|
217
168
|
memoryCheckInterval = setInterval(interval, memoryCheckIntervalMs).unref();
|
|
218
169
|
clearTimeout(memoryPeakResetTimeout);
|
|
219
|
-
// istanbul ignore next
|
|
220
170
|
memoryPeakResetTimeout = setTimeout(() => {
|
|
221
171
|
if (trace)
|
|
222
172
|
log.debug(`****${RED}${BRIGHT}Cpu and memory peaks reset after first 5 minutes.${db}`);
|
|
@@ -225,11 +175,8 @@ async function startCpuMemoryCheck() {
|
|
|
225
175
|
peakRss = 0;
|
|
226
176
|
peakHeapUsed = 0;
|
|
227
177
|
peakHeapTotal = 0;
|
|
228
|
-
}, 5 * 60 * 1000).unref();
|
|
178
|
+
}, 5 * 60 * 1000).unref();
|
|
229
179
|
}
|
|
230
|
-
/**
|
|
231
|
-
* Stops the CPU and memory check interval.
|
|
232
|
-
*/
|
|
233
180
|
async function stopCpuMemoryCheck() {
|
|
234
181
|
if (trace) {
|
|
235
182
|
log.debug(`***Cpu memory check stopped. ` +
|
|
@@ -243,20 +190,10 @@ async function stopCpuMemoryCheck() {
|
|
|
243
190
|
clearInterval(memoryCheckInterval);
|
|
244
191
|
clearTimeout(memoryPeakResetTimeout);
|
|
245
192
|
}
|
|
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
193
|
async function startInspector() {
|
|
256
194
|
const { Session } = await import('node:inspector');
|
|
257
195
|
const { mkdirSync } = await import('node:fs');
|
|
258
196
|
log.debug(`***Starting heap sampling...`);
|
|
259
|
-
// Create the heap snapshots directory if it doesn't exist
|
|
260
197
|
mkdirSync('heap_profile', { recursive: true });
|
|
261
198
|
try {
|
|
262
199
|
session = new Session();
|
|
@@ -265,7 +202,6 @@ async function startInspector() {
|
|
|
265
202
|
session?.post('HeapProfiler.startSampling', (err) => (err ? reject(err) : resolve()));
|
|
266
203
|
});
|
|
267
204
|
log.debug(`***Started heap sampling`);
|
|
268
|
-
// Set an interval to take heap snapshots
|
|
269
205
|
const interval = getIntParameter('snapshotinterval');
|
|
270
206
|
if (interval && interval >= 30000) {
|
|
271
207
|
log.debug(`***Started heap snapshot interval of ${CYAN}${interval}${db} ms`);
|
|
@@ -283,19 +219,13 @@ async function startInspector() {
|
|
|
283
219
|
return;
|
|
284
220
|
}
|
|
285
221
|
}
|
|
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
222
|
async function stopInspector() {
|
|
291
223
|
const { writeFileSync } = await import('node:fs');
|
|
292
224
|
const path = await import('node:path');
|
|
293
225
|
log.debug(`***Stopping heap sampling...`);
|
|
294
226
|
if (snapshotInterval) {
|
|
295
227
|
log.debug(`***Clearing heap snapshot interval...`);
|
|
296
|
-
// Clear the snapshot interval if it exists
|
|
297
228
|
clearInterval(snapshotInterval);
|
|
298
|
-
// Take a final heap snapshot before stopping
|
|
299
229
|
await takeHeapSnapshot();
|
|
300
230
|
}
|
|
301
231
|
if (!session) {
|
|
@@ -303,7 +233,6 @@ async function stopInspector() {
|
|
|
303
233
|
return;
|
|
304
234
|
}
|
|
305
235
|
try {
|
|
306
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
307
236
|
const result = await new Promise((resolve, reject) => {
|
|
308
237
|
session?.post('HeapProfiler.stopSampling', (err, result) => (err ? reject(err) : resolve(result)));
|
|
309
238
|
});
|
|
@@ -321,13 +250,6 @@ async function stopInspector() {
|
|
|
321
250
|
log.debug(`***Stopped heap sampling`);
|
|
322
251
|
}
|
|
323
252
|
}
|
|
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
253
|
async function takeHeapSnapshot() {
|
|
332
254
|
const { writeFileSync } = await import('node:fs');
|
|
333
255
|
const path = await import('node:path');
|
|
@@ -336,7 +258,6 @@ async function takeHeapSnapshot() {
|
|
|
336
258
|
log.error('No active inspector session.');
|
|
337
259
|
return;
|
|
338
260
|
}
|
|
339
|
-
// Trigger a garbage collection before taking the snapshot to reduce noise
|
|
340
261
|
triggerGarbageCollection();
|
|
341
262
|
log.debug(`Taking heap snapshot...`);
|
|
342
263
|
const chunks = [];
|
|
@@ -349,36 +270,27 @@ async function takeHeapSnapshot() {
|
|
|
349
270
|
if (!err) {
|
|
350
271
|
session?.off('HeapProfiler.addHeapSnapshotChunk', chunksListener);
|
|
351
272
|
writeFileSync(filename, Buffer.concat(chunks));
|
|
352
|
-
chunks.length = 0;
|
|
273
|
+
chunks.length = 0;
|
|
353
274
|
log.debug(`***Heap sampling snapshot saved to ${CYAN}${filename}${db}`);
|
|
354
|
-
// Trigger a garbage collection after the snapshot to clean up
|
|
355
275
|
triggerGarbageCollection();
|
|
356
276
|
resolve();
|
|
357
277
|
}
|
|
358
278
|
else {
|
|
359
279
|
session?.off('HeapProfiler.addHeapSnapshotChunk', chunksListener);
|
|
360
|
-
chunks.length = 0;
|
|
280
|
+
chunks.length = 0;
|
|
361
281
|
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
282
|
triggerGarbageCollection();
|
|
364
283
|
resolve();
|
|
365
284
|
}
|
|
366
285
|
});
|
|
367
286
|
});
|
|
368
287
|
}
|
|
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
288
|
function triggerGarbageCollection() {
|
|
376
289
|
if (global.gc && typeof global.gc === 'function') {
|
|
377
290
|
try {
|
|
378
291
|
global.gc({ type: 'major', execution: 'sync' });
|
|
379
292
|
}
|
|
380
293
|
catch {
|
|
381
|
-
// istanbul ignore next
|
|
382
294
|
global.gc();
|
|
383
295
|
}
|
|
384
296
|
log.debug('Manual garbage collection triggered via global.gc().');
|
|
@@ -387,9 +299,6 @@ function triggerGarbageCollection() {
|
|
|
387
299
|
log.debug('Garbage collection is not exposed. Start Node.js with --expose-gc to enable manual GC.');
|
|
388
300
|
}
|
|
389
301
|
}
|
|
390
|
-
/**
|
|
391
|
-
* Registers event handlers for the Matterbridge instance.
|
|
392
|
-
*/
|
|
393
302
|
function registerHandlers() {
|
|
394
303
|
log.debug('Registering event handlers...');
|
|
395
304
|
if (instance)
|
|
@@ -412,68 +321,32 @@ function registerHandlers() {
|
|
|
412
321
|
instance.on('triggergarbagecollection', async () => triggerGarbageCollection());
|
|
413
322
|
log.debug('Registered event handlers');
|
|
414
323
|
}
|
|
415
|
-
/**
|
|
416
|
-
* Shuts down the Matterbridge instance and exits the process.
|
|
417
|
-
*/
|
|
418
324
|
async function shutdown() {
|
|
419
325
|
log.debug('Received shutdown event, exiting...');
|
|
420
326
|
if (hasParameter('inspect'))
|
|
421
327
|
await stopInspector();
|
|
422
328
|
await stopCpuMemoryCheck();
|
|
423
329
|
cliEmitter.emit('shutdown');
|
|
424
|
-
// eslint-disable-next-line n/no-process-exit
|
|
425
330
|
process.exit(0);
|
|
426
331
|
}
|
|
427
|
-
/**
|
|
428
|
-
* Restarts the Matterbridge instance.
|
|
429
|
-
*/
|
|
430
332
|
async function restart() {
|
|
431
333
|
log.debug('Received restart event, loading...');
|
|
432
334
|
instance = await Matterbridge.loadInstance(true);
|
|
433
335
|
registerHandlers();
|
|
434
336
|
}
|
|
435
|
-
/**
|
|
436
|
-
* Updates the Matterbridge instance.
|
|
437
|
-
*/
|
|
438
337
|
async function update() {
|
|
439
338
|
log.debug('Received update event, updating...');
|
|
440
|
-
// TODO: Implement update logic outside of matterbridge
|
|
441
339
|
instance = await Matterbridge.loadInstance(true);
|
|
442
340
|
registerHandlers();
|
|
443
341
|
}
|
|
444
|
-
/**
|
|
445
|
-
* Starts the CPU and memory check when the -startmemorycheck parameter is passed.
|
|
446
|
-
*/
|
|
447
342
|
async function start() {
|
|
448
343
|
log.debug('Received start memory check event');
|
|
449
344
|
await startCpuMemoryCheck();
|
|
450
345
|
}
|
|
451
|
-
/**
|
|
452
|
-
* Stops the CPU and memory check when the -stopmemorycheck parameter is passed.
|
|
453
|
-
*/
|
|
454
346
|
async function stop() {
|
|
455
347
|
log.debug('Received stop memory check event');
|
|
456
348
|
await stopCpuMemoryCheck();
|
|
457
349
|
}
|
|
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
350
|
async function main() {
|
|
478
351
|
log.debug(`Cli main() started`);
|
|
479
352
|
await startCpuMemoryCheck();
|
|
@@ -482,7 +355,6 @@ async function main() {
|
|
|
482
355
|
log.debug(`***Matterbridge.loadInstance(true) called`);
|
|
483
356
|
instance = await Matterbridge.loadInstance(true);
|
|
484
357
|
log.debug(`***Matterbridge.loadInstance(true) exited`);
|
|
485
|
-
// Check if the instance needs to shut down from parseCommandLine()
|
|
486
358
|
if (!instance || instance.shutdown) {
|
|
487
359
|
shutdown();
|
|
488
360
|
}
|
|
@@ -491,11 +363,9 @@ async function main() {
|
|
|
491
363
|
cliEmitter.emit('ready');
|
|
492
364
|
}
|
|
493
365
|
}
|
|
494
|
-
// Run the main function
|
|
495
366
|
process.title = 'matterbridge';
|
|
496
367
|
main().catch((error) => {
|
|
497
368
|
const errorMessage = error instanceof Error ? error.message : error;
|
|
498
369
|
const errorInspect = inspect(error, { depth: 10 });
|
|
499
370
|
log.error(`Matterbridge.loadInstance() failed with error: ${errorMessage}\nstack: ${errorInspect}`);
|
|
500
371
|
});
|
|
501
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cliEmitter.js
CHANGED
|
@@ -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
|