UNPKG

@devx-commerce/plugin-loyalty

Version:

A starter for Medusa plugins.

116 lines 9.47 kB
"use strict"; 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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