Source: transport/RequestTransport.js

'use strict';

import Transport from './Transport';
import TransportError from '../errors/TransportError';
import { SUCCESS_RESPONSE_CODES } from '../utils/Constants';

export default class RequestTransport extends Transport {
  /**
   * A {@link Transport} implementation for [Request]{@link https://github.com/request/request}.<br />
   * This class requires `request` to be installed as dependency.
   *
   * @constructor
   *
   * @param [promiseProvider=null] {PromiseProvider} A {@link PromiseProvider} implementation.
   *
   * @see Transport
   */
  constructor(promiseProvider) {
    super();

    this.promiseProvider = promiseProvider;
  }

  post(url, headers, data, raw) {
    return this.promiseProvider.newPromise(function(resolve, reject) {
      require('request')({
        url: url,
        headers: headers,
        method: 'POST',
        body: data,
        json: !raw
      }, function(err, res, body) {
        if (err || SUCCESS_RESPONSE_CODES.indexOf(res.statusCode) < 0) {
          return reject(new TransportError(err, res && res.statusCode, body));
        }

        resolve(body);
      });
    });
  }
}