@studyportals/sp-hs-misc
Version:
Miscellaneous code used in HouseStark's projects
128 lines • 4.72 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.AWS4RequestSigner = void 0;
const aws4 = __importStar(require("aws4"));
const qs = __importStar(require("qs"));
const URL = __importStar(require("url"));
/**
* Signs a SuperAgentRequest using Amazon's AWS Signature Version 4. Make sure that all data
* has been put in the request before calling sign() because this data is used when signing
* the request.
*
* @deprecated Use @studyportals/mb-platform-http-requests
*/
class AWS4RequestSigner {
accessKeyId;
secretAccessKey;
sessionToken;
get aws4Sign() {
return aws4.sign;
}
constructor(accessKeyId, secretAccessKey, sessionToken) {
this.accessKeyId = accessKeyId;
this.secretAccessKey = secretAccessKey;
this.sessionToken = sessionToken;
}
sign(request) {
const headers = this.createHeaders(request);
this.appendHeadersToRequest(request, headers);
return request;
}
getAdditionalRequestOptions(request) {
return {};
}
createHeaders(request) {
const signedAwsRequest = this.getSignedAwsRequest(request);
return signedAwsRequest.headers;
}
getSignedAwsRequest(request) {
const requestOptions = this.getRequestOptions(request);
const credentials = this.getCredentials();
return this.aws4Sign(requestOptions, credentials);
}
getRequestOptions(request) {
const requestUrl = this.getUrlFromRequest(request);
const body = this.getStringifiedBody(request);
return {
host: requestUrl.host,
method: request.method,
path: requestUrl.path,
body: body,
headers: {
"Content-Type": "application/json",
},
...this.getAdditionalRequestOptions(request)
};
}
getUrlFromRequest(request) {
// As done in: https://github.com/bdgamble/superagent-aws-signed-request/blob/master/index.js
const requestAsAny = request;
let url = requestAsAny.url;
if (Object.keys(requestAsAny.qs).length) {
const queryString = qs.stringify(requestAsAny.qs);
url = this.appendQueryString(url, queryString);
}
if (requestAsAny.qsRaw.length > 0) {
const queryString = requestAsAny.qsRaw.join("&");
url = this.appendQueryString(url, queryString);
}
return URL.parse(url);
}
getStringifiedBody(request) {
// As done in: https://github.com/bdgamble/superagent-aws-signed-request/blob/master/index.js
const requestAsAny = request;
const data = requestAsAny._data;
return data ? JSON.stringify(data) : "";
}
getCredentials() {
return {
AccessKeyId: this.accessKeyId,
SecretKey: this.secretAccessKey,
SessionToken: this.sessionToken
};
}
appendHeadersToRequest(request, headers) {
for (const key of Object.keys(headers)) {
const value = headers[key];
request.set(key, value);
}
}
appendQueryString(url, queryString) {
return url + (url.indexOf('?') >= 0 ? '&' : '?') + queryString;
}
}
exports.AWS4RequestSigner = AWS4RequestSigner;
//# sourceMappingURL=aws4-request-signer.class.js.map