UNPKG

jscrambler

Version:

Jscrambler Code Integrity API client.

45 lines (44 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = signedParams; require("core-js/modules/es.array.sort.js"); require("core-js/modules/es.regexp.exec.js"); require("core-js/modules/es.string.replace.js"); var _lodash = _interopRequireDefault(require("lodash.clone")); var _crypto = _interopRequireDefault(require("crypto")); var _lodash2 = _interopRequireDefault(require("lodash.defaults")); var _lodash3 = _interopRequireDefault(require("lodash.keys")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const debug = !!process.env.DEBUG; function signedParams(method, path, host, keys) { let params = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {}; let utc = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true; params = (0, _lodash2.default)((0, _lodash.default)(params), { access_key: keys.accessKey, timestamp: utc.toString() !== 'false' ? new Date().toISOString() : new Date().toLocaleString() }); params.signature = generateHmacSignature(method, path, host, keys, params); return params; } function generateHmacSignature(method, path, host, keys, params) { const paramsCopy = (0, _lodash.default)(params); const signatureData = "".concat(method.toUpperCase(), ";").concat(host.toLowerCase(), ";").concat(path, ";").concat(buildSortedQuery(paramsCopy)); debug && console.log("Signature data: ".concat(signatureData)); const hmac = _crypto.default.createHmac('sha256', keys.secretKey.toUpperCase()); hmac.update(signatureData); return hmac.digest('base64'); } function buildSortedQuery(params) { // Sorted keys const _keys = (0, _lodash3.default)(params).sort(); let query = ''; for (let i = 0, l = _keys.length; i < l; i++) { const value = typeof params[_keys[i]] === 'object' ? JSON.stringify(params[_keys[i]]) : params[_keys[i]]; query += "".concat(encodeURIComponent(_keys[i]), "=").concat(encodeURIComponent(value), "&"); } query = query.replace(/\*/g, '%2A').replace(/[!'()]/g, escape).replace(/%7E/g, '~').replace(/\+/g, '%20'); // Strip the last separator and return return query.substring(0, query.length - 1); }