import _camelCase from 'lodash/camelCase'; import _snakeCase from 'lodash/snakeCase'; import _mapKeys from 'lodash/mapKeys'; import _mapValues from 'lodash/mapValues'; import _map from 'lodash/map'; import { parseString } from 'xml2js'; export class InvalidRequestError extends Error {} function recursivelyRenameObject(object, renameFunc) { if (!(object instanceof Object)) { return object; } return _mapValues(_mapKeys(object, renameFunc), function (value) { if (Array.isArray(value)) return _map(value, function (value) { return recursivelyRenameObject(value, renameFunc); }); if (typeof value !== 'object') return value; return recursivelyRenameObject(value, renameFunc); }); } export function camelCaseRequestWrapper(requestFunc) { return (method, action, params) => { params = recursivelyRenameObject(params, function (value, key) { if (typeof key !== 'string') return key; // Snake Case logic has issue, it replaces double underscores with single // So dont run snake case logic for following params let skipParamsFromSnakeCasing = [ 'message_time__lt', 'message_time__lte', 'message_time__gt', 'message_time__gte', 'end_time__gt', 'end_time__gte', 'end_time__lt', 'end_time__lte', 'bill_duration__gt', 'bill_duration__gte', 'bill_duration__lt', 'bill_duration__lte', 'add_time__gt', 'add_time__gte', 'add_time__lt', 'add_time__lte', ] if (skipParamsFromSnakeCasing.indexOf(key) >= 0) { return key; } return _snakeCase(key) .replace('_less_than', '__lt') .replace('_greater_than', '__gt') .replace('_greater_or_equal', '__gte') .replace('_less_or_equal', '__lte') .replace('_equal', '') .replace('_equals', '') .replace('priority_1', 'priority1') .replace('priority_2', 'priority2') .replace('priority_3', 'priority3') .replace('sample_1', 'sample1') .replace('sample_2', 'sample2') .replace('country_iso_2', 'country_iso2'); }); return requestFunc(method, action, params).then(res => { res.body = recursivelyRenameObject(res.body, function (value, key) { if (typeof key !== 'string') return key; return _camelCase(key); }); return res; }); } } export function validateSpeakAttributes(content, voice) { if (!voice || ['MAN', 'WOMAN'].indexOf(voice) != -1) { return { success: true }; } var voiceParts = voice.split('.'); if (voiceParts.length != 2 || voiceParts[0] != 'Polly') { return { success: false, msg: "Invalid voice " + voice + '.' }; }; return { success: true, } } export function validSubAccount(accountId){ if(accountId.constructor !== String){ throw new InvalidRequestError('Subaccount Id must be a string'); } if(accountId.length !== 20){ throw new InvalidRequestError('Subaccount Id should be of length 20'); } if(accountId.substring(0,2) !== 'SA'){ throw new InvalidRequestError("Subaccount Id should start with 'SA'"); } return true; } export function validMultipleDestinationNos(paramName, paramValue, options = {}){ if(paramValue.split(options.delimiter).length > 1 && options.role.toLowerCase()!=='agent'){ throw new InvalidRequestError('Multiple ' + paramName + ' values given for role ' + options.role) } else if (paramValue.split(options.delimiter).length >= options.agentLimit){ throw new InvalidRequestError('No of ' + paramName + ' values provided should be lesser than ' + options.agentLimit) } else { return true } } export function validMultipleDestinationIntegers(paramName, paramValue){ let val = paramValue.split("<"); for (let i=0; i upperBound) { throw new InvalidRequestError(paramName + " ranges between " + lowerBound + " and " + upperBound) } if(paramValue >= lowerBound && paramValue <= upperBound){ return true; } } else if(lowerBound){ if(paramValue < lowerBound){ throw new InvalidRequestError(paramName + " should be greater than " + lowerBound) } if(paramValue >= lowerBound){ return true; } } else if(upperBound){ if(paramValue > upperBound){ throw new InvalidRequestError(paramName + " should be lesser than " + upperBound) } if(paramValue <= upperBound){ return true; } } else{ throw new InvalidRequestError("Any one or both of lower and upper bound should be provided") } }