matterbridge 3.3.4-dev-20251021-7651f57 → 3.3.4
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 +8 -2
- package/README-SERVICE-LOCAL.md +226 -0
- package/dist/broadcastServer.d.ts +112 -0
- package/dist/broadcastServer.d.ts.map +1 -0
- package/dist/broadcastServer.js +100 -6
- package/dist/broadcastServer.js.map +1 -0
- package/dist/broadcastServerTypes.d.ts +793 -0
- package/dist/broadcastServerTypes.d.ts.map +1 -0
- package/dist/broadcastServerTypes.js +24 -0
- package/dist/broadcastServerTypes.js.map +1 -0
- package/dist/cli.d.ts +30 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +100 -2
- package/dist/cli.js.map +1 -0
- package/dist/cliEmitter.d.ts +50 -0
- package/dist/cliEmitter.d.ts.map +1 -0
- package/dist/cliEmitter.js +37 -0
- package/dist/cliEmitter.js.map +1 -0
- package/dist/cliHistory.d.ts +48 -0
- package/dist/cliHistory.d.ts.map +1 -0
- package/dist/cliHistory.js +38 -0
- package/dist/cliHistory.js.map +1 -0
- package/dist/clusters/export.d.ts +2 -0
- package/dist/clusters/export.d.ts.map +1 -0
- package/dist/clusters/export.js +2 -0
- package/dist/clusters/export.js.map +1 -0
- package/dist/defaultConfigSchema.d.ts +28 -0
- package/dist/defaultConfigSchema.d.ts.map +1 -0
- package/dist/defaultConfigSchema.js +24 -0
- package/dist/defaultConfigSchema.js.map +1 -0
- package/dist/deviceManager.d.ts +117 -0
- package/dist/deviceManager.d.ts.map +1 -0
- package/dist/deviceManager.js +126 -3
- package/dist/deviceManager.js.map +1 -0
- package/dist/devices/airConditioner.d.ts +98 -0
- package/dist/devices/airConditioner.d.ts.map +1 -0
- package/dist/devices/airConditioner.js +57 -0
- package/dist/devices/airConditioner.js.map +1 -0
- package/dist/devices/batteryStorage.d.ts +48 -0
- package/dist/devices/batteryStorage.d.ts.map +1 -0
- package/dist/devices/batteryStorage.js +48 -1
- package/dist/devices/batteryStorage.js.map +1 -0
- package/dist/devices/cooktop.d.ts +60 -0
- package/dist/devices/cooktop.d.ts.map +1 -0
- package/dist/devices/cooktop.js +55 -0
- package/dist/devices/cooktop.js.map +1 -0
- package/dist/devices/dishwasher.d.ts +71 -0
- package/dist/devices/dishwasher.d.ts.map +1 -0
- package/dist/devices/dishwasher.js +57 -0
- package/dist/devices/dishwasher.js.map +1 -0
- package/dist/devices/evse.d.ts +76 -0
- package/dist/devices/evse.d.ts.map +1 -0
- package/dist/devices/evse.js +74 -10
- package/dist/devices/evse.js.map +1 -0
- package/dist/devices/export.d.ts +17 -0
- package/dist/devices/export.d.ts.map +1 -0
- package/dist/devices/export.js +5 -0
- package/dist/devices/export.js.map +1 -0
- package/dist/devices/extractorHood.d.ts +46 -0
- package/dist/devices/extractorHood.d.ts.map +1 -0
- package/dist/devices/extractorHood.js +42 -0
- package/dist/devices/extractorHood.js.map +1 -0
- package/dist/devices/heatPump.d.ts +47 -0
- package/dist/devices/heatPump.d.ts.map +1 -0
- package/dist/devices/heatPump.js +50 -2
- package/dist/devices/heatPump.js.map +1 -0
- package/dist/devices/laundryDryer.d.ts +67 -0
- package/dist/devices/laundryDryer.d.ts.map +1 -0
- package/dist/devices/laundryDryer.js +62 -3
- package/dist/devices/laundryDryer.js.map +1 -0
- package/dist/devices/laundryWasher.d.ts +81 -0
- package/dist/devices/laundryWasher.d.ts.map +1 -0
- package/dist/devices/laundryWasher.js +70 -4
- package/dist/devices/laundryWasher.js.map +1 -0
- package/dist/devices/microwaveOven.d.ts +168 -0
- package/dist/devices/microwaveOven.d.ts.map +1 -0
- package/dist/devices/microwaveOven.js +88 -5
- package/dist/devices/microwaveOven.js.map +1 -0
- package/dist/devices/oven.d.ts +105 -0
- package/dist/devices/oven.d.ts.map +1 -0
- package/dist/devices/oven.js +85 -0
- package/dist/devices/oven.js.map +1 -0
- package/dist/devices/refrigerator.d.ts +118 -0
- package/dist/devices/refrigerator.d.ts.map +1 -0
- package/dist/devices/refrigerator.js +102 -0
- package/dist/devices/refrigerator.js.map +1 -0
- package/dist/devices/roboticVacuumCleaner.d.ts +112 -0
- package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
- package/dist/devices/roboticVacuumCleaner.js +100 -9
- package/dist/devices/roboticVacuumCleaner.js.map +1 -0
- package/dist/devices/solarPower.d.ts +40 -0
- package/dist/devices/solarPower.d.ts.map +1 -0
- package/dist/devices/solarPower.js +38 -0
- package/dist/devices/solarPower.js.map +1 -0
- package/dist/devices/speaker.d.ts +87 -0
- package/dist/devices/speaker.d.ts.map +1 -0
- package/dist/devices/speaker.js +84 -0
- package/dist/devices/speaker.js.map +1 -0
- package/dist/devices/temperatureControl.d.ts +166 -0
- package/dist/devices/temperatureControl.d.ts.map +1 -0
- package/dist/devices/temperatureControl.js +24 -3
- package/dist/devices/temperatureControl.js.map +1 -0
- package/dist/devices/waterHeater.d.ts +111 -0
- package/dist/devices/waterHeater.d.ts.map +1 -0
- package/dist/devices/waterHeater.js +82 -2
- package/dist/devices/waterHeater.js.map +1 -0
- package/dist/dgram/coap.d.ts +205 -0
- package/dist/dgram/coap.d.ts.map +1 -0
- package/dist/dgram/coap.js +126 -13
- package/dist/dgram/coap.js.map +1 -0
- package/dist/dgram/dgram.d.ts +141 -0
- package/dist/dgram/dgram.d.ts.map +1 -0
- package/dist/dgram/dgram.js +114 -2
- package/dist/dgram/dgram.js.map +1 -0
- package/dist/dgram/mb_coap.d.ts +24 -0
- package/dist/dgram/mb_coap.d.ts.map +1 -0
- package/dist/dgram/mb_coap.js +41 -3
- package/dist/dgram/mb_coap.js.map +1 -0
- package/dist/dgram/mb_mdns.d.ts +24 -0
- package/dist/dgram/mb_mdns.d.ts.map +1 -0
- package/dist/dgram/mb_mdns.js +80 -15
- package/dist/dgram/mb_mdns.js.map +1 -0
- package/dist/dgram/mdns.d.ts +290 -0
- package/dist/dgram/mdns.d.ts.map +1 -0
- package/dist/dgram/mdns.js +299 -137
- package/dist/dgram/mdns.js.map +1 -0
- package/dist/dgram/multicast.d.ts +67 -0
- package/dist/dgram/multicast.d.ts.map +1 -0
- package/dist/dgram/multicast.js +62 -1
- package/dist/dgram/multicast.js.map +1 -0
- package/dist/dgram/unicast.d.ts +56 -0
- package/dist/dgram/unicast.d.ts.map +1 -0
- package/dist/dgram/unicast.js +54 -0
- package/dist/dgram/unicast.js.map +1 -0
- package/dist/frontend.d.ts +235 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +441 -39
- package/dist/frontend.js.map +1 -0
- package/dist/frontendTypes.d.ts +529 -0
- package/dist/frontendTypes.d.ts.map +1 -0
- package/dist/frontendTypes.js +45 -0
- package/dist/frontendTypes.js.map +1 -0
- package/dist/helpers.d.ts +48 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +53 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/export.d.ts +2 -0
- package/dist/logger/export.d.ts.map +1 -0
- package/dist/logger/export.js +1 -0
- package/dist/logger/export.js.map +1 -0
- package/dist/matter/behaviors.d.ts +2 -0
- package/dist/matter/behaviors.d.ts.map +1 -0
- package/dist/matter/behaviors.js +2 -0
- package/dist/matter/behaviors.js.map +1 -0
- package/dist/matter/clusters.d.ts +2 -0
- package/dist/matter/clusters.d.ts.map +1 -0
- package/dist/matter/clusters.js +2 -0
- package/dist/matter/clusters.js.map +1 -0
- package/dist/matter/devices.d.ts +2 -0
- package/dist/matter/devices.d.ts.map +1 -0
- package/dist/matter/devices.js +2 -0
- package/dist/matter/devices.js.map +1 -0
- package/dist/matter/endpoints.d.ts +2 -0
- package/dist/matter/endpoints.d.ts.map +1 -0
- package/dist/matter/endpoints.js +2 -0
- package/dist/matter/endpoints.js.map +1 -0
- package/dist/matter/export.d.ts +5 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +3 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matter/types.d.ts +3 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +3 -0
- package/dist/matter/types.js.map +1 -0
- package/dist/matterbridge.d.ts +475 -0
- package/dist/matterbridge.d.ts.map +1 -0
- package/dist/matterbridge.js +833 -51
- package/dist/matterbridge.js.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts +42 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.js +37 -0
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
- package/dist/matterbridgeBehaviors.d.ts +2404 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +68 -5
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDeviceTypes.d.ts +770 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +638 -17
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +42 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
- package/dist/matterbridgeDynamicPlatform.js +37 -0
- package/dist/matterbridgeDynamicPlatform.js.map +1 -0
- package/dist/matterbridgeEndpoint.d.ts +1550 -0
- package/dist/matterbridgeEndpoint.d.ts.map +1 -0
- package/dist/matterbridgeEndpoint.js +1403 -53
- package/dist/matterbridgeEndpoint.js.map +1 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +758 -0
- package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
- package/dist/matterbridgeEndpointHelpers.js +464 -19
- package/dist/matterbridgeEndpointHelpers.js.map +1 -0
- package/dist/matterbridgePlatform.d.ts +402 -0
- package/dist/matterbridgePlatform.d.ts.map +1 -0
- package/dist/matterbridgePlatform.js +341 -1
- package/dist/matterbridgePlatform.js.map +1 -0
- package/dist/matterbridgeTypes.d.ts +226 -0
- package/dist/matterbridgeTypes.d.ts.map +1 -0
- package/dist/matterbridgeTypes.js +26 -0
- package/dist/matterbridgeTypes.js.map +1 -0
- package/dist/pluginManager.d.ts +347 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +320 -4
- package/dist/pluginManager.js.map +1 -0
- package/dist/shelly.d.ts +174 -0
- package/dist/shelly.d.ts.map +1 -0
- package/dist/shelly.js +168 -7
- package/dist/shelly.js.map +1 -0
- package/dist/storage/export.d.ts +2 -0
- package/dist/storage/export.d.ts.map +1 -0
- package/dist/storage/export.js +1 -0
- package/dist/storage/export.js.map +1 -0
- package/dist/update.d.ts +75 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +69 -0
- package/dist/update.js.map +1 -0
- package/dist/utils/colorUtils.d.ts +99 -0
- package/dist/utils/colorUtils.d.ts.map +1 -0
- package/dist/utils/colorUtils.js +97 -2
- package/dist/utils/colorUtils.js.map +1 -0
- package/dist/utils/commandLine.d.ts +66 -0
- package/dist/utils/commandLine.d.ts.map +1 -0
- package/dist/utils/commandLine.js +60 -0
- package/dist/utils/commandLine.js.map +1 -0
- package/dist/utils/copyDirectory.d.ts +33 -0
- package/dist/utils/copyDirectory.d.ts.map +1 -0
- package/dist/utils/copyDirectory.js +38 -1
- package/dist/utils/copyDirectory.js.map +1 -0
- package/dist/utils/createDirectory.d.ts +34 -0
- package/dist/utils/createDirectory.d.ts.map +1 -0
- package/dist/utils/createDirectory.js +33 -0
- package/dist/utils/createDirectory.js.map +1 -0
- package/dist/utils/createZip.d.ts +39 -0
- package/dist/utils/createZip.d.ts.map +1 -0
- package/dist/utils/createZip.js +47 -2
- package/dist/utils/createZip.js.map +1 -0
- package/dist/utils/deepCopy.d.ts +32 -0
- package/dist/utils/deepCopy.d.ts.map +1 -0
- package/dist/utils/deepCopy.js +39 -0
- package/dist/utils/deepCopy.js.map +1 -0
- package/dist/utils/deepEqual.d.ts +54 -0
- package/dist/utils/deepEqual.d.ts.map +1 -0
- package/dist/utils/deepEqual.js +72 -1
- package/dist/utils/deepEqual.js.map +1 -0
- package/dist/utils/error.d.ts +44 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +43 -1
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/export.d.ts +13 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/export.js +1 -0
- package/dist/utils/export.js.map +1 -0
- package/dist/utils/format.d.ts +53 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +49 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/hex.d.ts +89 -0
- package/dist/utils/hex.d.ts.map +1 -0
- package/dist/utils/hex.js +124 -0
- package/dist/utils/hex.js.map +1 -0
- package/dist/utils/inspector.d.ts +87 -0
- package/dist/utils/inspector.d.ts.map +1 -0
- package/dist/utils/inspector.js +69 -1
- package/dist/utils/inspector.js.map +1 -0
- package/dist/utils/isvalid.d.ts +103 -0
- package/dist/utils/isvalid.d.ts.map +1 -0
- package/dist/utils/isvalid.js +101 -0
- package/dist/utils/isvalid.js.map +1 -0
- package/dist/utils/jestHelpers.d.ts +139 -0
- package/dist/utils/jestHelpers.d.ts.map +1 -0
- package/dist/utils/jestHelpers.js +153 -3
- package/dist/utils/jestHelpers.js.map +1 -0
- package/dist/utils/network.d.ts +101 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +96 -5
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/spawn.d.ts +35 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +71 -0
- package/dist/utils/spawn.js.map +1 -0
- package/dist/utils/tracker.d.ts +108 -0
- package/dist/utils/tracker.d.ts.map +1 -0
- package/dist/utils/tracker.js +64 -1
- package/dist/utils/tracker.js.map +1 -0
- package/dist/utils/wait.d.ts +54 -0
- package/dist/utils/wait.d.ts.map +1 -0
- package/dist/utils/wait.js +60 -8
- package/dist/utils/wait.js.map +1 -0
- package/npm-shrinkwrap.json +5 -5
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -26,8 +26,9 @@ Advantages:
|
|
|
26
26
|
- real concurrency outside the Node.js main loop;
|
|
27
27
|
- isolation between threads;
|
|
28
28
|
- individual plugin isolation in childbridge mode;
|
|
29
|
+
- ability to update the plugin in childbridge mode without restarting matterbridge;
|
|
29
30
|
|
|
30
|
-
## [3.3.4] -
|
|
31
|
+
## [3.3.4] - 2025-10-24
|
|
31
32
|
|
|
32
33
|
### Breaking Changes
|
|
33
34
|
|
|
@@ -37,8 +38,9 @@ Advantages:
|
|
|
37
38
|
|
|
38
39
|
- [frontend]: Added debounce to MatterSettings.
|
|
39
40
|
- [cli]: Bumped `cli` version to 3.0.0 with backport of Traker and Inspector from thread module.
|
|
40
|
-
- [powerSource]: Added MatterbridgePowerSourceServer
|
|
41
|
+
- [powerSource]: Added MatterbridgePowerSourceServer. It initializes the enpointList of the PowerSource cluster.
|
|
41
42
|
- [thread]: Added BroadcastServer to Matterbridge.
|
|
43
|
+
- [service]: Added configuration [guide](README-SERVICE-LOCAL.md) to run matterbridge as a daemon with systemctl (Linux only) and with local global node_modules (no sudo required).
|
|
42
44
|
|
|
43
45
|
### Changed
|
|
44
46
|
|
|
@@ -49,6 +51,10 @@ Advantages:
|
|
|
49
51
|
- [frontend]: Bumped `frontend` version to 3.2.3.
|
|
50
52
|
- [thread]: Bumped `BroadcastServer` version to 1.0.1.
|
|
51
53
|
|
|
54
|
+
### Fixed
|
|
55
|
+
|
|
56
|
+
- [thrmostat]: Fixed minSetpointDeadBand data type. Thanks Apollon!
|
|
57
|
+
|
|
52
58
|
<a href="https://www.buymeacoffee.com/luligugithub">
|
|
53
59
|
<img src="bmc-button.svg" alt="Buy me a coffee" width="80">
|
|
54
60
|
</a>
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# <img src="frontend/public/matterbridge.svg" alt="Matterbridge Logo" width="64px" height="64px"> Matterbridge systemd configuration with local global node_modules
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/matterbridge)
|
|
4
|
+
[](https://www.npmjs.com/package/matterbridge)
|
|
5
|
+
[](https://hub.docker.com/r/luligu/matterbridge)
|
|
6
|
+
[](https://hub.docker.com/r/luligu/matterbridge)
|
|
7
|
+

|
|
8
|
+

|
|
9
|
+
[](https://codecov.io/gh/Luligu/matterbridge)
|
|
10
|
+
|
|
11
|
+
[](https://www.npmjs.com/package/matter-history)
|
|
12
|
+
[](https://www.npmjs.com/package/node-ansi-logger)
|
|
13
|
+
[](https://www.npmjs.com/package/node-persist-manager)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# Advanced configuration
|
|
18
|
+
|
|
19
|
+
## Run matterbridge as a daemon with systemctl (Linux only) with local global node_modules
|
|
20
|
+
|
|
21
|
+
The easiest way to add systemctl is to use [Matterbridge service cli for linux](https://github.com/Luligu/mb-service-linux).
|
|
22
|
+
|
|
23
|
+
If your setup is too complex or you prefer to do it manually follow this method. You can still use mb-service to manage systemd after.
|
|
24
|
+
|
|
25
|
+
### First create the Matterbridge directories and set the correct permissions
|
|
26
|
+
|
|
27
|
+
This will create the required directories if they don't exist
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
cd ~
|
|
31
|
+
sudo systemctl stop matterbridge # ✅ Safe precaution
|
|
32
|
+
mkdir -p ~/Matterbridge ~/.matterbridge ~/.mattercert ~/.npm-global # ✅ Creates all needed dirs
|
|
33
|
+
chown -R $USER:$USER ~/Matterbridge ~/.matterbridge ~/.mattercert ~/.npm-global # ✅ Ensures ownership
|
|
34
|
+
chmod -R 755 ~/Matterbridge ~/.matterbridge ~/.mattercert ~/.npm-global # ✅ Secure permissions
|
|
35
|
+
NPM_CONFIG_PREFIX=~/.npm-global npm install matterbridge --omit=dev --verbose --global # ✅ Install, no sudo
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Then create a system-wide symlink
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
sudo ln -sf /home/$USER/.npm-global/bin/matterbridge /usr/local/bin/matterbridge
|
|
42
|
+
which matterbridge
|
|
43
|
+
matterbridge --version
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Then create a systemctl configuration file for Matterbridge
|
|
47
|
+
|
|
48
|
+
Create a systemctl configuration file for Matterbridge
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
sudo nano /etc/systemd/system/matterbridge.service
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Add the following to this file, replacing 5 times (!) USER with your user name (e.g. WorkingDirectory=/home/pi/Matterbridge, User=pi and Group=pi and Environment="NPM_CONFIG_PREFIX=/home/pi/.npm-global"):
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
[Unit]
|
|
58
|
+
Description=matterbridge
|
|
59
|
+
After=network.target
|
|
60
|
+
Wants=network.target
|
|
61
|
+
|
|
62
|
+
[Service]
|
|
63
|
+
Type=simple
|
|
64
|
+
Environment="NPM_CONFIG_PREFIX=/home/<USER>/.npm-global"
|
|
65
|
+
ExecStart=matterbridge --service --nosudo
|
|
66
|
+
WorkingDirectory=/home/<USER>/Matterbridge
|
|
67
|
+
StandardOutput=inherit
|
|
68
|
+
StandardError=inherit
|
|
69
|
+
Restart=always
|
|
70
|
+
User=<USER>
|
|
71
|
+
Group=<USER>
|
|
72
|
+
|
|
73
|
+
[Install]
|
|
74
|
+
WantedBy=multi-user.target
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
If you use the frontend with **-ssl** -frontend 443 and get an error message: "Port 443 requires elevated privileges",
|
|
78
|
+
add this:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
[Service]
|
|
82
|
+
AmbientCapabilities=CAP_NET_BIND_SERVICE
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
If you use the **matterbridge-bthome** plugin add this:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
[Service]
|
|
89
|
+
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_NET_ADMIN
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Now and if you modify matterbridge.service after, run:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
sudo systemctl daemon-reload
|
|
96
|
+
sudo systemctl restart matterbridge.service
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Start Matterbridge
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
sudo systemctl start matterbridge
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Stop Matterbridge
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
sudo systemctl stop matterbridge
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### Show Matterbridge status
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
sudo systemctl status matterbridge.service
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Enable Matterbridge to start automatically on boot
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
sudo systemctl enable matterbridge.service
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Disable Matterbridge from starting automatically on boot
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
sudo systemctl disable matterbridge.service
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### View the log of Matterbridge in real time (this will show the log with colors)
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
sudo journalctl -u matterbridge.service -n 1000 -f --output cat
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Delete the logs older then 3 days (all of them not only the ones of Matterbridge!)
|
|
136
|
+
|
|
137
|
+
Check the space used
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
sudo journalctl --disk-usage
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
remove all log older then 3 days
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
sudo journalctl --rotate
|
|
147
|
+
sudo journalctl --vacuum-time=3d
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Prevent the journal logs to grow
|
|
151
|
+
|
|
152
|
+
If you want to make the setting permanent to prevent the journal logs to grow too much, run
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
sudo nano /etc/systemd/journald.conf
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
add
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
Compress=yes # Compress logs
|
|
162
|
+
MaxRetentionSec=3days # Keep logs for a maximum of 3 days.
|
|
163
|
+
MaxFileSec=1day # Rotate logs daily within the 3-day retention period.
|
|
164
|
+
ForwardToSyslog=no # Disable forwarding to syslog to prevent duplicate logging.
|
|
165
|
+
SystemMaxUse=100M # Limit persistent logs in /var/log/journal to 100 MB.
|
|
166
|
+
RuntimeMaxUse=100M # Limit runtime logs in /run/log/journal to 100 MB.
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
save it and run
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
sudo systemctl restart systemd-journald
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Verify that with your distro you can run sudo npm install -g matterbridge without the password
|
|
176
|
+
|
|
177
|
+
Run the following command to verify if you can install Matterbridge globally without being prompted for a password:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
sudo npm install -g matterbridge --omit=dev
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
If you are not prompted for a password, no further action is required.
|
|
184
|
+
|
|
185
|
+
If that is not the case, open the sudoers file for editing using visudo
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
sudo visudo
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
verify the presence of of a line
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
@includedir /etc/sudoers.d
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
exit and create a configuration file for sudoers
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
sudo nano /etc/sudoers.d/matterbridge
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
add this line replacing USER with your user name (e.g. radxa ALL=(ALL) NOPASSWD: ALL)
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
<USER> ALL=(ALL) NOPASSWD: ALL
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
or if you prefers to only give access to npm without password try with (e.g. radxa ALL=(ALL) NOPASSWD: /usr/bin/npm)
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
<USER> ALL=(ALL) NOPASSWD: /usr/bin/npm
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
save the file and reload the settings with:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
sudo chmod 0440 /etc/sudoers.d/matterbridge
|
|
219
|
+
sudo visudo -c
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Verify if you can install Matterbridge globally without being prompted for a password:
|
|
223
|
+
|
|
224
|
+
```bash
|
|
225
|
+
sudo npm install -g matterbridge --omit=dev
|
|
226
|
+
```
|
|
@@ -0,0 +1,112 @@
|
|
|
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.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
|
+
import { EventEmitter } from 'node:events';
|
|
25
|
+
import { type AnsiLogger } from 'node-ansi-logger';
|
|
26
|
+
import type { WorkerMessage, WorkerMessageType, WorkerRequest, WorkerResponse, WorkerSrcType } from './broadcastServerTypes.js';
|
|
27
|
+
interface BroadcastServerEvents {
|
|
28
|
+
'broadcast_message': [msg: WorkerMessage];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* BroadcastServer class to handle broadcast messages between workers with BroadcastChannel.
|
|
32
|
+
*/
|
|
33
|
+
export declare class BroadcastServer extends EventEmitter<BroadcastServerEvents> {
|
|
34
|
+
readonly name: WorkerSrcType;
|
|
35
|
+
private readonly log;
|
|
36
|
+
private readonly channel;
|
|
37
|
+
private readonly 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
|
+
constructor(name: WorkerSrcType, log: AnsiLogger, channel?: string);
|
|
46
|
+
/**
|
|
47
|
+
* Closes the broadcast channel.
|
|
48
|
+
*
|
|
49
|
+
* @returns {void}
|
|
50
|
+
*/
|
|
51
|
+
close(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Generates a unique ID with range 100000-999999.
|
|
54
|
+
*
|
|
55
|
+
* @returns {number} - A unique ID between 100000 and 999999
|
|
56
|
+
*/
|
|
57
|
+
getUniqueId(): number;
|
|
58
|
+
/**
|
|
59
|
+
* Type guard to check if a message is a request of a specific type.
|
|
60
|
+
*
|
|
61
|
+
* @param {unknown} msg - The message to check.
|
|
62
|
+
* @param {T} type - The type to check against.
|
|
63
|
+
* @returns {msg is WorkerRequest<T>} True if the message is a request of the specified type.
|
|
64
|
+
*/
|
|
65
|
+
isWorkerRequest<T extends WorkerMessageType>(msg: unknown, type: T): msg is WorkerRequest<T>;
|
|
66
|
+
/**
|
|
67
|
+
* Type guard to check if a message is a response of a specific type.
|
|
68
|
+
*
|
|
69
|
+
* @param {unknown} msg - The message to check.
|
|
70
|
+
* @param {T} type - The type to check against.
|
|
71
|
+
* @returns {msg is WorkerResponse<T>} True if the message is a response of the specified type.
|
|
72
|
+
*/
|
|
73
|
+
isWorkerResponse<T extends WorkerMessageType>(msg: unknown, type: T): msg is WorkerResponse<T>;
|
|
74
|
+
/**
|
|
75
|
+
* Handles incoming broadcast messages.
|
|
76
|
+
*
|
|
77
|
+
* @param {MessageEvent} event - The message event containing the broadcast message.
|
|
78
|
+
* @returns {void}
|
|
79
|
+
*/
|
|
80
|
+
private broadcastMessageHandler;
|
|
81
|
+
/**
|
|
82
|
+
* Broadcast a message to all workers.
|
|
83
|
+
*
|
|
84
|
+
* @param {WorkerMessage} message - The message to broadcast.
|
|
85
|
+
*/
|
|
86
|
+
broadcast(message: WorkerMessage): void;
|
|
87
|
+
/**
|
|
88
|
+
* Broadcast a request message to all workers.
|
|
89
|
+
*
|
|
90
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
91
|
+
* @returns {void}
|
|
92
|
+
*/
|
|
93
|
+
request<M extends WorkerRequest<WorkerMessageType>>(message: M): void;
|
|
94
|
+
/**
|
|
95
|
+
* Broadcast a response message to all workers.
|
|
96
|
+
*
|
|
97
|
+
* @param {WorkerResponse<T>} message - The typed response message to broadcast.
|
|
98
|
+
* @returns {void}
|
|
99
|
+
*/
|
|
100
|
+
respond<M extends WorkerResponse<WorkerMessageType>>(message: M): void;
|
|
101
|
+
/**
|
|
102
|
+
* Fetch data from a worker.
|
|
103
|
+
* It broadcasts a request message and waits for a response with the same id.
|
|
104
|
+
*
|
|
105
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
106
|
+
* @returns {Promise<WorkerResponse<T>>} A promise that resolves with the response from the worker or rejects on timeout.
|
|
107
|
+
* @throws {Error} If the fetch operation times out after 100ms.
|
|
108
|
+
*/
|
|
109
|
+
fetch<M extends WorkerRequest<WorkerMessageType>>(message: M): Promise<WorkerResponse<M['type']>>;
|
|
110
|
+
}
|
|
111
|
+
export {};
|
|
112
|
+
//# sourceMappingURL=broadcastServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcastServer.d.ts","sourceRoot":"","sources":["../src/broadcastServer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAKH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAEhI,UAAU,qBAAqB;IAC7B,mBAAmB,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY,CAAC,qBAAqB,CAAC;IAWpE,QAAQ,CAAC,IAAI,EAAE,aAAa;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD;;;;;;OAMG;gBAEQ,IAAI,EAAE,aAAa,EACX,GAAG,EAAE,UAAU,EACf,OAAO,GAAE,MAA4B;IAOxD;;;;OAIG;IACH,KAAK,IAAI,IAAI;IAMb;;;;OAIG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,SAAS,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,aAAa,CAAC,CAAC,CAAC;IAI5F;;;;;;OAMG;IACH,gBAAgB,CAAC,CAAC,SAAS,iBAAiB,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC;IAI9F;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;;;OAIG;IACH,SAAS,CAAC,OAAO,EAAE,aAAa;IAIhC;;;;;OAKG;IACH,OAAO,CAAC,CAAC,SAAS,aAAa,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAerE;;;;;OAKG;IACH,OAAO,CAAC,CAAC,SAAS,cAAc,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAYtE;;;;;;;OAOG;IACG,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CA4BxG"}
|
package/dist/broadcastServer.js
CHANGED
|
@@ -1,13 +1,47 @@
|
|
|
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.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
|
+
// eslint-disable-next-line no-console
|
|
1
25
|
if (process.argv.includes('--loader') || process.argv.includes('-loader'))
|
|
2
26
|
console.log('\u001B[32mBroadcastServer loaded.\u001B[40;0m');
|
|
3
27
|
import { EventEmitter } from 'node:events';
|
|
4
28
|
import { BroadcastChannel } from 'node:worker_threads';
|
|
5
29
|
import { debugStringify } from 'node-ansi-logger';
|
|
30
|
+
/**
|
|
31
|
+
* BroadcastServer class to handle broadcast messages between workers with BroadcastChannel.
|
|
32
|
+
*/
|
|
6
33
|
export class BroadcastServer extends EventEmitter {
|
|
7
34
|
name;
|
|
8
35
|
log;
|
|
9
36
|
channel;
|
|
10
37
|
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
|
+
*/
|
|
11
45
|
constructor(name, log, channel = 'broadcast-channel') {
|
|
12
46
|
super();
|
|
13
47
|
this.name = name;
|
|
@@ -16,24 +50,69 @@ export class BroadcastServer extends EventEmitter {
|
|
|
16
50
|
this.broadcastChannel = new BroadcastChannel(this.channel);
|
|
17
51
|
this.broadcastChannel.onmessage = this.broadcastMessageHandler.bind(this);
|
|
18
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Closes the broadcast channel.
|
|
55
|
+
*
|
|
56
|
+
* @returns {void}
|
|
57
|
+
*/
|
|
19
58
|
close() {
|
|
59
|
+
// @ts-expect-error: wrong type definition in node.d.ts
|
|
20
60
|
this.broadcastChannel.onmessage = null;
|
|
21
61
|
this.broadcastChannel.close();
|
|
22
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Generates a unique ID with range 100000-999999.
|
|
65
|
+
*
|
|
66
|
+
* @returns {number} - A unique ID between 100000 and 999999
|
|
67
|
+
*/
|
|
23
68
|
getUniqueId() {
|
|
24
|
-
return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000;
|
|
69
|
+
return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000; // random int between 100000 and 999999
|
|
25
70
|
}
|
|
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
|
+
*/
|
|
26
78
|
isWorkerRequest(msg, type) {
|
|
27
79
|
return typeof msg === 'object' && msg !== null && 'id' in msg && 'timestamp' in msg && 'type' in msg && msg.type === type && !('response' in msg) && 'src' in msg && 'dst' in msg;
|
|
28
80
|
}
|
|
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
|
+
*/
|
|
29
88
|
isWorkerResponse(msg, type) {
|
|
30
89
|
return typeof msg === 'object' && msg !== null && 'id' in msg && 'timestamp' in msg && 'type' in msg && msg.type === type && 'response' in msg && 'src' in msg && 'dst' in msg;
|
|
31
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Handles incoming broadcast messages.
|
|
93
|
+
*
|
|
94
|
+
* @param {MessageEvent} event - The message event containing the broadcast message.
|
|
95
|
+
* @returns {void}
|
|
96
|
+
*/
|
|
32
97
|
broadcastMessageHandler(event) {
|
|
33
98
|
const data = event.data;
|
|
34
|
-
this.log.debug(
|
|
99
|
+
this.log.debug(`Received broadcast message: ${debugStringify(data)}`);
|
|
35
100
|
this.emit('broadcast_message', data);
|
|
36
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Broadcast a message to all workers.
|
|
104
|
+
*
|
|
105
|
+
* @param {WorkerMessage} message - The message to broadcast.
|
|
106
|
+
*/
|
|
107
|
+
broadcast(message) {
|
|
108
|
+
this.broadcastChannel.postMessage(message);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Broadcast a request message to all workers.
|
|
112
|
+
*
|
|
113
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
114
|
+
* @returns {void}
|
|
115
|
+
*/
|
|
37
116
|
request(message) {
|
|
38
117
|
if (message.id === undefined) {
|
|
39
118
|
message.id = this.getUniqueId();
|
|
@@ -45,9 +124,15 @@ export class BroadcastServer extends EventEmitter {
|
|
|
45
124
|
this.log.error(`Invalid request message format for broadcast: ${debugStringify(message)}`);
|
|
46
125
|
return;
|
|
47
126
|
}
|
|
48
|
-
this.log.debug(
|
|
127
|
+
this.log.debug(`Broadcasting request message: ${debugStringify(message)}`);
|
|
49
128
|
this.broadcastChannel.postMessage(message);
|
|
50
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Broadcast a response message to all workers.
|
|
132
|
+
*
|
|
133
|
+
* @param {WorkerResponse<T>} message - The typed response message to broadcast.
|
|
134
|
+
* @returns {void}
|
|
135
|
+
*/
|
|
51
136
|
respond(message) {
|
|
52
137
|
if (message.timestamp === undefined) {
|
|
53
138
|
message.timestamp = Date.now();
|
|
@@ -56,9 +141,17 @@ export class BroadcastServer extends EventEmitter {
|
|
|
56
141
|
this.log.error(`Invalid response message format for broadcast: ${debugStringify(message)}`);
|
|
57
142
|
return;
|
|
58
143
|
}
|
|
59
|
-
this.log.debug(
|
|
144
|
+
this.log.debug(`Broadcasting response message: ${debugStringify(message)}`);
|
|
60
145
|
this.broadcastChannel.postMessage(message);
|
|
61
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Fetch data from a worker.
|
|
149
|
+
* It broadcasts a request message and waits for a response with the same id.
|
|
150
|
+
*
|
|
151
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
152
|
+
* @returns {Promise<WorkerResponse<T>>} A promise that resolves with the response from the worker or rejects on timeout.
|
|
153
|
+
* @throws {Error} If the fetch operation times out after 100ms.
|
|
154
|
+
*/
|
|
62
155
|
async fetch(message) {
|
|
63
156
|
if (message.id === undefined) {
|
|
64
157
|
message.id = this.getUniqueId();
|
|
@@ -66,13 +159,13 @@ export class BroadcastServer extends EventEmitter {
|
|
|
66
159
|
if (message.timestamp === undefined) {
|
|
67
160
|
message.timestamp = Date.now();
|
|
68
161
|
}
|
|
69
|
-
this.log.debug(
|
|
162
|
+
this.log.debug(`Fetching message: ${debugStringify(message)}`);
|
|
70
163
|
return new Promise((resolve, reject) => {
|
|
71
164
|
const responseHandler = (msg) => {
|
|
72
165
|
if (this.isWorkerResponse(msg, message.type) && msg.id === message.id) {
|
|
73
166
|
clearTimeout(timeoutId);
|
|
74
167
|
this.off('broadcast_message', responseHandler);
|
|
75
|
-
this.log.debug(
|
|
168
|
+
this.log.debug(`Fetch response: ${debugStringify(msg)}`);
|
|
76
169
|
resolve(msg);
|
|
77
170
|
}
|
|
78
171
|
};
|
|
@@ -85,3 +178,4 @@ export class BroadcastServer extends EventEmitter {
|
|
|
85
178
|
});
|
|
86
179
|
}
|
|
87
180
|
}
|
|
181
|
+
//# sourceMappingURL=broadcastServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcastServer.js","sourceRoot":"","sources":["../src/broadcastServer.ts"],"names":[],"mappings":"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"}
|