@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint, Klipper, PrusaLink and BambuLab manager to set up, configure and monitor 3D printers. Our aim is to provide neat overview over your farm.
85 lines (84 loc) • 3.59 kB
JavaScript
import { AppConstants } from "../../server.constants.js";
import semver from "semver";
//#region src/services/core/server-release.service.ts
var ServerReleaseService = class ServerReleaseService {
airGapped = null;
synced = false;
installedReleaseFound = null;
updateAvailable = null;
latestRelease = null;
installedRelease = null;
logger;
constructor(loggerFactory, serverVersion, githubService) {
this.serverVersion = serverVersion;
this.githubService = githubService;
this.logger = loggerFactory(ServerReleaseService.name);
}
getState() {
return {
airGapped: this.airGapped,
latestRelease: this.latestRelease,
installedRelease: this.installedRelease,
serverVersion: this.serverVersion,
installedReleaseFound: this.installedReleaseFound,
updateAvailable: this.updateAvailable,
synced: this.synced
};
}
/**
* Connection-safe acquire data about the installed and latest releases.
*/
async syncLatestRelease() {
if (!await this.githubService.wasAuthenticated()) return;
const owner = AppConstants.orgName;
const repo = AppConstants.serverRepoName;
const response = await this.githubService.getReleases(owner, repo);
const latestResponse = await this.githubService.getLatestRelease(owner, repo);
this.synced = true;
const releases = response.data;
const latestRelease = latestResponse.data;
this.airGapped = !releases?.length;
if (!releases?.length) {
this.logger.warn("Latest release check failed because releases from github empty");
return;
}
const currentlyInstalledRelease = this.serverVersion;
this.installedRelease = { tag_name: currentlyInstalledRelease };
this.latestRelease = latestRelease;
this.installedReleaseFound = !!currentlyInstalledRelease;
if (!this.installedReleaseFound) {
this.updateAvailable = false;
return;
}
const lastTagIsNewer = semver.gt(this.latestRelease.tag_name, this.installedRelease.tag_name, true);
this.updateAvailable = this.installedReleaseFound && lastTagIsNewer;
}
/**
* Logs whether a firmware update is ready
*/
logServerVersionState() {
const latestReleaseState = this.getState();
const latestRelease = latestReleaseState?.latestRelease;
const latestReleaseTag = latestRelease?.tag_name;
if (!latestReleaseTag) return;
const packageVersion = this.serverVersion;
if (this.installedReleaseFound) this.logger.log(`\x1b[36mCurrent release was found in github releases.\x1b[0m
Here's github's latest released: \x1b[32m${latestReleaseTag}\x1b[0m
Here's your release tag: \x1b[32m${packageVersion}\x1b[0m
Thanks for using FDM Monster!`);
else {
this.logger.log(`\x1b[36mCurrent release tag not found in github releases.\x1b[0m
Here's github's latest released: \x1b[32m${latestReleaseTag}\x1b[0m
Here's your release tag: \x1b[32m${packageVersion}\x1b[0m
Thanks for using FDM Monster!`);
return;
}
if (!!packageVersion && latestReleaseState.updateAvailable) if (this.airGapped) this.logger.warn(`Installed release: ${packageVersion}. Skipping update check (air-gapped/disconnected from internet)`);
else this.logger.log(`Update available! New version: ${latestReleaseTag} (prerelease: ${latestRelease.prerelease})`);
else if (packageVersion) return this.logger.log(`Installed release: ${packageVersion}. You are up to date!`);
else return this.logger.error("Cant check release as package.json version environment variable is not set. Make sure FDM Server is run from a 'package.json' or NPM context.");
}
};
//#endregion
export { ServerReleaseService };
//# sourceMappingURL=server-release.service.js.map