matterbridge 3.1.8-dev-20250726-aa58df5 → 3.1.8-dev-20250727-b8987de

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
@@ -16,11 +16,14 @@ If you like this project and find it useful, please consider giving it a star on
16
16
  - [certification]: Improved certification management in pairing.json. Added pemToBuffer function for converting PEM strings to Uint8Array.
17
17
  - [certification]: Improved certification management in pairing.json. Added extractPrivateKeyRaw function for extrating the raw part of PEM private key to Uint8Array.
18
18
  - [workflow]: Update permissions and change GitHub token for Docker build triggers.
19
+ - [update]: Added support for retrieving and logging plugin development versions.
19
20
  - [frontend]: Improved test units on Frontend class (total coverage 100%).
20
21
  - [frontend]: Bump version 2.7.1.
21
22
  - [frontend]: Added Changelog button that appears in the frontend when a new version is installed and the frontend needs to be updated (page refresh).
22
23
  - [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 update to stable and update to dev banner. The update to new appears only if you are on the dev and there is a new dev version.
25
+ - [frontend]: Added update to stable and update to dev banner for plugins. The update to new dev appears only if you are on the dev and there is a new dev version.
26
+ - [frontend]: Added new menu item for manual update check.
24
27
 
25
28
  ### Changed
26
29
 
package/dist/frontend.js CHANGED
@@ -800,6 +800,7 @@ export class Frontend extends EventEmitter {
800
800
  changelog: plugin.changelog,
801
801
  funding: plugin.funding,
802
802
  latestVersion: plugin.latestVersion,
803
+ devVersion: plugin.devVersion,
803
804
  serialNumber: plugin.serialNumber,
804
805
  locked: plugin.locked,
805
806
  error: plugin.error,
@@ -969,9 +970,9 @@ export class Frontend extends EventEmitter {
969
970
  });
970
971
  }
971
972
  else {
972
- this.wssSendSnackbarMessage(`Restart required`, 0);
973
+ this.matterbridge.matterbridgeInformation.fixedRestartRequired = true;
973
974
  this.wssSendRefreshRequired('plugins');
974
- this.wssSendRestartRequired();
975
+ this.wssSendRestartRequired(true, true);
975
976
  }
976
977
  return;
977
978
  })
@@ -979,13 +980,13 @@ export class Frontend extends EventEmitter {
979
980
  });
980
981
  }
981
982
  else {
983
+ this.matterbridge.matterbridgeInformation.fixedRestartRequired = true;
982
984
  if (this.matterbridge.restartMode !== '') {
983
985
  this.wssSendSnackbarMessage(`Restarting matterbridge...`, 0);
984
986
  this.matterbridge.shutdownProcess();
985
987
  }
986
988
  else {
987
- this.wssSendSnackbarMessage(`Restart required`, 0);
988
- this.wssSendRestartRequired();
989
+ this.wssSendRestartRequired(true, true);
989
990
  }
990
991
  }
991
992
  return;
@@ -1690,14 +1691,15 @@ export class Frontend extends EventEmitter {
1690
1691
  }
1691
1692
  });
1692
1693
  }
1693
- wssSendRestartRequired(snackbar = true) {
1694
+ wssSendRestartRequired(snackbar = true, fixed = false) {
1694
1695
  this.log.debug('Sending a restart required message to all connected clients');
1695
1696
  this.matterbridge.matterbridgeInformation.restartRequired = true;
1697
+ this.matterbridge.matterbridgeInformation.fixedRestartRequired = fixed;
1696
1698
  if (snackbar === true)
1697
1699
  this.wssSendSnackbarMessage(`Restart required`, 0);
1698
1700
  this.webSocketServer?.clients.forEach((client) => {
1699
1701
  if (client.readyState === WebSocket.OPEN) {
1700
- client.send(JSON.stringify({ id: WS_ID_RESTART_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: 'restart_required', params: {} }));
1702
+ client.send(JSON.stringify({ id: WS_ID_RESTART_NEEDED, src: 'Matterbridge', dst: 'Frontend', method: 'restart_required', params: { fixed } }));
1701
1703
  }
1702
1704
  });
1703
1705
  }
@@ -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 = '';
package/dist/update.js CHANGED
@@ -5,10 +5,13 @@ export async function checkUpdates(matterbridge) {
5
5
  const latestVersion = getMatterbridgeLatestVersion(matterbridge);
6
6
  const devVersion = getMatterbridgeDevVersion(matterbridge);
7
7
  const pluginsVersions = [];
8
+ const pluginsDevVersions = [];
8
9
  const shellyUpdates = [];
9
10
  for (const plugin of matterbridge.plugins) {
10
11
  const pluginVersion = getPluginLatestVersion(matterbridge, plugin);
11
12
  pluginsVersions.push(pluginVersion);
13
+ const pluginDevVersion = getPluginDevVersion(matterbridge, plugin);
14
+ pluginsDevVersions.push(pluginDevVersion);
12
15
  }
13
16
  if (hasParameter('shelly')) {
14
17
  const { getShellySysUpdate, getShellyMainUpdate } = await import('./shelly.js');
@@ -17,7 +20,7 @@ export async function checkUpdates(matterbridge) {
17
20
  const mainUpdate = getShellyMainUpdate(matterbridge);
18
21
  shellyUpdates.push(mainUpdate);
19
22
  }
20
- await Promise.all([latestVersion, devVersion, ...pluginsVersions, ...shellyUpdates]);
23
+ await Promise.all([latestVersion, devVersion, ...pluginsVersions, ...pluginsDevVersions, ...shellyUpdates]);
21
24
  }
22
25
  export async function getMatterbridgeLatestVersion(matterbridge) {
23
26
  const { getNpmPackageVersion } = await import('./utils/network.js');
@@ -79,3 +82,21 @@ export async function getPluginLatestVersion(matterbridge, plugin) {
79
82
  matterbridge.log.warn(`Error getting plugin ${plg}${plugin.name}${wr} latest version: ${error instanceof Error ? error.message : error}`);
80
83
  }
81
84
  }
85
+ export async function getPluginDevVersion(matterbridge, plugin) {
86
+ const { getNpmPackageVersion } = await import('./utils/network.js');
87
+ try {
88
+ const version = await getNpmPackageVersion(plugin.name, 'dev');
89
+ plugin.devVersion = version;
90
+ if (plugin.version.includes('-dev-') && plugin.version !== plugin.devVersion) {
91
+ matterbridge.log.notice(`The plugin ${plg}${plugin.name}${nt} is out of date. Current version: ${plugin.version}. Latest dev version: ${plugin.devVersion}.`);
92
+ matterbridge.frontend.wssSendRefreshRequired('plugins');
93
+ }
94
+ else if (plugin.version.includes('-dev-') && plugin.version === plugin.devVersion) {
95
+ matterbridge.log.debug(`The plugin ${plg}${plugin.name}${db} is up to date. Current version: ${plugin.version}. Latest dev version: ${plugin.devVersion}.`);
96
+ }
97
+ return version;
98
+ }
99
+ catch (error) {
100
+ matterbridge.log.debug(`Error getting plugin ${plg}${plugin.name}${db} latest dev version: ${error instanceof Error ? error.message : error}`);
101
+ }
102
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.944b63c3.css",
4
- "main.js": "./static/js/main.3dc9a7f7.js",
4
+ "main.js": "./static/js/main.dd4772c9.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.3dc9a7f7.js.map": "./static/js/main.3dc9a7f7.js.map",
80
+ "main.dd4772c9.js.map": "./static/js/main.dd4772c9.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.3dc9a7f7.js"
85
+ "static/js/main.dd4772c9.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.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>
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.dd4772c9.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>