@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.
Files changed (295) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +22 -0
  3. package/dist/cli.d.ts +29 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +268 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/cliEmitter.d.ts +50 -0
  8. package/dist/cliEmitter.d.ts.map +1 -0
  9. package/dist/cliEmitter.js +49 -0
  10. package/dist/cliEmitter.js.map +1 -0
  11. package/dist/cliHistory.d.ts +48 -0
  12. package/dist/cliHistory.d.ts.map +1 -0
  13. package/dist/cliHistory.js +826 -0
  14. package/dist/cliHistory.js.map +1 -0
  15. package/dist/clusters/export.d.ts +2 -0
  16. package/dist/clusters/export.d.ts.map +1 -0
  17. package/dist/clusters/export.js +3 -0
  18. package/dist/clusters/export.js.map +1 -0
  19. package/dist/crypto/attestationDecoder.d.ts +180 -0
  20. package/dist/crypto/attestationDecoder.d.ts.map +1 -0
  21. package/dist/crypto/attestationDecoder.js +176 -0
  22. package/dist/crypto/attestationDecoder.js.map +1 -0
  23. package/dist/crypto/declarationDecoder.d.ts +72 -0
  24. package/dist/crypto/declarationDecoder.d.ts.map +1 -0
  25. package/dist/crypto/declarationDecoder.js +241 -0
  26. package/dist/crypto/declarationDecoder.js.map +1 -0
  27. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts +9 -0
  28. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.d.ts.map +1 -0
  29. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js +120 -0
  30. package/dist/crypto/extract/342/200/220cert/342/200/220extensions.js.map +1 -0
  31. package/dist/crypto/read-extensions.d.ts +2 -0
  32. package/dist/crypto/read-extensions.d.ts.map +1 -0
  33. package/dist/crypto/read-extensions.js +81 -0
  34. package/dist/crypto/read-extensions.js.map +1 -0
  35. package/dist/crypto/testData.d.ts +31 -0
  36. package/dist/crypto/testData.d.ts.map +1 -0
  37. package/dist/crypto/testData.js +131 -0
  38. package/dist/crypto/testData.js.map +1 -0
  39. package/dist/crypto/walk-der.d.ts +2 -0
  40. package/dist/crypto/walk-der.d.ts.map +1 -0
  41. package/dist/crypto/walk-der.js +165 -0
  42. package/dist/crypto/walk-der.js.map +1 -0
  43. package/dist/deviceManager.d.ts +135 -0
  44. package/dist/deviceManager.d.ts.map +1 -0
  45. package/dist/deviceManager.js +270 -0
  46. package/dist/deviceManager.js.map +1 -0
  47. package/dist/devices/airConditioner.d.ts +98 -0
  48. package/dist/devices/airConditioner.d.ts.map +1 -0
  49. package/dist/devices/airConditioner.js +74 -0
  50. package/dist/devices/airConditioner.js.map +1 -0
  51. package/dist/devices/basicVideoPlayer.d.ts +88 -0
  52. package/dist/devices/basicVideoPlayer.d.ts.map +1 -0
  53. package/dist/devices/basicVideoPlayer.js +155 -0
  54. package/dist/devices/basicVideoPlayer.js.map +1 -0
  55. package/dist/devices/batteryStorage.d.ts +48 -0
  56. package/dist/devices/batteryStorage.d.ts.map +1 -0
  57. package/dist/devices/batteryStorage.js +75 -0
  58. package/dist/devices/batteryStorage.js.map +1 -0
  59. package/dist/devices/castingVideoPlayer.d.ts +79 -0
  60. package/dist/devices/castingVideoPlayer.d.ts.map +1 -0
  61. package/dist/devices/castingVideoPlayer.js +101 -0
  62. package/dist/devices/castingVideoPlayer.js.map +1 -0
  63. package/dist/devices/cooktop.d.ts +61 -0
  64. package/dist/devices/cooktop.d.ts.map +1 -0
  65. package/dist/devices/cooktop.js +77 -0
  66. package/dist/devices/cooktop.js.map +1 -0
  67. package/dist/devices/dishwasher.d.ts +71 -0
  68. package/dist/devices/dishwasher.d.ts.map +1 -0
  69. package/dist/devices/dishwasher.js +130 -0
  70. package/dist/devices/dishwasher.js.map +1 -0
  71. package/dist/devices/evse.d.ts +76 -0
  72. package/dist/devices/evse.d.ts.map +1 -0
  73. package/dist/devices/evse.js +156 -0
  74. package/dist/devices/evse.js.map +1 -0
  75. package/dist/devices/export.d.ts +19 -0
  76. package/dist/devices/export.d.ts.map +1 -0
  77. package/dist/devices/export.js +23 -0
  78. package/dist/devices/export.js.map +1 -0
  79. package/dist/devices/extractorHood.d.ts +46 -0
  80. package/dist/devices/extractorHood.d.ts.map +1 -0
  81. package/dist/devices/extractorHood.js +78 -0
  82. package/dist/devices/extractorHood.js.map +1 -0
  83. package/dist/devices/heatPump.d.ts +47 -0
  84. package/dist/devices/heatPump.d.ts.map +1 -0
  85. package/dist/devices/heatPump.js +84 -0
  86. package/dist/devices/heatPump.js.map +1 -0
  87. package/dist/devices/laundryDryer.d.ts +67 -0
  88. package/dist/devices/laundryDryer.d.ts.map +1 -0
  89. package/dist/devices/laundryDryer.js +106 -0
  90. package/dist/devices/laundryDryer.js.map +1 -0
  91. package/dist/devices/laundryWasher.d.ts +81 -0
  92. package/dist/devices/laundryWasher.d.ts.map +1 -0
  93. package/dist/devices/laundryWasher.js +147 -0
  94. package/dist/devices/laundryWasher.js.map +1 -0
  95. package/dist/devices/microwaveOven.d.ts +168 -0
  96. package/dist/devices/microwaveOven.d.ts.map +1 -0
  97. package/dist/devices/microwaveOven.js +179 -0
  98. package/dist/devices/microwaveOven.js.map +1 -0
  99. package/dist/devices/oven.d.ts +105 -0
  100. package/dist/devices/oven.d.ts.map +1 -0
  101. package/dist/devices/oven.js +190 -0
  102. package/dist/devices/oven.js.map +1 -0
  103. package/dist/devices/refrigerator.d.ts +118 -0
  104. package/dist/devices/refrigerator.d.ts.map +1 -0
  105. package/dist/devices/refrigerator.js +186 -0
  106. package/dist/devices/refrigerator.js.map +1 -0
  107. package/dist/devices/roboticVacuumCleaner.d.ts +112 -0
  108. package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
  109. package/dist/devices/roboticVacuumCleaner.js +268 -0
  110. package/dist/devices/roboticVacuumCleaner.js.map +1 -0
  111. package/dist/devices/solarPower.d.ts +40 -0
  112. package/dist/devices/solarPower.d.ts.map +1 -0
  113. package/dist/devices/solarPower.js +59 -0
  114. package/dist/devices/solarPower.js.map +1 -0
  115. package/dist/devices/speaker.d.ts +87 -0
  116. package/dist/devices/speaker.d.ts.map +1 -0
  117. package/dist/devices/speaker.js +120 -0
  118. package/dist/devices/speaker.js.map +1 -0
  119. package/dist/devices/temperatureControl.d.ts +166 -0
  120. package/dist/devices/temperatureControl.d.ts.map +1 -0
  121. package/dist/devices/temperatureControl.js +78 -0
  122. package/dist/devices/temperatureControl.js.map +1 -0
  123. package/dist/devices/waterHeater.d.ts +111 -0
  124. package/dist/devices/waterHeater.d.ts.map +1 -0
  125. package/dist/devices/waterHeater.js +166 -0
  126. package/dist/devices/waterHeater.js.map +1 -0
  127. package/dist/dgram/export.d.ts +2 -0
  128. package/dist/dgram/export.d.ts.map +1 -0
  129. package/dist/dgram/export.js +2 -0
  130. package/dist/dgram/export.js.map +1 -0
  131. package/dist/export.d.ts +32 -0
  132. package/dist/export.d.ts.map +1 -0
  133. package/dist/export.js +39 -0
  134. package/dist/export.js.map +1 -0
  135. package/dist/frontend.d.ts +248 -0
  136. package/dist/frontend.d.ts.map +1 -0
  137. package/dist/frontend.js +2605 -0
  138. package/dist/frontend.js.map +1 -0
  139. package/dist/helpers.d.ts +48 -0
  140. package/dist/helpers.d.ts.map +1 -0
  141. package/dist/helpers.js +161 -0
  142. package/dist/helpers.js.map +1 -0
  143. package/dist/jestutils/export.d.ts +2 -0
  144. package/dist/jestutils/export.d.ts.map +1 -0
  145. package/dist/jestutils/export.js +2 -0
  146. package/dist/jestutils/export.js.map +1 -0
  147. package/dist/jestutils/jestHelpers.d.ts +349 -0
  148. package/dist/jestutils/jestHelpers.d.ts.map +1 -0
  149. package/dist/jestutils/jestHelpers.js +980 -0
  150. package/dist/jestutils/jestHelpers.js.map +1 -0
  151. package/dist/matter/behaviors.d.ts +2 -0
  152. package/dist/matter/behaviors.d.ts.map +1 -0
  153. package/dist/matter/behaviors.js +3 -0
  154. package/dist/matter/behaviors.js.map +1 -0
  155. package/dist/matter/clusters.d.ts +2 -0
  156. package/dist/matter/clusters.d.ts.map +1 -0
  157. package/dist/matter/clusters.js +3 -0
  158. package/dist/matter/clusters.js.map +1 -0
  159. package/dist/matter/devices.d.ts +2 -0
  160. package/dist/matter/devices.d.ts.map +1 -0
  161. package/dist/matter/devices.js +3 -0
  162. package/dist/matter/devices.js.map +1 -0
  163. package/dist/matter/endpoints.d.ts +2 -0
  164. package/dist/matter/endpoints.d.ts.map +1 -0
  165. package/dist/matter/endpoints.js +3 -0
  166. package/dist/matter/endpoints.js.map +1 -0
  167. package/dist/matter/export.d.ts +4 -0
  168. package/dist/matter/export.d.ts.map +1 -0
  169. package/dist/matter/export.js +5 -0
  170. package/dist/matter/export.js.map +1 -0
  171. package/dist/matter/types.d.ts +2 -0
  172. package/dist/matter/types.d.ts.map +1 -0
  173. package/dist/matter/types.js +3 -0
  174. package/dist/matter/types.js.map +1 -0
  175. package/dist/matterNode.d.ts +341 -0
  176. package/dist/matterNode.d.ts.map +1 -0
  177. package/dist/matterNode.js +1329 -0
  178. package/dist/matterNode.js.map +1 -0
  179. package/dist/matterbridge.d.ts +544 -0
  180. package/dist/matterbridge.d.ts.map +1 -0
  181. package/dist/matterbridge.js +2880 -0
  182. package/dist/matterbridge.js.map +1 -0
  183. package/dist/matterbridgeAccessoryPlatform.d.ts +49 -0
  184. package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
  185. package/dist/matterbridgeAccessoryPlatform.js +80 -0
  186. package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
  187. package/dist/matterbridgeBehaviors.d.ts +2428 -0
  188. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  189. package/dist/matterbridgeBehaviors.js +620 -0
  190. package/dist/matterbridgeBehaviors.js.map +1 -0
  191. package/dist/matterbridgeDeviceTypes.d.ts +744 -0
  192. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  193. package/dist/matterbridgeDeviceTypes.js +1312 -0
  194. package/dist/matterbridgeDeviceTypes.js.map +1 -0
  195. package/dist/matterbridgeDynamicPlatform.d.ts +49 -0
  196. package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
  197. package/dist/matterbridgeDynamicPlatform.js +80 -0
  198. package/dist/matterbridgeDynamicPlatform.js.map +1 -0
  199. package/dist/matterbridgeEndpoint.d.ts +1548 -0
  200. package/dist/matterbridgeEndpoint.d.ts.map +1 -0
  201. package/dist/matterbridgeEndpoint.js +2883 -0
  202. package/dist/matterbridgeEndpoint.js.map +1 -0
  203. package/dist/matterbridgeEndpointHelpers.d.ts +1855 -0
  204. package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
  205. package/dist/matterbridgeEndpointHelpers.js +1270 -0
  206. package/dist/matterbridgeEndpointHelpers.js.map +1 -0
  207. package/dist/matterbridgeEndpointTypes.d.ts +172 -0
  208. package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
  209. package/dist/matterbridgeEndpointTypes.js +28 -0
  210. package/dist/matterbridgeEndpointTypes.js.map +1 -0
  211. package/dist/matterbridgePlatform.d.ts +520 -0
  212. package/dist/matterbridgePlatform.d.ts.map +1 -0
  213. package/dist/matterbridgePlatform.js +921 -0
  214. package/dist/matterbridgePlatform.js.map +1 -0
  215. package/dist/mb_coap.d.ts +24 -0
  216. package/dist/mb_coap.d.ts.map +1 -0
  217. package/dist/mb_coap.js +89 -0
  218. package/dist/mb_coap.js.map +1 -0
  219. package/dist/mb_health.d.ts +77 -0
  220. package/dist/mb_health.d.ts.map +1 -0
  221. package/dist/mb_health.js +147 -0
  222. package/dist/mb_health.js.map +1 -0
  223. package/dist/mb_mdns.d.ts +24 -0
  224. package/dist/mb_mdns.d.ts.map +1 -0
  225. package/dist/mb_mdns.js +285 -0
  226. package/dist/mb_mdns.js.map +1 -0
  227. package/dist/pluginManager.d.ts +388 -0
  228. package/dist/pluginManager.d.ts.map +1 -0
  229. package/dist/pluginManager.js +1574 -0
  230. package/dist/pluginManager.js.map +1 -0
  231. package/dist/spawn.d.ts +33 -0
  232. package/dist/spawn.d.ts.map +1 -0
  233. package/dist/spawn.js +165 -0
  234. package/dist/spawn.js.map +1 -0
  235. package/dist/utils/export.d.ts +2 -0
  236. package/dist/utils/export.d.ts.map +1 -0
  237. package/dist/utils/export.js +2 -0
  238. package/dist/utils/export.js.map +1 -0
  239. package/dist/workers/brand.d.ts +25 -0
  240. package/dist/workers/brand.d.ts.map +1 -0
  241. package/dist/workers/brand.extend.d.ts +10 -0
  242. package/dist/workers/brand.extend.d.ts.map +1 -0
  243. package/dist/workers/brand.extend.js +15 -0
  244. package/dist/workers/brand.extend.js.map +1 -0
  245. package/dist/workers/brand.invalid.d.ts +9 -0
  246. package/dist/workers/brand.invalid.d.ts.map +1 -0
  247. package/dist/workers/brand.invalid.js +19 -0
  248. package/dist/workers/brand.invalid.js.map +1 -0
  249. package/dist/workers/brand.js +67 -0
  250. package/dist/workers/brand.js.map +1 -0
  251. package/dist/workers/clusterTypes.d.ts +47 -0
  252. package/dist/workers/clusterTypes.d.ts.map +1 -0
  253. package/dist/workers/clusterTypes.js +57 -0
  254. package/dist/workers/clusterTypes.js.map +1 -0
  255. package/dist/workers/frontendWorker.d.ts +2 -0
  256. package/dist/workers/frontendWorker.d.ts.map +1 -0
  257. package/dist/workers/frontendWorker.js +90 -0
  258. package/dist/workers/frontendWorker.js.map +1 -0
  259. package/dist/workers/helloWorld.d.ts +2 -0
  260. package/dist/workers/helloWorld.d.ts.map +1 -0
  261. package/dist/workers/helloWorld.js +135 -0
  262. package/dist/workers/helloWorld.js.map +1 -0
  263. package/dist/workers/matterWorker.d.ts +2 -0
  264. package/dist/workers/matterWorker.d.ts.map +1 -0
  265. package/dist/workers/matterWorker.js +104 -0
  266. package/dist/workers/matterWorker.js.map +1 -0
  267. package/dist/workers/matterbridgeWorker.d.ts +2 -0
  268. package/dist/workers/matterbridgeWorker.d.ts.map +1 -0
  269. package/dist/workers/matterbridgeWorker.js +75 -0
  270. package/dist/workers/matterbridgeWorker.js.map +1 -0
  271. package/dist/workers/messageLab.d.ts +134 -0
  272. package/dist/workers/messageLab.d.ts.map +1 -0
  273. package/dist/workers/messageLab.js +129 -0
  274. package/dist/workers/messageLab.js.map +1 -0
  275. package/dist/workers/testWorker.d.ts +2 -0
  276. package/dist/workers/testWorker.d.ts.map +1 -0
  277. package/dist/workers/testWorker.js +45 -0
  278. package/dist/workers/testWorker.js.map +1 -0
  279. package/dist/workers/usage.d.ts +19 -0
  280. package/dist/workers/usage.d.ts.map +1 -0
  281. package/dist/workers/usage.js +140 -0
  282. package/dist/workers/usage.js.map +1 -0
  283. package/dist/workers/workerManager.d.ts +115 -0
  284. package/dist/workers/workerManager.d.ts.map +1 -0
  285. package/dist/workers/workerManager.js +464 -0
  286. package/dist/workers/workerManager.js.map +1 -0
  287. package/dist/workers/workerServer.d.ts +126 -0
  288. package/dist/workers/workerServer.d.ts.map +1 -0
  289. package/dist/workers/workerServer.js +340 -0
  290. package/dist/workers/workerServer.js.map +1 -0
  291. package/dist/workers/workerTypes.d.ts +23 -0
  292. package/dist/workers/workerTypes.d.ts.map +1 -0
  293. package/dist/workers/workerTypes.js +3 -0
  294. package/dist/workers/workerTypes.js.map +1 -0
  295. package/package.json +120 -0
@@ -0,0 +1,464 @@
1
+ // workersManager.ts
2
+ // Manages communication with matterbridge, frontend and plugin workers
3
+ /* eslint-disable n/no-process-exit */
4
+ import { MessageChannel, BroadcastChannel, Worker } from 'node:worker_threads';
5
+ import { fileURLToPath, pathToFileURL } from 'node:url';
6
+ import path from 'node:path';
7
+ import os from 'node:os';
8
+ import fs from 'node:fs';
9
+ import { AnsiLogger, debugStringify, or } from 'node-ansi-logger';
10
+ import { formatBytes, formatPercent, formatUptime, getInterfaceDetails, hasParameter, inspectError, Tracker } from '@matterbridge/utils';
11
+ const homeDir = path.join('.', '/temp');
12
+ const matterbridgePackageJson = JSON.parse(fs.readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
13
+ const frontendPackageJson = JSON.parse(fs.readFileSync(new URL('../../frontend/package.json', import.meta.url), 'utf8'));
14
+ const nic = getInterfaceDetails();
15
+ const matterbridge = {
16
+ rootDirectory: path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../'),
17
+ homeDirectory: homeDir,
18
+ matterbridgeDirectory: path.join(homeDir, '.matterbridge'),
19
+ matterbridgePluginDirectory: path.join(homeDir, 'Matterbridge'),
20
+ matterbridgeCertDirectory: path.join(homeDir, '.mattercert'),
21
+ globalModulesDirectory: path.join('.', 'node_modules'),
22
+ matterbridgeVersion: matterbridgePackageJson.version,
23
+ matterbridgeLatestVersion: matterbridgePackageJson.version,
24
+ matterbridgeDevVersion: matterbridgePackageJson.version,
25
+ frontendVersion: frontendPackageJson.version,
26
+ bridgeMode: 'bridge',
27
+ restartMode: '',
28
+ virtualMode: 'disabled',
29
+ profile: undefined,
30
+ logLevel: "info" /* LogLevel.INFO */,
31
+ fileLogger: false,
32
+ matterLogLevel: "info" /* LogLevel.INFO */,
33
+ matterFileLogger: false,
34
+ mdnsInterface: undefined,
35
+ ipv4Address: undefined,
36
+ ipv6Address: undefined,
37
+ port: undefined,
38
+ discriminator: undefined,
39
+ passcode: undefined,
40
+ shellySysUpdate: false,
41
+ shellyMainUpdate: false,
42
+ systemInformation: {
43
+ interfaceName: nic?.interfaceName || '',
44
+ macAddress: nic?.macAddress || '',
45
+ ipv4Address: nic?.ipv4Address || '',
46
+ ipv6Address: nic?.ipv6Address || '',
47
+ nodeVersion: process.versions.node,
48
+ hostname: os.hostname(),
49
+ user: os.userInfo().username,
50
+ osType: os.type(),
51
+ osRelease: os.release(),
52
+ osPlatform: os.platform(),
53
+ osArch: os.arch(),
54
+ totalMemory: formatBytes(os.totalmem()),
55
+ freeMemory: formatBytes(os.freemem()),
56
+ systemUptime: formatUptime(os.uptime()),
57
+ processUptime: formatUptime(Math.floor(process.uptime())),
58
+ cpuUsage: formatPercent(0),
59
+ processCpuUsage: formatPercent(0),
60
+ rss: formatBytes(process.memoryUsage().rss),
61
+ heapTotal: formatBytes(process.memoryUsage().heapTotal),
62
+ heapUsed: formatBytes(process.memoryUsage().heapUsed),
63
+ },
64
+ };
65
+ /**
66
+ * Generates a unique ID with range 100000-999999.
67
+ *
68
+ * @returns {number} - A unique ID between 100000 and 999999
69
+ */
70
+ export function getUniqueId() {
71
+ return Math.floor(Math.random() * (999999 - 100000 + 1)) + 100000; // random int between 100000 and 999999
72
+ }
73
+ /**
74
+ * Typed helper to create an ESM Worker.
75
+ *
76
+ * @param {string} relativePath - path to the worker file
77
+ * @param {WorkerData} workerData - data to be passed to the worker
78
+ * @returns {Worker} - the created Worker instance
79
+ *
80
+ * @remarks This function uses pathToFileURL to convert the relative path to a file URL,
81
+ * which is necessary for ESM modules. It also sets the worker type to 'module' and transfers
82
+ * the managerPort to the worker for inter-thread communication.
83
+ *
84
+ * WorkerData:
85
+ * - name: string - Name of the worker
86
+ * - managerPort: MessagePort - Port for communication with the manager
87
+ * - matterbridge: Matterbridge - Reference to the Matterbridge instance
88
+ * - debug?: boolean - Optional debug flag for logging
89
+ */
90
+ function createESMWorker(relativePath, workerData) {
91
+ const fileURL = pathToFileURL(path.resolve(relativePath));
92
+ const options = {
93
+ workerData,
94
+ transferList: [workerData.managerPort],
95
+ type: 'module',
96
+ name: workerData.name,
97
+ argv: process.argv.slice(2), // Pass command line arguments to worker
98
+ env: process.env, // Inherit environment variables
99
+ execArgv: [], // No execArgv to avoid issues with --inspect
100
+ };
101
+ return new Worker(fileURL, options);
102
+ }
103
+ export class WorkerManager {
104
+ log = new AnsiLogger({
105
+ logName: 'WorkerManager',
106
+ logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */,
107
+ logLevel: hasParameter('workerdebug') ? "debug" /* LogLevel.DEBUG */ : "info" /* LogLevel.INFO */,
108
+ });
109
+ matterbridgeWorker;
110
+ frontendWorker;
111
+ matterWorker;
112
+ testWorker;
113
+ broadcastChannel;
114
+ matterbridgeChannel;
115
+ frontendChannel;
116
+ matterChannel;
117
+ testChannel;
118
+ pingIntervalTimeout;
119
+ pingIntervalMs = 30000;
120
+ matterbridgePongTimeout = undefined;
121
+ frontendPongTimeout = undefined;
122
+ matterPongTimeout = undefined;
123
+ testPongTimeout = undefined;
124
+ tracker = new Tracker('WorkerManager', true, false);
125
+ /**
126
+ * Creates an instance of WorkerManager, initializing and managing multiple workers.
127
+ *
128
+ * @remarks
129
+ * The manager sets up communication channels between itself and the workers:
130
+ * - parentPort: manager <-> worker (control with ControlMessage)
131
+ * - port1: manager -> worker (direct communication for messages from manager to worker)
132
+ * - port2: manager <- worker (direct communication for messages from worker to manager)
133
+ * - broadcastChannel: broadcast messages to manager and all workers
134
+ */
135
+ constructor() {
136
+ // Setup logger color
137
+ this.log.logNameColor = or;
138
+ // Start Cpu Memory usage tracker
139
+ // @ts-expect-error accessing private property
140
+ this.tracker.log.logNameColor = this.log.logNameColor;
141
+ this.tracker.start();
142
+ // Setup broadcast channel
143
+ this.broadcastChannel = new BroadcastChannel('broadcast-channel');
144
+ this.broadcastChannel.onmessage = this.broadcastMessageHandler.bind(this);
145
+ // Create the matterbridge worker
146
+ this.matterbridgeChannel = new MessageChannel();
147
+ this.matterbridgeWorker = createESMWorker('./dist/workers/matterbridgeWorker.js', {
148
+ name: 'Matterbridge',
149
+ managerPort: this.matterbridgeChannel.port2,
150
+ matterbridge: matterbridge,
151
+ color: 115,
152
+ debug: hasParameter('workerdebug'),
153
+ });
154
+ this.matterbridgeChannel.port2.on('message', this.matterbridgeMessageHandler.bind(this));
155
+ this.matterbridgeWorker.on('error', (err) => {
156
+ inspectError(this.log, 'WorkerManager received error from MatterbridgeWorker', err);
157
+ });
158
+ this.matterbridgeWorker.on('exit', (code) => {
159
+ this.log.debug(`WorkerManager received exit from MatterbridgeWorker with code: ${code}`);
160
+ });
161
+ this.matterbridgeWorker.on('message', (msg) => {
162
+ // this.log.debug(`WorkerManager received message from MatterbridgeWorker: ${debugStringify(msg)}`);
163
+ if (msg.type === 'init') {
164
+ this.log.debug(`WorkerManager: MatterbridgeWorker initialized: ${debugStringify(msg)}`);
165
+ this.postToMatterbridgeWorker({ id: getUniqueId(), timestamp: Date.now(), type: 'matterbridge_initialize', src: 'manager', dst: 'matterbridge' });
166
+ }
167
+ else if (msg.type === 'pong') {
168
+ clearTimeout(this.matterbridgePongTimeout);
169
+ this.matterbridgePongTimeout = undefined;
170
+ }
171
+ else if (msg.type === 'exit') {
172
+ this.log.debug(`WorkerManager: MatterbridgeWorker exited: ${debugStringify(msg)}`);
173
+ this.matterbridgeChannel.port1.close();
174
+ this.matterbridgeChannel.port2.close();
175
+ }
176
+ });
177
+ // Create the frontend worker
178
+ this.frontendChannel = new MessageChannel();
179
+ this.frontendWorker = createESMWorker('./dist/workers/frontendWorker.js', {
180
+ name: 'Frontend',
181
+ managerPort: this.frontendChannel.port2,
182
+ matterbridge: matterbridge,
183
+ color: 97,
184
+ debug: hasParameter('workerdebug'),
185
+ });
186
+ this.frontendChannel.port2.on('message', this.frontendMessageHandler.bind(this));
187
+ this.frontendWorker.on('error', (err) => {
188
+ inspectError(this.log, 'WorkerManager received error from FrontendWorker', err);
189
+ });
190
+ this.frontendWorker.on('exit', (code) => {
191
+ this.log.debug(`WorkerManager received exit from FrontendWorker with code: ${code}`);
192
+ });
193
+ this.frontendWorker.on('message', (msg) => {
194
+ // this.log.debug(`WorkerManager received message from FrontendWorker: ${debugStringify(msg)}`);
195
+ if (msg.type === 'init') {
196
+ this.log.debug(`WorkerManager: FrontendWorker initialized: ${debugStringify(msg)}`);
197
+ this.postToFrontendWorker({ id: getUniqueId(), timestamp: Date.now(), type: 'frontend_start', src: 'manager', dst: 'frontend', params: { port: 8080 } });
198
+ }
199
+ else if (msg.type === 'pong') {
200
+ clearTimeout(this.frontendPongTimeout);
201
+ this.frontendPongTimeout = undefined;
202
+ }
203
+ else if (msg.type === 'exit') {
204
+ this.log.debug(`WorkerManager: FrontendWorker exited: ${debugStringify(msg)}`);
205
+ this.frontendChannel.port1.close();
206
+ this.frontendChannel.port2.close();
207
+ }
208
+ });
209
+ // Create the matter worker
210
+ this.matterChannel = new MessageChannel();
211
+ this.matterWorker = createESMWorker('./dist/workers/matterWorker.js', {
212
+ name: 'Matter',
213
+ managerPort: this.matterChannel.port2,
214
+ matterbridge: matterbridge,
215
+ color: 65,
216
+ debug: hasParameter('workerdebug'),
217
+ });
218
+ this.matterChannel.port2.on('message', this.matterMessageHandler.bind(this));
219
+ this.matterWorker.on('error', (err) => {
220
+ inspectError(this.log, 'WorkerManager received error from MatterWorker', err);
221
+ });
222
+ this.matterWorker.on('exit', (code) => {
223
+ this.log.debug(`WorkerManager received exit from MatterWorker with code: ${code}`);
224
+ });
225
+ this.matterWorker.on('message', (msg) => {
226
+ // this.log.debug(`WorkerManager received message from MatterWorker: ${debugStringify(msg)}`);
227
+ if (msg.type === 'init') {
228
+ this.log.debug(`WorkerManager: MatterWorker initialized: ${debugStringify(msg)}`);
229
+ this.postToMatterWorker({ id: getUniqueId(), timestamp: Date.now(), type: 'matter_start', src: 'manager', dst: 'matter', params: { storeId: 'Matterbridge' } });
230
+ }
231
+ else if (msg.type === 'pong') {
232
+ clearTimeout(this.matterPongTimeout);
233
+ this.matterPongTimeout = undefined;
234
+ }
235
+ else if (msg.type === 'exit') {
236
+ this.log.debug(`WorkerManager: MatterWorker exited: ${debugStringify(msg)}`);
237
+ this.matterChannel.port1.close();
238
+ this.matterChannel.port2.close();
239
+ }
240
+ });
241
+ // Create the test worker
242
+ this.testChannel = new MessageChannel();
243
+ this.testWorker = createESMWorker('./dist/workers/testWorker.js', {
244
+ name: 'Test',
245
+ managerPort: this.testChannel.port2,
246
+ debug: hasParameter('workerdebug'),
247
+ matterbridge: matterbridge,
248
+ });
249
+ this.testChannel.port2.on('message', this.testMessageHandler.bind(this));
250
+ this.testWorker.on('error', (err) => {
251
+ inspectError(this.log, 'WorkerManager received error from TestWorker', err);
252
+ });
253
+ this.testWorker.on('exit', (code) => {
254
+ this.log.debug(`WorkerManager received exit from TestWorker with code: ${code}`);
255
+ });
256
+ this.testWorker.on('message', (msg) => {
257
+ // this.log.debug(`WorkerManager received message from TestWorker: ${debugStringify(msg)}`);
258
+ if (msg.type === 'init') {
259
+ this.log.debug(`WorkerManager: TestWorker initialized: ${debugStringify(msg)}`);
260
+ }
261
+ else if (msg.type === 'pong') {
262
+ clearTimeout(this.testPongTimeout);
263
+ this.testPongTimeout = undefined;
264
+ }
265
+ else if (msg.type === 'exit') {
266
+ this.log.debug(`WorkerManager: TestWorker exited: ${debugStringify(msg)}`);
267
+ this.matterChannel.port1.close();
268
+ this.matterChannel.port2.close();
269
+ }
270
+ });
271
+ // Periodically ping workers to check if they are alive
272
+ this.pingIntervalTimeout = setInterval(() => {
273
+ this.postControlMessageToAll({ type: 'ping' });
274
+ if (this.matterbridgePongTimeout) {
275
+ this.log.error('WorkerManager: No pong received from MatterbridgeWorker within timeout, it may be unresponsive.');
276
+ }
277
+ else {
278
+ this.matterbridgePongTimeout = setTimeout(() => {
279
+ this.log.error('WorkerManager: No pong received from MatterbridgeWorker within timeout, it may be unresponsive.');
280
+ }, this.pingIntervalMs + 500);
281
+ }
282
+ if (this.frontendPongTimeout) {
283
+ this.log.error('WorkerManager: No pong received from FrontendWorker within timeout, it may be unresponsive.');
284
+ }
285
+ else {
286
+ this.frontendPongTimeout = setTimeout(() => {
287
+ this.log.error('WorkerManager: No pong received from FrontendWorker within timeout, it may be unresponsive.');
288
+ }, this.pingIntervalMs + 500);
289
+ }
290
+ if (this.matterPongTimeout) {
291
+ this.log.error('WorkerManager: No pong received from MatterWorker within timeout, it may be unresponsive.');
292
+ }
293
+ else {
294
+ this.matterPongTimeout = setTimeout(() => {
295
+ this.log.error('WorkerManager: No pong received from MatterWorker within timeout, it may be unresponsive.');
296
+ }, this.pingIntervalMs + 500);
297
+ }
298
+ this.tracker.runGarbageCollector('major');
299
+ this.tracker.runGarbageCollector('minor');
300
+ }, this.pingIntervalMs);
301
+ }
302
+ /**
303
+ * Sends a control message to a specific worker.
304
+ *
305
+ * @param {Worker} worker - The worker to send the message to.
306
+ * @param {ControlMessage} msg - The message to send.
307
+ */
308
+ postControlMessage(worker, msg) {
309
+ worker.postMessage(msg);
310
+ }
311
+ /**
312
+ * Sends a control message to all workers.
313
+ *
314
+ * @param {ControlMessage} msg - The message to send.
315
+ */
316
+ postControlMessageToAll(msg) {
317
+ this.postControlMessage(this.matterbridgeWorker, msg);
318
+ this.postControlMessage(this.frontendWorker, msg);
319
+ this.postControlMessage(this.matterWorker, msg);
320
+ this.postControlMessage(this.testWorker, msg);
321
+ }
322
+ /**
323
+ * Initializes all workers.
324
+ */
325
+ initializeAllWorkers() {
326
+ this.postControlMessageToAll({ type: 'init' });
327
+ }
328
+ /**
329
+ * Shuts down all workers gracefully.
330
+ */
331
+ shutdownAllWorkers() {
332
+ clearTimeout(this.matterbridgePongTimeout);
333
+ clearTimeout(this.frontendPongTimeout);
334
+ clearTimeout(this.matterPongTimeout);
335
+ clearTimeout(this.testPongTimeout);
336
+ clearInterval(this.pingIntervalTimeout);
337
+ this.postControlMessageToAll({ type: 'exit' });
338
+ this.broadcastChannel.close();
339
+ }
340
+ /**
341
+ * Sends a message to the Matterbridge worker via the port 1 of the established MessageChannel.
342
+ *
343
+ * @param {MatterbridgeWorkerMessage} message - The message to be posted to the Matterbridge worker.
344
+ */
345
+ postToMatterbridgeWorker(message) {
346
+ this.matterbridgeChannel.port1.postMessage(message);
347
+ }
348
+ /**
349
+ * Sends a message to the Frontend worker via the port 1 of the established MessageChannel.
350
+ *
351
+ * @param {FrontendWorkerMessage} message - The message to be posted to the Frontend worker.
352
+ */
353
+ postToFrontendWorker(message) {
354
+ this.frontendChannel.port1.postMessage(message);
355
+ }
356
+ /**
357
+ * Sends a message to the Plugin worker via the port 1 of the established MessageChannel.
358
+ *
359
+ * @param {PluginWorkerMessage} message - The message to be posted to the Plugin worker.
360
+ */
361
+ postToMatterWorker(message) {
362
+ this.matterChannel.port1.postMessage(message);
363
+ }
364
+ /**
365
+ * Handle messages from matterbridgeWorker.
366
+ * It uses the port 2 of the matterbridge MessageChannel for direct communication.
367
+ *
368
+ * @param {MatterbridgeWorkerMessage} msg The message from the matterbridgeWorker
369
+ */
370
+ matterbridgeMessageHandler(msg) {
371
+ // Handle messages from matterbridgeWorker
372
+ switch (msg.type) {
373
+ case 'plugins_apipluginarray':
374
+ this.log.info('WorkerManager received plugins_apipluginarray from matterbridgeWorker:', msg);
375
+ break;
376
+ case 'devices_basearray':
377
+ this.log.info('WorkerManager received devices_basearray from matterbridgeWorker:', msg);
378
+ break;
379
+ default:
380
+ this.log.warn('WorkerManager received unknown message type from matterbridgeWorker:', msg);
381
+ }
382
+ }
383
+ /**
384
+ * Handle messages from frontendWorker.
385
+ * It uses the port 2 of the frontend MessageChannel for direct communication.
386
+ *
387
+ * @param {FrontendWorkerMessage} msg The message from the frontendWorker
388
+ */
389
+ frontendMessageHandler(msg) {
390
+ // Handle messages from frontendWorker
391
+ switch (msg.type) {
392
+ case 'frontend_start':
393
+ this.log.info('WorkerManager received frontend_start from frontendWorker:', msg);
394
+ break;
395
+ case 'frontend_stop':
396
+ this.log.info('WorkerManager received frontend_stop from frontendWorker:', msg);
397
+ break;
398
+ default:
399
+ this.log.warn('WorkerManager received unknown message type from frontendWorker:', msg);
400
+ }
401
+ }
402
+ /**
403
+ * Handle messages from matterWorker.
404
+ * It uses the port 2 of the matter MessageChannel for direct communication.
405
+ *
406
+ * @param {MatterWorkerMessage} msg The message from the matterWorker
407
+ */
408
+ matterMessageHandler(msg) {
409
+ // Handle messages from matterWorker
410
+ switch (msg.type) {
411
+ case 'matter_start':
412
+ this.log.info('WorkerManager received matter_start from matterWorker:', msg);
413
+ break;
414
+ case 'matter_stop':
415
+ this.log.info('WorkerManager received matter_stop from matterWorker:', msg);
416
+ break;
417
+ default:
418
+ this.log.warn('WorkerManager received unknown message type from matterWorker:', msg);
419
+ }
420
+ }
421
+ /**
422
+ * Handle messages from testWorker.
423
+ * It uses the port 2 of the test MessageChannel for direct communication.
424
+ *
425
+ * @param {TestWorkerMessage} msg The message from the testWorker
426
+ */
427
+ testMessageHandler(msg) {
428
+ // Handle messages from testWorker
429
+ switch (msg.type) {
430
+ default:
431
+ this.log.warn('WorkerManager received unknown message type from testWorker:', msg);
432
+ }
433
+ }
434
+ /**
435
+ * Handle broadcast messages from other workers.
436
+ * It uses the BroadcastChannel for communication.
437
+ *
438
+ * @param {MessageEvent} event The message event containing the broadcast message
439
+ */
440
+ broadcastMessageHandler(event) {
441
+ const data = event.data;
442
+ this.log.debug(`WorkerManager received broadcast message: ${debugStringify(data)}`);
443
+ }
444
+ }
445
+ // for (let i = 1; i <= 255; i++) console.log(`\x1b[38;5;${i}mColor: ${i}`);
446
+ const manager = new WorkerManager();
447
+ manager.initializeAllWorkers();
448
+ let count = 0;
449
+ process.on('SIGINT', () => {
450
+ manager.log.notice('WorkerManager received SIGINT, shutting down workers...');
451
+ manager.shutdownAllWorkers();
452
+ // @ts-expect-error accessing private member for graceful shutdown
453
+ manager.tracker.runGarbageCollector('major');
454
+ // @ts-expect-error accessing private member for graceful shutdown
455
+ manager.tracker.runGarbageCollector('minor');
456
+ // Give some time for workers to shutdown gracefully
457
+ count++;
458
+ if (count > 3)
459
+ process.exit(0);
460
+ setTimeout(() => {
461
+ process.exit(0);
462
+ }, 120000).unref();
463
+ });
464
+ //# sourceMappingURL=workerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerManager.js","sourceRoot":"","sources":["../../src/workers/workerManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ import { MessagePort } from 'node:worker_threads';
2
+ import { EventEmitter } from 'node:events';
3
+ import { AnsiLogger } from 'node-ansi-logger';
4
+ import { WorkerMessage, WorkerMessageRequest, WorkerMessageRequestAny, WorkerMessageResponse, WorkerMessageResponseSuccess, WorkerMessageTypes } from '@matterbridge/types';
5
+ import { Matterbridge } from '../matterbridge.js';
6
+ import { ControlMessage, WorkerData } from './workerTypes.js';
7
+ interface WorkerServerEvents {
8
+ control_message: [msg: ControlMessage];
9
+ manager_message: [msg: WorkerMessage];
10
+ broadcast_message: [msg: WorkerMessage];
11
+ }
12
+ export declare class WorkerServer extends EventEmitter<WorkerServerEvents> {
13
+ readonly log: AnsiLogger;
14
+ readonly name: string;
15
+ readonly matterbridge: Matterbridge;
16
+ readonly color: number | undefined;
17
+ private parentPort;
18
+ private managerPort;
19
+ private broadcastChannel;
20
+ private readonly debug;
21
+ private readonly verbose;
22
+ private readonly tracker;
23
+ constructor(name: string, parentPort: MessagePort | null, workerData: WorkerData);
24
+ private controlMessageHandler;
25
+ private managerMessageHandler;
26
+ private broadcastMessageHandler;
27
+ /**
28
+ * Generate a pseudo-random identifier between 100,000,000 and 999,999,999.
29
+ *
30
+ * @returns {number} A nine-digit identifier.
31
+ */
32
+ getUniqueId(): number;
33
+ /**
34
+ * Type guard to verify a value matches the WorkerMessageRequest structure.
35
+ *
36
+ * @param {unknown} value Value to test.
37
+ * @returns {value is WorkerMessageRequest} True when the value looks like a request message.
38
+ */
39
+ isWorkerRequest(value: unknown): value is WorkerMessageRequest;
40
+ /**
41
+ * Type guard to verify a value matches a specific WorkerMessageRequest structure.
42
+ *
43
+ * @param {unknown} value Value to test.
44
+ * @param {K} type Worker message type to match.
45
+ * @returns {value is WorkerMessageRequest<K>} True when the value looks like a request message of the requested type.
46
+ */
47
+ isWorkerRequestOfType<K extends keyof WorkerMessageTypes>(value: unknown, type: K): value is WorkerMessageRequest<K>;
48
+ /**
49
+ * Type guard to verify a value matches the WorkerMessageResponse structure.
50
+ *
51
+ * @param {unknown} value Value to test.
52
+ * @returns {value is WorkerMessageResponse} True when the value looks like a response message.
53
+ */
54
+ isWorkerResponse(value: unknown): value is WorkerMessageResponse;
55
+ /**
56
+ * Type guard to verify a value matches a specific WorkerMessageResponse structure.
57
+ *
58
+ * @param {unknown} value Value to test.
59
+ * @param {K} type Worker message type to match.
60
+ * @returns {value is WorkerMessageResponse<K>} True when the value looks like a response message of the requested type.
61
+ */
62
+ isWorkerResponseOfType<K extends keyof WorkerMessageTypes>(value: unknown, type: K): value is WorkerMessageResponse<K>;
63
+ /**
64
+ * Exits the worker process.
65
+ *
66
+ * This method sends an exit message to the parent, closes all ports and channels, and then exits the process with the given code.
67
+ *
68
+ * @param {number} code - The exit code (0 for success, non-zero for failure).
69
+ */
70
+ exit(code: number): void;
71
+ /**
72
+ * Sends a control message to the parent through parentPort
73
+ *
74
+ * @param {ControlMessage} message - The control message to send.
75
+ */
76
+ parentPost(message: ControlMessage): void;
77
+ /**
78
+ * Sends a message to the manager
79
+ *
80
+ * @param {WorkerMessage} message - The message to send.
81
+ */
82
+ managerPost(message: WorkerMessage): void;
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
+ * Send a request message from the worker implementation.
91
+ *
92
+ * @template K
93
+ * @param {WorkerMessageRequest<K>} message The request message to send.
94
+ * @returns {void}
95
+ */
96
+ request<K extends keyof WorkerMessageTypes>(message: WorkerMessageRequest<K>): void;
97
+ /**
98
+ * Send a response message from the worker implementation.
99
+ *
100
+ * @template K
101
+ * @param {WorkerMessageResponse<K>} message The response message to send.
102
+ * @returns {void}
103
+ */
104
+ respond<K extends keyof WorkerMessageTypes>(message: WorkerMessageResponse<K>): void;
105
+ /**
106
+ * Fetch data from a worker.
107
+ * It broadcasts a request message and waits for a valid response with the same id.
108
+ *
109
+ * @template K
110
+ * @param {WorkerMessageRequest<K>} message - The typed request message to fetch.
111
+ * @param {number} timeout - The timeout in milliseconds to wait for a response. Default is 250ms.
112
+ * @returns {Promise<WorkerMessageResponseSuccess<K>>} A promise that resolves with the successful response from the worker or rejects on timeout.
113
+ * @throws {Error} If the fetch operation times out after 250ms or if an error response is received or if the response is malformed.
114
+ */
115
+ fetch<T extends WorkerMessageRequestAny, K extends Extract<keyof WorkerMessageTypes, T['type']>>(message: T, timeout?: number): Promise<WorkerMessageResponseSuccess<K>>;
116
+ /**
117
+ * Summarize live libuv handles/requests inside a process.
118
+ *
119
+ * @param {AnsiLogger} log - Logger to use for output
120
+ *
121
+ * @returns {number} - The total number of active handles and requests
122
+ */
123
+ static logKeepAlives(log: AnsiLogger): number;
124
+ }
125
+ export {};
126
+ //# sourceMappingURL=workerServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerServer.d.ts","sourceRoot":"","sources":["../../src/workers/workerServer.ts"],"names":[],"mappings":"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"}