All files / src/lib request.js

52% Statements 13/25
26.67% Branches 4/15
75% Functions 3/4
54.17% Lines 13/24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 691x   1x 1x   1x                                                                         1x   1x 3x 13x 13x 13x           13x             13x 13x            
const request = require('request-promise');
 
const utils = require('../utils/utils');
const console = require('../utils/console');
 
const baseUrl = utils.BUILD_URL;
 
function errorHandler(err) {
  // Pass along errors in testing environment
  if (process.env.NODE_ENV === 'testing') throw err;
 
  let parsed;
  try {
    parsed = JSON.parse(err.response.body);
  } catch (e) {
    // Ignore the error, we have defaults set below
    parsed = {};
  }
 
  // Nicer error message if they need to upgrade
  if (parsed.code === 'UpgradeRequired') {
    console.error(`\nThis requires a paid plan. To upgrade visit: ${'https://www.readme.build/settings/team'.green}\n`);
    process.exit(1);
  }
 
  if (err.response) {
    console.error(`
  Error making request to ${err.options.baseUrl}${err.options.uri}
 
  Message: ${parsed.error || 'An unexpected error has occurred'}
  Code: ${parsed.code || 'Unknown'}
  Response status: ${err.response.statusCode} ${err.response.statusMessage}
    `);
  } else { // If we dont have a response, then something has really gone wrong!
    console.error(`
  Error making request to ${err.options.baseUrl}${err.options.uri}
 
  Message: ${err.message}
    `);
  }
}
 
module.exports.errorHandler = errorHandler;
 
['get', 'post', 'put'].forEach((method) => {
  module.exports[method] = (uri, options = { defaultErrorHandler: true, sendRequest: true }) => {
    const jar = utils.getJar();
    const agent = request.defaults({ baseUrl, jar });
    const opts = Object.assign({}, options, {
      uri,
      headers: {
        'user-agent': `api/${require('../../package.json').version} ${process.platform}/${process.version}`,
      },
    });
    Iif (options.sendRequest === false) {
      return agent[method](opts);
    }
 
    // We have to wrap the promise so that we can get a default error handler
    // on all http requests. This is configurable via the `defaultErrorHandler`
    // option when making the request
    return new Promise((resolve, reject) => {
      return agent[method](opts)
        .then(resolve)
        .catch(options.defaultErrorHandler !== false ? errorHandler : reject);
    });
  };
});