1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.Body = exports.Request = void 0;
|
4 | const querystring_1 = require("querystring");
|
5 | const common_1 = require("../../common");
|
6 | const metrics = new common_1.Metrics("API Gateway");
|
7 | class Request {
|
8 | constructor(event) {
|
9 | this.event = event;
|
10 | }
|
11 | getProperties() {
|
12 | const event = this.event;
|
13 | const path = event.pathParameters || undefined;
|
14 | const rawPath = event.rawPath || undefined;
|
15 | const query = event.queryStringParameters || undefined;
|
16 | const rawQueryString = event.rawQueryString || undefined;
|
17 | const auth = this.getAuth();
|
18 | const headers = event.headers || undefined;
|
19 | const body = new Body(event.body, headers).getParsedBody();
|
20 | const TEST_REQUEST_HEADER = process.env.TEST_REQUEST_HEADER || "test-request";
|
21 | const testRequest = headers && headers[TEST_REQUEST_HEADER] ? JSON.parse(headers[TEST_REQUEST_HEADER]) : false;
|
22 | const parsed = { body, path, rawPath, query, rawQueryString, auth, headers, testRequest };
|
23 | metrics.common(parsed, event);
|
24 | return parsed;
|
25 | }
|
26 | getAuth() {
|
27 | var _a, _b, _c;
|
28 | const authorizer = (_c = (_b = (_a = this.event) === null || _a === void 0 ? void 0 : _a.requestContext) === null || _b === void 0 ? void 0 : _b.authorizer) === null || _c === void 0 ? void 0 : _c.jwt;
|
29 | return authorizer ? authorizer : undefined;
|
30 | }
|
31 | }
|
32 | exports.Request = Request;
|
33 | class Body {
|
34 | constructor(body, headers) {
|
35 | this.body = body;
|
36 | this.headers = headers;
|
37 | }
|
38 | getParsedBody() {
|
39 | let parsedBody;
|
40 | if (this.body) {
|
41 | try {
|
42 | const contentType = this.getContentType();
|
43 | if (this.isFormUrlEncoded(contentType)) {
|
44 | parsedBody = querystring_1.parse(this.body);
|
45 | }
|
46 | else if (this.isJSON(contentType)) {
|
47 | parsedBody = JSON.parse(this.body);
|
48 | }
|
49 | else {
|
50 | common_1.logger.error("Content-Type header not found, attempting to parse as JSON");
|
51 | parsedBody = JSON.parse(this.body);
|
52 | }
|
53 | }
|
54 | catch (err) {
|
55 | common_1.logger.error("Error parsing body, returning as-is", err, this.body);
|
56 | parsedBody = this.body;
|
57 | }
|
58 | }
|
59 | return parsedBody;
|
60 | }
|
61 | getContentType() {
|
62 | return (this.headers && (this.headers["Content-Type"] || this.headers["CONTENT-TYPE"] || this.headers["content-type"]));
|
63 | }
|
64 | isFormUrlEncoded(contentType) {
|
65 | return contentType === null || contentType === void 0 ? void 0 : contentType.toUpperCase().includes("APPLICATION/X-WWW-FORM-URLENCODED");
|
66 | }
|
67 | isJSON(contentType) {
|
68 | return contentType === null || contentType === void 0 ? void 0 : contentType.toUpperCase().includes("APPLICATION/JSON");
|
69 | }
|
70 | }
|
71 | exports.Body = Body;
|
72 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS92Mi1odHRwL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBb0M7QUFFcEMseUNBQStDO0FBRS9DLE1BQU0sT0FBTyxHQUFHLElBQUksZ0JBQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUUzQyxNQUFhLE9BQU87SUFDbEIsWUFBb0IsS0FBbUI7UUFBbkIsVUFBSyxHQUFMLEtBQUssQ0FBYztJQUFHLENBQUM7SUFFM0MsYUFBYTtRQVVYLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxTQUFTLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixJQUFJLFNBQVMsQ0FBQztRQUN2RCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxJQUFJLFNBQVMsQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxTQUFTLENBQUM7UUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksY0FBYyxDQUFDO1FBQzlFLE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMs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 |
\ | No newline at end of file |