UNPKG

unleash-server

Version:

Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.

81 lines 3.03 kB
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