matterbridge 3.1.8-dev-20250726-f93c04c → 3.1.8-dev-20250726-aa58df5

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/CHANGELOG.md CHANGED
@@ -12,11 +12,15 @@ If you like this project and find it useful, please consider giving it a star on
12
12
 
13
13
  ### Added
14
14
 
15
+ - [Jest]: Total coverage 100%.
15
16
  - [certification]: Improved certification management in pairing.json. Added pemToBuffer function for converting PEM strings to Uint8Array.
17
+ - [certification]: Improved certification management in pairing.json. Added extractPrivateKeyRaw function for extrating the raw part of PEM private key to Uint8Array.
16
18
  - [workflow]: Update permissions and change GitHub token for Docker build triggers.
19
+ - [frontend]: Improved test units on Frontend class (total coverage 100%).
17
20
  - [frontend]: Bump version 2.7.1.
18
- - [frontend]: Added Changelog button when a new version is installed.
21
+ - [frontend]: Added Changelog button that appears in the frontend when a new version is installed and the frontend needs to be updated (page refresh).
19
22
  - [frontend]: Added restart plugin in childbridge mode.
23
+ - [frontend]: Added update to stable and update to dev banner. The update to dev pops up only if you are on the dev.
20
24
 
21
25
  ### Changed
22
26
 
@@ -25,6 +29,7 @@ If you like this project and find it useful, please consider giving it a star on
25
29
  ### Fixed
26
30
 
27
31
  - [switch]: Added conditional handling for momentary switch events in MatterbridgeEndpoint for single press only switches.
32
+ - [advertise]: Changed the message advertise stopped to work also in childbridge mode.
28
33
 
29
34
  <a href="https://www.buymeacoffee.com/luligugithub">
30
35
  <img src="bmc-button.svg" alt="Buy me a coffee" width="80">
package/dist/frontend.js CHANGED
@@ -1131,9 +1131,16 @@ export class Frontend extends EventEmitter {
1131
1131
  }
1132
1132
  await this.matterbridge.plugins.load(plugin, true, 'The plugin has been restarted', true);
1133
1133
  plugin.restartRequired = false;
1134
- if (plugin.serverNode) {
1135
- await this.matterbridge.startServerNode(plugin.serverNode);
1134
+ let needRestart = 0;
1135
+ for (const plugin of this.matterbridge.plugins) {
1136
+ if (plugin.restartRequired)
1137
+ needRestart++;
1138
+ }
1139
+ if (needRestart === 0) {
1140
+ this.wssSendRestartNotRequired(true);
1136
1141
  }
1142
+ if (plugin.serverNode)
1143
+ await this.matterbridge.startServerNode(plugin.serverNode);
1137
1144
  this.wssSendSnackbarMessage(`Restarted plugin ${data.params.pluginName}`, 5, 'success');
1138
1145
  this.wssSendRefreshRequired('plugins');
1139
1146
  this.wssSendRefreshRequired('devices');
@@ -1158,6 +1165,11 @@ export class Frontend extends EventEmitter {
1158
1165
  client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1159
1166
  }
1160
1167
  }
1168
+ else if (data.method === '/api/checkupdates') {
1169
+ const { checkUpdates } = await import('./update.js');
1170
+ checkUpdates(this.matterbridge);
1171
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1172
+ }
1161
1173
  else if (data.method === '/api/shellysysupdate') {
1162
1174
  const { triggerShellySysUpdate } = await import('./shelly.js');
1163
1175
  triggerShellySysUpdate(this.matterbridge);
@@ -1689,12 +1701,23 @@ export class Frontend extends EventEmitter {
1689
1701
  }
1690
1702
  });
1691
1703
  }
1692
- wssSendUpdateRequired() {
1704
+ wssSendRestartNotRequired(snackbar = true) {
1705
+ this.log.debug('Sending a restart not required message to all connected clients');
1706
+ this.matterbridge.matterbridgeInformation.restartRequired = false;
1707
+ if (snackbar === true)
1708
+ this.wssSendCloseSnackbarMessage(`Restart required`);
1709
+ this.webSocketServer?.clients.forEach((client) => {
1710
+ if (client.readyState === WebSocket.OPEN) {
1711
+ client.send(JSON.stringify({ id: WS_ID_RESTART_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: 'restart_not_required', params: {} }));
1712
+ }
1713
+ });
1714
+ }
1715
+ wssSendUpdateRequired(devVersion = false) {
1693
1716
  this.log.debug('Sending an update required message to all connected clients');
1694
1717
  this.matterbridge.matterbridgeInformation.updateRequired = true;
1695
1718
  this.webSocketServer?.clients.forEach((client) => {
1696
1719
  if (client.readyState === WebSocket.OPEN) {
1697
- client.send(JSON.stringify({ id: WS_ID_UPDATE_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: 'update_required', params: {} }));
1720
+ client.send(JSON.stringify({ id: WS_ID_UPDATE_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: devVersion ? 'update_required_dev' : 'update_required', params: {} }));
1698
1721
  }
1699
1722
  });
1700
1723
  }
@@ -1587,8 +1587,8 @@ export class Matterbridge extends EventEmitter {
1587
1587
  this.frontend.wssSendRefreshRequired('settings');
1588
1588
  this.frontend.wssSendRefreshRequired('fabrics');
1589
1589
  this.frontend.wssSendRefreshRequired('sessions');
1590
- this.frontend.wssSendSnackbarMessage(`Advertising on server node for ${matterServerNode.id} stopped. Restart to commission.`, 0);
1591
- this.log.notice(`Advertising on server node for ${matterServerNode.id} stopped. Restart to commission.`);
1590
+ this.frontend.wssSendSnackbarMessage(`Advertising stopped. Restart to commission again.`, 0);
1591
+ this.log.notice(`Advertising stopped. Restart to commission again.`);
1592
1592
  }, 15 * 60 * 1000).unref();
1593
1593
  }
1594
1594
  async startServerNode(matterServerNode) {
package/dist/update.js CHANGED
@@ -47,12 +47,12 @@ export async function getMatterbridgeDevVersion(matterbridge) {
47
47
  matterbridge.matterbridgeDevVersion = version;
48
48
  matterbridge.matterbridgeInformation.matterbridgeDevVersion = version;
49
49
  await matterbridge.nodeContext?.set('matterbridgeDevVersion', version);
50
- if (matterbridge.matterbridgeVersion.includes('-dev.') && matterbridge.matterbridgeVersion !== version) {
50
+ if (matterbridge.matterbridgeVersion.includes('-dev-') && matterbridge.matterbridgeVersion !== version) {
51
51
  matterbridge.log.notice(`Matterbridge@dev is out of date. Current version: ${matterbridge.matterbridgeVersion}. Latest dev version: ${matterbridge.matterbridgeDevVersion}.`);
52
52
  matterbridge.frontend.wssSendRefreshRequired('matterbridgeDevVersion');
53
- matterbridge.frontend.wssSendUpdateRequired();
53
+ matterbridge.frontend.wssSendUpdateRequired(true);
54
54
  }
55
- else {
55
+ else if (matterbridge.matterbridgeVersion.includes('-dev-') && matterbridge.matterbridgeVersion === version) {
56
56
  matterbridge.log.debug(`Matterbridge@dev is up to date. Current version: ${matterbridge.matterbridgeVersion}. Latest dev version: ${matterbridge.matterbridgeDevVersion}.`);
57
57
  }
58
58
  return version;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.944b63c3.css",
4
- "main.js": "./static/js/main.bb47a7dc.js",
4
+ "main.js": "./static/js/main.3dc9a7f7.js",
5
5
  "static/js/453.d855a71b.chunk.js": "./static/js/453.d855a71b.chunk.js",
6
6
  "static/media/roboto-latin-700-normal.woff2": "./static/media/roboto-latin-700-normal.c4d6cab43bec89049809.woff2",
7
7
  "static/media/roboto-latin-500-normal.woff2": "./static/media/roboto-latin-500-normal.599f66a60bdf974e578e.woff2",
@@ -77,11 +77,11 @@
77
77
  "static/media/roboto-greek-ext-300-normal.woff": "./static/media/roboto-greek-ext-300-normal.60729cafbded24073dfb.woff",
78
78
  "index.html": "./index.html",
79
79
  "main.944b63c3.css.map": "./static/css/main.944b63c3.css.map",
80
- "main.bb47a7dc.js.map": "./static/js/main.bb47a7dc.js.map",
80
+ "main.3dc9a7f7.js.map": "./static/js/main.3dc9a7f7.js.map",
81
81
  "453.d855a71b.chunk.js.map": "./static/js/453.d855a71b.chunk.js.map"
82
82
  },
83
83
  "entrypoints": [
84
84
  "static/css/main.944b63c3.css",
85
- "static/js/main.bb47a7dc.js"
85
+ "static/js/main.3dc9a7f7.js"
86
86
  ]
87
87
  }
@@ -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.bb47a7dc.js"></script><link href="./static/css/main.944b63c3.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.3dc9a7f7.js"></script><link href="./static/css/main.944b63c3.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>