UNPKG

@tableau/taco-toolkit

Version:
164 lines 14 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __read = (this && this.__read) || function (o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error: error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AwsSigningUtils = exports.toCanonicalQueryString = exports.queryStringToObject = void 0; var crypto_js_1 = require("crypto-js"); var sandbox_plugin_1 = require("../sandbox-plugin"); var AWS4_REQUEST = 'aws4_request'; var AMZ_TOKEN_PARAM = 'x-amz-security-token'; var AMZ_DATE_PARAM = 'x-amz-date'; var AMZ_CONTENT_SHA256 = 'x-amz-content-sha256'; var ALGORITHM_IDENTIFIER = 'AWS4-HMAC-SHA256'; var toISO8601Format = function (date) { return date.toISOString().replace(/[-|:]/g, '').split('.')[0] + 'Z'; }; //'2022-06-30T00:04:59.166Z' ->20220630T000459Z var toYYYYMMDDFormat = function (date) { return date.toISOString().split('T')[0].replace(/-/g, ''); }; var queryStringToObject = function (queryString) { if (queryString.startsWith('?')) { queryString = queryString.substring(1); } if (!queryString) { return {}; } var obj = queryString.split('&').reduce(function (acc, pair) { var _a = __read(pair.split('='), 2), name = _a[0], val = _a[1]; acc[decodeURIComponent(name)] = decodeURIComponent(val !== null && val !== void 0 ? val : ''); return acc; }, {}); return obj; }; exports.queryStringToObject = queryStringToObject; var toCanonicalQueryString = function (queryString) { var queryObject = (0, exports.queryStringToObject)(queryString); return Object.keys(queryObject) .map(function (key) { return encodeURIComponent(key) + '=' + encodeURIComponent(queryObject[key]); }) .sort() .join('&'); }; exports.toCanonicalQueryString = toCanonicalQueryString; /* export */ var toCanonicalHeaders = function (headers) { headers = Object.fromEntries(Object.entries(headers).map(function (_a) { var _b = __read(_a, 2), k = _b[0], v = _b[1]; return [k.toLowerCase(), v]; })); return Object.keys(headers) .sort() .map(function (key) { return "".concat(key, ":").concat(headers[key].trim()); }) .join('\n'); }; /* export */ var toSignedHeaders = function (headers) { return Object.keys(headers) .map(function (key) { return key.toLowerCase(); }) .sort() .join(';'); }; var getSignatureKey = function (_a) { var dateString = _a.dateString, awsRegion = _a.awsRegion, awsService = _a.awsService, secretKey = _a.secretKey; var dateKey = (0, crypto_js_1.HmacSHA256)(dateString, 'AWS4' + secretKey); var dateRegionKey = (0, crypto_js_1.HmacSHA256)(awsRegion, dateKey); var dateRegionServiceKey = (0, crypto_js_1.HmacSHA256)(awsService, dateRegionKey); var signingKey = (0, crypto_js_1.HmacSHA256)(AWS4_REQUEST, dateRegionServiceKey); return signingKey; }; //https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html //aws-sdk https://github.com/aws/aws-sdk-js-v3/blob/main/packages/signature-v4/src/SignatureV4.ts /* export */ function getAwsSignedHeaderV4(_a) { var _b, _c; var httpMethod = _a.httpMethod, url = _a.url, awsRegion = _a.awsRegion, awsService = _a.awsService, accessKey = _a.accessKey, secretKey = _a.secretKey, _d = _a.payload, payload = _d === void 0 ? '' : _d, sessionToken = _a.sessionToken; var date = new Date(); var dateString = toYYYYMMDDFormat(date); var timeStampISO = toISO8601Format(date); var hashedPayload = (0, crypto_js_1.SHA256)(payload).toString(); // note: the url components must be encoded to generate the signature var _e = new URL(url), host = _e.host, pathname = _e.pathname, search = _e.search; var canonicalURI = pathname; var canonicalQueryString = (0, exports.toCanonicalQueryString)(search.replace('?', '')); var headers = (_b = { host: host }, _b[AMZ_DATE_PARAM] = timeStampISO, _b[AMZ_CONTENT_SHA256] = hashedPayload, _b); if (sessionToken) { headers[AMZ_TOKEN_PARAM] = sessionToken; } var canonicalHeaders = toCanonicalHeaders(headers); var signedHeaders = toSignedHeaders(headers); var canonicalReq = "".concat(httpMethod, "\n") + "".concat(canonicalURI, "\n") + "".concat(canonicalQueryString, "\n") + "".concat(canonicalHeaders, "\n\n") + "".concat(signedHeaders, "\n") + "".concat(hashedPayload); var scope = "".concat(dateString, "/").concat(awsRegion, "/").concat(awsService, "/").concat(AWS4_REQUEST); var hexCanonicalReq = (0, crypto_js_1.SHA256)(canonicalReq).toString(); var stringToSign = "".concat(ALGORITHM_IDENTIFIER, "\n").concat(timeStampISO, "\n").concat(scope, "\n").concat(hexCanonicalReq); var signingKey = getSignatureKey({ dateString: dateString, awsRegion: awsRegion, awsService: awsService, secretKey: secretKey, }); var signature = (0, crypto_js_1.HmacSHA256)(stringToSign, signingKey); var authorization = "".concat(ALGORITHM_IDENTIFIER, " Credential=").concat(accessKey, "/").concat(dateString, "/").concat(awsRegion, "/").concat(awsService, "/").concat(AWS4_REQUEST, ",SignedHeaders=").concat(signedHeaders, ",Signature=").concat(signature); var authHeader = (_c = { Authorization: authorization }, _c[AMZ_DATE_PARAM] = timeStampISO, _c[AMZ_CONTENT_SHA256] = hashedPayload, _c); if (sessionToken) { authHeader[AMZ_TOKEN_PARAM] = sessionToken; } return authHeader; } var AwsSigningUtils = /** @class */ (function (_super) { __extends(AwsSigningUtils, _super); function AwsSigningUtils() { return _super !== null && _super.apply(this, arguments) || this; } AwsSigningUtils.prototype.registerClass = function (sandbox) { var methods = [ { isStatic: true, externalName: 'getHeadersV4', functionRef: AwsSigningUtils.getHeadersV4, }, ]; (0, sandbox_plugin_1.addClassToSandbox)(sandbox, methods, 'AwsSigningUtils'); }; AwsSigningUtils.getHeadersV4 = function (signingInput) { return Promise.resolve(getAwsSignedHeaderV4(signingInput)); }; return AwsSigningUtils; }(sandbox_plugin_1.SandboxPlugin)); exports.AwsSigningUtils = AwsSigningUtils; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNpZ25pbmctdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZXBzL3NhbmRib3gvc2RrL2ZldGNoZXItdXRpbHMvYXdzLXNpZ25pbmctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUE4QztBQUc5QyxvREFBZ0Y7QUFJaEYsSUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFBO0FBQ25DLElBQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFBO0FBQzlDLElBQU0sY0FBYyxHQUFHLFlBQVksQ0FBQTtBQUNuQyxJQUFNLGtCQUFrQixHQUFHLHNCQUFzQixDQUFBO0FBQ2pELElBQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUE7QUFFL0MsSUFBTSxlQUFlLEdBQUcsVUFBQyxJQUFVLElBQUssT0FBQSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUE1RCxDQUE0RCxDQUFBLENBQUMsK0NBQStDO0FBRXBKLElBQU0sZ0JBQWdCLEdBQUcsVUFBQyxJQUFVLElBQUssT0FBQSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQWxELENBQWtELENBQUE7QUFFcEYsSUFBTSxtQkFBbUIsR0FBRyxVQUFDLFdBQW1CO0lBQ3JELElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMvQixXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUN2QztJQUNELElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxFQUFFLENB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