@matterbridge/core 3.9.2-dev-20260620-2b9580a → 3.9.2-dev-20260621-75283ba
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/backendWsServer.d.ts +3 -1
- package/dist/backendWsServer.js +16 -2
- package/dist/frontend.d.ts +3 -1
- package/dist/frontend.js +27 -2
- package/dist/helpers.js +1 -1
- package/dist/matterbridge.d.ts +6 -4
- package/dist/matterbridge.js +43 -16
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { EndpointNumber } from '@matter/types/datatype';
|
|
2
|
-
import type { ApiMatter, RefreshRequiredChanged, SharedMatterbridge, WsMessageBroadcast } from '@matterbridge/types';
|
|
2
|
+
import type { ApiMatter, BridgeStatus, PluginStatusUpdate, RefreshRequiredChanged, SharedMatterbridge, WsMessageBroadcast } from '@matterbridge/types';
|
|
3
3
|
import { WebSocketServer } from 'ws';
|
|
4
4
|
import type { Backend } from './backend.js';
|
|
5
5
|
export declare class BackendWsServer {
|
|
@@ -27,6 +27,8 @@ export declare class BackendWsServer {
|
|
|
27
27
|
wssSendRestartNotRequired(snackbar?: boolean): void;
|
|
28
28
|
wssSendUpdateRequired(version: string, devVersion?: boolean): void;
|
|
29
29
|
wssSendPluginUpdateRequired(plugin: string, version: string, devVersion?: boolean): void;
|
|
30
|
+
wssSendPluginStatusUpdate(plugin: string, status: PluginStatusUpdate): void;
|
|
31
|
+
wssSendMatterbridgeStatusUpdate(status: BridgeStatus): void;
|
|
30
32
|
wssSendCpuUpdate(cpuUsage: number, processCpuUsage: number): void;
|
|
31
33
|
wssSendMemoryUpdate(totalMemory: string, freeMemory: string, rss: string, heapTotal: string, heapUsed: string, external: string, arrayBuffers: string): void;
|
|
32
34
|
wssSendUptimeUpdate(systemUptime: string, processUptime: string): void;
|
package/dist/backendWsServer.js
CHANGED
|
@@ -236,16 +236,30 @@ export class BackendWsServer {
|
|
|
236
236
|
if (!this.hasActiveClients())
|
|
237
237
|
return;
|
|
238
238
|
if (this.verbose)
|
|
239
|
-
this.log.debug('Sending
|
|
239
|
+
this.log.debug('Sending a matterbridge version update required message to all connected clients');
|
|
240
240
|
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'update_required', success: true, response: { version, devVersion } });
|
|
241
241
|
}
|
|
242
242
|
wssSendPluginUpdateRequired(plugin, version, devVersion = false) {
|
|
243
243
|
if (!this.hasActiveClients())
|
|
244
244
|
return;
|
|
245
245
|
if (this.verbose)
|
|
246
|
-
this.log.debug('Sending a plugin update required message to all connected clients');
|
|
246
|
+
this.log.debug('Sending a plugin version update required message to all connected clients');
|
|
247
247
|
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'plugin_update_required', success: true, response: { plugin, version, devVersion } });
|
|
248
248
|
}
|
|
249
|
+
wssSendPluginStatusUpdate(plugin, status) {
|
|
250
|
+
if (!this.hasActiveClients())
|
|
251
|
+
return;
|
|
252
|
+
if (this.verbose)
|
|
253
|
+
this.log.debug('Sending a plugin status update message to all connected clients');
|
|
254
|
+
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'plugin_status_update', success: true, response: { plugin, status } });
|
|
255
|
+
}
|
|
256
|
+
wssSendMatterbridgeStatusUpdate(status) {
|
|
257
|
+
if (!this.hasActiveClients())
|
|
258
|
+
return;
|
|
259
|
+
if (this.verbose)
|
|
260
|
+
this.log.debug('Sending a matterbridge status update message to all connected clients');
|
|
261
|
+
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'matterbridge_status_update', success: true, response: { status } });
|
|
262
|
+
}
|
|
249
263
|
wssSendCpuUpdate(cpuUsage, processCpuUsage) {
|
|
250
264
|
if (!this.hasActiveClients())
|
|
251
265
|
return;
|
package/dist/frontend.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import EventEmitter from 'node:events';
|
|
2
2
|
import { type EndpointNumber } from '@matter/types/datatype';
|
|
3
|
-
import type { ApiClusters, ApiDevice, ApiMatter, ApiPlugin, ApiSettings, RefreshRequiredChanged, WsMessageBroadcast } from '@matterbridge/types';
|
|
3
|
+
import type { ApiClusters, ApiDevice, ApiMatter, ApiPlugin, ApiSettings, BridgeStatus, PluginStatusUpdate, RefreshRequiredChanged, WsMessageBroadcast } from '@matterbridge/types';
|
|
4
4
|
import { LogLevel } from 'node-ansi-logger';
|
|
5
5
|
import type { Matterbridge } from './matterbridge.js';
|
|
6
6
|
interface FrontendEvents {
|
|
@@ -59,6 +59,8 @@ export declare class Frontend extends EventEmitter<FrontendEvents> {
|
|
|
59
59
|
wssSendRestartNotRequired(snackbar?: boolean): void;
|
|
60
60
|
wssSendUpdateRequired(version: string, devVersion?: boolean): void;
|
|
61
61
|
wssSendPluginUpdateRequired(plugin: string, version: string, devVersion?: boolean): void;
|
|
62
|
+
wssSendPluginStatusUpdate(plugin: string, status: PluginStatusUpdate): void;
|
|
63
|
+
wssSendMatterbridgeStatusUpdate(status: BridgeStatus): void;
|
|
62
64
|
wssSendCpuUpdate(cpuUsage: number, processCpuUsage: number): void;
|
|
63
65
|
wssSendMemoryUpdate(totalMemory: string, freeMemory: string, rss: string, heapTotal: string, heapUsed: string, external: string, arrayBuffers: string): void;
|
|
64
66
|
wssSendUptimeUpdate(systemUptime: string, processUptime: string): void;
|
package/dist/frontend.js
CHANGED
|
@@ -100,10 +100,22 @@ export class Frontend extends EventEmitter {
|
|
|
100
100
|
this.wssSendPluginUpdateRequired(msg.params.plugin, msg.params.version, msg.params.devVersion);
|
|
101
101
|
this.server.respond({ ...msg, result: { success: true } });
|
|
102
102
|
break;
|
|
103
|
+
case 'frontend_pluginstatusupdate':
|
|
104
|
+
this.wssSendPluginStatusUpdate(msg.params.plugin, msg.params.status);
|
|
105
|
+
this.server.respond({ ...msg, result: { success: true } });
|
|
106
|
+
break;
|
|
107
|
+
case 'frontend_matterbridgestatusupdate':
|
|
108
|
+
this.wssSendMatterbridgeStatusUpdate(msg.params.status);
|
|
109
|
+
this.server.respond({ ...msg, result: { success: true } });
|
|
110
|
+
break;
|
|
103
111
|
case 'frontend_snackbarmessage':
|
|
104
112
|
this.wssSendSnackbarMessage(msg.params.message, msg.params.timeout, msg.params.severity);
|
|
105
113
|
this.server.respond({ ...msg, result: { success: true } });
|
|
106
114
|
break;
|
|
115
|
+
case 'frontend_closesnackbarmessage':
|
|
116
|
+
this.wssSendCloseSnackbarMessage(msg.params.message);
|
|
117
|
+
this.server.respond({ ...msg, result: { success: true } });
|
|
118
|
+
break;
|
|
107
119
|
case 'frontend_attributechanged':
|
|
108
120
|
this.wssSendAttributeChangedMessage(msg.params.plugin, msg.params.serialNumber, msg.params.uniqueId, msg.params.number, msg.params.id, msg.params.cluster, msg.params.attribute, msg.params.value);
|
|
109
121
|
this.server.respond({ ...msg, result: { success: true } });
|
|
@@ -935,6 +947,7 @@ export class Frontend extends EventEmitter {
|
|
|
935
947
|
bridgeMode: this.matterbridge.bridgeMode,
|
|
936
948
|
restartMode: this.matterbridge.restartMode,
|
|
937
949
|
virtualMode: this.matterbridge.virtualMode,
|
|
950
|
+
bridgeStatus: this.matterbridge.bridgeStatus,
|
|
938
951
|
profile: this.matterbridge.profile,
|
|
939
952
|
loggerLevel: this.matterbridge.logLevel,
|
|
940
953
|
fileLogger: this.matterbridge.fileLogger,
|
|
@@ -2120,16 +2133,28 @@ export class Frontend extends EventEmitter {
|
|
|
2120
2133
|
wssSendUpdateRequired(version, devVersion = false) {
|
|
2121
2134
|
if (!this.listening || this.webSocketServer?.clients.size === 0)
|
|
2122
2135
|
return;
|
|
2123
|
-
this.log.debug('Sending
|
|
2136
|
+
this.log.debug('Sending a matterbridge version update required message to all connected clients');
|
|
2124
2137
|
this.updateRequired = true;
|
|
2125
2138
|
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'update_required', success: true, response: { version, devVersion } });
|
|
2126
2139
|
}
|
|
2127
2140
|
wssSendPluginUpdateRequired(plugin, version, devVersion = false) {
|
|
2128
2141
|
if (!this.listening || this.webSocketServer?.clients.size === 0)
|
|
2129
2142
|
return;
|
|
2130
|
-
this.log.debug('Sending a plugin update required message to all connected clients');
|
|
2143
|
+
this.log.debug('Sending a plugin version update required message to all connected clients');
|
|
2131
2144
|
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'plugin_update_required', success: true, response: { plugin, version, devVersion } });
|
|
2132
2145
|
}
|
|
2146
|
+
wssSendPluginStatusUpdate(plugin, status) {
|
|
2147
|
+
if (!this.listening || this.webSocketServer?.clients.size === 0)
|
|
2148
|
+
return;
|
|
2149
|
+
this.log.debug('Sending a plugin status update message to all connected clients');
|
|
2150
|
+
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'plugin_status_update', success: true, response: { plugin, status } });
|
|
2151
|
+
}
|
|
2152
|
+
wssSendMatterbridgeStatusUpdate(status) {
|
|
2153
|
+
if (!this.listening || this.webSocketServer?.clients.size === 0)
|
|
2154
|
+
return;
|
|
2155
|
+
this.log.debug('Sending a matterbridge status update message to all connected clients');
|
|
2156
|
+
this.wssBroadcastMessage({ id: 0, src: 'Matterbridge', dst: 'Frontend', method: 'matterbridge_status_update', success: true, response: { status } });
|
|
2157
|
+
}
|
|
2133
2158
|
wssSendCpuUpdate(cpuUsage, processCpuUsage) {
|
|
2134
2159
|
if (!this.listening || this.webSocketServer?.clients.size === 0)
|
|
2135
2160
|
return;
|
package/dist/helpers.js
CHANGED
|
@@ -61,7 +61,7 @@ export async function addVirtualDevices(matterbridge, aggregatorEndpoint) {
|
|
|
61
61
|
if (matterbridge.virtualMode !== 'disabled' && matterbridge.bridgeMode === 'bridge' && aggregatorEndpoint) {
|
|
62
62
|
matterbridge.log.notice(`Creating virtual devices for Matterbridge server node...`);
|
|
63
63
|
await addVirtualDevice(aggregatorEndpoint, 'Restart Matterbridge', matterbridge.virtualMode, async () => {
|
|
64
|
-
if (matterbridge.restartMode === '')
|
|
64
|
+
if (matterbridge.restartMode === 'none')
|
|
65
65
|
await matterbridge.restartProcess();
|
|
66
66
|
else
|
|
67
67
|
await matterbridge.shutdownProcess();
|
package/dist/matterbridge.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { Endpoint, ServerNode } from '@matter/node';
|
|
|
5
5
|
import { AggregatorEndpoint } from '@matter/node/endpoints/aggregator';
|
|
6
6
|
import { type DeviceCertification } from '@matter/protocol';
|
|
7
7
|
import { DeviceTypeId, VendorId } from '@matter/types/datatype';
|
|
8
|
-
import type { ApiMatter, ApiSettings, MaybePromise, PlatformMatterbridge, SharedMatterbridge, SystemInformation } from '@matterbridge/types';
|
|
8
|
+
import type { ApiMatter, ApiSettings, BridgeMode, BridgeStatus, MaybePromise, PlatformMatterbridge, RestartMode, SharedMatterbridge, SystemInformation, VirtualMode } from '@matterbridge/types';
|
|
9
9
|
import { AnsiLogger, LogLevel } from 'node-ansi-logger';
|
|
10
10
|
import { type NodeStorage, NodeStorageManager } from 'node-persist-manager';
|
|
11
11
|
import { DeviceManager } from './deviceManager.js';
|
|
@@ -50,9 +50,10 @@ export declare class Matterbridge extends EventEmitter<MatterbridgeEvents> {
|
|
|
50
50
|
dockerVersion: string | undefined;
|
|
51
51
|
dockerLatestVersion: string | undefined;
|
|
52
52
|
dockerDevVersion: string | undefined;
|
|
53
|
-
bridgeMode:
|
|
54
|
-
restartMode:
|
|
55
|
-
virtualMode:
|
|
53
|
+
bridgeMode: BridgeMode;
|
|
54
|
+
restartMode: RestartMode;
|
|
55
|
+
virtualMode: VirtualMode;
|
|
56
|
+
bridgeStatus: BridgeStatus;
|
|
56
57
|
readonly profile: string | undefined;
|
|
57
58
|
readonly log: AnsiLogger;
|
|
58
59
|
logLevel: LogLevel;
|
|
@@ -135,6 +136,7 @@ export declare class Matterbridge extends EventEmitter<MatterbridgeEvents> {
|
|
|
135
136
|
shutdownProcessAndReset(): Promise<void>;
|
|
136
137
|
shutdownProcessAndFactoryReset(): Promise<void>;
|
|
137
138
|
private cleanup;
|
|
139
|
+
private sendPluginStatusUpdate;
|
|
138
140
|
private startBridge;
|
|
139
141
|
private startChildbridge;
|
|
140
142
|
private startController;
|
package/dist/matterbridge.js
CHANGED
|
@@ -72,9 +72,10 @@ export class Matterbridge extends EventEmitter {
|
|
|
72
72
|
dockerVersion;
|
|
73
73
|
dockerLatestVersion;
|
|
74
74
|
dockerDevVersion;
|
|
75
|
-
bridgeMode = '';
|
|
76
|
-
restartMode = '';
|
|
75
|
+
bridgeMode = 'none';
|
|
76
|
+
restartMode = 'none';
|
|
77
77
|
virtualMode = 'outlet';
|
|
78
|
+
bridgeStatus = 'inactive';
|
|
78
79
|
profile = getParameter('profile');
|
|
79
80
|
log = new AnsiLogger({
|
|
80
81
|
logName: 'Matterbridge',
|
|
@@ -230,6 +231,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
230
231
|
bridgeMode: this.bridgeMode,
|
|
231
232
|
restartMode: this.restartMode,
|
|
232
233
|
virtualMode: this.virtualMode,
|
|
234
|
+
bridgeStatus: this.bridgeStatus,
|
|
233
235
|
profile: this.profile,
|
|
234
236
|
readOnly: hasParameter('readonly'),
|
|
235
237
|
shellyBoard: false,
|
|
@@ -344,7 +346,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
344
346
|
const packageName = msg.result.packageName.replace(/@.*$/, '');
|
|
345
347
|
if (packageName === 'matterbridge') {
|
|
346
348
|
this.log.info('Matterbridge has been updated. Full restart required.');
|
|
347
|
-
if (this.restartMode !== '')
|
|
349
|
+
if (this.restartMode !== 'none')
|
|
348
350
|
await this.cleanup('updating...', false);
|
|
349
351
|
}
|
|
350
352
|
}
|
|
@@ -732,7 +734,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
732
734
|
(hasParameter('bridge') || (!hasParameter('childbridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'bridge') ? 'mode bridge ' : '') +
|
|
733
735
|
(hasParameter('childbridge') || (!hasParameter('bridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'childbridge') ? 'mode childbridge ' : '') +
|
|
734
736
|
(hasParameter('controller') ? 'mode controller ' : '') +
|
|
735
|
-
(this.restartMode === '' ? '' : 'restart mode ' + this.restartMode + ' ') +
|
|
737
|
+
(this.restartMode === 'none' ? '' : 'restart mode ' + this.restartMode + ' ') +
|
|
736
738
|
'running on ' + this.systemInformation.osType + ' (v.' + this.systemInformation.osRelease + ') platform ' + this.systemInformation.osPlatform + ' arch ' + this.systemInformation.osArch);
|
|
737
739
|
const minNodeVersion = 20;
|
|
738
740
|
const nodeVersion = process.versions.node;
|
|
@@ -1206,6 +1208,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
1206
1208
|
this.emit('cleanup_started');
|
|
1207
1209
|
this.hasCleanupStarted = true;
|
|
1208
1210
|
this.log.info(message);
|
|
1211
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'stopping') } });
|
|
1209
1212
|
if (this.startMatterInterval) {
|
|
1210
1213
|
clearInterval(this.startMatterInterval);
|
|
1211
1214
|
this.startMatterInterval = undefined;
|
|
@@ -1354,6 +1357,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
1354
1357
|
unlinkSafe(path.join(this.matterbridgeDirectory, MATTER_STORAGE_DIR, device.deviceName.replace(/[ .]/g, ''), 'root.subscriptions.subscriptions'), this.log);
|
|
1355
1358
|
}
|
|
1356
1359
|
}
|
|
1360
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'stopped') } });
|
|
1357
1361
|
await this.frontend.stop();
|
|
1358
1362
|
this.frontend.destroy();
|
|
1359
1363
|
this.plugins.destroy();
|
|
@@ -1442,16 +1446,36 @@ export class Matterbridge extends EventEmitter {
|
|
|
1442
1446
|
this.log.debug('Cleanup already started...');
|
|
1443
1447
|
}
|
|
1444
1448
|
}
|
|
1449
|
+
sendPluginStatusUpdate(plugin) {
|
|
1450
|
+
this.server.request({
|
|
1451
|
+
type: 'frontend_pluginstatusupdate',
|
|
1452
|
+
src: 'matterbridge',
|
|
1453
|
+
dst: 'frontend',
|
|
1454
|
+
params: {
|
|
1455
|
+
plugin: plugin.name,
|
|
1456
|
+
status: {
|
|
1457
|
+
locked: plugin.locked,
|
|
1458
|
+
error: plugin.error,
|
|
1459
|
+
enabled: plugin.enabled,
|
|
1460
|
+
loaded: plugin.loaded,
|
|
1461
|
+
started: plugin.started,
|
|
1462
|
+
configured: plugin.configured,
|
|
1463
|
+
registeredDevices: plugin.registeredDevices,
|
|
1464
|
+
},
|
|
1465
|
+
},
|
|
1466
|
+
});
|
|
1467
|
+
}
|
|
1445
1468
|
async startBridge() {
|
|
1446
1469
|
if (!this.matterStorageManager)
|
|
1447
1470
|
throw new Error('No storage manager initialized');
|
|
1448
1471
|
if (!this.matterbridgeContext)
|
|
1449
1472
|
throw new Error('No storage context initialized');
|
|
1473
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'starting') } });
|
|
1450
1474
|
this.serverNode = await this.createServerNode(this.matterbridgeContext, this.port ? this.port++ : undefined, this.passcode ? this.passcode++ : undefined, this.discriminator ? this.discriminator++ : undefined);
|
|
1451
1475
|
this.aggregatorNode = await this.createAggregatorNode(this.matterbridgeContext);
|
|
1452
1476
|
await this.serverNode.add(this.aggregatorNode);
|
|
1453
1477
|
await addVirtualDevices(this, this.aggregatorNode);
|
|
1454
|
-
await this.startPlugins();
|
|
1478
|
+
await this.startPlugins(false, true);
|
|
1455
1479
|
this.log.debug('Starting start matter interval in bridge mode...');
|
|
1456
1480
|
this.frontend.wssSendSnackbarMessage(`The bridge is starting...`, 0, 'info');
|
|
1457
1481
|
let failCount = 0;
|
|
@@ -1459,7 +1483,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
1459
1483
|
void (async () => {
|
|
1460
1484
|
if (failCount && failCount % 10 === 0) {
|
|
1461
1485
|
this.frontend.wssSendSnackbarMessage(`The bridge is still starting...`, 10, 'info');
|
|
1462
|
-
this.frontend.wssSendRefreshRequired('plugins');
|
|
1463
1486
|
}
|
|
1464
1487
|
for (const plugin of this.plugins) {
|
|
1465
1488
|
if (!plugin.enabled)
|
|
@@ -1475,8 +1498,10 @@ export class Matterbridge extends EventEmitter {
|
|
|
1475
1498
|
this.frontend.wssSendSnackbarMessage(`The bridge is offline. Startup halted due to plugin errors.`, 0, 'error');
|
|
1476
1499
|
this.frontend.wssSendRefreshRequired('plugins');
|
|
1477
1500
|
this.frontend.wssSendCloseSnackbarMessage(`The bridge is starting...`);
|
|
1501
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'error') } });
|
|
1478
1502
|
return;
|
|
1479
1503
|
}
|
|
1504
|
+
this.sendPluginStatusUpdate(plugin);
|
|
1480
1505
|
if (!plugin.loaded || !plugin.started) {
|
|
1481
1506
|
this.log.debug(`Waiting (failSafeCount=${failCount}/${this.failCountLimit}) in startMatterInterval interval for plugin ${plg}${plugin.name}${db} loaded: ${plugin.loaded} started: ${plugin.started}...`);
|
|
1482
1507
|
failCount++;
|
|
@@ -1512,20 +1537,20 @@ export class Matterbridge extends EventEmitter {
|
|
|
1512
1537
|
plugin.error = true;
|
|
1513
1538
|
this.log.error(`Error configuring plugin ${plg}${plugin.name}${er}`, error);
|
|
1514
1539
|
}
|
|
1540
|
+
this.sendPluginStatusUpdate(plugin);
|
|
1515
1541
|
}
|
|
1516
|
-
this.frontend.wssSendRefreshRequired('plugins');
|
|
1517
1542
|
})();
|
|
1518
1543
|
}, 30 * 1000).unref();
|
|
1519
1544
|
this.reachabilityTimeout = setTimeout(() => {
|
|
1520
1545
|
this.log.info(`Setting reachability to true for ${plg}Matterbridge${db}`);
|
|
1521
1546
|
if (this.aggregatorNode)
|
|
1522
|
-
fireAndForget(this.setAggregatorReachability(this.aggregatorNode, true), this.log, `
|
|
1547
|
+
fireAndForget(this.setAggregatorReachability(this.aggregatorNode, true), this.log, `Failed to set aggregator node reachability for Matterbridge`);
|
|
1523
1548
|
}, 60 * 1000).unref();
|
|
1524
1549
|
this.emit('bridge_started');
|
|
1525
1550
|
this.log.notice('Matterbridge bridge started successfully');
|
|
1526
|
-
this.
|
|
1527
|
-
this.
|
|
1528
|
-
this.
|
|
1551
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'started') } });
|
|
1552
|
+
this.server.request({ type: 'frontend_refreshrequired', src: 'matterbridge', dst: 'frontend', params: { changed: 'plugins' } });
|
|
1553
|
+
this.server.request({ type: 'frontend_closesnackbarmessage', src: 'matterbridge', dst: 'frontend', params: { message: `The bridge is starting...` } });
|
|
1529
1554
|
})();
|
|
1530
1555
|
}, Number(process.env['MATTERBRIDGE_START_MATTER_INTERVAL_MS']) || this.startMatterIntervalMs);
|
|
1531
1556
|
}
|
|
@@ -1533,6 +1558,7 @@ export class Matterbridge extends EventEmitter {
|
|
|
1533
1558
|
if (!this.matterStorageManager)
|
|
1534
1559
|
throw new Error('No storage manager initialized');
|
|
1535
1560
|
const { wait } = await import('@matterbridge/utils/wait');
|
|
1561
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'starting') } });
|
|
1536
1562
|
this.log.debug('Loading all plugins in childbridge mode...');
|
|
1537
1563
|
await this.startPlugins(true, false);
|
|
1538
1564
|
this.log.debug('Creating server nodes for DynamicPlatform plugins and starting all plugins in childbridge mode...');
|
|
@@ -1548,7 +1574,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
1548
1574
|
void (async () => {
|
|
1549
1575
|
if (failCount && failCount % 10 === 0) {
|
|
1550
1576
|
this.frontend.wssSendSnackbarMessage(`The bridge is still starting...`, 10, 'info');
|
|
1551
|
-
this.frontend.wssSendRefreshRequired('plugins');
|
|
1552
1577
|
}
|
|
1553
1578
|
let allStarted = true;
|
|
1554
1579
|
for (const plugin of this.plugins.array()) {
|
|
@@ -1565,8 +1590,10 @@ export class Matterbridge extends EventEmitter {
|
|
|
1565
1590
|
this.frontend.wssSendSnackbarMessage(`The bridge is offline. Startup halted due to plugin errors.`, 0, 'error');
|
|
1566
1591
|
this.frontend.wssSendRefreshRequired('plugins');
|
|
1567
1592
|
this.frontend.wssSendCloseSnackbarMessage(`The bridge is starting...`);
|
|
1593
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'error') } });
|
|
1568
1594
|
return;
|
|
1569
1595
|
}
|
|
1596
|
+
this.sendPluginStatusUpdate(plugin);
|
|
1570
1597
|
this.log.debug(`Checking plugin ${plg}${plugin.name}${db} to start matter in childbridge mode...`);
|
|
1571
1598
|
if (!plugin.loaded || !plugin.started) {
|
|
1572
1599
|
allStarted = false;
|
|
@@ -1600,8 +1627,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
1600
1627
|
plugin.error = true;
|
|
1601
1628
|
this.log.error(`Error configuring plugin ${plg}${plugin.name}${er}`, error);
|
|
1602
1629
|
}
|
|
1630
|
+
this.sendPluginStatusUpdate(plugin);
|
|
1603
1631
|
}
|
|
1604
|
-
this.frontend.wssSendRefreshRequired('plugins');
|
|
1605
1632
|
})();
|
|
1606
1633
|
}, 30 * 1000).unref();
|
|
1607
1634
|
for (const plugin of this.plugins.array()) {
|
|
@@ -1638,9 +1665,9 @@ export class Matterbridge extends EventEmitter {
|
|
|
1638
1665
|
}
|
|
1639
1666
|
this.emit('childbridge_started');
|
|
1640
1667
|
this.log.notice('Matterbridge childbridge started successfully');
|
|
1641
|
-
this.
|
|
1642
|
-
this.
|
|
1643
|
-
this.
|
|
1668
|
+
this.server.request({ type: 'frontend_matterbridgestatusupdate', src: 'matterbridge', dst: 'frontend', params: { status: (this.bridgeStatus = 'started') } });
|
|
1669
|
+
this.server.request({ type: 'frontend_refreshrequired', src: 'matterbridge', dst: 'frontend', params: { changed: 'plugins' } });
|
|
1670
|
+
this.server.request({ type: 'frontend_closesnackbarmessage', src: 'matterbridge', dst: 'frontend', params: { message: `The bridge is starting...` } });
|
|
1644
1671
|
})();
|
|
1645
1672
|
}, Number(process.env['MATTERBRIDGE_START_MATTER_INTERVAL_MS']) || this.startMatterIntervalMs);
|
|
1646
1673
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matterbridge/core",
|
|
3
|
-
"version": "3.9.2-dev-
|
|
3
|
+
"version": "3.9.2-dev-20260621-75283ba",
|
|
4
4
|
"description": "Matterbridge core library",
|
|
5
5
|
"author": "https://github.com/Luligu",
|
|
6
6
|
"homepage": "https://matterbridge.io/",
|
|
@@ -130,10 +130,10 @@
|
|
|
130
130
|
],
|
|
131
131
|
"dependencies": {
|
|
132
132
|
"@matter/main": "0.17.3",
|
|
133
|
-
"@matterbridge/dgram": "3.9.2-dev-
|
|
134
|
-
"@matterbridge/thread": "3.9.2-dev-
|
|
135
|
-
"@matterbridge/types": "3.9.2-dev-
|
|
136
|
-
"@matterbridge/utils": "3.9.2-dev-
|
|
133
|
+
"@matterbridge/dgram": "3.9.2-dev-20260621-75283ba",
|
|
134
|
+
"@matterbridge/thread": "3.9.2-dev-20260621-75283ba",
|
|
135
|
+
"@matterbridge/types": "3.9.2-dev-20260621-75283ba",
|
|
136
|
+
"@matterbridge/utils": "3.9.2-dev-20260621-75283ba",
|
|
137
137
|
"escape-html": "1.0.3",
|
|
138
138
|
"express": "5.2.1",
|
|
139
139
|
"express-rate-limit": "8.5.2",
|