UNPKG

amazon-pay-async

Version:

API wrapper for Amazon Pay using promises and defining types

62 lines (61 loc) 1.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var crypto = require("crypto"); var URL = require("url"); function composeParams(params, label, composed) { composed = safeObjectCast(composed); params = safeObjectCast(params); Object.keys(params).forEach(function (key) { var value = params[key]; var newLabel = label ? label + "." + key : key; if (isObject(value)) { composeParams(value, newLabel, composed); } else { composed[newLabel] = value; } }); return composed; } exports.composeParams = composeParams; function isObject(obj) { return Object.prototype.toString.call(obj) === '[object Object]'; } exports.isObject = isObject; function attachSignature(url, secret, params) { params.SignatureMethod = 'HmacSHA256'; params.SignatureVersion = '2'; var sortedParams = Object.keys(params).sort(function (a, b) { return (a === b ? 0 : a < b ? -1 : 1); }).map(function (key) { return RFC3986Encode(key) + "=" + RFC3986Encode(params[key]); }).join('&'); var parsedUrl = URL.parse(url); var hmac = crypto.createHmac('SHA256', secret); var stringToSign = [ 'POST', parsedUrl.hostname, (parsedUrl.pathname || '/'), sortedParams, ].join('\n'); hmac.update(stringToSign); params.Signature = hmac.digest('base64'); return params; } exports.attachSignature = attachSignature; function safeJSONParse(data) { var parsed; try { parsed = JSON.parse(data); } catch (e) { parsed = data; } return parsed; } exports.safeJSONParse = safeJSONParse; function safeObjectCast(obj) { if (!isObject(obj)) { return {}; } return obj; } function RFC3986Encode(str) { return encodeURIComponent(str).replace(/[!'()*]/g, function (c) { return "%" + c.charCodeAt(0).toString(16); }); }