diff --git a/package.json b/package.json index ce27d50a4..1051a85b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "signalk-server", - "version": "1.34.0", + "version": "1.33.0", "description": "An implementation of a [Signal K](http://signalk.org) server for boats.", "main": "index.js", "scripts": { diff --git a/src/interfaces/appstore.js b/src/interfaces/appstore.js index 2b8dc5e8f..32b80cafe 100644 --- a/src/interfaces/appstore.js +++ b/src/interfaces/appstore.js @@ -20,7 +20,7 @@ const compareVersions = require('compare-versions') const { installModule, removeModule } = require('../modules') const { findModulesWithKeyword, - getLatestServerVersion, + getLatestServerVersionInfo, getAuthor } = require('../modules') @@ -118,9 +118,9 @@ module.exports = function(app) { app.get('/appstore/available/', (req, res) => { findPluginsAndWebapps() .then(([plugins, webapps]) => { - getLatestServerVersion(app.config.version) - .then(serverVersion => { - const result = getAllModuleInfo(plugins, webapps, serverVersion) + getLatestServerVersionInfo(app.config.version) + .then(({version}) => { + const result = getAllModuleInfo(plugins, webapps, version) res.send(JSON.stringify(result)) }) .catch(err => { @@ -167,7 +167,8 @@ module.exports = function(app) { updates: [], installing: [], storeAvailable: true, - isInDocker: process.env.IS_IN_DOCKER === 'true' + isInDocker: process.env.IS_IN_DOCKER === 'true', + nodeVersion: {} } } diff --git a/src/modules.ts b/src/modules.ts index 18c5061a0..280c2e932 100644 --- a/src/modules.ts +++ b/src/modules.ts @@ -264,10 +264,16 @@ function doFetchDistTags() { return fetch('http://registry.npmjs.org/-/package/signalk-server/dist-tags') } -function getLatestServerVersion( +export interface ServerVersionInfo { + version: string + disttag: string + minimumNodeVersion: string +} + +function getLatestServerVersionInfo( currentVersion: string, distTags = doFetchDistTags -): Promise { +): Promise { return new Promise((resolve, reject) => { distTags() .then(npmjsResults => npmjsResults.json()) @@ -275,14 +281,29 @@ function getLatestServerVersion( const prereleaseData = semver.prerelease(currentVersion) if (prereleaseData) { if (semver.satisfies(npmjsParsed.latest, `>${currentVersion}`)) { - resolve(npmjsParsed.latest) + return [npmjsParsed.latest, 'latest'] } else { - resolve(npmjsParsed[prereleaseData[0]]) + return [npmjsParsed[prereleaseData[0]], 'beta'] } } else { - resolve(npmjsParsed.latest) + return([npmjsParsed.latest, 'latest']) } }) + .then(([version, disttag]) => { + return fetch('https://registry.npmjs.org/signalk-server', { + headers: { + Accept: 'application/vnd.npm.install-v1+json' + } + }) + .then(res => res.json()) + .then(moduleMetadata => { + resolve({ + version, + disttag, + minimumNodeVersion: `${moduleMetadata.versions[version].engines}` + }) + }) + }) .catch(reject) }) } @@ -295,10 +316,10 @@ function checkForNewServerVersion( ) => any, getLatestServerVersionP: ( version: string - ) => Promise = getLatestServerVersion + ) => Promise = getLatestServerVersionInfo ) { getLatestServerVersionP(currentVersion) - .then((version: string) => { + .then(({version}) => { if (semver.satisfies(new SemVer(version), `>${currentVersion}`)) { serverUpgradeIsAvailable(undefined, version) } @@ -326,7 +347,7 @@ module.exports = { installModule, removeModule, findModulesWithKeyword, - getLatestServerVersion, + getLatestServerVersionInfo, checkForNewServerVersion, getAuthor, restoreModules