@middy/http-json-body-parser
Version:
Http JSON body parser middleware for the middy framework
55 lines (46 loc) • 1.48 kB
JavaScript
import { createError } from "@middy/util";
const mimePattern = /^application\/(.+\+)?json($|;.+)/;
const defaults = {
reviver: undefined,
disableContentTypeCheck: false,
disableContentTypeError: false,
};
const httpJsonBodyParserMiddleware = (opts = {}) => {
const options = { ...defaults, ...opts };
const httpJsonBodyParserMiddlewareBefore = async (request) => {
const { headers, body } = request.event;
const contentType = headers?.["content-type"] ?? headers?.["Content-Type"];
if (!options.disableContentTypeCheck && !mimePattern.test(contentType)) {
if (options.disableContentTypeError) {
return;
}
throw createError(415, "Unsupported Media Type", {
cause: { package: "@middy/http-json-body-parser", data: contentType },
});
}
if (typeof body === "undefined") {
throw createError(415, "Invalid or malformed JSON was provided", {
cause: { package: "@middy/http-json-body-parser", data: body },
});
}
try {
const data = request.event.isBase64Encoded
? Buffer.from(body, "base64").toString()
: body;
request.event.body = JSON.parse(data, options.reviver);
} catch (err) {
// UnprocessableEntity
throw createError(415, "Invalid or malformed JSON was provided", {
cause: {
package: "@middy/http-json-body-parser",
data: body,
message: err.message,
},
});
}
};
return {
before: httpJsonBodyParserMiddlewareBefore,
};
};
export default httpJsonBodyParserMiddleware;