UNPKG

dino-express

Version:

DinO enabled REST framework based on express

98 lines 4.73 kB
"use strict"; 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