UNPKG

2.93 kBJavaScriptView Raw
1var util = require('../util');
2var Rest = require('./rest');
3var Json = require('./json');
4var JsonBuilder = require('../json/builder');
5var JsonParser = require('../json/parser');
6
7function populateBody(req) {
8 var builder = new JsonBuilder();
9 var input = req.service.api.operations[req.operation].input;
10
11 if (input.payload) {
12 var params = {};
13 var payloadShape = input.members[input.payload];
14 params = req.params[input.payload];
15 if (params === undefined) return;
16
17 if (payloadShape.type === 'structure') {
18 req.httpRequest.body = builder.build(params, payloadShape);
19 applyContentTypeHeader(req);
20 } else { // non-JSON payload
21 req.httpRequest.body = params;
22 if (payloadShape.type === 'binary' || payloadShape.isStreaming) {
23 applyContentTypeHeader(req, true);
24 }
25 }
26 } else {
27 var body = builder.build(req.params, input);
28 if (body !== '{}' || req.httpRequest.method !== 'GET') { //don't send empty body for GET method
29 req.httpRequest.body = body;
30 }
31 applyContentTypeHeader(req);
32 }
33}
34
35function applyContentTypeHeader(req, isBinary) {
36 var operation = req.service.api.operations[req.operation];
37 var input = operation.input;
38
39 if (!req.httpRequest.headers['Content-Type']) {
40 var type = isBinary ? 'binary/octet-stream' : 'application/json';
41 req.httpRequest.headers['Content-Type'] = type;
42 }
43}
44
45function buildRequest(req) {
46 Rest.buildRequest(req);
47
48 // never send body payload on HEAD/DELETE
49 if (['HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {
50 populateBody(req);
51 }
52}
53
54function extractError(resp) {
55 Json.extractError(resp);
56}
57
58function extractData(resp) {
59 Rest.extractData(resp);
60
61 var req = resp.request;
62 var operation = req.service.api.operations[req.operation];
63 var rules = req.service.api.operations[req.operation].output || {};
64 var parser;
65 var hasEventOutput = operation.hasEventOutput;
66
67 if (rules.payload) {
68 var payloadMember = rules.members[rules.payload];
69 var body = resp.httpResponse.body;
70 if (payloadMember.isEventStream) {
71 parser = new JsonParser();
72 resp.data[payload] = util.createEventStream(
73 AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body,
74 parser,
75 payloadMember
76 );
77 } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {
78 var parser = new JsonParser();
79 resp.data[rules.payload] = parser.parse(body, payloadMember);
80 } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {
81 resp.data[rules.payload] = body;
82 } else {
83 resp.data[rules.payload] = payloadMember.toType(body);
84 }
85 } else {
86 var data = resp.data;
87 Json.extractData(resp);
88 resp.data = util.merge(data, resp.data);
89 }
90}
91
92/**
93 * @api private
94 */
95module.exports = {
96 buildRequest: buildRequest,
97 extractError: extractError,
98 extractData: extractData
99};