@matterbridge/core 3.10.13-dev-20261007-320f739 → 3.10.13-dev-20261009-7fc645a
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/dist/backend.d.ts +42 -0
- package/dist/backend.js +370 -0
- package/dist/backendExpress.d.ts +21 -0
- package/dist/backendExpress.js +460 -0
- package/dist/backendWsServer.d.ts +39 -0
- package/dist/backendWsServer.js +409 -0
- package/dist/cli.js +7 -5
- package/dist/cliEmitter.d.ts +0 -4
- package/dist/cliEmitter.js +0 -8
- package/dist/frontend.js +8 -7
- package/dist/matterNode.js +37 -2
- package/dist/matterbridge.js +58 -1
- package/dist/runners/threadBackend.d.ts +3 -0
- package/dist/runners/threadBackend.js +24 -0
- package/dist/runners/threadRootNode.d.ts +3 -0
- package/dist/runners/threadRootNode.js +30 -0
- package/dist/runners/threadTracker.d.ts +3 -0
- package/dist/runners/threadTracker.js +26 -0
- package/package.json +5 -5
package/dist/matterbridge.js
CHANGED
|
@@ -170,6 +170,13 @@ export class Matterbridge extends EventEmitter {
|
|
|
170
170
|
this.server.close();
|
|
171
171
|
}
|
|
172
172
|
getPlatformMatterbridge() {
|
|
173
|
+
this.systemInformation.totalMemory = formatBytes(os.totalmem());
|
|
174
|
+
this.systemInformation.freeMemory = formatBytes(os.freemem());
|
|
175
|
+
this.systemInformation.systemUptime = formatUptime(os.uptime());
|
|
176
|
+
this.systemInformation.processUptime = formatUptime(Math.floor(process.uptime()));
|
|
177
|
+
this.systemInformation.rss = formatBytes(memoryFootprint());
|
|
178
|
+
this.systemInformation.heapTotal = formatBytes(process.memoryUsage().heapTotal);
|
|
179
|
+
this.systemInformation.heapUsed = formatBytes(process.memoryUsage().heapUsed);
|
|
173
180
|
return {
|
|
174
181
|
systemInformation: { ...this.systemInformation },
|
|
175
182
|
uuid: this.uuid,
|
|
@@ -193,6 +200,13 @@ export class Matterbridge extends EventEmitter {
|
|
|
193
200
|
};
|
|
194
201
|
}
|
|
195
202
|
getSharedMatterbridge() {
|
|
203
|
+
this.systemInformation.totalMemory = formatBytes(os.totalmem());
|
|
204
|
+
this.systemInformation.freeMemory = formatBytes(os.freemem());
|
|
205
|
+
this.systemInformation.systemUptime = formatUptime(os.uptime());
|
|
206
|
+
this.systemInformation.processUptime = formatUptime(Math.floor(process.uptime()));
|
|
207
|
+
this.systemInformation.rss = formatBytes(memoryFootprint());
|
|
208
|
+
this.systemInformation.heapTotal = formatBytes(process.memoryUsage().heapTotal);
|
|
209
|
+
this.systemInformation.heapUsed = formatBytes(process.memoryUsage().heapUsed);
|
|
196
210
|
return {
|
|
197
211
|
systemInformation: { ...this.systemInformation },
|
|
198
212
|
uuid: this.uuid,
|
|
@@ -318,6 +332,15 @@ export class Matterbridge extends EventEmitter {
|
|
|
318
332
|
await this.nodeContext?.set('globalModulesDirectory', msg.params.prefix);
|
|
319
333
|
this.server.respond({ ...msg, result: { success: true } });
|
|
320
334
|
break;
|
|
335
|
+
case 'matterbridge_matterdata':
|
|
336
|
+
this.server.respond({ ...msg, result: { port: this.port, passcode: this.passcode, discriminator: this.discriminator } });
|
|
337
|
+
if (this.port !== undefined)
|
|
338
|
+
this.port++;
|
|
339
|
+
if (this.passcode !== undefined)
|
|
340
|
+
this.passcode++;
|
|
341
|
+
if (this.discriminator !== undefined)
|
|
342
|
+
this.discriminator++;
|
|
343
|
+
break;
|
|
321
344
|
case 'matterbridge_platform':
|
|
322
345
|
this.server.respond({ ...msg, result: { data: this.getPlatformMatterbridge(), success: true } });
|
|
323
346
|
break;
|
|
@@ -750,6 +773,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
750
773
|
}
|
|
751
774
|
else {
|
|
752
775
|
this.globalModulesDirectory = await this.nodeContext.get('globalModulesDirectory', '');
|
|
776
|
+
if (this.globalModulesDirectory.includes('.bun'))
|
|
777
|
+
this.globalModulesDirectory = '';
|
|
753
778
|
}
|
|
754
779
|
if (this.globalModulesDirectory === '') {
|
|
755
780
|
this.log.debug(`Getting global node_modules directory...`);
|
|
@@ -924,7 +949,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
924
949
|
this.shutdown = true;
|
|
925
950
|
return;
|
|
926
951
|
}
|
|
927
|
-
if (getIntParameter('frontend') !== 0 || getIntParameter('frontend') === undefined)
|
|
952
|
+
if ((getIntParameter('frontend') !== 0 || getIntParameter('frontend') === undefined) && !hasParameter('experimental-backend'))
|
|
928
953
|
await this.frontend.start(getIntParameter('frontend'));
|
|
929
954
|
try {
|
|
930
955
|
await this.startMatterStorage();
|
|
@@ -1017,15 +1042,45 @@ export class Matterbridge extends EventEmitter {
|
|
|
1017
1042
|
this.log.warn('Fixed delay switch found. Waiting for ' + delay + ' seconds before starting matterbridge...');
|
|
1018
1043
|
await wait(delay * 1000, 'Fixed race condition delay', true);
|
|
1019
1044
|
}
|
|
1045
|
+
if (hasParameter('experimental-tracker')) {
|
|
1046
|
+
this.log.notice('***Experimental tracker enabled for Threads');
|
|
1047
|
+
for (let i = 0; i < 10; i++) {
|
|
1048
|
+
this.server.request({ type: 'manager_run', src: 'matterbridge', dst: 'manager', params: { name: 'Tracker' } });
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1020
1051
|
if (hasParameter('bridge') || (!hasParameter('childbridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'bridge')) {
|
|
1021
1052
|
this.bridgeMode = 'bridge';
|
|
1022
1053
|
this.log.debug(`Starting matterbridge in mode ${this.bridgeMode}`);
|
|
1054
|
+
if (hasParameter('experimental-node')) {
|
|
1055
|
+
this.log.notice(`***Starting experimental MatterNode in ${this.bridgeMode} mode...`);
|
|
1056
|
+
this.server.request({
|
|
1057
|
+
type: 'manager_run',
|
|
1058
|
+
src: 'matterbridge',
|
|
1059
|
+
dst: 'manager',
|
|
1060
|
+
params: { name: 'RootNode', workerData: { threadName: 'RootNode', sharedMatterbridge: this.getSharedMatterbridge() } },
|
|
1061
|
+
});
|
|
1062
|
+
this.log.notice(`***Started experimental MatterNode in ${this.bridgeMode} mode`);
|
|
1063
|
+
return;
|
|
1064
|
+
}
|
|
1023
1065
|
await this.startBridge();
|
|
1024
1066
|
return;
|
|
1025
1067
|
}
|
|
1026
1068
|
if (hasParameter('childbridge') || (!hasParameter('bridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'childbridge')) {
|
|
1027
1069
|
this.bridgeMode = 'childbridge';
|
|
1028
1070
|
this.log.debug(`Starting matterbridge in mode ${this.bridgeMode}`);
|
|
1071
|
+
if (hasParameter('experimental-node')) {
|
|
1072
|
+
this.log.notice(`***Starting experimental MatterNode in ${this.bridgeMode} mode...`);
|
|
1073
|
+
for (const plugin of this.plugins.array().filter((p) => p.enabled)) {
|
|
1074
|
+
this.server.request({
|
|
1075
|
+
type: 'manager_run',
|
|
1076
|
+
src: 'matterbridge',
|
|
1077
|
+
dst: 'manager',
|
|
1078
|
+
params: { name: 'RootNode', workerData: { threadName: 'RootNode', sharedMatterbridge: this.getSharedMatterbridge(), pluginName: plugin.name } },
|
|
1079
|
+
});
|
|
1080
|
+
}
|
|
1081
|
+
this.log.notice(`***Started experimental MatterNode in ${this.bridgeMode} mode`);
|
|
1082
|
+
return;
|
|
1083
|
+
}
|
|
1029
1084
|
await this.startChildbridge();
|
|
1030
1085
|
return;
|
|
1031
1086
|
}
|
|
@@ -1478,6 +1533,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
1478
1533
|
this.frontend.destroy();
|
|
1479
1534
|
this.plugins.destroy();
|
|
1480
1535
|
this.devices.destroy();
|
|
1536
|
+
this.server.request({ type: 'manager_shutdown', src: 'matterbridge', dst: 'manager', params: {} });
|
|
1537
|
+
await wait(100);
|
|
1481
1538
|
this.server.close();
|
|
1482
1539
|
if (this.nodeStorage && this.nodeContext) {
|
|
1483
1540
|
this.log.debug(`Closing node storage context for ${plg}Matterbridge${db}...`);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ThreadsWrapper } from '@matterbridge/thread/wrapper';
|
|
2
|
+
import { inspectError } from '@matterbridge/utils/error';
|
|
3
|
+
import { logModuleLoaded } from '@matterbridge/utils/loader';
|
|
4
|
+
logModuleLoaded('Backend', '\u001B[35m');
|
|
5
|
+
export default new ThreadsWrapper('Backend', async (worker) => {
|
|
6
|
+
worker.logger("info", 'Creating backend...');
|
|
7
|
+
try {
|
|
8
|
+
worker.logger("debug", 'Fetching shared Matterbridge state...');
|
|
9
|
+
const shared = (await worker.server.fetch({ type: 'matterbridge_shared', src: 'matterbridge', dst: 'matterbridge' }, 1000)).result.data;
|
|
10
|
+
worker.logger("debug", 'Shared Matterbridge state fetched; importing Backend...');
|
|
11
|
+
const { Backend } = await import('../backend.js');
|
|
12
|
+
worker.logger("debug", 'Backend imported; creating instance...');
|
|
13
|
+
const backend = new Backend(shared);
|
|
14
|
+
worker.logger("debug", 'Starting Backend...');
|
|
15
|
+
await backend.start();
|
|
16
|
+
worker.logger("debug", 'Backend started');
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
const errorMessage = inspectError(worker.log, 'Failed to create backend', error);
|
|
21
|
+
worker.logger("error", errorMessage);
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ThreadsWrapper } from '@matterbridge/thread/wrapper';
|
|
2
|
+
import { isRootNodeWorkerData } from '@matterbridge/types';
|
|
3
|
+
import { inspectError } from '@matterbridge/utils/error';
|
|
4
|
+
import { logModuleLoaded } from '@matterbridge/utils/loader';
|
|
5
|
+
logModuleLoaded('RootNode', '\u001B[35m');
|
|
6
|
+
export default new ThreadsWrapper('RootNode', async (worker) => {
|
|
7
|
+
worker.logger("info", 'Creating root node...');
|
|
8
|
+
try {
|
|
9
|
+
if (!isRootNodeWorkerData(worker.workerData)) {
|
|
10
|
+
worker.logger("error", 'Invalid root node worker data');
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const { sharedMatterbridge, pluginName } = worker.workerData;
|
|
14
|
+
const target = pluginName ? `plugin ${pluginName}` : 'bridge';
|
|
15
|
+
worker.logger("debug", `Importing MatterNode for ${target}...`);
|
|
16
|
+
const { MatterNode } = await import('../matterNode.js');
|
|
17
|
+
worker.logger("debug", 'MatterNode imported; creating instance...');
|
|
18
|
+
const matterNode = new MatterNode(sharedMatterbridge, pluginName);
|
|
19
|
+
await matterNode.create();
|
|
20
|
+
worker.logger("debug", 'Starting MatterNode...');
|
|
21
|
+
await matterNode.start();
|
|
22
|
+
worker.logger("debug", `Root node for ${target} started`);
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
const errorMessage = inspectError(worker.log, 'Failed to create root node', error);
|
|
27
|
+
worker.logger("error", errorMessage);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ThreadsWrapper } from '@matterbridge/thread/wrapper';
|
|
2
|
+
import { inspectError } from '@matterbridge/utils/error';
|
|
3
|
+
import { logModuleLoaded } from '@matterbridge/utils/loader';
|
|
4
|
+
import { Tracker } from '@matterbridge/utils/tracker';
|
|
5
|
+
logModuleLoaded('Tracker', '\u001B[35m');
|
|
6
|
+
export default new ThreadsWrapper('Tracker', async (worker) => {
|
|
7
|
+
worker.logger("info", 'Creating tracker...');
|
|
8
|
+
try {
|
|
9
|
+
const tracker = new Tracker('Tracker', true, false, true);
|
|
10
|
+
worker.on('startup', () => {
|
|
11
|
+
worker.logger("notice", 'Tracker received startup');
|
|
12
|
+
tracker.start();
|
|
13
|
+
});
|
|
14
|
+
worker.on('shutdown', () => {
|
|
15
|
+
worker.logger("notice", 'Tracker received shutdown');
|
|
16
|
+
tracker.stop();
|
|
17
|
+
});
|
|
18
|
+
worker.logger("debug", 'Tracker created');
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
const errorMessage = inspectError(worker.log, 'Failed to create tracker', error);
|
|
23
|
+
worker.logger("error", errorMessage);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matterbridge/core",
|
|
3
|
-
"version": "3.10.13-dev-
|
|
3
|
+
"version": "3.10.13-dev-20261009-7fc645a",
|
|
4
4
|
"description": "Matterbridge core library",
|
|
5
5
|
"author": "https://github.com/Luligu",
|
|
6
6
|
"homepage": "https://matterbridge.io/",
|
|
@@ -136,10 +136,10 @@
|
|
|
136
136
|
},
|
|
137
137
|
"dependencies": {
|
|
138
138
|
"@matter/main": "0.17.9",
|
|
139
|
-
"@matterbridge/dgram": "3.10.13-dev-
|
|
140
|
-
"@matterbridge/thread": "3.10.13-dev-
|
|
141
|
-
"@matterbridge/types": "3.10.13-dev-
|
|
142
|
-
"@matterbridge/utils": "3.10.13-dev-
|
|
139
|
+
"@matterbridge/dgram": "3.10.13-dev-20261009-7fc645a",
|
|
140
|
+
"@matterbridge/thread": "3.10.13-dev-20261009-7fc645a",
|
|
141
|
+
"@matterbridge/types": "3.10.13-dev-20261009-7fc645a",
|
|
142
|
+
"@matterbridge/utils": "3.10.13-dev-20261009-7fc645a",
|
|
143
143
|
"escape-html": "1.0.3",
|
|
144
144
|
"express": "5.2.1",
|
|
145
145
|
"express-rate-limit": "8.7.0",
|