%PDF- %PDF-
| Direktori : /home/opti/workflow/node_modules/aws-sdk/lib/protocol/ |
| Current File : /home/opti/workflow/node_modules/aws-sdk/lib/protocol/rest.js |
var util = require('../util');
function populateMethod(req) {
req.httpRequest.method = req.service.api.operations[req.operation].httpMethod;
}
function populateURI(req) {
var operation = req.service.api.operations[req.operation];
var input = operation.input;
var uri = [req.httpRequest.endpoint.path, operation.httpPath].join('/');
uri = uri.replace(/\/+/g, '/');
var escapePathParamFn = req.service.escapePathParam || escapePathParam;
var escapeQuerystringParamFn = req.service.escapeQuerystringParam ||
escapeQuerystringParam;
var queryString = {}, queryStringSet = false;
util.each(input.members, function (name, member) {
var paramValue = req.params[name];
if (paramValue === null || paramValue === undefined) return;
if (member.location === 'uri') {
uri = uri.replace('{' + member.name + '}', escapePathParamFn(paramValue));
} else if (member.location === 'querystring') {
queryStringSet = true;
queryString[member.name] = escapeQuerystringParamFn(paramValue);
}
});
if (queryStringSet) {
uri += (uri.indexOf('?') >= 0 ? '&' : '?');
var parts = [];
util.arrayEach(Object.keys(queryString).sort(), function(key) {
parts.push(escapeQuerystringParam(key) + '=' + queryString[key]);
});
uri += parts.join('&');
}
req.httpRequest.path = uri;
}
function escapePathParam(value) {
return util.uriEscape(String(value));
}
function escapeQuerystringParam(value) {
return util.uriEscape(String(value));
}
function populateHeaders(req) {
var operation = req.service.api.operations[req.operation];
util.each(operation.input.members, function (name, member) {
var value = req.params[name];
if (value === null || value === undefined) return;
if (member.location === 'headers' && member.type === 'map') {
util.each(value, function(key, value) {
req.httpRequest.headers[member.name + key] = value;
});
} else if (member.location === 'header') {
value = member.toWireFormat(value).toString();
req.httpRequest.headers[member.name] = value;
}
});
}
function buildRequest(req) {
populateMethod(req);
populateURI(req);
populateHeaders(req);
}
function extractError() {
}
function extractData(resp) {
var req = resp.request;
var data = {};
var r = resp.httpResponse;
var operation = req.service.api.operations[req.operation];
var output = operation.output;
// normalize headers names to lower-cased keys for matching
var headers = {};
util.each(r.headers, function (k, v) {
headers[k.toLowerCase()] = v;
});
util.each(output.members, function(name, member) {
var header = (member.name || name).toLowerCase();
if (member.location === 'headers' && member.type === 'map') {
data[name] = {};
util.each(r.headers, function (k, v) {
var result = k.match(new RegExp('^' + member.name + '(.+)', 'i'));
if (result !== null) {
data[name][result[1]] = v;
}
});
} else if (member.location === 'header') {
if (headers[header] !== undefined) {
data[name] = headers[header];
}
} else if (member.location === 'status') {
data[name] = parseInt(r.statusCode, 10);
}
});
resp.data = data;
}
module.exports = {
buildRequest: buildRequest,
extractError: extractError,
extractData: extractData
};