matterbridge 3.2.8-dev-20250916-967e0b8 → 3.2.8-dev-20250916-da71182
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/frontend.js +2 -24
- package/dist/matterbridge.js +6 -33
- package/dist/pluginManager.js +0 -2
- package/frontend/build/asset-manifest.json +3 -3
- package/frontend/build/index.html +1 -1
- package/frontend/build/static/js/{main.c1ca9eaf.js → main.565f820c.js} +3 -3
- package/frontend/build/static/js/{main.c1ca9eaf.js.map → main.565f820c.js.map} +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- /package/frontend/build/static/js/{main.c1ca9eaf.js.LICENSE.txt → main.565f820c.js.LICENSE.txt} +0 -0
package/dist/frontend.js
CHANGED
|
@@ -853,7 +853,6 @@ export class Frontend extends EventEmitter {
|
|
|
853
853
|
funding: plugin.funding,
|
|
854
854
|
latestVersion: plugin.latestVersion,
|
|
855
855
|
devVersion: plugin.devVersion,
|
|
856
|
-
serialNumber: plugin.serialNumber,
|
|
857
856
|
locked: plugin.locked,
|
|
858
857
|
error: plugin.error,
|
|
859
858
|
enabled: plugin.enabled,
|
|
@@ -862,17 +861,11 @@ export class Frontend extends EventEmitter {
|
|
|
862
861
|
configured: plugin.configured,
|
|
863
862
|
restartRequired: plugin.restartRequired,
|
|
864
863
|
registeredDevices: plugin.registeredDevices,
|
|
865
|
-
addedDevices: plugin.addedDevices,
|
|
866
864
|
configJson: plugin.configJson,
|
|
867
865
|
schemaJson: plugin.schemaJson,
|
|
868
866
|
hasWhiteList: plugin.configJson?.whiteList !== undefined,
|
|
869
867
|
hasBlackList: plugin.configJson?.blackList !== undefined,
|
|
870
868
|
matter: plugin.serverNode ? this.matterbridge.getServerNodeData(plugin.serverNode) : undefined,
|
|
871
|
-
paired: plugin.serverNode && plugin.serverNode.lifecycle.isOnline ? plugin.serverNode.state.commissioning.commissioned : undefined,
|
|
872
|
-
qrPairingCode: this.matterbridge.matterbridgeInformation.matterbridgeEndAdvertise ? undefined : plugin.serverNode && plugin.serverNode.lifecycle.isOnline ? plugin.serverNode.state.commissioning.pairingCodes.qrPairingCode : undefined,
|
|
873
|
-
manualPairingCode: this.matterbridge.matterbridgeInformation.matterbridgeEndAdvertise ? undefined : plugin.serverNode && plugin.serverNode.lifecycle.isOnline ? plugin.serverNode.state.commissioning.pairingCodes.manualPairingCode : undefined,
|
|
874
|
-
fabricInformations: plugin.serverNode && plugin.serverNode.lifecycle.isOnline ? this.matterbridge.sanitizeFabricInformations(Object.values(plugin.serverNode.state.commissioning.fabrics)) : undefined,
|
|
875
|
-
sessionInformations: plugin.serverNode && plugin.serverNode.lifecycle.isOnline ? this.matterbridge.sanitizeSessionInformation(Object.values(plugin.serverNode.state.sessions.sessions)) : undefined,
|
|
876
869
|
});
|
|
877
870
|
}
|
|
878
871
|
return baseRegisteredPlugins;
|
|
@@ -1139,7 +1132,7 @@ export class Frontend extends EventEmitter {
|
|
|
1139
1132
|
plugin.configured = undefined;
|
|
1140
1133
|
plugin.platform = undefined;
|
|
1141
1134
|
plugin.registeredDevices = undefined;
|
|
1142
|
-
plugin.
|
|
1135
|
+
plugin.matter = undefined;
|
|
1143
1136
|
await this.matterbridge.plugins.enable(data.params.pluginName);
|
|
1144
1137
|
this.wssSendSnackbarMessage(`Enabled plugin ${data.params.pluginName}`, 5, 'success');
|
|
1145
1138
|
this.matterbridge.plugins
|
|
@@ -1185,9 +1178,8 @@ export class Frontend extends EventEmitter {
|
|
|
1185
1178
|
this.matterbridge.devices.remove(device);
|
|
1186
1179
|
}
|
|
1187
1180
|
}
|
|
1188
|
-
if (plugin.type === 'DynamicPlatform' && !plugin.locked)
|
|
1181
|
+
if (plugin.type === 'DynamicPlatform' && !plugin.locked)
|
|
1189
1182
|
await this.matterbridge.createDynamicPlugin(plugin);
|
|
1190
|
-
}
|
|
1191
1183
|
await this.matterbridge.plugins.load(plugin, true, 'The plugin has been restarted', true);
|
|
1192
1184
|
plugin.restartRequired = false;
|
|
1193
1185
|
let needRestart = 0;
|
|
@@ -1300,20 +1292,6 @@ export class Frontend extends EventEmitter {
|
|
|
1300
1292
|
await this.matterbridge.shutdownProcessAndFactoryReset();
|
|
1301
1293
|
client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
|
|
1302
1294
|
}
|
|
1303
|
-
else if (data.method === '/api/advertise') {
|
|
1304
|
-
const pairingCodes = await this.matterbridge.advertiseServerNode(this.matterbridge.serverNode);
|
|
1305
|
-
this.matterbridge.matterbridgeInformation.matterbridgeAdvertise = true;
|
|
1306
|
-
this.wssSendRefreshRequired('matterbridgeAdvertise');
|
|
1307
|
-
this.wssSendSnackbarMessage(`Started fabrics share`, 0);
|
|
1308
|
-
client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, response: pairingCodes, success: true }));
|
|
1309
|
-
}
|
|
1310
|
-
else if (data.method === '/api/stopadvertise') {
|
|
1311
|
-
await this.matterbridge.stopAdvertiseServerNode(this.matterbridge.serverNode);
|
|
1312
|
-
this.matterbridge.matterbridgeInformation.matterbridgeAdvertise = false;
|
|
1313
|
-
this.wssSendRefreshRequired('matterbridgeAdvertise');
|
|
1314
|
-
this.wssSendSnackbarMessage(`Stopped fabrics share`, 0);
|
|
1315
|
-
client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
|
|
1316
|
-
}
|
|
1317
1295
|
else if (data.method === '/api/matter') {
|
|
1318
1296
|
if (!isValidString(data.params.id)) {
|
|
1319
1297
|
client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, error: 'Wrong parameter id in /api/matter' }));
|
package/dist/matterbridge.js
CHANGED
|
@@ -6,7 +6,7 @@ import { inspect } from 'node:util';
|
|
|
6
6
|
import { AnsiLogger, UNDERLINE, UNDERLINEOFF, db, debugStringify, BRIGHT, RESET, er, nf, rs, wr, RED, GREEN, zb, CYAN, nt, BLUE } from 'node-ansi-logger';
|
|
7
7
|
import { NodeStorageManager } from 'node-persist-manager';
|
|
8
8
|
import { DeviceTypeId, Endpoint, Logger, LogLevel as MatterLogLevel, LogFormat as MatterLogFormat, VendorId, StorageService, Environment, ServerNode, UINT32_MAX, UINT16_MAX, Crypto, } from '@matter/main';
|
|
9
|
-
import {
|
|
9
|
+
import { FabricAction, MdnsService, PaseClient } from '@matter/main/protocol';
|
|
10
10
|
import { AggregatorEndpoint } from '@matter/main/endpoints';
|
|
11
11
|
import { BasicInformationServer } from '@matter/main/behaviors/basic-information';
|
|
12
12
|
import { BridgedDeviceBasicInformationServer } from '@matter/main/behaviors/bridged-device-basic-information';
|
|
@@ -768,7 +768,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
768
768
|
plugin.started = false;
|
|
769
769
|
plugin.configured = false;
|
|
770
770
|
plugin.registeredDevices = undefined;
|
|
771
|
-
plugin.addedDevices = undefined;
|
|
772
771
|
this.plugins.load(plugin, true, 'Matterbridge is starting');
|
|
773
772
|
}
|
|
774
773
|
this.frontend.wssSendRefreshRequired('plugins');
|
|
@@ -976,10 +975,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
976
975
|
if (plugin.error || !plugin.enabled)
|
|
977
976
|
continue;
|
|
978
977
|
const registeredDevices = plugin.registeredDevices;
|
|
979
|
-
const addedDevices = plugin.addedDevices;
|
|
980
978
|
await this.plugins.shutdown(plugin, 'unregistering all devices and shutting down...', false, true);
|
|
981
979
|
plugin.registeredDevices = registeredDevices;
|
|
982
|
-
plugin.addedDevices = addedDevices;
|
|
983
980
|
await this.removeAllBridgedEndpoints(plugin.name, 100);
|
|
984
981
|
}
|
|
985
982
|
this.log.debug('Waiting for the MessageExchange to finish...');
|
|
@@ -1182,7 +1179,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
1182
1179
|
plugin.device = device;
|
|
1183
1180
|
plugin.storageContext = await this.createServerNodeContext(plugin.name, device.deviceName, DeviceTypeId(device.deviceType), device.vendorId, device.vendorName, device.productId, device.productName);
|
|
1184
1181
|
plugin.serverNode = await this.createServerNode(plugin.storageContext, this.port ? this.port++ : undefined, this.passcode ? this.passcode++ : undefined, this.discriminator ? this.discriminator++ : undefined);
|
|
1185
|
-
plugin.serialNumber = await plugin.storageContext.get('serialNumber', '');
|
|
1186
1182
|
this.log.debug(`Adding ${plg}${plugin.name}${db}:${dev}${device.deviceName}${db} to ${plg}${plugin.name}${db} server node`);
|
|
1187
1183
|
await plugin.serverNode.add(device);
|
|
1188
1184
|
}
|
|
@@ -1193,7 +1189,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
1193
1189
|
plugin.storageContext = await this.createServerNodeContext(plugin.name, 'Matterbridge', this.aggregatorDeviceType, this.aggregatorVendorId, this.aggregatorVendorName, this.aggregatorProductId, plugin.description);
|
|
1194
1190
|
plugin.serverNode = await this.createServerNode(plugin.storageContext, this.port ? this.port++ : undefined, this.passcode ? this.passcode++ : undefined, this.discriminator ? this.discriminator++ : undefined);
|
|
1195
1191
|
plugin.aggregatorNode = await this.createAggregatorNode(plugin.storageContext);
|
|
1196
|
-
plugin.serialNumber = await plugin.storageContext.get('serialNumber', '');
|
|
1197
1192
|
await plugin.serverNode.add(plugin.aggregatorNode);
|
|
1198
1193
|
}
|
|
1199
1194
|
}
|
|
@@ -1332,8 +1327,8 @@ export class Matterbridge extends EventEmitter {
|
|
|
1332
1327
|
for (const plugin of this.plugins.array()) {
|
|
1333
1328
|
if (!plugin.enabled || plugin.error)
|
|
1334
1329
|
continue;
|
|
1335
|
-
if (plugin.type !== 'DynamicPlatform' && (!plugin.
|
|
1336
|
-
this.log.error(`Plugin ${plg}${plugin.name}${er} didn't
|
|
1330
|
+
if (plugin.type !== 'DynamicPlatform' && (!plugin.registeredDevices || plugin.registeredDevices === 0)) {
|
|
1331
|
+
this.log.error(`Plugin ${plg}${plugin.name}${er} didn't register any devices to Matterbridge. Verify the plugin configuration.`);
|
|
1337
1332
|
continue;
|
|
1338
1333
|
}
|
|
1339
1334
|
if (!plugin.serverNode) {
|
|
@@ -1607,22 +1602,6 @@ export class Matterbridge extends EventEmitter {
|
|
|
1607
1602
|
this.log.error(`Failed to close ${matterServerNode.id} server node: ${error instanceof Error ? error.message : error}`);
|
|
1608
1603
|
}
|
|
1609
1604
|
}
|
|
1610
|
-
async advertiseServerNode(matterServerNode) {
|
|
1611
|
-
if (matterServerNode) {
|
|
1612
|
-
await matterServerNode.env.get(DeviceCommissioner)?.allowBasicCommissioning();
|
|
1613
|
-
const { qrPairingCode, manualPairingCode } = matterServerNode.state.commissioning.pairingCodes;
|
|
1614
|
-
this.advertisingNodes.set(matterServerNode.id, Date.now());
|
|
1615
|
-
this.log.notice(`Started advertising for ${matterServerNode.id} with the following pairing codes: qrPairingCode ${qrPairingCode}, manualPairingCode ${manualPairingCode}`);
|
|
1616
|
-
return { qrPairingCode, manualPairingCode };
|
|
1617
|
-
}
|
|
1618
|
-
}
|
|
1619
|
-
async stopAdvertiseServerNode(matterServerNode) {
|
|
1620
|
-
if (matterServerNode && matterServerNode.lifecycle.isOnline) {
|
|
1621
|
-
await matterServerNode.env.get(DeviceCommissioner)?.endCommissioning();
|
|
1622
|
-
this.advertisingNodes.delete(matterServerNode.id);
|
|
1623
|
-
this.log.notice(`Stopped advertising for ${matterServerNode.id}`);
|
|
1624
|
-
}
|
|
1625
|
-
}
|
|
1626
1605
|
async createAggregatorNode(storageContext) {
|
|
1627
1606
|
this.log.notice(`Creating ${await storageContext.get('storeId')} aggregator...`);
|
|
1628
1607
|
const aggregatorNode = new Endpoint(AggregatorEndpoint, { id: `${await storageContext.get('storeId')}` });
|
|
@@ -1729,11 +1708,9 @@ export class Matterbridge extends EventEmitter {
|
|
|
1729
1708
|
}
|
|
1730
1709
|
if (plugin.registeredDevices !== undefined)
|
|
1731
1710
|
plugin.registeredDevices++;
|
|
1732
|
-
if (plugin.addedDevices !== undefined)
|
|
1733
|
-
plugin.addedDevices++;
|
|
1734
1711
|
this.devices.set(device);
|
|
1735
1712
|
await this.subscribeAttributeChanged(plugin, device);
|
|
1736
|
-
this.log.info(`Added and registered bridged endpoint (${plugin.registeredDevices}
|
|
1713
|
+
this.log.info(`Added and registered bridged endpoint (${plugin.registeredDevices}) ${dev}${device.deviceName}${nf} (${dev}${device.id}${nf}) for plugin ${plg}${pluginName}${nf}`);
|
|
1737
1714
|
}
|
|
1738
1715
|
async removeBridgedEndpoint(pluginName, device) {
|
|
1739
1716
|
this.log.debug(`Removing bridged endpoint ${plg}${pluginName}${db}:${dev}${device.deviceName}${db} (${zb}${device.name}${db}) for plugin ${plg}${pluginName}${db}`);
|
|
@@ -1748,11 +1725,9 @@ export class Matterbridge extends EventEmitter {
|
|
|
1748
1725
|
return;
|
|
1749
1726
|
}
|
|
1750
1727
|
await device.delete();
|
|
1751
|
-
this.log.info(`Removed bridged endpoint(${plugin.registeredDevices}
|
|
1728
|
+
this.log.info(`Removed bridged endpoint(${plugin.registeredDevices}) ${dev}${device.deviceName}${nf} (${zb}${device.name}${nf}) for plugin ${plg}${pluginName}${nf}`);
|
|
1752
1729
|
if (plugin.registeredDevices !== undefined)
|
|
1753
1730
|
plugin.registeredDevices--;
|
|
1754
|
-
if (plugin.addedDevices !== undefined)
|
|
1755
|
-
plugin.addedDevices--;
|
|
1756
1731
|
}
|
|
1757
1732
|
else if (this.bridgeMode === 'childbridge') {
|
|
1758
1733
|
if (plugin.type === 'AccessoryPlatform') {
|
|
@@ -1764,11 +1739,9 @@ export class Matterbridge extends EventEmitter {
|
|
|
1764
1739
|
}
|
|
1765
1740
|
await device.delete();
|
|
1766
1741
|
}
|
|
1767
|
-
this.log.info(`Removed bridged endpoint(${plugin.registeredDevices}
|
|
1742
|
+
this.log.info(`Removed bridged endpoint(${plugin.registeredDevices}) ${dev}${device.deviceName}${nf} (${zb}${device.name}${nf}) for plugin ${plg}${pluginName}${nf}`);
|
|
1768
1743
|
if (plugin.registeredDevices !== undefined)
|
|
1769
1744
|
plugin.registeredDevices--;
|
|
1770
|
-
if (plugin.addedDevices !== undefined)
|
|
1771
|
-
plugin.addedDevices--;
|
|
1772
1745
|
}
|
|
1773
1746
|
this.devices.remove(device);
|
|
1774
1747
|
}
|
package/dist/pluginManager.js
CHANGED
|
@@ -484,7 +484,6 @@ export class PluginManager extends EventEmitter {
|
|
|
484
484
|
plugin.platform = platform;
|
|
485
485
|
plugin.loaded = true;
|
|
486
486
|
plugin.registeredDevices = 0;
|
|
487
|
-
plugin.addedDevices = 0;
|
|
488
487
|
await this.saveToStorage();
|
|
489
488
|
this.log.notice(`Loaded plugin ${plg}${plugin.name}${nt} type ${typ}${platform.type}${nt} (entrypoint ${UNDERLINE}${pluginEntry}${UNDERLINEOFF})`);
|
|
490
489
|
this.emit('loaded', plugin.name);
|
|
@@ -599,7 +598,6 @@ export class PluginManager extends EventEmitter {
|
|
|
599
598
|
await this.matterbridge.removeAllBridgedEndpoints(plugin.name);
|
|
600
599
|
}
|
|
601
600
|
plugin.registeredDevices = undefined;
|
|
602
|
-
plugin.addedDevices = undefined;
|
|
603
601
|
this.log.notice(`Shutdown of plugin ${plg}${plugin.name}${nt} completed`);
|
|
604
602
|
this.emit('shutdown', plugin.name);
|
|
605
603
|
return plugin;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
3
|
"main.css": "./static/css/main.56c16a87.css",
|
|
4
|
-
"main.js": "./static/js/main.
|
|
4
|
+
"main.js": "./static/js/main.565f820c.js",
|
|
5
5
|
"static/media/roboto-latin-700-normal.woff2": "./static/media/roboto-latin-700-normal.c4d6cab43bec89049809.woff2",
|
|
6
6
|
"static/media/roboto-latin-500-normal.woff2": "./static/media/roboto-latin-500-normal.599f66a60bdf974e578e.woff2",
|
|
7
7
|
"static/media/roboto-latin-300-normal.woff2": "./static/media/roboto-latin-300-normal.db56943a88e4852343ae.woff2",
|
|
@@ -76,10 +76,10 @@
|
|
|
76
76
|
"static/media/roboto-greek-ext-300-normal.woff": "./static/media/roboto-greek-ext-300-normal.60729cafbded24073dfb.woff",
|
|
77
77
|
"index.html": "./index.html",
|
|
78
78
|
"main.56c16a87.css.map": "./static/css/main.56c16a87.css.map",
|
|
79
|
-
"main.
|
|
79
|
+
"main.565f820c.js.map": "./static/js/main.565f820c.js.map"
|
|
80
80
|
},
|
|
81
81
|
"entrypoints": [
|
|
82
82
|
"static/css/main.56c16a87.css",
|
|
83
|
-
"static/js/main.
|
|
83
|
+
"static/js/main.565f820c.js"
|
|
84
84
|
]
|
|
85
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.
|
|
1
|
+
<!doctype html><html lang="en"><head><meta charset="utf-8"/><base href="./"><link rel="icon" href="./matterbridge 32x32.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><title>Matterbridge</title><link rel="manifest" href="./manifest.json"/><script defer="defer" src="./static/js/main.565f820c.js"></script><link href="./static/css/main.56c16a87.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|