n8n
Version:
n8n Workflow Automation Tool
46 lines • 1.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMultiFormDataParser = void 0;
const formidable_1 = __importDefault(require("formidable"));
const content_too_large_error_1 = require("../errors/response-errors/content-too-large.error");
const isPayloadTooLargeError = (error) => typeof error === 'object' && error !== null && 'httpCode' in error && error.httpCode === 413;
const mapFormParseError = (error) => {
if (isPayloadTooLargeError(error)) {
return new content_too_large_error_1.ContentTooLargeError('The submitted form data exceeds the allowed size.');
}
return error instanceof Error ? error : new Error(String(error));
};
const normalizeFormData = (values) => {
for (const key in values) {
const value = values[key];
if (Array.isArray(value) && value.length === 1) {
values[key] = value[0];
}
}
};
const createMultiFormDataParser = (maxFormDataSizeInMb) => {
return async function parseMultipartFormData(req) {
const { encoding } = req;
const form = (0, formidable_1.default)({
multiples: true,
encoding: encoding,
maxFileSize: maxFormDataSizeInMb * 1024 * 1024,
});
return await new Promise((resolve, reject) => {
form.parse(req, (error, data, files) => {
if (error) {
reject(mapFormParseError(error));
return;
}
normalizeFormData(data);
normalizeFormData(files);
resolve({ data, files });
});
});
};
};
exports.createMultiFormDataParser = createMultiFormDataParser;
//# sourceMappingURL=webhook-form-data.js.map