unleash-server
Version:
Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.
80 lines • 2.88 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const make_fetch_happen_1 = __importDefault(require("make-fetch-happen"));
const version_1 = __importDefault(require("../util/version"));
const date_fns_1 = require("date-fns");
class VersionService {
constructor({ settingStore }, { getLogger, versionCheck, enterpriseVersion, }) {
this.logger = getLogger('lib/services/version-service.js');
this.settingStore = settingStore;
this.current = {
oss: version_1.default,
enterprise: enterpriseVersion || '',
};
this.enabled = versionCheck.enable;
this.versionCheckUrl = versionCheck.url;
this.isLatest = true;
process.nextTick(() => this.setup());
}
async setup() {
await this.setInstanceId();
await this.checkLatestVersion();
this.timer = setInterval(async () => this.checkLatestVersion(), (0, date_fns_1.hoursToMilliseconds)(48));
this.timer.unref();
}
async setInstanceId() {
try {
const { id } = await this.settingStore.get('instanceInfo');
this.instanceId = id;
}
catch (err) {
this.logger.warn('Could not find instanceInfo');
}
}
async checkLatestVersion() {
if (this.enabled) {
try {
const res = await (0, make_fetch_happen_1.default)(this.versionCheckUrl, {
method: 'POST',
body: JSON.stringify({
versions: this.current,
instanceId: this.instanceId,
}),
headers: { 'Content-Type': 'application/json' },
});
if (res.ok) {
const data = (await res.json());
this.latest = {
oss: data.versions.oss,
enterprise: data.versions.enterprise,
};
this.isLatest = data.latest;
}
else {
this.logger.info(`Could not check newest version. Status: ${res.status}`);
}
}
catch (err) {
this.logger.info('Could not check newest version', err);
}
}
}
getVersionInfo() {
return {
current: this.current,
latest: this.latest || {},
isLatest: this.isLatest,
instanceId: this.instanceId,
};
}
destroy() {
clearInterval(this.timer);
this.timer = null;
}
}
exports.default = VersionService;
module.exports = VersionService;
//# sourceMappingURL=version-service.js.map