# npm-registry-client The code that npm uses to talk to the registry. It handles all the caching and HTTP calls. ## Usage ```javascript var RegClient = require('npm-registry-client') var client = new RegClient(config) client.get("npm", "latest", 1000, function (er, data, raw, res) { // error is an error if there was a problem. // data is the parsed data object // raw is the json string // res is the response from couch }) ``` # Configuration This program is designed to work with [npmconf](https://npmjs.org/package/npmconf), but you can also pass in a plain-jane object with the appropriate configs, and it'll shim it for you. Any configuration thingie that has get/set/del methods will also be accepted. * `registry` **Required** {String} URL to the registry * `cache` **Required** {String} Path to the cache folder * `always-auth` {Boolean} Auth even for GET requests. * `auth` {String} A base64-encoded `username:password` * `email` {String} User's email address * `tag` {String} The default tag to use when publishing new packages. Default = `"latest"` * `ca` {String} Cerficate signing authority certificates to trust. * `strict-ssl` {Boolean} Whether or not to be strict with SSL certificates. Default = `true` * `user-agent` {String} User agent header to send. Default = `"node/{process.version} {process.platform} {process.arch}"` * `log` {Object} The logger to use. Defaults to `require("npmlog")` if that works, otherwise logs are disabled. * `fetch-retries` {Number} Number of times to retry on GET failures. Default=2 * `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10 * `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`. Default=10000 (10 seconds) * `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`. Default=60000 (60 seconds) * `proxy` {URL} The url to proxy requests through. * `https-proxy` {URL} The url to proxy https requests through. Defaults to be the same as `proxy` if unset. * `_auth` {String} The base64-encoded authorization header. * `username` `_password` {String} Username/password to use to generate `_auth` if not supplied. * `_token` {Object} A token for use with [couch-login](https://npmjs.org/package/couch-login) # client.request(method, where, [what], [etag], [nofollow], cb) * `method` {String} HTTP method * `where` {String} Path to request on the server * `what` {Stream | Buffer | String | Object} The request body. Objects that are not Buffers or Streams are encoded as JSON. * `etag` {String} The cached ETag * `nofollow` {Boolean} Prevent following 302/301 responses * `cb` {Function} * `error` {Error | null} * `data` {Object} the parsed data object * `raw` {String} the json * `res` {Response Object} response from couch Make a request to the registry. All the other methods are wrappers around this. one. # client.adduser(username, password, email, cb) * `username` {String} * `password` {String} * `email` {String} * `cb` {Function} Add a user account to the registry, or verify the credentials. # client.get(url, [timeout], [nofollow], [staleOk], cb) * `url` {String} The url path to fetch * `timeout` {Number} Number of seconds old that a cached copy must be before a new request will be made. * `nofollow` {Boolean} Do not follow 301/302 responses * `staleOk` {Boolean} If there's cached data available, then return that to the callback quickly, and update the cache the background. Fetches data from the registry via a GET request, saving it in the cache folder with the ETag. # client.publish(data, tarball, [readme], cb) * `data` {Object} Package data * `tarball` {String | Stream} Filename or stream of the package tarball * `readme` {String} Contents of the README markdown file * `cb` {Function} Publish a package to the registry. Note that this does not create the tarball from a folder. However, it can accept a gzipped tar stream or a filename to a tarball. # client.star(package, starred, cb) * `package` {String} Name of the package to star * `starred` {Boolean} True to star the package, false to unstar it. * `cb` {Function} Star or unstar a package. Note that the user does not have to be the package owner to star or unstar a package, though other writes do require that the user be the package owner. # client.stars(username, cb) * `username` {String} Name of user to fetch starred packages for. * `cb` {Function} View your own or another user's starred packages. # client.tag(project, version, tag, cb) * `project` {String} Project name * `version` {String} Version to tag * `tag` {String} Tag name to apply * `cb` {Function} Mark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the specified version. # client.unpublish(name, [ver], cb) * `name` {String} package name * `ver` {String} version to unpublish. Leave blank to unpublish all versions. * `cb` {Function} Remove a version of a package (or all versions) from the registry. When the last version us unpublished, the entire document is removed from the database. # client.upload(where, file, [etag], [nofollow], cb) * `where` {String} URL path to upload to * `file` {String | Stream} Either the filename or a readable stream * `etag` {String} Cache ETag * `nofollow` {Boolean} Do not follow 301/302 responses * `cb` {Function} Upload an attachment. Mostly used by `client.publish()`.