amazon-mws-node
Version:
Tiny library for interacting with the Amazon MWS API
54 lines (40 loc) • 1.66 kB
JavaScript
var request = require('request');
var hmacSHA256 = require('crypto-js/hmac-sha256');
var base64 = require('crypto-js/enc-base64');
var initializeAmazon = function (initOptions) {
return function (options) {
var method = options.method || 'GET';
var url = 'https://';
url += options.base || 'mws.amazonservices.com';
url += options.endpoint;
options.params.AWSAccessKeyId = options.params.AWSAccessKeyId || initOptions.AWSAccessKeyId;
options.params.SignatureMethod = 'HmacSHA256';
options.params.SignatureVersion = '2';
options.params.Timestamp = new Date().toISOString();
var paramsArr = Object.keys(options.params).map(function (param) {
return [param, options.params[param]];
});
paramsArr.sort(function (a, b) {
return a[0] > b[0] ? 1 : -1;
});
var keys = [];
var vals = [];
paramsArr.forEach(function (tuple) {
keys.push(encodeURIComponent(tuple[0]));
vals.push(encodeURIComponent(tuple[1]));
});
var paramsString = keys.map(function (key, index) {
return key + '=' + vals[index];
}).join("&");
var query = [method, options.base, options.endpoint, paramsString];
var queryString = query.join('\n');
var hmac = hmacSHA256(queryString, options.AmzSecretKey || initOptions.AmzSecretKey);
var signature = base64.stringify(hmac);
paramsString += '&Signature=' + encodeURIComponent(signature);
url += '?' + paramsString;
request[method.toLowerCase()](url, function (error, response, body) {
options.callback && options.callback(error, response, body);
});
};
};
module.exports = initializeAmazon;