diff --git a/lib/scaffold/create.js b/lib/scaffold/create.js index c521602e..49cee1e6 100644 --- a/lib/scaffold/create.js +++ b/lib/scaffold/create.js @@ -9,7 +9,7 @@ var path = require('path'); var packageFile = require('../../package.json'); var mkdirp = require('mkdirp'); var fs = require('fs'); -var defaultBaseConfig = require('./default-base-config'); +var defaultConfig = require('./default-config'); var version = '^' + packageFile.version; @@ -55,7 +55,7 @@ function createConfigDirectory(options, configDir, isGlobal, done) { if (err) { throw err; } - var configInfo = defaultBaseConfig(options); + var configInfo = defaultConfig(options); var config = configInfo.config; var configJSON = JSON.stringify(config, null, 2); diff --git a/lib/scaffold/default-base-config.js b/lib/scaffold/default-base-config.js deleted file mode 100644 index 1f584b55..00000000 --- a/lib/scaffold/default-base-config.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -var path = require('path'); - -/** - * Will return the path and default bitcore-node configuration on environment variables - * or default locations. - * @param {Object} options - * @param {String} options.network - "testnet" or "livenet" - * @param {String} options.datadir - Absolute path to bitcoin database directory - */ -function getDefaultBaseConfig(options) { - if (!options) { - options = {}; - } - return { - path: process.cwd(), - config: { - network: options.network || 'livenet', - port: 3001, - services: ['bitcoind', 'web'], - servicesConfig: { - bitcoind: { - spawn: { - datadir: options.datadir || path.resolve(process.env.HOME, '.bitcoin'), - exec: path.resolve(__dirname, '../../bin/bitcoind') - } - } - } - } - }; -} - -module.exports = getDefaultBaseConfig; diff --git a/lib/scaffold/default-config.js b/lib/scaffold/default-config.js index 304df232..0621aa06 100644 --- a/lib/scaffold/default-config.js +++ b/lib/scaffold/default-config.js @@ -1,8 +1,7 @@ -'use strict'; - var path = require('path'); var mkdirp = require('mkdirp'); var fs = require('fs'); +var package = require('../../package'); /** * Will return the path and default bitcore-node configuration. It will search for the @@ -24,7 +23,34 @@ function getDefaultConfig(options) { mkdirp.sync(defaultPath); } - var defaultServices = [ + if (fs.existsSync(defaultConfigFile)) { + const currentConfig = require(defaultConfigFile); + + function getMajorVersion(versionString) { + return parseInt(versionString.split('.')[0]) + } + + // config must have a `version` field with major equal to package major version + if(currentConfig.version && getMajorVersion(package.version) === getMajorVersion(currentConfig.version)) { + return { + path: defaultPath, + config: config + }; + } + + console.log(`The configuration file at '${defaultConfigFile}' is incompatible with this version of Bitcore.`); + + const now = new Date(); + // bitcore-node.YYYY-MM-DD.UnixTimestamp.json + const backupFileName = `bitcore-node.${now.getUTCFullYear() + '-' + now.getUTCMonth() + '-' + now.getUTCDate() + '.' + now.getTime()}.json`; + const backupFile = path.resolve(defaultPath, backupFileName); + fs.renameSync(defaultConfigFile, backupFile); + console.log(`The previous configuration file has been moved to: ${backupFile}.`); + } + + console.log(`Creating a new configuration file at: ${defaultConfigFile}.`); + + const defaultServices = [ 'address', 'block', 'db', @@ -37,33 +63,28 @@ function getDefaultConfig(options) { 'web' ]; - if (options.additionalServices) { - defaultServices = defaultServices.concat(options.additionalServices); - } - var defaultDataDir = path.resolve(defaultPath, './data'); if (!fs.existsSync(defaultDataDir)) { mkdirp.sync(defaultDataDir); } - if (!fs.existsSync(defaultConfigFile)) { - var defaultConfig = { - network: 'testnet', - port: 3001, - services: defaultServices, - datadir: defaultDataDir, - servicesConfig: { - 'insight-api': { - cwdRequirePath: 'node_modules/insight-api' - }, - 'insight-ui': { - cwdRequirePath: 'node_modules/insight-ui' - } + var defaultConfig = { + version: package.version, + network: 'livenet', + port: 3001, + services: options.additionalServices ? defaultServices.concat(options.additionalServices) : defaultServices, + datadir: defaultDataDir, + servicesConfig: { + 'insight-api': { + cwdRequirePath: 'node_modules/insight-api' + }, + 'insight-ui': { + cwdRequirePath: 'node_modules/insight-ui' } - }; - fs.writeFileSync(defaultConfigFile, JSON.stringify(defaultConfig, null, 2)); - } + } + }; + fs.writeFileSync(defaultConfigFile, JSON.stringify(defaultConfig, null, 2)); var config = JSON.parse(fs.readFileSync(defaultConfigFile, 'utf-8')); diff --git a/package.json b/package.json index 099e6902..a2e52efc 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "node": ">=8.2.0" }, "author": "BitPay ", - "version": "4.0.0", + "version": "5.0.0", "main": "./index.js", "repository": "git://github.com/bitpay/bitcore-node.git", "homepage": "https://github.com/bitpay/bitcore-node",