@matterbridge/core 3.5.3
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/LICENSE +202 -0
- package/README.md +22 -0
- package/dist/cli.d.ts +29 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +268 -0
- 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 +49 -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 +826 -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 +3 -0
- package/dist/clusters/export.js.map +1 -0
- package/dist/crypto/attestationDecoder.d.ts +180 -0
- package/dist/crypto/attestationDecoder.d.ts.map +1 -0
- package/dist/crypto/attestationDecoder.js +176 -0
- package/dist/crypto/attestationDecoder.js.map +1 -0
- package/dist/crypto/declarationDecoder.d.ts +72 -0
- package/dist/crypto/declarationDecoder.d.ts.map +1 -0
- package/dist/crypto/declarationDecoder.js +241 -0
- package/dist/crypto/declarationDecoder.js.map +1 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts +9 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts.map +1 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js +120 -0
- package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js.map +1 -0
- package/dist/crypto/read-extensions.d.ts +2 -0
- package/dist/crypto/read-extensions.d.ts.map +1 -0
- package/dist/crypto/read-extensions.js +81 -0
- package/dist/crypto/read-extensions.js.map +1 -0
- package/dist/crypto/testData.d.ts +31 -0
- package/dist/crypto/testData.d.ts.map +1 -0
- package/dist/crypto/testData.js +131 -0
- package/dist/crypto/testData.js.map +1 -0
- package/dist/crypto/walk-der.d.ts +2 -0
- package/dist/crypto/walk-der.d.ts.map +1 -0
- package/dist/crypto/walk-der.js +165 -0
- package/dist/crypto/walk-der.js.map +1 -0
- package/dist/deviceManager.d.ts +135 -0
- package/dist/deviceManager.d.ts.map +1 -0
- package/dist/deviceManager.js +270 -0
- 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 +74 -0
- package/dist/devices/airConditioner.js.map +1 -0
- package/dist/devices/basicVideoPlayer.d.ts +88 -0
- package/dist/devices/basicVideoPlayer.d.ts.map +1 -0
- package/dist/devices/basicVideoPlayer.js +155 -0
- package/dist/devices/basicVideoPlayer.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 +75 -0
- package/dist/devices/batteryStorage.js.map +1 -0
- package/dist/devices/castingVideoPlayer.d.ts +79 -0
- package/dist/devices/castingVideoPlayer.d.ts.map +1 -0
- package/dist/devices/castingVideoPlayer.js +101 -0
- package/dist/devices/castingVideoPlayer.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 +77 -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 +130 -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 +156 -0
- package/dist/devices/evse.js.map +1 -0
- package/dist/devices/export.d.ts +19 -0
- package/dist/devices/export.d.ts.map +1 -0
- package/dist/devices/export.js +23 -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 +78 -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 +84 -0
- 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 +106 -0
- 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 +147 -0
- 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 +179 -0
- 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 +190 -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 +186 -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 +268 -0
- 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 +59 -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 +120 -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 +78 -0
- 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 +166 -0
- package/dist/devices/waterHeater.js.map +1 -0
- package/dist/dgram/export.d.ts +2 -0
- package/dist/dgram/export.d.ts.map +1 -0
- package/dist/dgram/export.js +2 -0
- package/dist/dgram/export.js.map +1 -0
- package/dist/export.d.ts +32 -0
- package/dist/export.d.ts.map +1 -0
- package/dist/export.js +39 -0
- package/dist/export.js.map +1 -0
- package/dist/frontend.d.ts +248 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +2605 -0
- package/dist/frontend.js.map +1 -0
- package/dist/helpers.d.ts +48 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +161 -0
- package/dist/helpers.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 +2 -0
- package/dist/jestutils/export.js.map +1 -0
- package/dist/jestutils/jestHelpers.d.ts +349 -0
- package/dist/jestutils/jestHelpers.d.ts.map +1 -0
- package/dist/jestutils/jestHelpers.js +980 -0
- package/dist/jestutils/jestHelpers.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 +3 -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 +3 -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 +3 -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 +3 -0
- package/dist/matter/endpoints.js.map +1 -0
- package/dist/matter/export.d.ts +4 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +5 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matter/types.d.ts +2 -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 +341 -0
- package/dist/matterNode.d.ts.map +1 -0
- package/dist/matterNode.js +1329 -0
- package/dist/matterNode.js.map +1 -0
- package/dist/matterbridge.d.ts +544 -0
- package/dist/matterbridge.d.ts.map +1 -0
- package/dist/matterbridge.js +2880 -0
- package/dist/matterbridge.js.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts +49 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.js +80 -0
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
- package/dist/matterbridgeBehaviors.d.ts +2428 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +620 -0
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDeviceTypes.d.ts +744 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +1312 -0
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +49 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
- package/dist/matterbridgeDynamicPlatform.js +80 -0
- package/dist/matterbridgeDynamicPlatform.js.map +1 -0
- package/dist/matterbridgeEndpoint.d.ts +1548 -0
- package/dist/matterbridgeEndpoint.d.ts.map +1 -0
- package/dist/matterbridgeEndpoint.js +2883 -0
- package/dist/matterbridgeEndpoint.js.map +1 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +1855 -0
- package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
- package/dist/matterbridgeEndpointHelpers.js +1270 -0
- package/dist/matterbridgeEndpointHelpers.js.map +1 -0
- package/dist/matterbridgeEndpointTypes.d.ts +172 -0
- package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
- package/dist/matterbridgeEndpointTypes.js +28 -0
- package/dist/matterbridgeEndpointTypes.js.map +1 -0
- package/dist/matterbridgePlatform.d.ts +520 -0
- package/dist/matterbridgePlatform.d.ts.map +1 -0
- package/dist/matterbridgePlatform.js +921 -0
- package/dist/matterbridgePlatform.js.map +1 -0
- package/dist/mb_coap.d.ts +24 -0
- package/dist/mb_coap.d.ts.map +1 -0
- package/dist/mb_coap.js +89 -0
- package/dist/mb_coap.js.map +1 -0
- package/dist/mb_health.d.ts +77 -0
- package/dist/mb_health.d.ts.map +1 -0
- package/dist/mb_health.js +147 -0
- package/dist/mb_health.js.map +1 -0
- package/dist/mb_mdns.d.ts +24 -0
- package/dist/mb_mdns.d.ts.map +1 -0
- package/dist/mb_mdns.js +285 -0
- package/dist/mb_mdns.js.map +1 -0
- package/dist/pluginManager.d.ts +388 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +1574 -0
- package/dist/pluginManager.js.map +1 -0
- package/dist/spawn.d.ts +33 -0
- package/dist/spawn.d.ts.map +1 -0
- package/dist/spawn.js +165 -0
- package/dist/spawn.js.map +1 -0
- package/dist/utils/export.d.ts +2 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/export.js +2 -0
- package/dist/utils/export.js.map +1 -0
- package/dist/workers/brand.d.ts +25 -0
- package/dist/workers/brand.d.ts.map +1 -0
- package/dist/workers/brand.extend.d.ts +10 -0
- package/dist/workers/brand.extend.d.ts.map +1 -0
- package/dist/workers/brand.extend.js +15 -0
- package/dist/workers/brand.extend.js.map +1 -0
- package/dist/workers/brand.invalid.d.ts +9 -0
- package/dist/workers/brand.invalid.d.ts.map +1 -0
- package/dist/workers/brand.invalid.js +19 -0
- package/dist/workers/brand.invalid.js.map +1 -0
- package/dist/workers/brand.js +67 -0
- package/dist/workers/brand.js.map +1 -0
- package/dist/workers/clusterTypes.d.ts +47 -0
- package/dist/workers/clusterTypes.d.ts.map +1 -0
- package/dist/workers/clusterTypes.js +57 -0
- package/dist/workers/clusterTypes.js.map +1 -0
- package/dist/workers/frontendWorker.d.ts +2 -0
- package/dist/workers/frontendWorker.d.ts.map +1 -0
- package/dist/workers/frontendWorker.js +90 -0
- package/dist/workers/frontendWorker.js.map +1 -0
- package/dist/workers/helloWorld.d.ts +2 -0
- package/dist/workers/helloWorld.d.ts.map +1 -0
- package/dist/workers/helloWorld.js +135 -0
- package/dist/workers/helloWorld.js.map +1 -0
- package/dist/workers/matterWorker.d.ts +2 -0
- package/dist/workers/matterWorker.d.ts.map +1 -0
- package/dist/workers/matterWorker.js +104 -0
- package/dist/workers/matterWorker.js.map +1 -0
- package/dist/workers/matterbridgeWorker.d.ts +2 -0
- package/dist/workers/matterbridgeWorker.d.ts.map +1 -0
- package/dist/workers/matterbridgeWorker.js +75 -0
- package/dist/workers/matterbridgeWorker.js.map +1 -0
- package/dist/workers/messageLab.d.ts +134 -0
- package/dist/workers/messageLab.d.ts.map +1 -0
- package/dist/workers/messageLab.js +129 -0
- package/dist/workers/messageLab.js.map +1 -0
- package/dist/workers/testWorker.d.ts +2 -0
- package/dist/workers/testWorker.d.ts.map +1 -0
- package/dist/workers/testWorker.js +45 -0
- package/dist/workers/testWorker.js.map +1 -0
- package/dist/workers/usage.d.ts +19 -0
- package/dist/workers/usage.d.ts.map +1 -0
- package/dist/workers/usage.js +140 -0
- package/dist/workers/usage.js.map +1 -0
- package/dist/workers/workerManager.d.ts +115 -0
- package/dist/workers/workerManager.d.ts.map +1 -0
- package/dist/workers/workerManager.js +464 -0
- package/dist/workers/workerManager.js.map +1 -0
- package/dist/workers/workerServer.d.ts +126 -0
- package/dist/workers/workerServer.d.ts.map +1 -0
- package/dist/workers/workerServer.js +340 -0
- package/dist/workers/workerServer.js.map +1 -0
- package/dist/workers/workerTypes.d.ts +23 -0
- package/dist/workers/workerTypes.d.ts.map +1 -0
- package/dist/workers/workerTypes.js +3 -0
- package/dist/workers/workerTypes.js.map +1 -0
- package/package.json +120 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/** Types of worker source */
|
|
2
|
+
export type WorkerSrcType = 'manager' | 'matterbridge' | 'plugins' | 'devices' | 'frontend' | 'matter' | 'platform' | 'spawn' | 'updates';
|
|
3
|
+
/** Types of worker destination */
|
|
4
|
+
export type WorkerDstType = 'manager' | 'matterbridge' | 'plugins' | 'devices' | 'frontend' | 'matter' | 'platform' | 'spawn' | 'updates' | 'all';
|
|
5
|
+
/** Normalized message request structure */
|
|
6
|
+
type NormalizeRequest<T> = T extends {
|
|
7
|
+
params: infer P;
|
|
8
|
+
} ? ([P] extends [undefined] ? {
|
|
9
|
+
params?: undefined;
|
|
10
|
+
} : {
|
|
11
|
+
params: P;
|
|
12
|
+
}) : Record<never, never>;
|
|
13
|
+
/** Normalized message response structure that guarantees a successful result */
|
|
14
|
+
type NormalizeResponseSuccess<T> = T & {
|
|
15
|
+
error?: never;
|
|
16
|
+
};
|
|
17
|
+
/** Normalized message response structure that contains an error */
|
|
18
|
+
type NormalizeResponseError<T> = {
|
|
19
|
+
error: string;
|
|
20
|
+
} & {
|
|
21
|
+
[K in keyof T]?: never;
|
|
22
|
+
};
|
|
23
|
+
/** Normalized message response structure */
|
|
24
|
+
type NormalizeResponse<T> = NormalizeResponseSuccess<T> | NormalizeResponseError<T>;
|
|
25
|
+
/** Message request structure with id, timestamp, src and dst */
|
|
26
|
+
type WorkerMessageRequestMap = {
|
|
27
|
+
[K in keyof WorkerMessageTypes]: {
|
|
28
|
+
type: K;
|
|
29
|
+
id?: number;
|
|
30
|
+
timestamp?: number;
|
|
31
|
+
src: WorkerSrcType;
|
|
32
|
+
dst: WorkerDstType;
|
|
33
|
+
} & NormalizeRequest<WorkerMessageTypes[K]['request']>;
|
|
34
|
+
};
|
|
35
|
+
/** Message request structure with id, timestamp, src and dst */
|
|
36
|
+
export type WorkerMessageRequest<K extends keyof WorkerMessageTypes = keyof WorkerMessageTypes> = WorkerMessageRequestMap[K];
|
|
37
|
+
/** Message response structure with id, timestamp, elapsed, src and dst */
|
|
38
|
+
type WorkerMessageResponseMap = {
|
|
39
|
+
[K in keyof WorkerMessageTypes]: {
|
|
40
|
+
type: K;
|
|
41
|
+
id?: number;
|
|
42
|
+
timestamp?: number;
|
|
43
|
+
elapsed?: number;
|
|
44
|
+
src: WorkerSrcType;
|
|
45
|
+
dst: WorkerDstType;
|
|
46
|
+
} & NormalizeResponse<WorkerMessageTypes[K]['response']>;
|
|
47
|
+
};
|
|
48
|
+
/** Message response structure with id, timestamp, elapsed, src and dst */
|
|
49
|
+
export type WorkerMessageResponse<K extends keyof WorkerMessageTypes = keyof WorkerMessageTypes> = WorkerMessageResponseMap[K];
|
|
50
|
+
/** Message response success structure that guarantees a successful result */
|
|
51
|
+
type WorkerMessageResponseSuccessMap = {
|
|
52
|
+
[K in keyof WorkerMessageTypes]: {
|
|
53
|
+
type: K;
|
|
54
|
+
id?: number;
|
|
55
|
+
timestamp?: number;
|
|
56
|
+
elapsed?: number;
|
|
57
|
+
src: WorkerSrcType;
|
|
58
|
+
dst: WorkerDstType;
|
|
59
|
+
} & NormalizeResponseSuccess<WorkerMessageTypes[K]['response']>;
|
|
60
|
+
};
|
|
61
|
+
/** Message response success structure with id, timestamp, elapsed, src and dst */
|
|
62
|
+
export type WorkerMessageResponseSuccess<K extends keyof WorkerMessageTypes = keyof WorkerMessageTypes> = WorkerMessageResponseSuccessMap[K];
|
|
63
|
+
/** Union type for WorkerMessageRequest and WorkerMessageResponse */
|
|
64
|
+
export type WorkerMessage<K extends keyof WorkerMessageTypes = keyof WorkerMessageTypes> = WorkerMessageRequest<K> | WorkerMessageResponse<K>;
|
|
65
|
+
/** Map of all worker message types with their request and response structures */
|
|
66
|
+
export type WorkerMessageTypes = {
|
|
67
|
+
jest: {
|
|
68
|
+
request: {
|
|
69
|
+
params: {
|
|
70
|
+
userId: number;
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
response: {
|
|
74
|
+
result: {
|
|
75
|
+
name: string;
|
|
76
|
+
age: number;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
jest_simple: {
|
|
81
|
+
request: {
|
|
82
|
+
params: undefined;
|
|
83
|
+
};
|
|
84
|
+
response: {
|
|
85
|
+
result: {
|
|
86
|
+
success: true;
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Generate a pseudo-random identifier between 1,000,000 and 9,999,999.
|
|
93
|
+
*
|
|
94
|
+
* @returns {number} A seven-digit identifier.
|
|
95
|
+
*/
|
|
96
|
+
export declare function getUniqueId(): number;
|
|
97
|
+
/**
|
|
98
|
+
* Send a request message from the worker implementation.
|
|
99
|
+
*
|
|
100
|
+
* @template K
|
|
101
|
+
* @param {WorkerMessageRequest<K>} msg The request message to send.
|
|
102
|
+
* @returns {void}
|
|
103
|
+
*/
|
|
104
|
+
export declare function request<K extends keyof WorkerMessageTypes>(msg: WorkerMessageRequest<K>): void;
|
|
105
|
+
/**
|
|
106
|
+
* Send a response message from the worker implementation.
|
|
107
|
+
*
|
|
108
|
+
* @template K
|
|
109
|
+
* @param {WorkerMessageResponse<K>} msg The response message to send.
|
|
110
|
+
* @returns {void}
|
|
111
|
+
*/
|
|
112
|
+
export declare function respond<K extends keyof WorkerMessageTypes>(msg: WorkerMessageResponse<K>): void;
|
|
113
|
+
/**
|
|
114
|
+
* Type guard to verify a value matches the WorkerMessageRequest structure.
|
|
115
|
+
*
|
|
116
|
+
* @param {unknown} value Value to test.
|
|
117
|
+
* @returns {value is WorkerMessageRequest} True when the value looks like a request message.
|
|
118
|
+
*/
|
|
119
|
+
export declare function isWorkerRequest(value: unknown): value is WorkerMessageRequest;
|
|
120
|
+
/**
|
|
121
|
+
* Type guard to verify a value matches the WorkerMessageResponse structure.
|
|
122
|
+
*
|
|
123
|
+
* @param {unknown} value Value to test.
|
|
124
|
+
* @returns {value is WorkerMessageResponse} True when the value looks like a response message.
|
|
125
|
+
*/
|
|
126
|
+
export declare function isWorkerResponse(value: unknown): value is WorkerMessageResponse;
|
|
127
|
+
/**
|
|
128
|
+
* Example handler function demonstrating type guards.
|
|
129
|
+
*
|
|
130
|
+
* @param {WorkerMessage} msg The incoming worker message.
|
|
131
|
+
*/
|
|
132
|
+
export declare function handler(msg: WorkerMessage): void;
|
|
133
|
+
export {};
|
|
134
|
+
//# sourceMappingURL=messageLab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageLab.d.ts","sourceRoot":"","sources":["../../src/workers/messageLab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a pseudo-random identifier between 1,000,000 and 9,999,999.
|
|
3
|
+
*
|
|
4
|
+
* @returns {number} A seven-digit identifier.
|
|
5
|
+
*/
|
|
6
|
+
export function getUniqueId() {
|
|
7
|
+
return Math.floor(Math.random() * 900000000) + 100000000;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Send a request message from the worker implementation.
|
|
11
|
+
*
|
|
12
|
+
* @template K
|
|
13
|
+
* @param {WorkerMessageRequest<K>} msg The request message to send.
|
|
14
|
+
* @returns {void}
|
|
15
|
+
*/
|
|
16
|
+
export function request(msg) {
|
|
17
|
+
if (msg.id === undefined) {
|
|
18
|
+
msg.id = getUniqueId();
|
|
19
|
+
}
|
|
20
|
+
if (msg.timestamp === undefined) {
|
|
21
|
+
msg.timestamp = Date.now();
|
|
22
|
+
}
|
|
23
|
+
// to complete
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Send a response message from the worker implementation.
|
|
27
|
+
*
|
|
28
|
+
* @template K
|
|
29
|
+
* @param {WorkerMessageResponse<K>} msg The response message to send.
|
|
30
|
+
* @returns {void}
|
|
31
|
+
*/
|
|
32
|
+
export function respond(msg) {
|
|
33
|
+
if (msg.timestamp) {
|
|
34
|
+
msg.elapsed = Date.now() - msg.timestamp;
|
|
35
|
+
}
|
|
36
|
+
msg.timestamp = Date.now();
|
|
37
|
+
// to complete
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Type guard to verify a value matches the WorkerMessageRequest structure.
|
|
41
|
+
*
|
|
42
|
+
* @param {unknown} value Value to test.
|
|
43
|
+
* @returns {value is WorkerMessageRequest} True when the value looks like a request message.
|
|
44
|
+
*/
|
|
45
|
+
export function isWorkerRequest(value) {
|
|
46
|
+
if (typeof value !== 'object' || value === null) {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
const message = value;
|
|
50
|
+
return (typeof message.type === 'string' &&
|
|
51
|
+
typeof message.src === 'string' &&
|
|
52
|
+
typeof message.dst === 'string' &&
|
|
53
|
+
typeof message.id === 'number' &&
|
|
54
|
+
typeof message.timestamp === 'number');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Type guard to verify a value matches the WorkerMessageResponse structure.
|
|
58
|
+
*
|
|
59
|
+
* @param {unknown} value Value to test.
|
|
60
|
+
* @returns {value is WorkerMessageResponse} True when the value looks like a response message.
|
|
61
|
+
*/
|
|
62
|
+
export function isWorkerResponse(value) {
|
|
63
|
+
if (typeof value !== 'object' || value === null) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const message = value;
|
|
67
|
+
if (typeof message.type !== 'string' ||
|
|
68
|
+
typeof message.src !== 'string' ||
|
|
69
|
+
typeof message.dst !== 'string' ||
|
|
70
|
+
typeof message.id !== 'number' ||
|
|
71
|
+
typeof message.timestamp !== 'number') {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
const hasError = typeof message.error === 'string';
|
|
75
|
+
const hasResult = message.result !== undefined;
|
|
76
|
+
return hasError !== hasResult;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Example handler function demonstrating type guards.
|
|
80
|
+
*
|
|
81
|
+
* @param {WorkerMessage} msg The incoming worker message.
|
|
82
|
+
*/
|
|
83
|
+
export function handler(msg) {
|
|
84
|
+
if (isWorkerRequest(msg)) {
|
|
85
|
+
switch (msg.type) {
|
|
86
|
+
case 'jest':
|
|
87
|
+
// msg.params is inferred as '{ userId: number }' here
|
|
88
|
+
if (msg.params.userId === 1) {
|
|
89
|
+
respond({ type: 'jest', src: msg.src, dst: msg.dst, id: msg.id, timestamp: msg.timestamp, result: { name: 'Alice', age: 30 } });
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
respond({ type: 'jest', src: msg.src, dst: msg.dst, id: msg.id, timestamp: msg.timestamp, error: 'User not found' });
|
|
93
|
+
}
|
|
94
|
+
respond({ type: 'jest', src: msg.src, dst: msg.dst, id: msg.id, timestamp: msg.timestamp, result: { name: 'Test', age: 42 } });
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Correct request example usage
|
|
100
|
+
request({ type: 'jest', src: 'frontend', dst: 'manager', params: { userId: 1 } });
|
|
101
|
+
request({ type: 'jest_simple', src: 'frontend', dst: 'manager' });
|
|
102
|
+
// Negative request type assertions
|
|
103
|
+
// @ts-expect-error unknown message type value
|
|
104
|
+
request({ type: 'unknown', src: 'frontend', dst: 'manager' });
|
|
105
|
+
// @ts-expect-error missing required params for jest request
|
|
106
|
+
request({ type: 'jest', src: 'frontend', dst: 'manager' });
|
|
107
|
+
// @ts-expect-error params.userId must be a number
|
|
108
|
+
request({ type: 'jest', src: 'frontend', dst: 'manager', params: { userId: '1' } });
|
|
109
|
+
// @ts-expect-error params must be undefined for jest_simple request
|
|
110
|
+
request({ type: 'jest_simple', src: 'frontend', dst: 'manager', params: {} });
|
|
111
|
+
// Correct response example usage
|
|
112
|
+
respond({ type: 'jest', src: 'manager', dst: 'frontend', result: { name: 'Test', age: 42 } });
|
|
113
|
+
respond({ type: 'jest', src: 'manager', dst: 'frontend', error: 'Not found' });
|
|
114
|
+
respond({ type: 'jest_simple', src: 'manager', dst: 'frontend', result: { success: true } });
|
|
115
|
+
respond({ type: 'jest_simple', src: 'manager', dst: 'frontend', error: 'Failed' });
|
|
116
|
+
// Negative response type assertions
|
|
117
|
+
// @ts-expect-error response.result.logLevel has wrong type
|
|
118
|
+
respond({ type: 'unknown', src: 'manager', dst: 'frontend', result: { logLevel: 'info' } });
|
|
119
|
+
// @ts-expect-error response.error must be a string when provided
|
|
120
|
+
respond({ type: 'jest', src: 'manager', dst: 'frontend', error: 42 });
|
|
121
|
+
// @ts-expect-error response.result.age must be a number
|
|
122
|
+
respond({ type: 'jest', src: 'manager', dst: 'frontend', result: { name: 'Test', age: '42' } });
|
|
123
|
+
// @ts-expect-error response.result.name must be a string
|
|
124
|
+
respond({ type: 'jest', src: 'manager', dst: 'frontend', result: { name: 123, age: 42 } });
|
|
125
|
+
// @ts-expect-error response.error must be a string when provided
|
|
126
|
+
respond({ type: 'jest', src: 'manager', dst: 'frontend', error: 42 });
|
|
127
|
+
// @ts-expect-error result with error is not allowed
|
|
128
|
+
respond({ type: 'jest', src: 'manager', dst: 'frontend', result: { name: 'Test', age: 42 }, error: 'Not found' });
|
|
129
|
+
//# sourceMappingURL=messageLab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageLab.js","sourceRoot":"","sources":["../../src/workers/messageLab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testWorker.d.ts","sourceRoot":"","sources":["../../src/workers/testWorker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// testWorker.ts
|
|
2
|
+
// Worker entry for test logic
|
|
3
|
+
import { parentPort, workerData } from 'node:worker_threads';
|
|
4
|
+
// Third-party modules
|
|
5
|
+
import { debugStringify } from 'node-ansi-logger';
|
|
6
|
+
import { WorkerServer } from './workerServer.js';
|
|
7
|
+
const server = new WorkerServer('TestWorker', parentPort, workerData);
|
|
8
|
+
server.on('control_message', async (msg) => {
|
|
9
|
+
// Handle control messages from manager if needed
|
|
10
|
+
if (msg.type !== 'ping')
|
|
11
|
+
server.log.debug(`${server.name} received control message: ${debugStringify(msg)}`);
|
|
12
|
+
switch (msg.type) {
|
|
13
|
+
case 'init':
|
|
14
|
+
// Initialization logic if needed
|
|
15
|
+
server.parentPost({ ...msg, success: true });
|
|
16
|
+
break;
|
|
17
|
+
case 'ping':
|
|
18
|
+
// Ping handled in WorkerServer
|
|
19
|
+
break;
|
|
20
|
+
case 'exit':
|
|
21
|
+
// Cleanup logic if needed
|
|
22
|
+
server.parentPost({ ...msg, success: true });
|
|
23
|
+
server.exit(0);
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
server.on('manager_message', async (msg) => {
|
|
28
|
+
// Handle direct messages from manager if needed
|
|
29
|
+
server.log.debug(`${server.name} received manager message: ${debugStringify(msg)}`);
|
|
30
|
+
switch (msg.type) {
|
|
31
|
+
default:
|
|
32
|
+
// Handle unknown message types
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
server.on('broadcast_message', (msg) => {
|
|
37
|
+
// Handle broadcast messages from other workers if needed
|
|
38
|
+
server.log.debug(`${server.name} received broadcast message: ${debugStringify(msg)}`);
|
|
39
|
+
switch (msg.type) {
|
|
40
|
+
default:
|
|
41
|
+
// Handle unknown message types
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=testWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testWorker.js","sourceRoot":"","sources":["../../src/workers/testWorker.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,8BAA8B;AAE9B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE7D,sBAAsB;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,YAAY,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAEtE,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACzC,iDAAiD;IACjD,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;QAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,8BAA8B,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7G,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,MAAM;YACT,iCAAiC;YACjC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM;QACR,KAAK,MAAM;YACT,+BAA+B;YAC/B,MAAM;QACR,KAAK,MAAM;YACT,0BAA0B;YAC1B,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,MAAM;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IACzC,gDAAgD;IAChD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,8BAA8B,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpF,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB;YACE,+BAA+B;YAC/B,MAAM;IACV,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACrC,yDAAyD;IACzD,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,gCAAgC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtF,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB;YACE,+BAA+B;YAC/B,MAAM;IACV,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Stress Test (malloc/free simulation).
|
|
3
|
+
*
|
|
4
|
+
* The allocated buffer stays in the rss space (not in the heap).
|
|
5
|
+
* As such, it is not tracked by V8's heap statistics.
|
|
6
|
+
* A call to global.gc() is needed to trigger garbage collection and free the memory.
|
|
7
|
+
* This requires Node.js to be started with the --expose-gc flag.
|
|
8
|
+
* If not started manually, the memory will be freed when the gc is called.
|
|
9
|
+
*/
|
|
10
|
+
export declare function mallocStressTest(): void;
|
|
11
|
+
/**
|
|
12
|
+
* Read/Write Stress Test with readFileSync and writeFileSync
|
|
13
|
+
*/
|
|
14
|
+
export declare function readWriteStressTest(): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* CPU Stress Test (simulated work)
|
|
17
|
+
*/
|
|
18
|
+
export declare function cpuStressTest(): void;
|
|
19
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/workers/usage.ts"],"names":[],"mappings":"AAwCA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,SAe/B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,kBAmCxC;AAED;;GAEG;AACH,wBAAgB,aAAa,SAgC5B"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
// Use: node --inspect=0.0.0.0:9229 --trace-gc --expose-gc dist/workers/usage --debug --trace --loader --verbose
|
|
3
|
+
if (process.argv.includes('--loader') || process.argv.includes('-loader'))
|
|
4
|
+
console.log('\u001B[32mUsage loaded.\u001B[40;0m');
|
|
5
|
+
// import { Logger, LogLevel as MatterLogLevel, LogFormat as MatterLogFormat } from '@matter/general';
|
|
6
|
+
// import { BridgedDeviceBasicInformation } from '@matter/types/clusters/bridged-device-basic-information';
|
|
7
|
+
// import { PowerSource } from '@matter/types/clusters/power-source';
|
|
8
|
+
// import { FabricAction } from '@matter/protocol';
|
|
9
|
+
import { Tracker, Inspector } from '@matterbridge/utils';
|
|
10
|
+
// Logger.format = MatterLogFormat.ANSI;
|
|
11
|
+
// Logger.level = MatterLogLevel.INFO;
|
|
12
|
+
// Logger.get('UsageWorker').info('Usage worker started.');
|
|
13
|
+
// Logger.get('UsageWorker').info('Usage worker started.', BridgedDeviceBasicInformation.Cluster.id, PowerSource.Cluster.id);
|
|
14
|
+
const tracker = new Tracker('Tracker', true, true);
|
|
15
|
+
tracker.start();
|
|
16
|
+
const inspector = new Inspector('Inspector', true, true);
|
|
17
|
+
await inspector.start();
|
|
18
|
+
setTimeout(() => {
|
|
19
|
+
tracker.resetPeaks();
|
|
20
|
+
}, 30000); // Reset peaks after 30 seconds
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
// cpuStressTest();
|
|
23
|
+
// mallocStressTest();
|
|
24
|
+
// readWriteStressTest();
|
|
25
|
+
}, 60000); // After 1 minute
|
|
26
|
+
setInterval(() => {
|
|
27
|
+
// cpuStressTest();
|
|
28
|
+
// mallocStressTest();
|
|
29
|
+
// readWriteStressTest();
|
|
30
|
+
}, 60000); // Each minute
|
|
31
|
+
/**
|
|
32
|
+
* Memory Stress Test (malloc/free simulation).
|
|
33
|
+
*
|
|
34
|
+
* The allocated buffer stays in the rss space (not in the heap).
|
|
35
|
+
* As such, it is not tracked by V8's heap statistics.
|
|
36
|
+
* A call to global.gc() is needed to trigger garbage collection and free the memory.
|
|
37
|
+
* This requires Node.js to be started with the --expose-gc flag.
|
|
38
|
+
* If not started manually, the memory will be freed when the gc is called.
|
|
39
|
+
*/
|
|
40
|
+
export function mallocStressTest() {
|
|
41
|
+
const allocations = [];
|
|
42
|
+
for (let i = 0; i < 50; i++) {
|
|
43
|
+
// Allocate 10MB chunks
|
|
44
|
+
const buffer = Buffer.alloc(10 * 1024 * 1024, 'a');
|
|
45
|
+
allocations.push(buffer);
|
|
46
|
+
console.log(`Allocated ${(i + 1) * 10} MB`);
|
|
47
|
+
}
|
|
48
|
+
// Free memory after some time
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
allocations.length = 0; // Clear references
|
|
51
|
+
console.log('Freed allocated memory');
|
|
52
|
+
tracker.runGarbageCollector('minor');
|
|
53
|
+
tracker.runGarbageCollector('major');
|
|
54
|
+
}, 30000); // Free after 30 seconds
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Read/Write Stress Test with readFileSync and writeFileSync
|
|
58
|
+
*/
|
|
59
|
+
export async function readWriteStressTest() {
|
|
60
|
+
const fs = await import('node:fs');
|
|
61
|
+
const path = await import('node:path');
|
|
62
|
+
const os = await import('node:os');
|
|
63
|
+
const filePath = path.join(os.tmpdir(), 'tempfile.dat');
|
|
64
|
+
const fd = fs.openSync(filePath, 'w');
|
|
65
|
+
const chunk = 'x'.repeat(64 * 1024); // small string stays in heap
|
|
66
|
+
const iterations = Math.ceil((50 * 1024 * 1024) / chunk.length);
|
|
67
|
+
for (let i = 0; i < iterations; i++) {
|
|
68
|
+
fs.writeSync(fd, chunk);
|
|
69
|
+
}
|
|
70
|
+
fs.closeSync(fd);
|
|
71
|
+
console.log('Wrote 50 MB');
|
|
72
|
+
const readFd = fs.openSync(filePath, 'r');
|
|
73
|
+
const buf = new Uint8Array(chunk.length); // Node accepts any ArrayBufferView
|
|
74
|
+
let total = 0;
|
|
75
|
+
while (true) {
|
|
76
|
+
const bytes = fs.readSync(readFd, buf);
|
|
77
|
+
if (bytes === 0)
|
|
78
|
+
break;
|
|
79
|
+
total += bytes;
|
|
80
|
+
// optionally process buf here
|
|
81
|
+
}
|
|
82
|
+
fs.closeSync(readFd);
|
|
83
|
+
console.log(`Read ${total / (1024 * 1024)} MB`);
|
|
84
|
+
fs.unlinkSync(filePath);
|
|
85
|
+
// Free memory after some time
|
|
86
|
+
setTimeout(() => {
|
|
87
|
+
tracker.runGarbageCollector('minor');
|
|
88
|
+
tracker.runGarbageCollector('major');
|
|
89
|
+
}, 30000); // Free after 30 seconds
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* CPU Stress Test (simulated work)
|
|
93
|
+
*/
|
|
94
|
+
export function cpuStressTest() {
|
|
95
|
+
// CPU-intensive work: prime number calculation
|
|
96
|
+
const startTime = Date.now();
|
|
97
|
+
let _primeCount = 0;
|
|
98
|
+
// Calculate primes up to 10000 (CPU intensive)
|
|
99
|
+
for (let num = 2; num <= 10000; num++) {
|
|
100
|
+
let isPrime = true;
|
|
101
|
+
for (let i = 2; i <= Math.sqrt(num); i++) {
|
|
102
|
+
if (num % i === 0) {
|
|
103
|
+
isPrime = false;
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (isPrime)
|
|
108
|
+
_primeCount++;
|
|
109
|
+
}
|
|
110
|
+
// More CPU work: array sorting
|
|
111
|
+
const largeArray = Array.from({ length: 5000 }, () => Math.random() * 1000000);
|
|
112
|
+
largeArray.sort((a, b) => b - a); // Reverse sort
|
|
113
|
+
// Hash calculation simulation
|
|
114
|
+
let hash = 0;
|
|
115
|
+
const str = JSON.stringify(largeArray.slice(0, 100));
|
|
116
|
+
for (let i = 0; i < str.length; i++) {
|
|
117
|
+
const char = str.charCodeAt(i);
|
|
118
|
+
hash = (hash << 5) - hash + char;
|
|
119
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
120
|
+
}
|
|
121
|
+
const _duration = Date.now() - startTime;
|
|
122
|
+
console.log(`CPU work completed: Found ${_primeCount} primes, sorted ${largeArray.length} numbers, hash: ${hash}, duration: ${_duration}ms`);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Graceful shutdown
|
|
126
|
+
*/
|
|
127
|
+
async function shutdown() {
|
|
128
|
+
console.log('Stopping inspector...');
|
|
129
|
+
await inspector.stop();
|
|
130
|
+
console.log('Inspector stopped.');
|
|
131
|
+
console.log('Stopping tracker...');
|
|
132
|
+
tracker.stop();
|
|
133
|
+
console.log('Tracker stopped.');
|
|
134
|
+
console.log('Usage worker exiting.');
|
|
135
|
+
// eslint-disable-next-line n/no-process-exit
|
|
136
|
+
process.exit(0);
|
|
137
|
+
}
|
|
138
|
+
process.on('SIGINT', shutdown);
|
|
139
|
+
process.on('SIGTERM', shutdown);
|
|
140
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/workers/usage.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,kHAAkH;AAElH,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IAAE,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AAE9H,sGAAsG;AACtG,2GAA2G;AAC3G,qEAAqE;AACrE,mDAAmD;AAEnD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEzD,wCAAwC;AACxC,sCAAsC;AACtC,2DAA2D;AAC3D,6HAA6H;AAE7H,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnD,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACzD,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAExB,UAAU,CAAC,GAAG,EAAE;IACd,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,+BAA+B;AAE1C,UAAU,CAAC,GAAG,EAAE;IACd,mBAAmB;IACnB,sBAAsB;IACtB,yBAAyB;AAC3B,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB;AAE5B,WAAW,CAAC,GAAG,EAAE;IACf,mBAAmB;IACnB,sBAAsB;IACtB,yBAAyB;AAC3B,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,cAAc;AAEzB;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QACnD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IACD,8BAA8B;IAC9B,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,mBAAmB;QAC3C,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;IACxD,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEtC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,6BAA6B;IAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3B,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,mCAAmC;IAC7E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC;YAAE,MAAM;QACvB,KAAK,IAAI,KAAK,CAAC;QACf,8BAA8B;IAChC,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IAEhD,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxB,8BAA8B;IAC9B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,+CAA+C;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,+CAA+C;IAC/C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QACtC,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,OAAO,GAAG,KAAK,CAAC;gBAChB,MAAM;YACR,CAAC;QACH,CAAC;QACD,IAAI,OAAO;YAAE,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;IAC/E,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe;IAEjD,8BAA8B;IAC9B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QACjC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,2BAA2B;IACjD,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,6BAA6B,WAAW,mBAAmB,UAAU,CAAC,MAAM,mBAAmB,IAAI,eAAe,SAAS,IAAI,CAAC,CAAC;AAC/I,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,QAAQ;IACrB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAElC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IACrC,6CAA6C;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Worker } from 'node:worker_threads';
|
|
2
|
+
import { AnsiLogger } from 'node-ansi-logger';
|
|
3
|
+
import { WorkerMessage } from '@matterbridge/types';
|
|
4
|
+
import { ControlMessage } from './workerTypes.js';
|
|
5
|
+
/**
|
|
6
|
+
* Generates a unique ID with range 100000-999999.
|
|
7
|
+
*
|
|
8
|
+
* @returns {number} - A unique ID between 100000 and 999999
|
|
9
|
+
*/
|
|
10
|
+
export declare function getUniqueId(): number;
|
|
11
|
+
export declare class WorkerManager {
|
|
12
|
+
readonly log: AnsiLogger;
|
|
13
|
+
private readonly matterbridgeWorker;
|
|
14
|
+
private readonly frontendWorker;
|
|
15
|
+
private readonly matterWorker;
|
|
16
|
+
private readonly testWorker;
|
|
17
|
+
private readonly broadcastChannel;
|
|
18
|
+
private readonly matterbridgeChannel;
|
|
19
|
+
private readonly frontendChannel;
|
|
20
|
+
private readonly matterChannel;
|
|
21
|
+
private readonly testChannel;
|
|
22
|
+
private readonly pingIntervalTimeout;
|
|
23
|
+
private readonly pingIntervalMs;
|
|
24
|
+
private matterbridgePongTimeout;
|
|
25
|
+
private frontendPongTimeout;
|
|
26
|
+
private matterPongTimeout;
|
|
27
|
+
private testPongTimeout;
|
|
28
|
+
private readonly tracker;
|
|
29
|
+
/**
|
|
30
|
+
* Creates an instance of WorkerManager, initializing and managing multiple workers.
|
|
31
|
+
*
|
|
32
|
+
* @remarks
|
|
33
|
+
* The manager sets up communication channels between itself and the workers:
|
|
34
|
+
* - parentPort: manager <-> worker (control with ControlMessage)
|
|
35
|
+
* - port1: manager -> worker (direct communication for messages from manager to worker)
|
|
36
|
+
* - port2: manager <- worker (direct communication for messages from worker to manager)
|
|
37
|
+
* - broadcastChannel: broadcast messages to manager and all workers
|
|
38
|
+
*/
|
|
39
|
+
constructor();
|
|
40
|
+
/**
|
|
41
|
+
* Sends a control message to a specific worker.
|
|
42
|
+
*
|
|
43
|
+
* @param {Worker} worker - The worker to send the message to.
|
|
44
|
+
* @param {ControlMessage} msg - The message to send.
|
|
45
|
+
*/
|
|
46
|
+
postControlMessage(worker: Worker, msg: ControlMessage): void;
|
|
47
|
+
/**
|
|
48
|
+
* Sends a control message to all workers.
|
|
49
|
+
*
|
|
50
|
+
* @param {ControlMessage} msg - The message to send.
|
|
51
|
+
*/
|
|
52
|
+
postControlMessageToAll(msg: ControlMessage): void;
|
|
53
|
+
/**
|
|
54
|
+
* Initializes all workers.
|
|
55
|
+
*/
|
|
56
|
+
initializeAllWorkers(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Shuts down all workers gracefully.
|
|
59
|
+
*/
|
|
60
|
+
shutdownAllWorkers(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Sends a message to the Matterbridge worker via the port 1 of the established MessageChannel.
|
|
63
|
+
*
|
|
64
|
+
* @param {MatterbridgeWorkerMessage} message - The message to be posted to the Matterbridge worker.
|
|
65
|
+
*/
|
|
66
|
+
postToMatterbridgeWorker(message: WorkerMessage): void;
|
|
67
|
+
/**
|
|
68
|
+
* Sends a message to the Frontend worker via the port 1 of the established MessageChannel.
|
|
69
|
+
*
|
|
70
|
+
* @param {FrontendWorkerMessage} message - The message to be posted to the Frontend worker.
|
|
71
|
+
*/
|
|
72
|
+
postToFrontendWorker(message: WorkerMessage): void;
|
|
73
|
+
/**
|
|
74
|
+
* Sends a message to the Plugin worker via the port 1 of the established MessageChannel.
|
|
75
|
+
*
|
|
76
|
+
* @param {PluginWorkerMessage} message - The message to be posted to the Plugin worker.
|
|
77
|
+
*/
|
|
78
|
+
postToMatterWorker(message: WorkerMessage): void;
|
|
79
|
+
/**
|
|
80
|
+
* Handle messages from matterbridgeWorker.
|
|
81
|
+
* It uses the port 2 of the matterbridge MessageChannel for direct communication.
|
|
82
|
+
*
|
|
83
|
+
* @param {MatterbridgeWorkerMessage} msg The message from the matterbridgeWorker
|
|
84
|
+
*/
|
|
85
|
+
matterbridgeMessageHandler(msg: WorkerMessage): void;
|
|
86
|
+
/**
|
|
87
|
+
* Handle messages from frontendWorker.
|
|
88
|
+
* It uses the port 2 of the frontend MessageChannel for direct communication.
|
|
89
|
+
*
|
|
90
|
+
* @param {FrontendWorkerMessage} msg The message from the frontendWorker
|
|
91
|
+
*/
|
|
92
|
+
frontendMessageHandler(msg: WorkerMessage): void;
|
|
93
|
+
/**
|
|
94
|
+
* Handle messages from matterWorker.
|
|
95
|
+
* It uses the port 2 of the matter MessageChannel for direct communication.
|
|
96
|
+
*
|
|
97
|
+
* @param {MatterWorkerMessage} msg The message from the matterWorker
|
|
98
|
+
*/
|
|
99
|
+
matterMessageHandler(msg: WorkerMessage): void;
|
|
100
|
+
/**
|
|
101
|
+
* Handle messages from testWorker.
|
|
102
|
+
* It uses the port 2 of the test MessageChannel for direct communication.
|
|
103
|
+
*
|
|
104
|
+
* @param {TestWorkerMessage} msg The message from the testWorker
|
|
105
|
+
*/
|
|
106
|
+
testMessageHandler(msg: WorkerMessage): void;
|
|
107
|
+
/**
|
|
108
|
+
* Handle broadcast messages from other workers.
|
|
109
|
+
* It uses the BroadcastChannel for communication.
|
|
110
|
+
*
|
|
111
|
+
* @param {MessageEvent} event The message event containing the broadcast message
|
|
112
|
+
*/
|
|
113
|
+
broadcastMessageHandler(event: MessageEvent): void;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=workerManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerManager.d.ts","sourceRoot":"","sources":["../../src/workers/workerManager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAoC,MAAM,EAAiB,MAAM,qBAAqB,CAAC;AAM9F,OAAO,EAAE,UAAU,EAAiD,MAAM,kBAAkB,CAAC;AAE7F,OAAO,EAAsB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIxE,OAAO,EAAc,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA2D9D;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAiCD,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,aAIT;IAEH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAC/C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAE7C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,uBAAuB,CAAyC;IACxE,OAAO,CAAC,mBAAmB,CAAyC;IACpE,OAAO,CAAC,iBAAiB,CAAyC;IAClE,OAAO,CAAC,eAAe,CAAyC;IAEhE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IAErE;;;;;;;;;OASG;;IAqKH;;;;;OAKG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,cAAc;IAItD;;;;OAIG;IACH,uBAAuB,CAAC,GAAG,EAAE,cAAc;IAO3C;;OAEG;IACH,oBAAoB;IAIpB;;OAEG;IACH,kBAAkB;IAUlB;;;;OAIG;IACH,wBAAwB,CAAC,OAAO,EAAE,aAAa;IAI/C;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,aAAa;IAI3C;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,aAAa;IAIzC;;;;;OAKG;IACH,0BAA0B,CAAC,GAAG,EAAE,aAAa;IAc7C;;;;;OAKG;IACH,sBAAsB,CAAC,GAAG,EAAE,aAAa;IAczC;;;;;OAKG;IACH,oBAAoB,CAAC,GAAG,EAAE,aAAa;IAcvC;;;;;OAKG;IACH,kBAAkB,CAAC,GAAG,EAAE,aAAa;IAQrC;;;;;OAKG;IACH,uBAAuB,CAAC,KAAK,EAAE,YAAY;CAI5C"}
|