register.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. var parseUrl = require('url').parse;
  2. var request = require('request');
  3. var createError = require('./util/createError');
  4. function register(name, url, callback) {
  5. var config = this._config;
  6. var requestUrl = config.registry.register + '/packages';
  7. var remote = parseUrl(requestUrl);
  8. var headers = {};
  9. if (config.userAgent) {
  10. headers['User-Agent'] = config.userAgent;
  11. }
  12. if (config.accessToken) {
  13. requestUrl += '?access_token=' + config.accessToken;
  14. }
  15. request.post({
  16. url: requestUrl,
  17. proxy: remote.protocol === 'https:' ? config.httpsProxy : config.proxy,
  18. headers: headers,
  19. ca: config.ca.register,
  20. strictSSL: config.strictSsl,
  21. timeout: config.timeout,
  22. json: true,
  23. form: {
  24. name: name,
  25. url: url
  26. }
  27. }, function (err, response) {
  28. // If there was an internal error (e.g. timeout)
  29. if (err) {
  30. return callback(createError('Request to ' + requestUrl + ' failed: ' + err.message, err.code));
  31. }
  32. // Duplicate
  33. if (response.statusCode === 403) {
  34. return callback(createError('Duplicate package', 'EDUPLICATE'));
  35. }
  36. // Invalid format
  37. if (response.statusCode === 400) {
  38. return callback(createError('Invalid URL format', 'EINVFORMAT'));
  39. }
  40. // Everything other than 201 is unknown
  41. if (response.statusCode !== 201) {
  42. return callback(createError('Unknown error: ' + response.statusCode + ' - ' + response.body, 'EUNKNOWN'));
  43. }
  44. callback(null, {
  45. name: name,
  46. url: url
  47. });
  48. });
  49. }
  50. module.exports = register;