matterbridge 3.1.8-dev-20250726-82f77ee → 3.1.8-dev-20250727-c823a89

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
@@ -14,11 +14,14 @@ If you like this project and find it useful, please consider giving it a star on
14
14
 
15
15
  - [Jest]: Total coverage 100%.
16
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.
17
18
  - [workflow]: Update permissions and change GitHub token for Docker build triggers.
18
19
  - [frontend]: Improved test units on Frontend class (total coverage 100%).
19
20
  - [frontend]: Bump version 2.7.1.
20
- - [frontend]: Added Changelog button that appears in the frontend 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).
21
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.
24
+ - [frontend]: Added new menu item for manual update check.
22
25
 
23
26
  ### Changed
24
27
 
@@ -27,6 +30,7 @@ If you like this project and find it useful, please consider giving it a star on
27
30
  ### Fixed
28
31
 
29
32
  - [switch]: Added conditional handling for momentary switch events in MatterbridgeEndpoint for single press only switches.
33
+ - [advertise]: Changed the message advertise stopped to work also in childbridge mode.
30
34
 
31
35
  <a href="https://www.buymeacoffee.com/luligugithub">
32
36
  <img src="bmc-button.svg" alt="Buy me a coffee" width="80">
package/dist/frontend.js CHANGED
@@ -969,9 +969,9 @@ export class Frontend extends EventEmitter {
969
969
  });
970
970
  }
971
971
  else {
972
- this.wssSendSnackbarMessage(`Restart required`, 0);
972
+ this.matterbridge.matterbridgeInformation.fixedRestartRequired = true;
973
973
  this.wssSendRefreshRequired('plugins');
974
- this.wssSendRestartRequired();
974
+ this.wssSendRestartRequired(true, true);
975
975
  }
976
976
  return;
977
977
  })
@@ -979,13 +979,13 @@ export class Frontend extends EventEmitter {
979
979
  });
980
980
  }
981
981
  else {
982
+ this.matterbridge.matterbridgeInformation.fixedRestartRequired = true;
982
983
  if (this.matterbridge.restartMode !== '') {
983
984
  this.wssSendSnackbarMessage(`Restarting matterbridge...`, 0);
984
985
  this.matterbridge.shutdownProcess();
985
986
  }
986
987
  else {
987
- this.wssSendSnackbarMessage(`Restart required`, 0);
988
- this.wssSendRestartRequired();
988
+ this.wssSendRestartRequired(true, true);
989
989
  }
990
990
  }
991
991
  return;
@@ -1165,6 +1165,11 @@ export class Frontend extends EventEmitter {
1165
1165
  client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1166
1166
  }
1167
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
+ }
1168
1173
  else if (data.method === '/api/shellysysupdate') {
1169
1174
  const { triggerShellySysUpdate } = await import('./shelly.js');
1170
1175
  triggerShellySysUpdate(this.matterbridge);
@@ -1685,14 +1690,15 @@ export class Frontend extends EventEmitter {
1685
1690
  }
1686
1691
  });
1687
1692
  }
1688
- wssSendRestartRequired(snackbar = true) {
1693
+ wssSendRestartRequired(snackbar = true, fixed = false) {
1689
1694
  this.log.debug('Sending a restart required message to all connected clients');
1690
1695
  this.matterbridge.matterbridgeInformation.restartRequired = true;
1696
+ this.matterbridge.matterbridgeInformation.fixedRestartRequired = fixed;
1691
1697
  if (snackbar === true)
1692
1698
  this.wssSendSnackbarMessage(`Restart required`, 0);
1693
1699
  this.webSocketServer?.clients.forEach((client) => {
1694
1700
  if (client.readyState === WebSocket.OPEN) {
1695
- client.send(JSON.stringify({ id: WS_ID_RESTART_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: 'restart_required', params: {} }));
1701
+ client.send(JSON.stringify({ id: WS_ID_RESTART_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: 'restart_required', params: { fixed } }));
1696
1702
  }
1697
1703
  });
1698
1704
  }
@@ -1707,12 +1713,12 @@ export class Frontend extends EventEmitter {
1707
1713
  }
1708
1714
  });
1709
1715
  }
1710
- wssSendUpdateRequired() {
1716
+ wssSendUpdateRequired(devVersion = false) {
1711
1717
  this.log.debug('Sending an update required message to all connected clients');
1712
1718
  this.matterbridge.matterbridgeInformation.updateRequired = true;
1713
1719
  this.webSocketServer?.clients.forEach((client) => {
1714
1720
  if (client.readyState === WebSocket.OPEN) {
1715
- client.send(JSON.stringify({ id: WS_ID_UPDATE_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: 'update_required', params: {} }));
1721
+ client.send(JSON.stringify({ id: WS_ID_UPDATE_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: devVersion ? 'update_required_dev' : 'update_required', params: {} }));
1716
1722
  }
1717
1723
  });
1718
1724
  }
@@ -78,6 +78,7 @@ export class Matterbridge extends EventEmitter {
78
78
  matterDiscriminator: undefined,
79
79
  matterPasscode: undefined,
80
80
  restartRequired: false,
81
+ fixedRestartRequired: false,
81
82
  updateRequired: false,
82
83
  };
83
84
  homeDirectory = '';
@@ -1587,8 +1588,8 @@ export class Matterbridge extends EventEmitter {
1587
1588
  this.frontend.wssSendRefreshRequired('settings');
1588
1589
  this.frontend.wssSendRefreshRequired('fabrics');
1589
1590
  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.`);
1591
+ this.frontend.wssSendSnackbarMessage(`Advertising stopped. Restart to commission again.`, 0);
1592
+ this.log.notice(`Advertising stopped. Restart to commission again.`);
1592
1593
  }, 15 * 60 * 1000).unref();
1593
1594
  }
1594
1595
  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.87739fe8.js",
4
+ "main.js": "./static/js/main.4611e8da.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.87739fe8.js.map": "./static/js/main.87739fe8.js.map",
80
+ "main.4611e8da.js.map": "./static/js/main.4611e8da.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.87739fe8.js"
85
+ "static/js/main.4611e8da.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.87739fe8.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.4611e8da.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>