123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- var util = require('../util');
- var Rest = require('./rest');
- var Json = require('./json');
- var JsonBuilder = require('../json/builder');
- var JsonParser = require('../json/parser');
- var METHODS_WITHOUT_BODY = ['GET', 'HEAD', 'DELETE'];
- function unsetContentLength(req) {
- var payloadMember = util.getRequestPayloadShape(req);
- if (
- payloadMember === undefined &&
- METHODS_WITHOUT_BODY.indexOf(req.httpRequest.method) >= 0
- ) {
- delete req.httpRequest.headers['Content-Length'];
- }
- }
- function populateBody(req) {
- var builder = new JsonBuilder();
- var input = req.service.api.operations[req.operation].input;
- if (input.payload) {
- var params = {};
- var payloadShape = input.members[input.payload];
- params = req.params[input.payload];
- if (payloadShape.type === 'structure') {
- req.httpRequest.body = builder.build(params || {}, payloadShape);
- applyContentTypeHeader(req);
- } else if (params !== undefined) {
- // non-JSON payload
- req.httpRequest.body = params;
- if (payloadShape.type === 'binary' || payloadShape.isStreaming) {
- applyContentTypeHeader(req, true);
- }
- }
- } else {
- req.httpRequest.body = builder.build(req.params, input);
- applyContentTypeHeader(req);
- }
- }
- function applyContentTypeHeader(req, isBinary) {
- if (!req.httpRequest.headers['Content-Type']) {
- var type = isBinary ? 'binary/octet-stream' : 'application/json';
- req.httpRequest.headers['Content-Type'] = type;
- }
- }
- function buildRequest(req) {
- Rest.buildRequest(req);
- // never send body payload on GET/HEAD/DELETE
- if (METHODS_WITHOUT_BODY.indexOf(req.httpRequest.method) < 0) {
- populateBody(req);
- }
- }
- function extractError(resp) {
- Json.extractError(resp);
- }
- function extractData(resp) {
- Rest.extractData(resp);
- var req = resp.request;
- var operation = req.service.api.operations[req.operation];
- var rules = req.service.api.operations[req.operation].output || {};
- var parser;
- var hasEventOutput = operation.hasEventOutput;
- if (rules.payload) {
- var payloadMember = rules.members[rules.payload];
- var body = resp.httpResponse.body;
- if (payloadMember.isEventStream) {
- parser = new JsonParser();
- resp.data[payload] = util.createEventStream(
- AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body,
- parser,
- payloadMember
- );
- } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {
- var parser = new JsonParser();
- resp.data[rules.payload] = parser.parse(body, payloadMember);
- } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {
- resp.data[rules.payload] = body;
- } else {
- resp.data[rules.payload] = payloadMember.toType(body);
- }
- } else {
- var data = resp.data;
- Json.extractData(resp);
- resp.data = util.merge(data, resp.data);
- }
- }
- /**
- * @api private
- */
- module.exports = {
- buildRequest: buildRequest,
- extractError: extractError,
- extractData: extractData,
- unsetContentLength: unsetContentLength
- };
|