UNPKG

@middy/http-partial-response

Version:

HTTP partial response middleware for the middy framework

55 lines (43 loc) 1.37 kB
// Copyright 2017 - 2026 will Farrell, Luciano Mammino, and Middy contributors. // SPDX-License-Identifier: MIT import { jsonSafeParse, normalizeHttpResponse, validateOptions, } from "@middy/util"; import mask from "json-mask"; const name = "http-partial-response"; const pkg = `@middy/${name}`; const defaults = { filteringKeyName: "fields", }; const optionSchema = { type: "object", properties: { filteringKeyName: { type: "string" }, }, additionalProperties: false, }; export const httpPartialResponseValidateOptions = (options) => validateOptions(pkg, optionSchema, options); const httpPartialResponseMiddleware = (opts = {}) => { const options = { ...defaults, ...opts }; const { filteringKeyName } = options; const httpPartialResponseMiddlewareAfter = (request) => { const fields = request.event?.queryStringParameters?.[filteringKeyName]; if (!fields) return; normalizeHttpResponse(request); const body = request.response.body; const bodyIsString = typeof body === "string"; const parsedBody = jsonSafeParse(body); if (!parsedBody || typeof parsedBody !== "object") return; const filteredBody = mask(parsedBody, fields); request.response.body = bodyIsString ? JSON.stringify(filteredBody) : filteredBody; }; return { after: httpPartialResponseMiddlewareAfter, }; }; export default httpPartialResponseMiddleware;