matterbridge 3.4.0-dev-20251125-6f11a4f → 3.4.0
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 +3 -2
- package/README.md +1 -1
- package/dist/broadcastServer.d.ts +115 -0
- package/dist/broadcastServer.d.ts.map +1 -0
- package/dist/broadcastServer.js +93 -1
- package/dist/broadcastServer.js.map +1 -0
- package/dist/broadcastServerTypes.d.ts +838 -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 +97 -1
- 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 +135 -0
- package/dist/deviceManager.d.ts.map +1 -0
- package/dist/deviceManager.js +113 -1
- 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 +61 -0
- package/dist/devices/cooktop.d.ts.map +1 -0
- package/dist/devices/cooktop.js +56 -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 +43 -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 +238 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +455 -35
- 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 +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/jestutils/export.d.ts +2 -0
- package/dist/jestutils/export.d.ts.map +1 -0
- package/dist/jestutils/export.js +1 -0
- package/dist/jestutils/export.js.map +1 -0
- package/dist/jestutils/jestHelpers.d.ts +303 -0
- package/dist/jestutils/jestHelpers.d.ts.map +1 -0
- package/dist/jestutils/jestHelpers.js +354 -13
- package/dist/jestutils/jestHelpers.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/matterNode.d.ts +342 -0
- package/dist/matterNode.d.ts.map +1 -0
- package/dist/matterNode.js +369 -8
- package/dist/matterNode.js.map +1 -0
- package/dist/matterbridge.d.ts +473 -0
- package/dist/matterbridge.d.ts.map +1 -0
- package/dist/matterbridge.js +787 -46
- package/dist/matterbridge.js.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts +41 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.js +38 -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 +698 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +635 -14
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +41 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
- package/dist/matterbridgeDynamicPlatform.js +38 -0
- package/dist/matterbridgeDynamicPlatform.js.map +1 -0
- package/dist/matterbridgeEndpoint.d.ts +1507 -0
- package/dist/matterbridgeEndpoint.d.ts.map +1 -0
- package/dist/matterbridgeEndpoint.js +1444 -53
- package/dist/matterbridgeEndpoint.js.map +1 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +787 -0
- package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
- package/dist/matterbridgeEndpointHelpers.js +483 -20
- package/dist/matterbridgeEndpointHelpers.js.map +1 -0
- package/dist/matterbridgeEndpointTypes.d.ts +166 -0
- package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
- package/dist/matterbridgeEndpointTypes.js +25 -0
- package/dist/matterbridgeEndpointTypes.js.map +1 -0
- package/dist/matterbridgePlatform.d.ts +524 -0
- package/dist/matterbridgePlatform.d.ts.map +1 -0
- package/dist/matterbridgePlatform.js +439 -1
- package/dist/matterbridgePlatform.js.map +1 -0
- package/dist/matterbridgeTypes.d.ts +251 -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 +371 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +340 -5
- 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 +101 -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 +35 -0
- package/dist/utils/copyDirectory.d.ts.map +1 -0
- package/dist/utils/copyDirectory.js +37 -0
- 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 +41 -0
- 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/network.d.ts +111 -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 +33 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +71 -1
- 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 +65 -2
- 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/marked.ps1 +10 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -28,7 +28,7 @@ Advantages:
|
|
|
28
28
|
- individual plugin isolation in childbridge mode;
|
|
29
29
|
- ability to update the plugin in childbridge mode without restarting matterbridge;
|
|
30
30
|
|
|
31
|
-
## [3.4.0] -
|
|
31
|
+
## [3.4.0] - 2025-11-26
|
|
32
32
|
|
|
33
33
|
### Development Breaking Changes
|
|
34
34
|
|
|
@@ -46,8 +46,9 @@ Removed the following long deprecated elements:
|
|
|
46
46
|
- [doorLock]: Added autoRelockTime attribute with default 0.
|
|
47
47
|
- [DevContainer]: Added instructions for testing a plugin with a paired controller when using DevContainer.
|
|
48
48
|
- [platform]: Made internal use methods and properties hard-private.
|
|
49
|
-
- [platform]: Added size(), getDeviceByName(), getDeviceByUniqueId(), getDeviceBySerialNumber(), getDeviceById(), getDeviceByOriginalId(), getDeviceByNumber() and hasDeviceUniqueId() methods.
|
|
49
|
+
- [platform]: Added size(), getDeviceByName(), getDeviceByUniqueId(), getDeviceBySerialNumber(), getDeviceById(), getDeviceByOriginalId(), getDeviceByNumber() and hasDeviceUniqueId() methods to retrieve a registered device.
|
|
50
50
|
- [platform]: Added isReady, isLoaded, isStarted and isConfigured properties.
|
|
51
|
+
- [matterbridge.io]: Updated website https://matterbridge.io.
|
|
51
52
|
|
|
52
53
|
### Changed
|
|
53
54
|
|
package/README.md
CHANGED
|
@@ -108,7 +108,7 @@ Test the installation with:
|
|
|
108
108
|
matterbridge
|
|
109
109
|
```
|
|
110
110
|
|
|
111
|
-
Now it is possible to open the frontend at the link provided in the log (e.g. http://
|
|
111
|
+
Now it is possible to open the frontend at the link provided in the log (e.g. http://MATTERBRIDGE-IPV4-ADDRESS:8283).
|
|
112
112
|
|
|
113
113
|
You can then change the bridge mode and other parameters from the frontend.
|
|
114
114
|
|
|
@@ -0,0 +1,115 @@
|
|
|
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.3
|
|
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
|
+
private readonly debug;
|
|
39
|
+
private readonly verbose;
|
|
40
|
+
/**
|
|
41
|
+
* Creates an instance of BroadcastServer.
|
|
42
|
+
*
|
|
43
|
+
* @param {string} name - The name of the broadcast server.
|
|
44
|
+
* @param {AnsiLogger} log - The logger instance to use for logging.
|
|
45
|
+
* @param {string} channel - The channel name for the broadcast. Default is 'broadcast-channel'.
|
|
46
|
+
*/
|
|
47
|
+
constructor(name: WorkerSrcType, log: AnsiLogger, channel?: string);
|
|
48
|
+
/**
|
|
49
|
+
* Closes the broadcast channel.
|
|
50
|
+
*
|
|
51
|
+
* @returns {void}
|
|
52
|
+
*/
|
|
53
|
+
close(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Generates a unique ID with range 100000-999999.
|
|
56
|
+
*
|
|
57
|
+
* @returns {number} - A unique ID between 100000 and 999999
|
|
58
|
+
*/
|
|
59
|
+
getUniqueId(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Type guard to check if a message is a request of a specific type.
|
|
62
|
+
*
|
|
63
|
+
* @param {unknown} msg - The message to check.
|
|
64
|
+
* @param {T} type - The type to check against.
|
|
65
|
+
* @returns {msg is WorkerRequest<T>} True if the message is a request of the specified type.
|
|
66
|
+
*/
|
|
67
|
+
isWorkerRequest<T extends WorkerMessageType>(msg: unknown, type: T): msg is WorkerRequest<T>;
|
|
68
|
+
/**
|
|
69
|
+
* Type guard to check if a message is a response of a specific type.
|
|
70
|
+
*
|
|
71
|
+
* @param {unknown} msg - The message to check.
|
|
72
|
+
* @param {T} type - The type to check against.
|
|
73
|
+
* @returns {msg is WorkerResponse<T>} True if the message is a response of the specified type.
|
|
74
|
+
*/
|
|
75
|
+
isWorkerResponse<T extends WorkerMessageType>(msg: unknown, type: T): msg is WorkerResponse<T>;
|
|
76
|
+
/**
|
|
77
|
+
* Handles incoming broadcast messages.
|
|
78
|
+
*
|
|
79
|
+
* @param {MessageEvent} event - The message event containing the broadcast message.
|
|
80
|
+
* @returns {void}
|
|
81
|
+
*/
|
|
82
|
+
private broadcastMessageHandler;
|
|
83
|
+
/**
|
|
84
|
+
* Broadcast a message to all workers.
|
|
85
|
+
*
|
|
86
|
+
* @param {WorkerMessage} message - The message to broadcast.
|
|
87
|
+
*/
|
|
88
|
+
broadcast(message: WorkerMessage): void;
|
|
89
|
+
/**
|
|
90
|
+
* Broadcast a request message to all workers.
|
|
91
|
+
*
|
|
92
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
93
|
+
* @returns {void}
|
|
94
|
+
*/
|
|
95
|
+
request<M extends WorkerRequest<WorkerMessageType>>(message: M): void;
|
|
96
|
+
/**
|
|
97
|
+
* Broadcast a response message to all workers.
|
|
98
|
+
*
|
|
99
|
+
* @param {WorkerResponse<T>} message - The typed response message to broadcast.
|
|
100
|
+
* @returns {void}
|
|
101
|
+
*/
|
|
102
|
+
respond<M extends WorkerResponse<WorkerMessageType>>(message: M): void;
|
|
103
|
+
/**
|
|
104
|
+
* Fetch data from a worker.
|
|
105
|
+
* It broadcasts a request message and waits for a response with the same id.
|
|
106
|
+
*
|
|
107
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
108
|
+
* @param {number} timeout - The timeout in milliseconds to wait for a response. Default is 250ms.
|
|
109
|
+
* @returns {Promise<WorkerResponse<T>>} A promise that resolves with the response from the worker or rejects on timeout.
|
|
110
|
+
* @throws {Error} If the fetch operation times out after 250ms.
|
|
111
|
+
*/
|
|
112
|
+
fetch<M extends WorkerRequest<WorkerMessageType>>(message: M, timeout?: number): Promise<WorkerResponse<M['type']>>;
|
|
113
|
+
}
|
|
114
|
+
export {};
|
|
115
|
+
//# 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,EAA4B,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAGhI,UAAU,qBAAqB;IAC7B,mBAAmB,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;CAC3C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY,CAAC,qBAAqB,CAAC;IAapE,QAAQ,CAAC,IAAI,EAAE,aAAa;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoD;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IAEnD;;;;;;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;IAKhC;;;;;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;;;;;;;;OAQG;IACG,KAAK,CAAC,CAAC,SAAS,aAAa,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CA8B/H"}
|
package/dist/broadcastServer.js
CHANGED
|
@@ -1,9 +1,36 @@
|
|
|
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.3
|
|
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 { CYAN, db, debugStringify } from 'node-ansi-logger';
|
|
6
30
|
import { hasParameter } from './utils/commandLine.js';
|
|
31
|
+
/**
|
|
32
|
+
* BroadcastServer class to handle broadcast messages between workers with BroadcastChannel.
|
|
33
|
+
*/
|
|
7
34
|
export class BroadcastServer extends EventEmitter {
|
|
8
35
|
name;
|
|
9
36
|
log;
|
|
@@ -11,6 +38,13 @@ export class BroadcastServer extends EventEmitter {
|
|
|
11
38
|
broadcastChannel;
|
|
12
39
|
debug = hasParameter('debug') || hasParameter('verbose');
|
|
13
40
|
verbose = hasParameter('verbose');
|
|
41
|
+
/**
|
|
42
|
+
* Creates an instance of BroadcastServer.
|
|
43
|
+
*
|
|
44
|
+
* @param {string} name - The name of the broadcast server.
|
|
45
|
+
* @param {AnsiLogger} log - The logger instance to use for logging.
|
|
46
|
+
* @param {string} channel - The channel name for the broadcast. Default is 'broadcast-channel'.
|
|
47
|
+
*/
|
|
14
48
|
constructor(name, log, channel = 'broadcast-channel') {
|
|
15
49
|
super();
|
|
16
50
|
this.name = name;
|
|
@@ -19,30 +53,72 @@ export class BroadcastServer extends EventEmitter {
|
|
|
19
53
|
this.broadcastChannel = new BroadcastChannel(this.channel);
|
|
20
54
|
this.broadcastChannel.onmessage = this.broadcastMessageHandler.bind(this);
|
|
21
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Closes the broadcast channel.
|
|
58
|
+
*
|
|
59
|
+
* @returns {void}
|
|
60
|
+
*/
|
|
22
61
|
close() {
|
|
62
|
+
// @ts-expect-error: wrong type definition in node.d.ts
|
|
23
63
|
this.broadcastChannel.onmessage = null;
|
|
24
64
|
this.broadcastChannel.close();
|
|
25
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Generates a unique ID with range 100000-999999.
|
|
68
|
+
*
|
|
69
|
+
* @returns {number} - A unique ID between 100000 and 999999
|
|
70
|
+
*/
|
|
26
71
|
getUniqueId() {
|
|
27
|
-
return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000;
|
|
72
|
+
return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000; // random int between 100000 and 999999
|
|
28
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Type guard to check if a message is a request of a specific type.
|
|
76
|
+
*
|
|
77
|
+
* @param {unknown} msg - The message to check.
|
|
78
|
+
* @param {T} type - The type to check against.
|
|
79
|
+
* @returns {msg is WorkerRequest<T>} True if the message is a request of the specified type.
|
|
80
|
+
*/
|
|
29
81
|
isWorkerRequest(msg, type) {
|
|
30
82
|
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
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* Type guard to check if a message is a response of a specific type.
|
|
86
|
+
*
|
|
87
|
+
* @param {unknown} msg - The message to check.
|
|
88
|
+
* @param {T} type - The type to check against.
|
|
89
|
+
* @returns {msg is WorkerResponse<T>} True if the message is a response of the specified type.
|
|
90
|
+
*/
|
|
32
91
|
isWorkerResponse(msg, type) {
|
|
33
92
|
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;
|
|
34
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Handles incoming broadcast messages.
|
|
96
|
+
*
|
|
97
|
+
* @param {MessageEvent} event - The message event containing the broadcast message.
|
|
98
|
+
* @returns {void}
|
|
99
|
+
*/
|
|
35
100
|
broadcastMessageHandler(event) {
|
|
36
101
|
const data = event.data;
|
|
37
102
|
if (this.verbose && (data.dst === this.name || data.dst === 'all'))
|
|
38
103
|
this.log.debug(`Server ${CYAN}${this.name}${db} received broadcast message: ${debugStringify(data)}`);
|
|
39
104
|
this.emit('broadcast_message', data);
|
|
40
105
|
}
|
|
106
|
+
/**
|
|
107
|
+
* Broadcast a message to all workers.
|
|
108
|
+
*
|
|
109
|
+
* @param {WorkerMessage} message - The message to broadcast.
|
|
110
|
+
*/
|
|
41
111
|
broadcast(message) {
|
|
42
112
|
if (this.verbose)
|
|
43
113
|
this.log.debug(`Broadcasting message: ${debugStringify(message)}`);
|
|
44
114
|
this.broadcastChannel.postMessage(message);
|
|
45
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Broadcast a request message to all workers.
|
|
118
|
+
*
|
|
119
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
120
|
+
* @returns {void}
|
|
121
|
+
*/
|
|
46
122
|
request(message) {
|
|
47
123
|
if (message.id === undefined) {
|
|
48
124
|
message.id = this.getUniqueId();
|
|
@@ -58,6 +134,12 @@ export class BroadcastServer extends EventEmitter {
|
|
|
58
134
|
this.log.debug(`Broadcasting request message: ${debugStringify(message)}`);
|
|
59
135
|
this.broadcastChannel.postMessage(message);
|
|
60
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Broadcast a response message to all workers.
|
|
139
|
+
*
|
|
140
|
+
* @param {WorkerResponse<T>} message - The typed response message to broadcast.
|
|
141
|
+
* @returns {void}
|
|
142
|
+
*/
|
|
61
143
|
respond(message) {
|
|
62
144
|
if (message.timestamp === undefined) {
|
|
63
145
|
message.timestamp = Date.now();
|
|
@@ -70,6 +152,15 @@ export class BroadcastServer extends EventEmitter {
|
|
|
70
152
|
this.log.debug(`Broadcasting response message: ${debugStringify(message)}`);
|
|
71
153
|
this.broadcastChannel.postMessage(message);
|
|
72
154
|
}
|
|
155
|
+
/**
|
|
156
|
+
* Fetch data from a worker.
|
|
157
|
+
* It broadcasts a request message and waits for a response with the same id.
|
|
158
|
+
*
|
|
159
|
+
* @param {WorkerRequest<T>} message - The typed request message to broadcast.
|
|
160
|
+
* @param {number} timeout - The timeout in milliseconds to wait for a response. Default is 250ms.
|
|
161
|
+
* @returns {Promise<WorkerResponse<T>>} A promise that resolves with the response from the worker or rejects on timeout.
|
|
162
|
+
* @throws {Error} If the fetch operation times out after 250ms.
|
|
163
|
+
*/
|
|
73
164
|
async fetch(message, timeout = 250) {
|
|
74
165
|
if (message.id === undefined) {
|
|
75
166
|
message.id = this.getUniqueId();
|
|
@@ -102,3 +193,4 @@ export class BroadcastServer extends EventEmitter {
|
|
|
102
193
|
});
|
|
103
194
|
}
|
|
104
195
|
}
|
|
196
|
+
//# sourceMappingURL=broadcastServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcastServer.js","sourceRoot":"","sources":["../src/broadcastServer.ts"],"names":[],"mappings":"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"}
|