UNPKG

@webfaas/webfaas-plugin-endpoint-http

Version:
87 lines 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SendMessageRest = void 0; const url = require("url"); const webfaas_core_1 = require("@webfaas/webfaas-core"); const uuid_1 = require("uuid"); class SendMessageRest { constructor(endPointHTTP) { this.endPointHTTP = endPointHTTP; this.core = endPointHTTP.getCore(); this.log = endPointHTTP.getLog(); } processRequest(request, response, body) { let requestContentType = request.headers["content-type"] || ""; let payload; let msg; if (body.length) { if (requestContentType === "application/json") { try { payload = JSON.parse(body.toString()); } catch (errTryParse) { this.log.writeError("processRequest", errTryParse, undefined, __filename); this.endPointHTTP.writeEnd(response, 400, this.endPointHTTP.buildHeaders(), "Parse error"); return; } } else { payload = body; } } else { payload = null; } let urlString = decodeURI(request.url || ""); let route = this.endPointHTTP.getConfig().route[urlString]; if (route) { urlString = route; } let urlObj = url.parse(urlString, true); msg = webfaas_core_1.MessageUtil.parseMessageByUrlPath(urlObj.pathname || "", "", payload, request.method, request.headers); if (msg) { msg.header.messageID = msg.header.messageID || webfaas_core_1.MessageUtil.parseString(request.headers["X-Request-ID"]) || uuid_1.v1(); this.core.sendMessage(msg).then((msgResponse) => { let chunk; let statusCode = 200; let headers = this.endPointHTTP.buildHeaders("application/json"); if (msgResponse) { if (msgResponse.header && msgResponse.header.http) { if (msgResponse.header.http.statusCode) { statusCode = msgResponse.header.http.statusCode; } if (msgResponse.header.http.headers) { headers = msgResponse.header.http.headers; } if (msgResponse.header.http.contentType) { headers["content-type"] = msgResponse.header.http.contentType; } } if (msgResponse.payload === undefined || msgResponse.payload === null) { chunk = undefined; statusCode = 204; //No Content } else { chunk = msgResponse.payload; if (headers["content-type"] === "application/json" && !Buffer.isBuffer(chunk)) { chunk = JSON.stringify(chunk); } } } else { chunk = undefined; statusCode = 204; //No Content } this.endPointHTTP.writeEnd(response, statusCode, headers, chunk); }).catch((errSend) => { this.endPointHTTP.writeEnd(response, webfaas_core_1.MessageUtil.convertErrorToCodeHttp(errSend), this.endPointHTTP.buildHeaders("application/json"), JSON.stringify(errSend)); }); } else { let errValidate = new webfaas_core_1.WebFaasError.ValidateError("0", "", "Module name and version required"); this.endPointHTTP.writeEnd(response, webfaas_core_1.MessageUtil.convertErrorToCodeHttp(errValidate), this.endPointHTTP.buildHeaders("application/json"), JSON.stringify(errValidate)); } } } exports.SendMessageRest = SendMessageRest; //# sourceMappingURL=SendMessageRest.js.map