dino-express
Version:
DinO enabled REST framework based on express
98 lines • 4.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwsRequestAdaptor = void 0;
const tslib_1 = require("tslib");
const dino_core_1 = require("dino-core");
const querystring = tslib_1.__importStar(require("querystring"));
const AbstractRequestAdaptor_1 = require("../AbstractRequestAdaptor");
const Helper_1 = require("../Helper");
const request_body_parser_1 = require("./request.body.parser");
class AwsRequestAdaptor extends AbstractRequestAdaptor_1.AbstractRequestAdaptor {
requestBodyParser;
constructor(environment) {
super();
this.requestBodyParser = new request_body_parser_1.RequestBodyParser(environment);
}
adapt(message) {
const url = this.buildUrl(message);
const method = this.getMethod(message);
const body = this.requestBodyParser.parse(message, method);
const context = this.getContextIfDefined(message);
const headers = this.getHeaders(message);
const query = this.getQuery(message);
dino_core_1.Logger.debug(`built URL: ${url} and method ${method}`);
message.url = url;
message.originalUrl = url;
message.method = method;
message.body = body;
message.headers = headers;
message.query = query;
message.context = context;
return message;
}
getContextIfDefined(message) {
return Helper_1.Helper.ensureValue(message.requestContext ?? message.context ?? message.body?.requestContext ?? message.body?.context, {});
}
/**
* Build the request URL if required
* @param {Object} message the request message
* @returns {String}
*
* @private
*/
buildUrl(message) {
const context = this.getContextIfDefined(message);
dino_core_1.Logger.debug(`received context: ${JSON.stringify(context)} and message: ${JSON.stringify(message)}`);
if (dino_core_1.ObjectHelper.isDefined(context.http)) {
return context.http.path;
}
if (dino_core_1.ObjectHelper.isDefined(context.routeKey)) {
let url = message.url ?? '';
if (url.startsWith('/?')) {
url = url.substring(1);
}
// allows to handle payload for AWS WebSocket integration with AWS API Gateway
return `/${context.routeKey}${url}`;
}
if (dino_core_1.ObjectHelper.isDefined(message.url)) {
return message.url;
}
return `${this.getOriginalUrl(message)}`;
}
getHeaders(message) {
const headers = Object.assign({}, Helper_1.Helper.ensureValue(message.headers, {}), Helper_1.Helper.ensureValue(message.multiValueHeaders, {}), Helper_1.Helper.ensureValue(message.body?.headers, {}), Helper_1.Helper.ensureValue(message.body?.multiValueHeaders, {}));
if (dino_core_1.ObjectHelper.isNotDefined(headers['transfer-encoding'])) {
headers['transfer-encoding'] = 'identity';
}
if (dino_core_1.ObjectHelper.isNotDefined(headers.accept)) {
headers.accept = 'application/json';
}
return headers;
}
getOriginalUrl(message) {
if (message.originalUrl !== undefined) {
return message.originalUrl;
}
const originalUrl = `${Helper_1.Helper.ensureValue(message.resource, '/')}?${querystring.stringify(this.getQuery(message))}`;
if (!originalUrl.startsWith('/')) {
return `/${originalUrl}`;
}
return originalUrl === '/?' ? '/' : originalUrl;
}
getMethod(message) {
const context = this.getContextIfDefined(message);
if (dino_core_1.ObjectHelper.isDefined(context.http)) {
return context.http.method;
}
if (dino_core_1.ObjectHelper.isDefined(context.routeKey) || dino_core_1.ObjectHelper.isDefined(message.Records)) {
return 'POST';
}
const _default = dino_core_1.ObjectHelper.isNotDefined(message.body) ? 'GET' : 'POST';
return message.method ?? message.httpMethod ?? _default;
}
getQuery(message) {
return Object.assign({}, Helper_1.Helper.ensureValue(message.multiValueQueryStringParameters, {}), Helper_1.Helper.ensureValue(message.query, {}), Helper_1.Helper.ensureValue(message.querystring, {}), Helper_1.Helper.ensureValue(message.queryStringParameters, {}), Helper_1.Helper.ensureValue(message.body?.multiValueQueryStringParameters, {}), Helper_1.Helper.ensureValue(message.body?.query, {}), Helper_1.Helper.ensureValue(message.body?.querystring, {}), Helper_1.Helper.ensureValue(message.body?.queryStringParameters, {}));
}
}
exports.AwsRequestAdaptor = AwsRequestAdaptor;
//# sourceMappingURL=AwsRequestAdaptor.js.map