matterbridge
Version:
Matterbridge plugin manager for Matter
134 lines • 6.82 kB
JavaScript
/**
* This file contains the check updates functions.
*
* @file update.ts
* @author Luca Liguori
* @date 2025-02-24
* @version 1.0.0
*
* Copyright 2025, 2026, 2027 Luca Liguori.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. *
*/
// AnsiLogger module
import { db, nt, wr } from 'node-ansi-logger';
import { plg } from './matterbridgeTypes.js';
/**
* Checks for updates for Matterbridge and its plugins.
* If the 'shelly' parameter is present, also checks for Shelly updates.
*
* @param {Matterbridge} matterbridge - The Matterbridge instance.
* @returns {Promise<void>} A promise that resolves when the update checks are complete.
*/
export async function checkUpdates(matterbridge) {
const { hasParameter } = await import('./utils/commandLine.js');
const latestVersion = getMatterbridgeLatestVersion(matterbridge);
const devVersion = getMatterbridgeDevVersion(matterbridge);
const pluginsVersions = [];
const shellyUpdates = [];
for (const plugin of matterbridge.plugins) {
const pluginVersion = getPluginLatestVersion(matterbridge, plugin);
pluginsVersions.push(pluginVersion);
}
if (hasParameter('shelly')) {
const { getShellySysUpdate, getShellyMainUpdate } = await import('./shelly.js');
const systemUpdate = getShellySysUpdate(matterbridge);
shellyUpdates.push(systemUpdate);
const mainUpdate = getShellyMainUpdate(matterbridge);
shellyUpdates.push(mainUpdate);
}
await Promise.all([latestVersion, devVersion, ...pluginsVersions, ...shellyUpdates]);
}
/**
* Retrieves the latest version of Matterbridge and updates the matterbridgeLatestVersion property.
* If there is an error retrieving the latest version, logs an error message.
*
* @param {Matterbridge} matterbridge - The Matterbridge instance.
* @returns {Promise<String | undefined>} A promise that resolves when the latest version is retrieved.
*/
export async function getMatterbridgeLatestVersion(matterbridge) {
const { getNpmPackageVersion } = await import('./utils/network.js');
try {
const version = await getNpmPackageVersion('matterbridge');
matterbridge.matterbridgeLatestVersion = version;
matterbridge.matterbridgeInformation.matterbridgeLatestVersion = version;
await matterbridge.nodeContext?.set('matterbridgeLatestVersion', matterbridge.matterbridgeLatestVersion);
if (matterbridge.matterbridgeVersion !== matterbridge.matterbridgeLatestVersion) {
matterbridge.log.notice(`Matterbridge is out of date. Current version: ${matterbridge.matterbridgeVersion}. Latest version: ${matterbridge.matterbridgeLatestVersion}.`);
matterbridge.frontend.wssSendRefreshRequired('matterbridgeLatestVersion');
matterbridge.frontend.wssSendUpdateRequired();
}
else {
matterbridge.log.debug(`Matterbridge is up to date. Current version: ${matterbridge.matterbridgeVersion}. Latest version: ${matterbridge.matterbridgeLatestVersion}.`);
}
return version;
}
catch (error) {
matterbridge.log.warn(`Error getting Matterbridge latest version: ${error instanceof Error ? error.message : error}`);
}
}
/**
* Retrieves the latest dev version of Matterbridge and updates the matterbridgeDevVersion property.
* If there is an error retrieving the latest version, logs an error message.
*
* @param {Matterbridge} matterbridge - The Matterbridge instance.
* @returns {Promise<string | undefined>} A promise that resolves when the latest dev version is retrieved.
*/
export async function getMatterbridgeDevVersion(matterbridge) {
const { getNpmPackageVersion } = await import('./utils/network.js');
try {
const version = await getNpmPackageVersion('matterbridge', 'dev');
matterbridge.matterbridgeDevVersion = version;
matterbridge.matterbridgeInformation.matterbridgeDevVersion = version;
await matterbridge.nodeContext?.set('matterbridgeDevVersion', version);
if (matterbridge.matterbridgeVersion.includes('-dev.') && matterbridge.matterbridgeVersion !== version) {
matterbridge.log.notice(`Matterbridge@dev is out of date. Current version: ${matterbridge.matterbridgeVersion}. Latest dev version: ${matterbridge.matterbridgeDevVersion}.`);
matterbridge.frontend.wssSendRefreshRequired('matterbridgeDevVersion');
matterbridge.frontend.wssSendUpdateRequired();
}
else {
matterbridge.log.debug(`Matterbridge@dev is up to date. Current version: ${matterbridge.matterbridgeVersion}. Latest dev version: ${matterbridge.matterbridgeDevVersion}.`);
}
return version;
}
catch (error) {
matterbridge.log.warn(`Error getting Matterbridge latest dev version: ${error instanceof Error ? error.message : error}`);
}
}
/**
* Retrieves the latest version of a plugin and updates the plugin's latestVersion property.
* If there is an error retrieving the latest version, logs an error message.
*
* @param {Matterbridge} matterbridge - The Matterbridge instance.
* @param {RegisteredPlugin} plugin - The plugin for which to retrieve the latest version.
* @returns {Promise<string | undefined>} A promise that resolves when the latest version is retrieved.
*/
export async function getPluginLatestVersion(matterbridge, plugin) {
const { getNpmPackageVersion } = await import('./utils/network.js');
try {
const version = await getNpmPackageVersion(plugin.name);
plugin.latestVersion = version;
if (plugin.version !== plugin.latestVersion) {
matterbridge.log.notice(`The plugin ${plg}${plugin.name}${nt} is out of date. Current version: ${plugin.version}. Latest version: ${plugin.latestVersion}.`);
matterbridge.frontend.wssSendRefreshRequired('plugins');
}
else {
matterbridge.log.debug(`The plugin ${plg}${plugin.name}${db} is up to date. Current version: ${plugin.version}. Latest version: ${plugin.latestVersion}.`);
}
return version;
}
catch (error) {
matterbridge.log.warn(`Error getting plugin ${plg}${plugin.name}${wr} latest version: ${error instanceof Error ? error.message : error}`);
}
}
//# sourceMappingURL=update.js.map