1
0
mirror of https://github.com/Unleash/unleash.git synced 2024-10-18 20:09:08 +02:00
unleash.unleash/src/lib/services/version-service.js

75 lines
2.2 KiB
JavaScript
Raw Normal View History

import fetch from 'node-fetch';
const TWO_DAYS = 48 * 60 * 60 * 1000;
class VersionService {
constructor(
{ settingStore },
{ getLogger, versionCheck, version, enterpriseVersion },
) {
this.logger = getLogger('lib/services/version-service.js');
this.settingStore = settingStore;
this.current = {
oss: version,
enterprise: enterpriseVersion,
};
2021-03-15 08:46:03 +01:00
this.setInstanceId();
if (versionCheck && versionCheck.url) {
this.versionCheckUrl = versionCheck.url;
if (versionCheck.enable === 'true') {
this.enabled = true;
2021-03-15 08:46:03 +01:00
this.checkLatestVersion(this.instanceId);
setInterval(
() => this.checkLatestVersion(this.instanceId),
TWO_DAYS,
);
} else {
this.enabled = false;
}
}
}
2021-03-15 08:46:03 +01:00
async setInstanceId() {
try {
const { id } = await this.settingStore.get('instanceInfo');
2021-02-22 14:21:23 +01:00
this.instanceId = id;
2021-03-15 08:46:03 +01:00
return id;
} catch (err) {
this.logger.warn('Could not find instanceInfo');
return undefined;
}
}
async checkLatestVersion(instanceId) {
if (this.enabled) {
try {
const data = await fetch(this.versionCheckUrl, {
method: 'POST',
body: JSON.stringify({
versions: this.current,
2021-03-15 08:46:03 +01:00
instanceId,
}),
headers: { 'Content-Type': 'application/json' },
}).then(res => res.json());
this.latest = {
oss: data.versions.oss,
enterprise: data.versions.enterprise,
};
this.isLatest = data.latest;
} catch (err) {
this.logger.info('Could not check newest version', err);
}
}
}
getVersionInfo() {
return {
current: this.current,
latest: this.latest || {},
isLatest: this.isLatest,
2021-02-22 14:21:23 +01:00
instanceId: this.instanceId,
};
}
}
module.exports = VersionService;