UNPKG

1.38 kBJavaScriptView Raw
1import { createError } from '@middy/util';
2import parse from 'qs/lib/parse.js';
3const mimePattern = /^application\/x-www-form-urlencoded(;.*)?$/;
4const defaults = {
5 disableContentTypeError: true
6};
7const httpUrlencodeBodyParserMiddleware = (opts = {})=>{
8 const options = {
9 ...defaults,
10 ...opts
11 };
12 const httpUrlencodeBodyParserMiddlewareBefore = async (request)=>{
13 const { headers, body } = request.event;
14 const contentType = headers?.['Content-Type'] ?? headers?.['content-type'];
15 if (!mimePattern.test(contentType)) {
16 if (options.disableContentTypeError) {
17 return;
18 }
19 throw createError(415, 'Unsupported Media Type', {
20 cause: contentType
21 });
22 }
23 const data = request.event.isBase64Encoded ? Buffer.from(body, 'base64').toString() : body;
24 const rawBody = body;
25 request.event.body = parse(data);
26 if (request.event.body?.[rawBody] === '') {
27 // UnprocessableEntity
28 throw createError(415, 'Invalid or malformed URL encoded form was provided', {
29 cause: '@middy/http-urlencode-body-parser unable to parse body'
30 });
31 }
32 };
33 return {
34 before: httpUrlencodeBodyParserMiddlewareBefore
35 };
36};
37export default httpUrlencodeBodyParserMiddleware;
38