From ae4142b52b3e7e8872577a77d22171e1dcd15e98 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Tue, 12 Nov 2019 11:28:20 +0000 Subject: [PATCH 1/2] refactor: convert bootstrap API to async/await License: MIT Signed-off-by: Alan Shaw --- src/bootstrap/add.js | 46 +++++++++++++++++--------------------- src/bootstrap/index.js | 16 +++++-------- src/bootstrap/list.js | 28 ++++++++++++----------- src/bootstrap/rm.js | 46 +++++++++++++++++--------------------- src/utils/load-commands.js | 2 +- 5 files changed, 64 insertions(+), 74 deletions(-) diff --git a/src/bootstrap/add.js b/src/bootstrap/add.js index 978a3eeda..29dd46cc3 100644 --- a/src/bootstrap/add.js +++ b/src/bootstrap/add.js @@ -1,32 +1,28 @@ 'use strict' -const promisify = require('promisify-es6') +const Multiaddr = require('multiaddr') +const configure = require('../lib/configure') -module.exports = (send) => { - return promisify((args, opts, callback) => { - if (typeof opts === 'function' && - !callback) { - callback = opts - opts = {} +module.exports = configure(({ ky }) => { + return async (addr, options) => { + if (addr && typeof addr === 'object' && !Multiaddr.isMultiaddr(addr)) { + options = addr + addr = null } - // opts is the real callback -- - // 'callback' is being injected by promisify - if (typeof opts === 'function' && - typeof callback === 'function') { - callback = opts - opts = {} - } + options = options || {} - if (args && typeof args === 'object') { - opts = args - args = undefined - } + const searchParams = new URLSearchParams(options.searchParams) + if (addr) searchParams.set('arg', `${addr}`) + if (options.default != null) searchParams.set('default', options.default) + + const res = await ky.post('bootstrap/add', { + timeout: options.timeout, + signal: options.signal, + headers: options.headers, + searchParams + }).json() - send({ - path: 'bootstrap/add', - args: args, - qs: opts - }, callback) - }) -} + return res + } +}) diff --git a/src/bootstrap/index.js b/src/bootstrap/index.js index 31cb3fa2f..032265803 100644 --- a/src/bootstrap/index.js +++ b/src/bootstrap/index.js @@ -1,13 +1,9 @@ 'use strict' -const moduleConfig = require('../utils/module-config') +const callbackify = require('callbackify') -module.exports = (arg) => { - const send = moduleConfig(arg) - - return { - add: require('./add')(send), - rm: require('./rm')(send), - list: require('./list')(send) - } -} +module.exports = config => ({ + add: callbackify.variadic(require('./add')(config)), + rm: callbackify.variadic(require('./rm')(config)), + list: callbackify.variadic(require('./list')(config)) +}) diff --git a/src/bootstrap/list.js b/src/bootstrap/list.js index 79690ef19..2a20f5d05 100644 --- a/src/bootstrap/list.js +++ b/src/bootstrap/list.js @@ -1,16 +1,18 @@ 'use strict' -const promisify = require('promisify-es6') +const configure = require('../lib/configure') -module.exports = (send) => { - return promisify((opts, callback) => { - if (typeof (opts) === 'function') { - callback = opts - opts = {} - } - send({ - path: 'bootstrap/list', - qs: opts - }, callback) - }) -} +module.exports = configure(({ ky }) => { + return async (options) => { + options = options || {} + + const res = await ky.get('bootstrap/list', { + timeout: options.timeout, + signal: options.signal, + headers: options.headers, + searchParams: options.searchParams + }).json() + + return res + } +}) diff --git a/src/bootstrap/rm.js b/src/bootstrap/rm.js index c7f55368b..fbd41435b 100644 --- a/src/bootstrap/rm.js +++ b/src/bootstrap/rm.js @@ -1,32 +1,28 @@ 'use strict' -const promisify = require('promisify-es6') +const Multiaddr = require('multiaddr') +const configure = require('../lib/configure') -module.exports = (send) => { - return promisify((args, opts, callback) => { - if (typeof opts === 'function' && - !callback) { - callback = opts - opts = {} +module.exports = configure(({ ky }) => { + return async (addr, options) => { + if (addr && typeof addr === 'object' && !Multiaddr.isMultiaddr(addr)) { + options = addr + addr = null } - // opts is the real callback -- - // 'callback' is being injected by promisify - if (typeof opts === 'function' && - typeof callback === 'function') { - callback = opts - opts = {} - } + options = options || {} - if (args && typeof args === 'object') { - opts = args - args = undefined - } + const searchParams = new URLSearchParams(options.searchParams) + if (addr) searchParams.set('arg', `${addr}`) + if (options.all != null) searchParams.set('all', options.all) + + const res = await ky.delete('bootstrap/rm', { + timeout: options.timeout, + signal: options.signal, + headers: options.headers, + searchParams + }).json() - send({ - path: 'bootstrap/rm', - args: args, - qs: opts - }, callback) - }) -} + return res + } +}) diff --git a/src/utils/load-commands.js b/src/utils/load-commands.js index 242b52463..9e9db2cf5 100644 --- a/src/utils/load-commands.js +++ b/src/utils/load-commands.js @@ -91,6 +91,7 @@ function requireCommands (send, config) { getEndpointConfig: require('../get-endpoint-config')(config), bitswap: require('../bitswap')(config), block: require('../block')(config), + bootstrap: require('../bootstrap')(config), dag: require('../dag')(config) } @@ -110,7 +111,6 @@ function requireCommands (send, config) { pin: require('../pin'), // Network - bootstrap: require('../bootstrap'), dht: require('../dht'), name: require('../name'), ping: require('../ping'), From ea05976c76e7d8cdb5c73377398bc4b8eec5a307 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Tue, 12 Nov 2019 14:22:56 +0000 Subject: [PATCH 2/2] fix: apparently delete does not work in browser --- src/bootstrap/rm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap/rm.js b/src/bootstrap/rm.js index fbd41435b..4c2597d1d 100644 --- a/src/bootstrap/rm.js +++ b/src/bootstrap/rm.js @@ -16,7 +16,7 @@ module.exports = configure(({ ky }) => { if (addr) searchParams.set('arg', `${addr}`) if (options.all != null) searchParams.set('all', options.all) - const res = await ky.delete('bootstrap/rm', { + const res = await ky.post('bootstrap/rm', { timeout: options.timeout, signal: options.signal, headers: options.headers,