unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
81 lines • 3.03 kB
JavaScript
import ky from 'ky';
import version from '../util/version.js';
export default class VersionService {
constructor({ settingStore }, { getLogger, versionCheck, enterpriseVersion, telemetry, buildDate, }) {
this.logger = getLogger('lib/services/version-service.js');
this.settingStore = settingStore;
this.current = {
oss: version,
enterprise: enterpriseVersion || '',
};
this.enabled = versionCheck.enable || false;
this.telemetryEnabled = telemetry;
this.versionCheckUrl = versionCheck.url;
this.isLatest = true;
this.buildDate = buildDate;
}
async readInstanceId() {
try {
const { id } = (await this.settingStore.get('instanceInfo')) ?? { id: undefined };
return id;
}
catch (err) {
this.logger.warn('Could not find instanceInfo', err);
}
}
async getInstanceId() {
if (!this.instanceId) {
this.instanceId = await this.readInstanceId();
}
return this.instanceId;
}
async checkLatestVersion(telemetryDataProvider) {
const instanceId = await this.getInstanceId();
this.logger.debug(`Checking for newest version for instanceId=${instanceId}`);
if (this.enabled) {
try {
const versionPayload = {
versions: this.current,
instanceId: instanceId,
};
if (this.telemetryEnabled) {
versionPayload.featureInfo = await telemetryDataProvider();
}
if (this.versionCheckUrl) {
const res = await ky.post(this.versionCheckUrl, {
json: versionPayload,
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}`);
}
}
else {
this.logger.info('Had no URL to check newest version');
}
}
catch (err) {
this.logger.info('Could not check newest version', err);
}
}
}
async getVersionInfo() {
const instanceId = await this.getInstanceId();
return {
current: this.current,
latest: this.latest || {},
isLatest: this.isLatest,
instanceId: instanceId || 'unresolved-instance-id',
buildDate: this.buildDate,
};
}
}
//# sourceMappingURL=version-service.js.map