@dvsa/appdev-api-common
Version:
Utils library for common API functionality
32 lines (31 loc) • 1.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DecodeBase64GzipPayload = void 0;
const http_status_codes_1 = require("../api/http-status-codes");
const compression_1 = require("./compression");
/**
* Middleware to decode base64+gzip encoded request payloads and turn them into their JSON equivalent
* @param {Request} request - Express request object
* @param {Response} response - Express response object
* @param {NextFunction} next - Next function to pass control to the next middleware
* @param {Logger} logger - logger to indicate encoded requests
* @constructor
*/
const DecodeBase64GzipPayload = (request, response, next, logger) => {
const compressionHeaderValue = "base64+gzip";
try {
if (typeof request.body === "string" &&
request.header("X-Payload-Encoding") === compressionHeaderValue) {
logger?.debug("Encoded request received");
request.body = compression_1.DataCompression.decompress(request.body);
}
}
catch (err) {
return response.status(http_status_codes_1.HttpStatus.BAD_REQUEST).send({
error: "Bad request",
message: err instanceof Error ? err.message : JSON.stringify(err),
});
}
next();
};
exports.DecodeBase64GzipPayload = DecodeBase64GzipPayload;