@fdm-monster/server
Version:
FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.
113 lines (112 loc) • 4.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "ServerReleaseService", {
enumerable: true,
get: function() {
return ServerReleaseService;
}
});
const _semver = /*#__PURE__*/ _interop_require_default(require("semver"));
const _serverconstants = require("../../server.constants");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
class ServerReleaseService {
serverVersion;
githubService;
airGapped;
synced;
installedReleaseFound;
updateAvailable;
latestRelease;
installedRelease;
logger;
constructor(loggerFactory, serverVersion, githubService){
this.serverVersion = serverVersion;
this.githubService = githubService;
this.airGapped = null;
this.synced = false;
this.installedReleaseFound = null;
this.updateAvailable = null;
this.latestRelease = null;
this.installedRelease = null;
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
};
}
async syncLatestRelease() {
if (!await this.githubService.wasAuthenticated()) {
return;
}
const owner = _serverconstants.AppConstants.orgName;
const repo = _serverconstants.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.default.gt(this.latestRelease.tag_name, this.installedRelease.tag_name, true);
this.updateAvailable = this.installedReleaseFound && lastTagIsNewer;
}
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 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;
} else {
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!`);
}
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.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.");
} else {
return this.logger.log(`Installed release: ${packageVersion}. You are up to date!`);
}
}
}
//# sourceMappingURL=server-release.service.js.map