@tableau/taco-toolkit
Version:
Tableau Connector Toolkit
164 lines • 14 kB
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNpZ25pbmctdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZXBzL3NhbmRib3gvc2RrL2ZldGNoZXItdXRpbHMvYXdzLXNpZ25pbmctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUE4QztBQUc5QyxvREFBZ0Y7QUFJaEYsSUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFBO0FBQ25DLElBQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFBO0FBQzlDLElBQU0sY0FBYyxHQUFHLFlBQVksQ0FBQTtBQUNuQyxJQUFNLGtCQUFrQixHQUFHLHNCQUFzQixDQUFBO0FBQ2pELElBQU0sb0JBQW9CLEdBQUcsa0JBQWtCLENBQUE7QUFFL0MsSUFBTSxlQUFlLEdBQUcsVUFBQyxJQUFVLElBQUssT0FBQSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUE1RCxDQUE0RCxDQUFBLENBQUMsK0NBQStDO0FBRXBKLElBQU0sZ0JBQWdCLEdBQUcsVUFBQyxJQUFVLElBQUssT0FBQSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQWxELENBQWtELENBQUE7QUFFcEYsSUFBTSxtQkFBbUIsR0FBRyxVQUFDLFdBQW1CO0lBQ3JELElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMvQixXQUFXLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUN2QztJQUNELElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDaEIsT0FBTyxFQUFFLENBQUE7S0FDVjtJQUNELElBQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQUMsR0FBRyxFQUFFLElBQUk7UUFDNUMsSUFBQSxLQUFBLE9BQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBQSxFQUE1QixJQUFJLFFBQUEsRUFBRSxHQUFHLFFBQW1CLENBQUE7UUFDbkMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxhQUFILEdBQUcsY0FBSCxHQUFHLEdBQUksRUFBRSxDQUFDLENBQUE7UUFDN0QsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDLEVBQUUsRUFBNEIsQ0FBQyxDQUFBO0lBQ2hDLE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQyxDQUFBO0FBYlksUUFBQSxtQkFBbUIsdUJBYS9CO0FBRU0sSUFBTSxzQkFBc0IsR0FBRyxVQUFDLFdBQW1CO0lBQ3hELElBQU0sV0FBVyxHQUFHLElBQUEsMkJBQW1CLEVBQUMsV0FBVyxDQUFDLENBQUE7SUFFcEQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUM1QixHQUFHLENBQUMsVUFBQyxHQUFHLElBQUssT0FBQSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQXBFLENBQW9FLENBQUM7U0FDbEYsSUFBSSxFQUFFO1NBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2QsQ0FBQyxDQUFBO0FBUFksUUFBQSxzQkFBc0IsMEJBT2xDO0FBRUQsWUFBWSxDQUFDLElBQU0sa0JBQWtCLEdBQUcsVUFBQyxPQUFrQztJQUN6RSxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFDLEVBQU07WUFBTixLQUFBLGFBQU0sRUFBTCxDQUFDLFFBQUEsRUFBRSxDQUFDLFFBQUE7UUFBTSxPQUFBLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUFwQixDQUFvQixDQUFDLENBQUMsQ0FBQTtJQUUzRixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3hCLElBQUksRUFBRTtTQUNOLEdBQUcsQ0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLFVBQUcsR0FBRyxjQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBRSxFQUEvQixDQUErQixDQUFDO1NBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUNmLENBQUMsQ0FBQTtBQUVELFlBQVksQ0FBQyxJQUFNLGVBQWUsR0FBRyxVQUFDLE9BQWtDO0lBQ3RFLE9BQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDakIsR0FBRyxDQUFDLFVBQUMsR0FBRyxJQUFLLE9BQUEsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFqQixDQUFpQixDQUFDO1NBQy9CLElBQUksRUFBRTtTQUNOLElBQUksQ0FBQyxHQUFHLENBQUM7QUFIWixDQUdZLENBQUE7QUFFZCxJQUFNLGVBQWUsR0FBRyxVQUFDLEVBVXhCO1FBVEMsVUFBVSxnQkFBQSxFQUNWLFNBQVMsZUFBQSxFQUNULFVBQVUsZ0JBQUEsRUFDVixTQUFTLGVBQUE7SUFPVCxJQUFNLE9BQU8sR0FBRyxJQUFBLHNCQUFVLEVBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQTtJQUMxRCxJQUFNLGFBQWEsR0FBRyxJQUFBLHNCQUFVLEVBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3BELElBQU0sb0JBQW9CLEdBQUcsSUFBQSxzQkFBVSxFQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUNsRSxJQUFNLFVBQVUsR0FBRyxJQUFBLHNCQUFVLEVBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLENBQUE7SUFDakUsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyxDQUFBO0FBRUQsK0VBQStFO0FBQy9FLGlHQUFpRztBQUNqRyxZQUFZLENBQUMsU0FBUyxvQkFBb0IsQ0FBQyxFQWtCMUM7O1FBakJDLFVBQVUsZ0JBQUEsRUFDVixHQUFHLFNBQUEsRUFDSCxTQUFTLGVBQUEsRUFDVCxVQUFVLGdCQUFBLEVBQ1YsU0FBUyxlQUFBLEVBQ1QsU0FBUyxlQUFBLEVBQ1QsZUFBWSxFQUFaLE9BQU8sbUJBQUcsRUFBRSxLQUFBLEVBQ1osWUFBWSxrQkFBQTtJQVdaLElBQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7SUFDdkIsSUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDekMsSUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTFDLElBQU0sYUFBYSxHQUFHLElBQUEsa0JBQU0sRUFBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUVoRCxxRUFBcUU7SUFDL0QsSUFBQSxLQUE2QixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBdkMsSUFBSSxVQUFBLEVBQUUsUUFBUSxjQUFBLEVBQUUsTUFBTSxZQUFpQixDQUFBO0lBQy9DLElBQU0sWUFBWSxHQUFXLFFBQVEsQ0FBQTtJQUNyQyxJQUFNLG9CQUFvQixHQUFXLElBQUEsOEJBQXNCLEVBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUVwRixJQUFNLE9BQU87WUFDWCxJQUFJLEVBQUUsSUFBSTs7UUFDVixHQUFDLGNBQWMsSUFBRyxZQUFZO1FBQzlCLEdBQUMsa0JBQWtCLElBQUcsYUFBYTtXQUNwQyxDQUFBO0lBRUQsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxDQUFDLGVBQWUsQ0FBQyxHQUFHLFlBQVksQ0FBQTtLQUN4QztJQUVELElBQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFcEQsSUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRTlDLElBQU0sWUFBWSxHQUNoQixVQUFHLFVBQVUsT0FBSTtRQUNqQixVQUFHLFlBQVksT0FBSTtRQUNuQixVQUFHLG9CQUFvQixPQUFJO1FBQzNCLFVBQUcsZ0JBQWdCLFNBQU07UUFDekIsVUFBRyxhQUFhLE9BQUk7UUFDcEIsVUFBRyxhQUFhLENBQUUsQ0FBQTtJQUVwQixJQUFNLEtBQUssR0FBRyxVQUFHLFVBQVUsY0FBSSxTQUFTLGNBQUksVUFBVSxjQUFJLFlBQVksQ0FBRSxDQUFBO0lBRXhFLElBQU0sZUFBZSxHQUFHLElBQUEsa0JBQU0sRUFBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUV2RCxJQUFNLFlBQVksR0FBRyxVQUFHLG9CQUFvQixlQUFLLFlBQVksZUFBSyxLQUFLLGVBQUssZUFBZSxDQUFFLENBQUE7SUFFN0YsSUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDO1FBQ2pDLFVBQVUsWUFBQTtRQUNWLFNBQVMsV0FBQTtRQUNULFVBQVUsWUFBQTtRQUNWLFNBQVMsV0FBQTtLQUNWLENBQUMsQ0FBQTtJQUVGLElBQU0sU0FBUyxHQUFHLElBQUEsc0JBQVUsRUFBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFFdEQsSUFBTSxhQUFhLEdBQUcsVUFBRyxvQkFBb0IseUJBQWUsU0FBUyxjQUFJLFVBQVUsY0FBSSxTQUFTLGNBQUksVUFBVSxjQUFJLFlBQVksNEJBQWtCLGFBQWEsd0JBQWMsU0FBUyxDQUFFLENBQUE7SUFFdEwsSUFBTSxVQUFVO1lBQ2QsYUFBYSxFQUFFLGFBQWE7O1FBQzVCLEdBQUMsY0FBYyxJQUFHLFlBQVk7UUFDOUIsR0FBQyxrQkFBa0IsSUFBRyxhQUFhO1dBQ3BDLENBQUE7SUFFRCxJQUFJLFlBQVksRUFBRTtRQUNoQixVQUFVLENBQUMsZUFBZSxDQUFDLEdBQUcsWUFBWSxDQUFBO0tBQzNDO0lBRUQsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQUVEO0lBQXFDLG1DQUFhO0lBQWxEOztJQXlCQSxDQUFDO0lBeEJDLHVDQUFhLEdBQWIsVUFBYyxPQUFrQjtRQUM5QixJQUFNLE9BQU8sR0FBaUI7WUFDNUI7Z0JBQ0UsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsWUFBWSxFQUFFLGNBQWM7Z0JBQzVCLFdBQVcsRUFBRSxlQUFlLENBQUMsWUFBWTthQUMxQztTQUNGLENBQUE7UUFFRCxJQUFBLGtDQUFpQixFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0lBRU0sNEJBQVksR0FBbkIsVUFBb0IsWUFTbkI7UUFDQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBQ0gsc0JBQUM7QUFBRCxDQUFDLEFBekJELENBQXFDLDhCQUFhLEdBeUJqRDtBQXpCWSwwQ0FBZSJ9