hyperdrive-daemon icon indicating copy to clipboard operation
hyperdrive-daemon copied to clipboard

Cleaner interface around daemon setup & metadata file

Open pfrazee opened this issue 6 years ago • 0 comments

Currently the code for setting up the daemon looks like this:

const startDaemon = require('hyperdrive-daemon')
const { createMetadata } = require('hyperdrive-daemon/lib/metadata')
const { loadMetadata, HyperdriveClient } = require('hyperdrive-daemon-client')

const DAEMON_STORAGE_PATH = require('path').join(require('os').homedir(), '.hyperdrive')
const DAEMON_PORT = 4101

async function setup () {
  // fetch daemon metadata from disk
  var metadata
  try {
    metadata = await loadMetadata()
  } catch (e) {
    await createMetadata(`localhost:${DAEMON_PORT}`)
    metadata = await loadMetadata()    
  }

  // instantiate the daemon
  await startDaemon({
    storage: DAEMON_STORAGE_PATH,
    port: DAEMON_PORT,
    metadata
  })

  var client = new HyperdriveClient(metadata.endpoint, metadata.token)
  await client.ready()
}

Two issues with this:

  • The loadMetadata and then createMetadata/loadMetadata on error is a little clunky
  • There are parameters inside the daemon which have to be correctly duplicated by the calling code (the constants in the snippet above)

Ideally it'd be something more like:

const startDaemon = require('hyperdrive-daemon')
const { setupConfig, HyperdriveClient } = require('hyperdrive-daemon-client')

async function setup () {
  // fetch daemon metadata from disk
  var config = await setupConfig()

  // instantiate the daemon
  await startDaemon({
    storage: config.storage,
    port: config.port,
    metadata: config.metadata
  })

  var client = new HyperdriveClient(metadata.endpoint, metadata.token)
  await client.ready()
}

pfrazee avatar Jul 10 '19 20:07 pfrazee