matterbridge 3.3.0 → 3.3.1-dev-20251008-e61b8db
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 +34 -3
- package/README.md +9 -1
- package/dist/broadcastServer.js +73 -0
- package/dist/broadcastServerTypes.js +1 -0
- package/dist/cli.js +38 -99
- package/dist/cliEmitter.js +0 -30
- package/dist/clusters/export.js +0 -2
- package/dist/defaultConfigSchema.js +0 -24
- package/dist/deviceManager.js +44 -98
- 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 +233 -634
- package/dist/frontendTypes.js +0 -45
- package/dist/helpers.js +4 -57
- package/dist/index.js +2 -41
- 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 +156 -885
- 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 +4 -341
- package/dist/matterbridgeTypes.js +0 -26
- package/dist/pluginManager.js +133 -254
- package/dist/shelly.js +11 -172
- package/dist/storage/export.js +0 -1
- package/dist/update.js +0 -71
- 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 +76 -129
- package/dist/utils/spawn.js +5 -75
- package/dist/utils/wait.js +8 -60
- package/frontend/build/assets/index.js +4 -7
- package/frontend/build/assets/vendor_mui.js +1 -1
- package/frontend/package.json +1 -1
- package/npm-shrinkwrap.json +44 -44
- package/package.json +2 -3
- 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 -34
- package/dist/cliEmitter.d.ts.map +0 -1
- package/dist/cliEmitter.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 -112
- 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 -232
- package/dist/frontend.d.ts.map +0 -1
- package/dist/frontend.js.map +0 -1
- package/dist/frontendTypes.d.ts +0 -514
- package/dist/frontendTypes.d.ts.map +0 -1
- package/dist/frontendTypes.js.map +0 -1
- package/dist/globalMatterbridge.d.ts +0 -59
- package/dist/globalMatterbridge.d.ts.map +0 -1
- package/dist/globalMatterbridge.js +0 -70
- package/dist/globalMatterbridge.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 -430
- 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 -201
- package/dist/matterbridgeTypes.d.ts.map +0 -1
- package/dist/matterbridgeTypes.js.map +0 -1
- package/dist/pluginManager.d.ts +0 -270
- 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 -84
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/spawn.d.ts +0 -34
- 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,7 +23,40 @@ Advantages:
|
|
|
23
23
|
- isolation between threads;
|
|
24
24
|
- individual plugin isolation in childbridge mode;
|
|
25
25
|
|
|
26
|
-
## [3.3.
|
|
26
|
+
## [3.3.1] - Not released
|
|
27
|
+
|
|
28
|
+
### Breaking Changes
|
|
29
|
+
|
|
30
|
+
- [frontend]: When a plugin is first installed, it will not be anymore started to allow to configure it before restarting.
|
|
31
|
+
- [index]: Removed old plugin api compatibility since it was changed one year ago.
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
|
|
35
|
+
- [network]: Added getInterfaceDetails() function.
|
|
36
|
+
- [network]: Added getInterfaceName() function.
|
|
37
|
+
- [network]: Optimized code.
|
|
38
|
+
- [matterbridge]: Added SharedMatterbridge readonly type.
|
|
39
|
+
- [thread]: Add BroadcastServer to frontend, plugins and devices.
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- [package]: Updated dependencies.
|
|
44
|
+
- [matterbridge]: Removed matterbridgeInformation. It will be recreated when the frontend requires it.
|
|
45
|
+
- [frontend]: Bumped `frontend` version to 3.2.1.
|
|
46
|
+
- [frontend]: Refactored InstallProgressDialog.
|
|
47
|
+
- [spawn]: Refactored spawnCommand for compatibility with InstallProgressDialog.
|
|
48
|
+
- [matter.js]: Bumped `matter.js` to 0.15.5. Thanks matter.js!
|
|
49
|
+
- [backend]: Optimized imports.
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- [frontend]: Fixed matter log on file not setting correctly.
|
|
54
|
+
|
|
55
|
+
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
56
|
+
<img src="bmc-button.svg" alt="Buy me a coffee" width="80">
|
|
57
|
+
</a>
|
|
58
|
+
|
|
59
|
+
## [3.3.0] - 2025-10-03
|
|
27
60
|
|
|
28
61
|
### Development Breaking Changes Notice
|
|
29
62
|
|
|
@@ -98,8 +131,6 @@ In this phase (matterbridge `3.4.x`) all plugins will not build and will not run
|
|
|
98
131
|
- [package]: Updated dependencies.
|
|
99
132
|
- [frontend]: General improvements and small bug fixes.
|
|
100
133
|
|
|
101
|
-
### Fixed
|
|
102
|
-
|
|
103
134
|
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
104
135
|
<img src="bmc-button.svg" alt="Buy me a coffee" width="80">
|
|
105
136
|
</a>
|
package/README.md
CHANGED
|
@@ -78,10 +78,14 @@ After follow the guidelines for the [Docker configurations](README-DOCKER.md).
|
|
|
78
78
|
|
|
79
79
|
I suggest using Docker for its simplicity.
|
|
80
80
|
|
|
81
|
-
Since
|
|
81
|
+
Since Matter is designed as "a universal IPv6-based communication protocol for smart home devices" (per the Matter specifications), **IPv6 must be enabled on your local network (LAN)**.
|
|
82
|
+
|
|
83
|
+
**Important:** You only need IPv6 on your local network - it doesn't matter if your internet provider doesn't provide IPv6 on the internet side (WAN).
|
|
82
84
|
|
|
83
85
|
Avoid using VLAN and firewall blocking the communications between the controllers and Matterbridge.
|
|
84
86
|
|
|
87
|
+
To pair matterbridge, you need a matter enabled controller (Apple Home, Smart Things, Google Home, Alexa, Hose Assistant etc.).
|
|
88
|
+
|
|
85
89
|
## Installation
|
|
86
90
|
|
|
87
91
|
Follow these steps to install Matterbridge:
|
|
@@ -574,3 +578,7 @@ Click on the badge below to get started:
|
|
|
574
578
|
</a>
|
|
575
579
|
|
|
576
580
|
Thank you for your support!
|
|
581
|
+
|
|
582
|
+
# Licensing
|
|
583
|
+
|
|
584
|
+
Matterbridge is licensed under the [Apache License 2.0](./LICENSE).
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import { BroadcastChannel } from 'node:worker_threads';
|
|
3
|
+
import { debugStringify } from 'node-ansi-logger';
|
|
4
|
+
export class BroadcastServer extends EventEmitter {
|
|
5
|
+
name;
|
|
6
|
+
log;
|
|
7
|
+
channel;
|
|
8
|
+
broadcastChannel;
|
|
9
|
+
constructor(name, log, channel = 'broadcast-channel') {
|
|
10
|
+
super();
|
|
11
|
+
this.name = name;
|
|
12
|
+
this.log = log;
|
|
13
|
+
this.channel = channel;
|
|
14
|
+
this.broadcastChannel = new BroadcastChannel(this.channel);
|
|
15
|
+
this.broadcastChannel.onmessage = this.broadcastMessageHandler.bind(this);
|
|
16
|
+
}
|
|
17
|
+
close() {
|
|
18
|
+
this.broadcastChannel.onmessage = null;
|
|
19
|
+
this.broadcastChannel.close();
|
|
20
|
+
}
|
|
21
|
+
getUniqueId() {
|
|
22
|
+
return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000;
|
|
23
|
+
}
|
|
24
|
+
isWorkerRequest(msg, type) {
|
|
25
|
+
return typeof msg === 'object' && msg !== null && 'id' in msg && 'type' in msg && msg.type === type && !('response' in msg) && 'src' in msg && 'dst' in msg;
|
|
26
|
+
}
|
|
27
|
+
isWorkerResponse(msg, type) {
|
|
28
|
+
return typeof msg === 'object' && msg !== null && 'id' in msg && 'type' in msg && msg.type === type && 'response' in msg && 'src' in msg && 'dst' in msg;
|
|
29
|
+
}
|
|
30
|
+
broadcastMessageHandler(event) {
|
|
31
|
+
const data = event.data;
|
|
32
|
+
this.log.debug(`*Received broadcast message: ${debugStringify(data)}`);
|
|
33
|
+
this.emit('broadcast_message', data);
|
|
34
|
+
}
|
|
35
|
+
request(message) {
|
|
36
|
+
if (message.id === undefined) {
|
|
37
|
+
message.id = this.getUniqueId();
|
|
38
|
+
}
|
|
39
|
+
if (!this.isWorkerRequest(message, message.type)) {
|
|
40
|
+
this.log.error(`Invalid request message format for broadcast: ${debugStringify(message)}`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.log.debug(`*Broadcasting message: ${debugStringify(message)}`);
|
|
44
|
+
this.broadcastChannel.postMessage(message);
|
|
45
|
+
}
|
|
46
|
+
respond(message) {
|
|
47
|
+
if (!this.isWorkerResponse(message, message.type)) {
|
|
48
|
+
this.log.error(`Invalid response message format for broadcast: ${debugStringify(message)}`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.log.debug(`*Broadcasting message: ${debugStringify(message)}`);
|
|
52
|
+
this.broadcastChannel.postMessage(message);
|
|
53
|
+
}
|
|
54
|
+
async fetch(message) {
|
|
55
|
+
this.log.debug(`*Fetching message: ${debugStringify(message)}`);
|
|
56
|
+
return new Promise((resolve, reject) => {
|
|
57
|
+
const responseHandler = (msg) => {
|
|
58
|
+
if (this.isWorkerResponse(msg, message.type) && msg.id === message.id) {
|
|
59
|
+
clearTimeout(timeoutId);
|
|
60
|
+
this.off('broadcast_message', responseHandler);
|
|
61
|
+
this.log.debug(`*Fetch response: ${debugStringify(msg)}`);
|
|
62
|
+
resolve(msg);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
this.on('broadcast_message', responseHandler);
|
|
66
|
+
this.request(message);
|
|
67
|
+
const timeoutId = setTimeout(() => {
|
|
68
|
+
this.off('broadcast_message', responseHandler);
|
|
69
|
+
reject(new Error(`Fetch timeout after 100ms for message id ${message.id}`));
|
|
70
|
+
}, 100);
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/cli.js
CHANGED
|
@@ -1,44 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @file cli.ts
|
|
5
|
-
* @author Luca Liguori
|
|
6
|
-
* @created 2023-12-29
|
|
7
|
-
* @version 2.0.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
|
-
*/
|
|
1
|
+
if (process.argv.includes('--loader') || process.argv.includes('-loader'))
|
|
2
|
+
console.log('\u001B[32mCli loaded.\u001B[40;0m');
|
|
24
3
|
import os from 'node:os';
|
|
25
4
|
import { inspect } from 'node:util';
|
|
26
|
-
|
|
27
|
-
import { AnsiLogger, BRIGHT, CYAN, db, YELLOW } from 'node-ansi-logger';
|
|
28
|
-
// Matterbridge
|
|
5
|
+
import { AnsiLogger, BRIGHT, CYAN, db, RED, YELLOW } from 'node-ansi-logger';
|
|
29
6
|
import { getIntParameter, hasParameter } from './utils/export.js';
|
|
30
7
|
import { Matterbridge } from './matterbridge.js';
|
|
31
8
|
import { cliEmitter, lastCpuUsage, setLastCpuUsage } from './cliEmitter.js';
|
|
32
9
|
export let instance;
|
|
33
|
-
// Inspectop
|
|
34
10
|
let session;
|
|
35
11
|
let snapshotInterval;
|
|
36
|
-
// Cpu and memory check
|
|
37
12
|
let memoryCheckInterval;
|
|
13
|
+
let memoryPeakResetTimeout;
|
|
38
14
|
let prevCpus;
|
|
39
15
|
let peakCpu = 0;
|
|
40
16
|
let peakRss = 0;
|
|
41
|
-
|
|
17
|
+
let peakHeapUsed = 0;
|
|
18
|
+
let peakHeapTotal = 0;
|
|
19
|
+
const log = new AnsiLogger({ logName: 'Cli', logTimestampFormat: 4, logLevel: hasParameter('debug') ? "debug" : "info" });
|
|
42
20
|
const formatMemoryUsage = (bytes) => {
|
|
43
21
|
if (bytes >= 1024 ** 3) {
|
|
44
22
|
return `${(bytes / 1024 ** 3).toFixed(2)} GB`;
|
|
@@ -65,20 +43,14 @@ const formatOsUpTime = (seconds) => {
|
|
|
65
43
|
}
|
|
66
44
|
return `${seconds} second${seconds !== 1 ? 's' : ''}`;
|
|
67
45
|
};
|
|
68
|
-
/**
|
|
69
|
-
* Starts the CPU and memory check interval.
|
|
70
|
-
*/
|
|
71
46
|
async function startCpuMemoryCheck() {
|
|
72
|
-
// const os = await import('node:os');
|
|
73
47
|
log.debug(`Cpu memory check started`);
|
|
74
48
|
prevCpus = os.cpus();
|
|
75
49
|
clearInterval(memoryCheckInterval);
|
|
76
50
|
const interval = () => {
|
|
77
|
-
// Get the os uptime
|
|
78
51
|
const systemUptime = formatOsUpTime(Math.floor(os.uptime()));
|
|
79
52
|
const processUptime = formatOsUpTime(Math.floor(process.uptime()));
|
|
80
53
|
cliEmitter.emit('uptime', systemUptime, processUptime);
|
|
81
|
-
// Get the memory usage
|
|
82
54
|
const totalMememory = formatMemoryUsage(os.totalmem());
|
|
83
55
|
const freeMemory = formatMemoryUsage(os.freemem());
|
|
84
56
|
const memoryUsageRaw = process.memoryUsage();
|
|
@@ -87,15 +59,26 @@ async function startCpuMemoryCheck() {
|
|
|
87
59
|
const heapUsed = formatMemoryUsage(memoryUsageRaw.heapUsed);
|
|
88
60
|
const external = formatMemoryUsage(memoryUsageRaw.external);
|
|
89
61
|
const arrayBuffers = formatMemoryUsage(memoryUsageRaw.arrayBuffers);
|
|
90
|
-
if (memoryUsageRaw.rss > peakRss)
|
|
62
|
+
if (memoryUsageRaw.rss > peakRss) {
|
|
63
|
+
if (peakRss)
|
|
64
|
+
log.debug(`****${RED}${BRIGHT}Rss peak detected.${db} Peak rss from ${CYAN}${formatMemoryUsage(peakRss)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.rss)}${db}`);
|
|
91
65
|
peakRss = memoryUsageRaw.rss;
|
|
66
|
+
}
|
|
67
|
+
if (memoryUsageRaw.heapUsed > peakHeapUsed) {
|
|
68
|
+
if (peakHeapUsed)
|
|
69
|
+
log.debug(`****${RED}${BRIGHT}HeapUsed peak detected.${db} Peak heapUsed from ${CYAN}${formatMemoryUsage(peakHeapUsed)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.heapUsed)}${db}`);
|
|
70
|
+
peakHeapUsed = memoryUsageRaw.heapUsed;
|
|
71
|
+
}
|
|
72
|
+
if (memoryUsageRaw.heapTotal > peakHeapTotal) {
|
|
73
|
+
if (peakHeapTotal)
|
|
74
|
+
log.debug(`****${RED}${BRIGHT}HeapTotal peak detected.${db} Peak heapTotal from ${CYAN}${formatMemoryUsage(peakHeapTotal)}${db} to ${CYAN}${formatMemoryUsage(memoryUsageRaw.heapTotal)}${db}`);
|
|
75
|
+
peakHeapTotal = memoryUsageRaw.heapTotal;
|
|
76
|
+
}
|
|
92
77
|
cliEmitter.emit('memory', totalMememory, freeMemory, rss, heapTotal, heapUsed, external, arrayBuffers);
|
|
93
|
-
// Get the cpu usage
|
|
94
78
|
const currCpus = os.cpus();
|
|
95
|
-
// log.debug(`Cpus: ${JSON.stringify(currCpus)}`);
|
|
96
79
|
let cpuUsageLog;
|
|
97
80
|
if (currCpus.length !== prevCpus.length) {
|
|
98
|
-
prevCpus = currCpus;
|
|
81
|
+
prevCpus = currCpus;
|
|
99
82
|
log.debug(`Cpu check length failed, resetting previous cpus`);
|
|
100
83
|
return;
|
|
101
84
|
}
|
|
@@ -109,41 +92,42 @@ async function startCpuMemoryCheck() {
|
|
|
109
92
|
});
|
|
110
93
|
const cpuUsage = 100 - (totalIdle / totalTick) * 100;
|
|
111
94
|
if (totalTick === 0 || isNaN(cpuUsage) || !isFinite(cpuUsage) || cpuUsage <= 0) {
|
|
112
|
-
|
|
113
|
-
log.debug(`Cpu check failed, using previous cpus`);
|
|
95
|
+
log.debug(`Cpu check failed, using previous cpus`);
|
|
114
96
|
cpuUsageLog = lastCpuUsage.toFixed(2);
|
|
115
97
|
}
|
|
116
98
|
else {
|
|
117
99
|
cpuUsageLog = cpuUsage.toFixed(2);
|
|
118
100
|
setLastCpuUsage(cpuUsage);
|
|
119
|
-
if (lastCpuUsage > peakCpu)
|
|
101
|
+
if (lastCpuUsage > peakCpu) {
|
|
120
102
|
peakCpu = lastCpuUsage;
|
|
103
|
+
if (peakCpu)
|
|
104
|
+
log.debug(`****${RED}${BRIGHT}Cpu peak detected.${db} Peak cpu from ${CYAN}${peakCpu.toFixed(2)}%${db} to ${CYAN}${lastCpuUsage.toFixed(2)}%${db}`);
|
|
105
|
+
}
|
|
121
106
|
cliEmitter.emit('cpu', lastCpuUsage);
|
|
122
107
|
}
|
|
123
108
|
prevCpus = currCpus;
|
|
124
|
-
|
|
125
|
-
log.debug(`***${YELLOW}${BRIGHT}Cpu usage:${db} ${CYAN}${cpuUsageLog.padStart(6, ' ')} %${db} ${YELLOW}${BRIGHT}Memory usage:${db} rss ${CYAN}${rss}${db} heapTotal ${CYAN}${heapTotal}${db} heapUsed ${CYAN}${heapUsed}${db} external ${external} arrayBuffers ${arrayBuffers}`);
|
|
109
|
+
log.debug(`***${YELLOW}${BRIGHT}Cpu usage:${db} ${CYAN}${cpuUsageLog.padStart(6, ' ')}%${db} (peak ${peakCpu.toFixed(2)}%) ${YELLOW}${BRIGHT}Memory usage:${db} rss ${CYAN}${rss}${db} (peak ${formatMemoryUsage(peakRss)}) heapUsed ${CYAN}${heapUsed}${db} (peak ${formatMemoryUsage(peakHeapUsed)}) heapTotal ${CYAN}${heapTotal}${db} (peak ${formatMemoryUsage(peakHeapTotal)}) external ${external} arrayBuffers ${arrayBuffers}`);
|
|
126
110
|
};
|
|
127
|
-
interval();
|
|
128
111
|
clearInterval(memoryCheckInterval);
|
|
129
112
|
memoryCheckInterval = setInterval(interval, getIntParameter('memoryinterval') ?? 10 * 1000).unref();
|
|
113
|
+
clearTimeout(memoryPeakResetTimeout);
|
|
114
|
+
memoryPeakResetTimeout = setTimeout(() => {
|
|
115
|
+
log.debug(`****${RED}${BRIGHT}Cpu and memory peaks reset after first 5 minutes.${db}`);
|
|
116
|
+
peakCpu = 0;
|
|
117
|
+
peakRss = 0;
|
|
118
|
+
peakHeapUsed = 0;
|
|
119
|
+
peakHeapTotal = 0;
|
|
120
|
+
}, 5 * 60 * 1000).unref();
|
|
130
121
|
}
|
|
131
|
-
/**
|
|
132
|
-
* Stops the CPU and memory check interval.
|
|
133
|
-
*/
|
|
134
122
|
async function stopCpuMemoryCheck() {
|
|
135
|
-
log.debug(`***Cpu memory check stopped. Peak cpu: ${CYAN}${peakCpu.toFixed(2)} %${db}. Peak rss: ${CYAN}${formatMemoryUsage(peakRss)}${db}
|
|
123
|
+
log.debug(`***Cpu memory check stopped. Peak cpu: ${CYAN}${peakCpu.toFixed(2)} %${db}. Peak rss: ${CYAN}${formatMemoryUsage(peakRss)}${db}. Peak heapUsed: ${CYAN}${formatMemoryUsage(peakHeapUsed)}${db}. Peak heapTotal: ${CYAN}${formatMemoryUsage(peakHeapTotal)}${db}`);
|
|
136
124
|
clearInterval(memoryCheckInterval);
|
|
125
|
+
clearTimeout(memoryPeakResetTimeout);
|
|
137
126
|
}
|
|
138
|
-
/**
|
|
139
|
-
* Starts the inspector for heap sampling.
|
|
140
|
-
* This function is called when the -inspect parameter is passed.
|
|
141
|
-
*/
|
|
142
127
|
async function startInspector() {
|
|
143
128
|
const { Session } = await import('node:inspector');
|
|
144
129
|
const { mkdirSync } = await import('node:fs');
|
|
145
130
|
log.debug(`***Starting heap sampling...`);
|
|
146
|
-
// Create the heap snapshots directory if it doesn't exist
|
|
147
131
|
mkdirSync('heap_profile', { recursive: true });
|
|
148
132
|
try {
|
|
149
133
|
session = new Session();
|
|
@@ -152,7 +136,6 @@ async function startInspector() {
|
|
|
152
136
|
session?.post('HeapProfiler.startSampling', (err) => (err ? reject(err) : resolve()));
|
|
153
137
|
});
|
|
154
138
|
log.debug(`***Started heap sampling`);
|
|
155
|
-
// Set an interval to take heap snapshots
|
|
156
139
|
const interval = getIntParameter('snapshotinterval');
|
|
157
140
|
if (interval && interval >= 30000) {
|
|
158
141
|
log.debug(`***Started heap snapshot interval of ${CYAN}${interval}${db} ms`);
|
|
@@ -170,19 +153,13 @@ async function startInspector() {
|
|
|
170
153
|
return;
|
|
171
154
|
}
|
|
172
155
|
}
|
|
173
|
-
/**
|
|
174
|
-
* Stops the heap sampling and saves the profile to a file.
|
|
175
|
-
* This function is called when the inspector is stopped.
|
|
176
|
-
*/
|
|
177
156
|
async function stopInspector() {
|
|
178
157
|
const { writeFileSync } = await import('node:fs');
|
|
179
158
|
const path = await import('node:path');
|
|
180
159
|
log.debug(`***Stopping heap sampling...`);
|
|
181
160
|
if (snapshotInterval) {
|
|
182
161
|
log.debug(`***Clearing heap snapshot interval...`);
|
|
183
|
-
// Clear the snapshot interval if it exists
|
|
184
162
|
clearInterval(snapshotInterval);
|
|
185
|
-
// Take a final heap snapshot before stopping
|
|
186
163
|
await takeHeapSnapshot();
|
|
187
164
|
}
|
|
188
165
|
if (!session) {
|
|
@@ -190,7 +167,6 @@ async function stopInspector() {
|
|
|
190
167
|
return;
|
|
191
168
|
}
|
|
192
169
|
try {
|
|
193
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
194
170
|
const result = await new Promise((resolve, reject) => {
|
|
195
171
|
session?.post('HeapProfiler.stopSampling', (err, result) => (err ? reject(err) : resolve(result)));
|
|
196
172
|
});
|
|
@@ -208,13 +184,6 @@ async function stopInspector() {
|
|
|
208
184
|
log.debug(`***Stopped heap sampling`);
|
|
209
185
|
}
|
|
210
186
|
}
|
|
211
|
-
/**
|
|
212
|
-
* Takes a heap snapshot and saves it to the file name Heap-snapshot-<timestamp>.heapsnapshot.
|
|
213
|
-
* This function is called periodically based on the -snapshotinterval parameter.
|
|
214
|
-
* The -snapshotinterval parameter must at least 30000 ms.
|
|
215
|
-
* The snapshot is saved in the heap_profile directory that is created in the current working directory.
|
|
216
|
-
* The snapshot can be analyzed using vscode or Chrome DevTools or other tools that support heap snapshots.
|
|
217
|
-
*/
|
|
218
187
|
async function takeHeapSnapshot() {
|
|
219
188
|
const { writeFileSync } = await import('node:fs');
|
|
220
189
|
const path = await import('node:path');
|
|
@@ -246,10 +215,6 @@ async function takeHeapSnapshot() {
|
|
|
246
215
|
});
|
|
247
216
|
});
|
|
248
217
|
}
|
|
249
|
-
/**
|
|
250
|
-
* Triggers a manual garbage collection.
|
|
251
|
-
* This function is working only if the process is started with --expose-gc.
|
|
252
|
-
*/
|
|
253
218
|
function triggerGarbageCollection() {
|
|
254
219
|
if (typeof global.gc === 'function') {
|
|
255
220
|
global.gc();
|
|
@@ -259,9 +224,6 @@ function triggerGarbageCollection() {
|
|
|
259
224
|
log.debug('Garbage collection is not exposed. Start Node.js with --expose-gc to enable manual GC.');
|
|
260
225
|
}
|
|
261
226
|
}
|
|
262
|
-
/**
|
|
263
|
-
* Registers event handlers for the Matterbridge instance.
|
|
264
|
-
*/
|
|
265
227
|
function registerHandlers() {
|
|
266
228
|
log.debug('Registering event handlers...');
|
|
267
229
|
if (instance)
|
|
@@ -284,52 +246,32 @@ function registerHandlers() {
|
|
|
284
246
|
instance.on('triggergarbagecollection', async () => triggerGarbageCollection());
|
|
285
247
|
log.debug('Registered event handlers');
|
|
286
248
|
}
|
|
287
|
-
/**
|
|
288
|
-
* Shuts down the Matterbridge instance and exits the process.
|
|
289
|
-
*/
|
|
290
249
|
async function shutdown() {
|
|
291
250
|
log.debug('Received shutdown event, exiting...');
|
|
292
251
|
if (hasParameter('inspect'))
|
|
293
252
|
await stopInspector();
|
|
294
253
|
await stopCpuMemoryCheck();
|
|
295
254
|
cliEmitter.emit('shutdown');
|
|
296
|
-
// eslint-disable-next-line n/no-process-exit
|
|
297
255
|
process.exit(0);
|
|
298
256
|
}
|
|
299
|
-
/**
|
|
300
|
-
*
|
|
301
|
-
*/
|
|
302
257
|
async function restart() {
|
|
303
258
|
log.debug('Received restart event, loading...');
|
|
304
259
|
instance = await Matterbridge.loadInstance(true);
|
|
305
260
|
registerHandlers();
|
|
306
261
|
}
|
|
307
|
-
/**
|
|
308
|
-
*
|
|
309
|
-
*/
|
|
310
262
|
async function update() {
|
|
311
263
|
log.debug('Received update event, updating...');
|
|
312
|
-
// TODO: Implement update logic outside of matterbridge
|
|
313
264
|
instance = await Matterbridge.loadInstance(true);
|
|
314
265
|
registerHandlers();
|
|
315
266
|
}
|
|
316
|
-
/**
|
|
317
|
-
* Starts the CPU and memory check when the -startmemorycheck parameter is passed.
|
|
318
|
-
*/
|
|
319
267
|
async function start() {
|
|
320
268
|
log.debug('Received start memory check event');
|
|
321
269
|
await startCpuMemoryCheck();
|
|
322
270
|
}
|
|
323
|
-
/**
|
|
324
|
-
* Stops the CPU and memory check when the -stopmemorycheck parameter is passed.
|
|
325
|
-
*/
|
|
326
271
|
async function stop() {
|
|
327
272
|
log.debug('Received stop memory check event');
|
|
328
273
|
await stopCpuMemoryCheck();
|
|
329
274
|
}
|
|
330
|
-
/**
|
|
331
|
-
* Main function that initializes the Matterbridge instance and starts the CLI.
|
|
332
|
-
*/
|
|
333
275
|
async function main() {
|
|
334
276
|
log.debug(`Cli main() started`);
|
|
335
277
|
await startCpuMemoryCheck();
|
|
@@ -338,7 +280,6 @@ async function main() {
|
|
|
338
280
|
log.debug(`***Matterbridge.loadInstance(true) called`);
|
|
339
281
|
instance = await Matterbridge.loadInstance(true);
|
|
340
282
|
log.debug(`***Matterbridge.loadInstance(true) exited`);
|
|
341
|
-
// Check if the instance needs to shut down from parseCommandLine()
|
|
342
283
|
if (!instance || instance.shutdown) {
|
|
343
284
|
shutdown();
|
|
344
285
|
}
|
|
@@ -347,11 +288,9 @@ async function main() {
|
|
|
347
288
|
cliEmitter.emit('ready');
|
|
348
289
|
}
|
|
349
290
|
}
|
|
350
|
-
// Run the main function
|
|
351
291
|
process.title = 'matterbridge';
|
|
352
292
|
main().catch((error) => {
|
|
353
293
|
const errorMessage = error instanceof Error ? error.message : error;
|
|
354
294
|
const errorInspect = inspect(error, { depth: 10 });
|
|
355
295
|
log.error(`Matterbridge.loadInstance() failed with error: ${errorMessage}\nstack: ${errorInspect}`);
|
|
356
296
|
});
|
|
357
|
-
//# sourceMappingURL=cli.js.map
|
package/dist/cliEmitter.js
CHANGED
|
@@ -1,36 +1,6 @@
|
|
|
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.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
|
import { EventEmitter } from 'node:events';
|
|
25
2
|
export const cliEmitter = new EventEmitter();
|
|
26
3
|
export let lastCpuUsage = 0;
|
|
27
|
-
/**
|
|
28
|
-
* Sets the last CPU usage.
|
|
29
|
-
*
|
|
30
|
-
* @param {number} val - The CPU usage percentage to set.
|
|
31
|
-
* @returns {void}
|
|
32
|
-
*/
|
|
33
4
|
export function setLastCpuUsage(val) {
|
|
34
5
|
lastCpuUsage = val;
|
|
35
6
|
}
|
|
36
|
-
//# sourceMappingURL=cliEmitter.js.map
|
package/dist/clusters/export.js
CHANGED
|
@@ -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
|