From 15de9fb514fa68658a9134f1c8cd8cc8434cd62e Mon Sep 17 00:00:00 2001 From: will Farrell Date: Wed, 22 Nov 2023 23:02:54 -0700 Subject: [PATCH] fix: http-response-serializer Accept headers parse Fixes #1141 --- .../package-lock.json | 35 ++++--------------- .../http-response-serializer/package.json | 1 - .../middlewares/http-response-serializer.md | 12 +++---- 3 files changed, 11 insertions(+), 37 deletions(-) diff --git a/packages/http-response-serializer/package-lock.json b/packages/http-response-serializer/package-lock.json index 4a02f1eec..7feeb5288 100644 --- a/packages/http-response-serializer/package-lock.json +++ b/packages/http-response-serializer/package-lock.json @@ -9,7 +9,6 @@ "version": "5.0.2", "license": "MIT", "dependencies": { - "@hapi/accept": "6.0.3", "@middy/util": "5.0.2" }, "devDependencies": { @@ -35,32 +34,10 @@ "node": ">=18" } }, - "node_modules/@hapi/accept": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-6.0.3.tgz", - "integrity": "sha512-p72f9k56EuF0n3MwlBNThyVE5PXX40g+aQh+C/xbKrfzahM2Oispv3AXmOIU51t3j77zay1qrX7IIziZXspMlw==", - "dependencies": { - "@hapi/boom": "^10.0.1", - "@hapi/hoek": "^11.0.2" - } - }, - "node_modules/@hapi/boom": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-10.0.1.tgz", - "integrity": "sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==", - "dependencies": { - "@hapi/hoek": "^11.0.2" - } - }, - "node_modules/@hapi/hoek": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.2.tgz", - "integrity": "sha512-aKmlCO57XFZ26wso4rJsW4oTUnrgTFw2jh3io7CAtO9w4UltBNwRXvXIVzzyfkaaLRo3nluP/19msA8vDUUuKw==" - }, "node_modules/@middy/core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@middy/core/-/core-5.0.1.tgz", - "integrity": "sha512-/Ax7xXmQjlO/YBiVgSkqwWeiS9uPHNxlJy/Upr1DmqExBG7IOs0GGxIfce8G0brS+Hb2oUJS/X3F2SokVJCNSQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@middy/core/-/core-5.0.2.tgz", + "integrity": "sha512-rGb0g9L8PJ5u2aRHOHcp67na6O6gAWmQTixooSPNByySQdWYWGxTwRcaWGu5QymeMrC9KcJaPDnlhTQJnKXKjw==", "dev": true, "dependencies": { "@datastream/core": "0.0.35" @@ -74,9 +51,9 @@ } }, "node_modules/@middy/util": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@middy/util/-/util-5.0.1.tgz", - "integrity": "sha512-0umNwovJNgVgWTmJCqPAKRIS9YQGGFJe8l+DIPwa3oEn7fkqgUr0914a84075eV2b69an6s7t8W1INaENYEHAQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@middy/util/-/util-5.0.2.tgz", + "integrity": "sha512-vcV5iclgzn+v1QePa2rm4MLN1nRGy0OxnSUYLYTSbxmR5WDGI6l1NBT2NL+kusEsn2PT4NsznG89g5PZ8Ao6Gw==", "engines": { "node": ">=18" }, diff --git a/packages/http-response-serializer/package.json b/packages/http-response-serializer/package.json index f682da975..75323f4ca 100644 --- a/packages/http-response-serializer/package.json +++ b/packages/http-response-serializer/package.json @@ -63,7 +63,6 @@ "url": "https://github.com/sponsors/willfarrell" }, "dependencies": { - "@hapi/accept": "6.0.3", "@middy/util": "5.0.2" }, "devDependencies": { diff --git a/website/docs/middlewares/http-response-serializer.md b/website/docs/middlewares/http-response-serializer.md index 68ebd24ae..e41bd430a 100644 --- a/website/docs/middlewares/http-response-serializer.md +++ b/website/docs/middlewares/http-response-serializer.md @@ -15,10 +15,7 @@ npm install --save @middy/http-response-serializer ## Options - `defaultContentType` (optional): used if the request and handler don't specify what type is wanted. - -## Configuration - -The middleware is configured by defining some `serializers`. +- `serializers` (array): Array for regex and serializer function. ```javascript { @@ -56,9 +53,8 @@ The header is not the only way the middleware decides which serializer to execut The content type is determined in the following order: -- `context.requiredContentType` -- allows the handler to override everything else -- The `Accept` header via [accept](https://www.npmjs.com/package/accept) -- `context.preferredContentType` -- allows the handler to override the default, but lets the request ask first +- `event.requiredContentType` -- allows the handler to override everything else (legacy, will be deprecated in v6) +- `context.preferredMediaTypes` -- allows the handler to override the default, but lets the request ask first - `defaultContentType` middleware configuration All options allow for multiple types to be specified in your order of preference, and the first matching serializer will be executed. @@ -68,6 +64,7 @@ When planning to use `Accept`, an external input, it is recommended to validate ```javascript import middy from '@middy/core' +import httpContentNegotiation from '@middy/http-content-negotiation' import httpResponseSerializer from '@middy/http-response-serializer' const lambdaHandler = (event, context) => { @@ -80,6 +77,7 @@ const lambdaHandler = (event, context) => { } export const handler = middy() + .use(httpContentNegotiation()) // Creates `context.preferredMediaTypes` .use( httpResponseSerializer({ serializers: [