@devx-commerce/plugin-loyalty
Version:
A starter for Medusa plugins.
116 lines • 9.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createQueryValidationMiddleware = exports.createValidationMiddleware = exports.handleError = void 0;
const zod_1 = require("zod");
const utils_1 = require("@medusajs/framework/utils");
const response_handler_1 = require("./response-handler");
const ERROR_MAPPINGS = {
unauthorized: {
status: 401,
message: "You are not authorized to perform this action",
},
forbidden: {
status: 403,
message: "You don't have permission to perform this action",
},
notFound: {
status: 404,
message: "Resource not found",
},
};
const handleError = (error, res) => {
// Handle MedusaError with validation errors
if (error instanceof utils_1.MedusaError &&
error.type === utils_1.MedusaError.Types.INVALID_DATA) {
try {
const errorData = JSON.parse(error.message);
(0, response_handler_1.sendErrorResponse)(res, errorData.message, 400, errorData.errors);
return;
}
catch {
// Continue with default error handling if parsing fails
}
}
// Handle Zod validation errors
if (error instanceof zod_1.z.ZodError) {
const errors = error.errors.map((err) => ({
field: err.path.join("."),
message: err.message,
}));
(0, response_handler_1.sendErrorResponse)(res, "Invalid request data", 400, errors);
return;
}
// Handle database errors
if (error.code) {
switch (error.code) {
case "23514": // Check constraint violation
const field = error.constraint?.split("_").pop();
const message = error.message?.includes("check constraint")
? `Invalid value for ${field}. Please check the allowed values.`
: error.message;
(0, response_handler_1.sendErrorResponse)(res, message, 400, [{ field, message }]);
return;
case "23505": // Unique violation
const uniqueField = error.detail?.split("(")[1]?.split(")")[0];
(0, response_handler_1.sendErrorResponse)(res, `${uniqueField} already exists`, 400, [
{ field: uniqueField, message: `${uniqueField} already exists` },
]);
return;
}
}
// Handle common error types
for (const [key, { status, message }] of Object.entries(ERROR_MAPPINGS)) {
if (error.message?.toLowerCase().includes(key)) {
(0, response_handler_1.sendErrorResponse)(res, message, status);
return;
}
}
// Handle any other errors
(0, response_handler_1.sendErrorResponse)(res, error.message || "An unexpected error occurred", 500);
};
exports.handleError = handleError;
const createValidationMiddleware = (schema) => {
return async (req, res, next) => {
try {
req.body = await schema.parseAsync(req.body);
next();
}
catch (error) {
if (error instanceof zod_1.z.ZodError) {
const errors = error.errors.map((err) => ({
field: err.path.join("."),
message: err.message,
}));
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, JSON.stringify({
message: "Invalid request data",
errors,
}));
}
next(error);
}
};
};
exports.createValidationMiddleware = createValidationMiddleware;
const createQueryValidationMiddleware = (schema) => {
return async (req, res, next) => {
try {
req.query = await schema.parseAsync(req.query);
next();
}
catch (error) {
if (error instanceof zod_1.z.ZodError) {
const errors = error.errors.map((err) => ({
field: err.path.join("."),
message: err.message,
}));
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, JSON.stringify({
message: "Invalid query parameters",
errors,
}));
}
next(error);
}
};
};
exports.createQueryValidationMiddleware = createQueryValidationMiddleware;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlscy9lcnJvci1oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDZCQUF3QjtBQUN4QixxREFBd0Q7QUFDeEQseURBQXVEO0FBWXZELE1BQU0sY0FBYyxHQUFHO0lBQ3JCLFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLCtDQUErQztLQUN6RDtJQUNELFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLGtEQUFrRDtLQUM1RDtJQUNELFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxHQUFHO1FBQ1gsT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtDQUNPLENBQUM7QUFFSixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQVUsRUFBRSxHQUFtQixFQUFRLEVBQUU7SUFDbkUsNENBQTRDO0lBQzVDLElBQ0UsS0FBSyxZQUFZLG1CQUFXO1FBQzVCLEtBQUssQ0FBQyxJQUFJLEtBQUssbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM3QyxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBQSxvQ0FBaUIsRUFBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pFLE9BQU87UUFDVCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1Asd0RBQXdEO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLElBQUksS0FBSyxZQUFZLE9BQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdB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