diff --git a/models/Order.js b/models/Order.js index 593a11be..97fd3699 100644 --- a/models/Order.js +++ b/models/Order.js @@ -7,6 +7,7 @@ const uuid_1 = require("uuid"); const decimal_js_1 = __importDefault(require("decimal.js")); const phoneValidByMask_1 = require("../libs/phoneValidByMask"); const OrderHelper_1 = require("../libs/helpers/OrderHelper"); +const isValue_1 = require("../utils/isValue"); let attributes = { /** Id */ id: { @@ -1324,7 +1325,7 @@ let Model = { allowed: false, cost: 0, item: undefined, - message: error, + message: `Calcualte delivery adapter error`, deliveryTimeMinutes: Infinity }; } @@ -1597,29 +1598,31 @@ async function getOrderDateLimit() { } function isValidDelivery(delivery) { // Check if the required properties exist and have the correct types - // {"deliveryTimeMinutes":180,"allowed":true,"message":"","item":"de78c552-71e6-5296-ae07-a5114d4e88bc"} if (typeof delivery.deliveryTimeMinutes === 'number' && typeof delivery.allowed === 'boolean' && typeof delivery.message === 'string') { - if (!delivery.cost && !delivery.item) { - sails.log.error(`Check delivery error delivery is not valid: (delivery.cost and delivery.item not defined) :`, delivery); + // Check if both delivery.cost and delivery.item are not provided + if (!(0, isValue_1.isValue)(delivery.cost) && !(0, isValue_1.isValue)(delivery.item)) { + sails.log.error(`Check delivery error: delivery is not valid (delivery.cost and delivery.item not defined)`, delivery); sails.log.error(console.trace()); return false; } else { - if (delivery.cost && typeof delivery.cost !== "number") { - sails.log.error(`Check delivery error delivery is not valid: delivery.cost not number`); + // Check if delivery.cost is either undefined, null, or a number (including 0) + if ((0, isValue_1.isValue)(delivery.cost) && typeof delivery.cost !== 'number') { + sails.log.error(`Check delivery error: delivery is not valid (delivery.cost is not a number)`); sails.log.error(console.trace()); return false; } - if (delivery.item && typeof delivery.item !== "string") { - sails.log.error(`Check delivery error delivery is not valid: delivery.item not string`); + // Check if delivery.item is either undefined, null, or a string + if ((0, isValue_1.isValue)(delivery.item) && typeof delivery.item !== 'string') { + sails.log.error(`Check delivery error: delivery is not valid (delivery.item is not a string)`); sails.log.error(console.trace()); return false; } } return true; } - sails.log.error(`Check delivery error delivery is not valid: ${JSON.stringify(delivery)}`); + sails.log.error(`Check delivery error: delivery is not valid`, delivery); return false; } diff --git a/models/Order.ts b/models/Order.ts index 5a459eb4..726c7dc6 100644 --- a/models/Order.ts +++ b/models/Order.ts @@ -1590,7 +1590,7 @@ let Model = { allowed: false, cost: 0, item: undefined, - message: error, + message: `Calcualte delivery adapter error`, deliveryTimeMinutes: Infinity } } diff --git a/models/Settings.js b/models/Settings.js index a9c07624..27b51d39 100644 --- a/models/Settings.js +++ b/models/Settings.js @@ -97,7 +97,7 @@ let Model = { try { value = JSON.parse(process.env[key]); // if value was parsed, check that given json matches the schema (if !ALLOW_UNSAFE_SETTINGS) - if (!(await Settings.get("ALLOW_UNSAFE_SETTINGS"))) { + if (!(await Settings.get("ALLOW_UNSAFE_SETTINGS") ?? false)) { const ajv = new ajv_1.default(); const validate = ajv.compile(setting.jsonSchema); if (!validate(value)) { diff --git a/utils/isValue.d.ts b/utils/isValue.d.ts new file mode 100644 index 00000000..5273020d --- /dev/null +++ b/utils/isValue.d.ts @@ -0,0 +1 @@ +export declare function isValue(value: T): boolean; diff --git a/utils/isValue.js b/utils/isValue.js new file mode 100644 index 00000000..78086126 --- /dev/null +++ b/utils/isValue.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isValue = isValue; +function isValue(value) { + // Check for undefined and null + if (value === undefined || value === null) { + return false; + } + // Check for NaN (only if the value is of type number) + if (typeof value === 'number' && Number.isNaN(value)) { + return false; + } + // Check for empty strings + if (typeof value === 'string' && value.trim() === '') { + return false; + } + // Check for empty arrays + if (Array.isArray(value) && value.length === 0) { + return false; + } + // Check for empty objects + if (typeof value === 'object' && Object.keys(value).length === 0) { + return false; + } + return true; +}