| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 'use strict'const BB = require('bluebird')const npmConfig = require('./config/figgy-config.js')const fetch = require('libnpm/fetch')const figgyPudding = require('figgy-pudding')const npm = require('./npm.js')const output = require('./utils/output.js')const WhoamiConfig = figgyPudding({  json: {},  registry: {}})module.exports = whoamiwhoami.usage = 'npm whoami [--registry <registry>]\n(just prints username according to given registry)'function whoami ([spec], silent, cb) {  // FIXME: need tighter checking on this, but is a breaking change  if (typeof cb !== 'function') {    cb = silent    silent = false  }  const opts = WhoamiConfig(npmConfig())  return BB.try(() => {    // First, check if we have a user/pass-based auth    const registry = opts.registry    if (!registry) throw new Error('no default registry set')    return npm.config.getCredentialsByURI(registry)  }).then(({username, token}) => {    if (username) {      return username    } else if (token) {      return fetch.json('/-/whoami', opts.concat({        spec      })).then(({username}) => {        if (username) {          return username        } else {          throw Object.assign(new Error(            'Your auth token is no longer valid. Please log in again.'          ), {code: 'ENEEDAUTH'})        }      })    } else {      // At this point, if they have a credentials object, it doesn't have a      // token or auth in it.  Probably just the default registry.      throw Object.assign(new Error(        'This command requires you to be logged in.'      ), {code: 'ENEEDAUTH'})    }  }).then(username => {    if (silent) {    } else if (opts.json) {      output(JSON.stringify(username))    } else {      output(username)    }    return username  }).nodeify(cb)}
 |