/** * Created by Kartik Andalam on 9/8/15. * Copyright (c) 2015 APIMatic. All rights reserved. * */ var HttpContext = require("./HttpContext"); var HttpResponse = require("../Response/HttpResponse"); var request = require("superagent"); var APIHelper = require('../../APIHelper'); var convertHttpRequest = function (req) { //Convert to request's version of http request var options = { url: req.queryUrl, method: req.method, headers: req.headers }; if (req.username) { options.auth = {user:req.username, pass:req.password}; } if (req.body) { options.body = req.body; } if (req.formData) { options.formData = APIHelper.formDataEncodeObject(req.formData); } if (req.form) { options.form = APIHelper.urlEncodeObject(req.form); options.headers["content-type"] = 'application/x-www-form-urlencoded'; } return options; } var convertHttpResponse = function (resp) { var response = new HttpResponse(); if(resp) { response.body = resp.body; response.headers = resp.headers; response.statusCode = resp.statusCode; } return response; } var methodMap = { GET: 'get', DELETE: 'del', HEAD: 'head', PATH: 'patch', POST: 'post', PUT: 'put' } request.parse['application/json'] = function(s) { return s; }; /** * Execute a given HttpRequest to get string response back * @param {HttpRequest | HttpBodyRequest} request The query string builder to replace the template parameters * @param {Array} parameters The parameters to replace in the queryBuilder */ function executeRequest(req, callback) { //Convert abstracted request to request's http request var options = convertHttpRequest(req); var context = new HttpContext(); context.request = req; //Make a temp callback var internalCallback = function cb(error, res) { var response = convertHttpResponse(res); context.response = response; callback(error, response, context); }; request[methodMap[options.method]](options.url) .set(options.headers) .send(options.body) .end(internalCallback) } module.exports = executeRequest;