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 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.addedDevices = undefined;
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' }));
@@ -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 { DeviceCommissioner, FabricAction, MdnsService, PaseClient } from '@matter/main/protocol';
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.addedDevices || plugin.addedDevices === 0)) {
1336
- this.log.error(`Plugin ${plg}${plugin.name}${er} didn't add any devices to Matterbridge. Verify the plugin configuration.`);
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}/${plugin.addedDevices}) ${dev}${device.deviceName}${nf} (${dev}${device.id}${nf}) for plugin ${plg}${pluginName}${nf}`);
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}/${plugin.addedDevices}) ${dev}${device.deviceName}${nf} (${zb}${device.name}${nf}) for plugin ${plg}${pluginName}${nf}`);
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}/${plugin.addedDevices}) ${dev}${device.deviceName}${nf} (${zb}${device.name}${nf}) for plugin ${plg}${pluginName}${nf}`);
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
  }
@@ -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.c1ca9eaf.js",
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.c1ca9eaf.js.map": "./static/js/main.c1ca9eaf.js.map"
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.c1ca9eaf.js"
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.c1ca9eaf.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>
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>