in SmartCoolerCharge/clientHelper.js [15:61]
exports.signHeaders = function (configArgs, options) {
const headers = {};
if ((options.headers !== null) && (options.headers !== undefined)) {
Object.keys(options.headers).forEach(item => headers[item] = options.headers[item]);
}
headers['x-amz-pay-region'] = configArgs.region;
headers['x-amz-pay-host'] = constants.REGION_MAP[configArgs.region.toLowerCase()];
headers['x-amz-pay-date'] = getTimestamp();
headers['content-type'] = 'application/json';
headers['accept'] = 'application/json';
headers['user-agent'] = `amazon-pay-sdk-nodejs/${constants.VERSION} (JS/${process.versions.node}; ${process.platform})`;
const lowercaseSortedHeaderKeys = Object.keys(headers).sort(function (a, b) {
return a.toLowerCase().localeCompare(b.toLowerCase());
});
let signedHeaders = '';
lowercaseSortedHeaderKeys.forEach(item => signedHeaders += item.toLowerCase() + ';');
signedHeaders = signedHeaders.slice(0, -1); // remove trailing semicolon
let payload = options.payload;
if ((payload === null) || (payload === undefined) || (options.urlFragment.includes('/account-management/v1/accounts'))) {
payload = ''; // do not sign payload for payment critical data APIs
}
let canonicalRequest = options.method + '\n/' + options.urlFragment + '\n\n';
lowercaseSortedHeaderKeys.forEach(item => canonicalRequest += item.toLowerCase() + ':' + headers[item] + '\n');
canonicalRequest += '\n' + signedHeaders + '\n' + crypto.createHash('SHA256').update(payload).digest('hex');
// console.log('\nCANONICAL REQUEST (dashes added for clarity only):\n---\n' + canonicalRequest + '\n---\n');
const stringToSign = constants.AMAZON_SIGNATURE_ALGORITHM + '\n' +
crypto.createHash('SHA256').update(canonicalRequest).digest('hex');
// console.log('STRING TO SIGN (dashes added for clarity only):\n---\n' + stringToSign + '\n---\n');
const signature = sign(configArgs.privateKey, stringToSign);
// console.log('BASE64 ENCODED SIGNATURE:\n' + signature + '\n');
headers['authorization'] = constants.AMAZON_SIGNATURE_ALGORITHM
+ ' PublicKeyId=' + configArgs['publicKeyId']
+ ', SignedHeaders=' + signedHeaders
+ ', Signature=' + signature;
return headers;
}