diff --git a/src/core/components/bootstrap.js b/src/core/components/bootstrap.js deleted file mode 100644 index dad39cdd26..0000000000 --- a/src/core/components/bootstrap.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict' - -const defaultConfig = require('../runtime/config-nodejs.js') -const isMultiaddr = require('mafmt').IPFS.matches -const callbackify = require('callbackify') - -function isValidMultiaddr (ma) { - try { - return isMultiaddr(ma) - } catch (err) { - return false - } -} - -function invalidMultiaddrError (ma) { - return new Error(`${ma} is not a valid Multiaddr`) -} - -module.exports = function bootstrap (self) { - return { - list: callbackify(async () => { - const config = await self._repo.config.get() - - return { Peers: config.Bootstrap } - }), - add: callbackify.variadic(async (multiaddr, args = { default: false }) => { - if (multiaddr && !isValidMultiaddr(multiaddr)) { - throw invalidMultiaddrError(multiaddr) - } - - const config = await self._repo.config.get() - if (args.default) { - config.Bootstrap = defaultConfig().Bootstrap - } else if (multiaddr && config.Bootstrap.indexOf(multiaddr) === -1) { - config.Bootstrap.push(multiaddr) - } - await self._repo.config.set(config) - - return { - Peers: args.default ? defaultConfig().Bootstrap : [multiaddr] - } - }), - rm: callbackify.variadic(async (multiaddr, args = { all: false }) => { - if (multiaddr && !isValidMultiaddr(multiaddr)) { - throw invalidMultiaddrError(multiaddr) - } - - let res = [] - const config = await self._repo.config.get() - if (args.all) { - res = config.Bootstrap - config.Bootstrap = [] - } else { - config.Bootstrap = config.Bootstrap.filter((mh) => mh !== multiaddr) - } - - await self._repo.config.set(config) - - if (!args.all && multiaddr) { - res.push(multiaddr) - } - - return { Peers: res } - }) - } -} diff --git a/src/core/components/bootstrap/add.js b/src/core/components/bootstrap/add.js new file mode 100644 index 0000000000..6405d2b0d6 --- /dev/null +++ b/src/core/components/bootstrap/add.js @@ -0,0 +1,26 @@ +'use strict' + +const defaultConfig = require('../runtime/config-nodejs.js') +const { isValidMultiaddr } = require('./utils') + +module.exports = ({ repo }) => { + return async function add (multiaddr, options) { + options = options || {} + + if (multiaddr && !isValidMultiaddr(multiaddr)) { + throw new Error(`${multiaddr} is not a valid Multiaddr`) + } + + const config = await repo.config.get() + if (options.default) { + config.Bootstrap = defaultConfig().Bootstrap + } else if (multiaddr && config.Bootstrap.indexOf(multiaddr) === -1) { + config.Bootstrap.push(multiaddr) + } + await repo.config.set(config) + + return { + Peers: options.default ? defaultConfig().Bootstrap : [multiaddr] + } + } +} diff --git a/src/core/components/bootstrap/list.js b/src/core/components/bootstrap/list.js new file mode 100644 index 0000000000..bc21c6e708 --- /dev/null +++ b/src/core/components/bootstrap/list.js @@ -0,0 +1,8 @@ +'use strict' + +module.exports = ({ repo }) => { + return async function list () { + const config = await repo.config.get() + return { Peers: config.Bootstrap || [] } + } +} diff --git a/src/core/components/bootstrap/rm.js b/src/core/components/bootstrap/rm.js new file mode 100644 index 0000000000..070ae9bb14 --- /dev/null +++ b/src/core/components/bootstrap/rm.js @@ -0,0 +1,31 @@ +'use strict' + +const { isValidMultiaddr } = require('./utils') + +module.exports = ({ repo }) => { + return async function rm (multiaddr, options) { + options = options || {} + + if (multiaddr && !isValidMultiaddr(multiaddr)) { + throw new Error(`${multiaddr} is not a valid Multiaddr`) + } + + let res = [] + const config = await repo.config.get() + + if (options.all) { + res = config.Bootstrap || [] + config.Bootstrap = [] + } else { + config.Bootstrap = (config.Bootstrap || []).filter(ma => ma !== multiaddr) + } + + await repo.config.set(config) + + if (!options.all && multiaddr) { + res.push(multiaddr) + } + + return { Peers: res } + } +} diff --git a/src/core/components/bootstrap/utils.js b/src/core/components/bootstrap/utils.js new file mode 100644 index 0000000000..4e525ce021 --- /dev/null +++ b/src/core/components/bootstrap/utils.js @@ -0,0 +1,11 @@ +'use strict' + +const isMultiaddr = require('mafmt').IPFS.matches + +exports.isValidMultiaddr = ma => { + try { + return isMultiaddr(ma) + } catch (err) { + return false + } +} diff --git a/src/core/components/index.js b/src/core/components/index.js index 1abb7f4499..3694b47cc5 100644 --- a/src/core/components/index.js +++ b/src/core/components/index.js @@ -6,6 +6,11 @@ exports.bitswap = { unwant: require('./bitswap/unwant'), wantlist: require('./bitswap/wantlist') } +exports.bootstrap = { + add: require('./bootstrap/add'), + list: require('./bootstrap/list'), + rm: require('./bootstrap/rm') +} exports.config = require('./config') exports.id = require('./id') exports.init = require('./init') diff --git a/src/core/components/init.js b/src/core/components/init.js index e5b6788f63..46799a3283 100644 --- a/src/core/components/init.js +++ b/src/core/components/init.js @@ -314,6 +314,11 @@ function createApi ({ const api = { add, + bootstrap: { + add: Commands.bootstrap.add({ repo }), + list: Commands.bootstrap.list({ repo }), + rm: Commands.bootstrap.rm({ repo }) + }, config: Commands.config({ repo }), id: Commands.id({ peerInfo }), init: () => { throw new AlreadyInitializedError() }, diff --git a/src/core/components/start.js b/src/core/components/start.js index 5234820fa8..c182f44093 100644 --- a/src/core/components/start.js +++ b/src/core/components/start.js @@ -150,6 +150,11 @@ function createApi ({ unwant: Commands.bitswap.unwant({ bitswap }), wantlist: Commands.bitswap.wantlist({ bitswap }) }, + bootstrap: { + add: Commands.bootstrap.add({ repo }), + list: Commands.bootstrap.list({ repo }), + rm: Commands.bootstrap.rm({ repo }) + }, config: Commands.config({ repo }), id: Commands.id({ peerInfo }), init: () => { throw new AlreadyInitializedError() }, diff --git a/src/core/components/stop.js b/src/core/components/stop.js index 9be69ec1d6..6bfd49394a 100644 --- a/src/core/components/stop.js +++ b/src/core/components/stop.js @@ -112,6 +112,11 @@ function createApi ({ const api = { add, + bootstrap: { + add: Commands.bootstrap.add({ repo }), + list: Commands.bootstrap.list({ repo }), + rm: Commands.bootstrap.rm({ repo }) + }, config: Commands.config({ repo }), id: Commands.id({ peerInfo }), init: () => { throw new AlreadyInitializedError() },