text: // utilities for working with the js-registry site.
  
  module.exports = RegClient
  
  var fs = require('fs')
  , url = require('url')
  , path = require('path')
  , CouchLogin = require('couch-login')
  , npmlog
  
  try {
    npmlog = require("npmlog")
  } catch (er) {
    npmlog = { error: noop, warn: noop, info: noop,
               verbose: noop, silly: noop, http: noop,
               pause: noop, resume: noop }
  }
  
  function noop () {}
  
  function RegClient (conf) {
    // accept either a plain-jane object, or a npmconf object
    // with a "get" method.
    if (typeof conf.get !== 'function') {
      var data = conf
      conf = { get: function (k) { return data[k] }
             , set: function (k, v) { data[k] = v }
             , del: function (k) { delete data[k] } }
    }
  
    this.conf = conf
  
    // if provided, then the registry needs to be a url.
    // if it's not provided, then we're just using the cache only.
    var registry = conf.get('registry')
    if (registry) {
      registry = url.parse(registry)
      if (!registry.protocol) throw new Error(
        'Invalid registry: ' + registry.url)
      registry = registry.href
      if (registry.slice(-1) !== '/') {
        registry += '/'
      }
      this.conf.set('registry', registry)
    } else {
      registry = null
    }
  
    if (!conf.get('cache')) throw new Error("Cache dir is required")
  
    var auth = this.conf.get('_auth')
    var alwaysAuth = this.conf.get('always-auth')
    if (auth && !alwaysAuth && registry) {
      // if we're always authing, then we just send the
      // user/pass on every thing.  otherwise, create a
      // session, and use that.
      var token = this.conf.get('_token')
      this.couchLogin = new CouchLogin(registry, token)
      this.couchLogin.proxy = this.conf.get('proxy')
      this.couchLogin.strictSSL = this.conf.get('strict-ssl')
      this.couchLogin.ca = this.conf.get('ca')
      this.couchLogin.cert = this.conf.get('cert')
      this.couchLogin.key = this.conf.get('key')
    }
  
    this.log = conf.log || conf.get('log') || npmlog
  }
  
  require('fs').readdirSync(__dirname + "/lib").forEach(function (f) {
    if (!f.match(/\.js$/)) return
    RegClient.prototype[f.replace(/\.js$/, '')] = require('./lib/' + f)
  })
  