@optimiser/common 1.0.286 → 1.0.289

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -198,6 +198,7 @@ declare function RemoveFieldsFromFilters(condition: AnyObjectInterface, fields:
198
198
  declare function ErrorHandlerForServices(Error: OPT_ERROR, ServiceOrigin: string, EmailConfig: any, Module?: string, db?: Db): Promise<any>;
199
199
  declare function CheckCaptcha(token: string, captcha: string, redisClient: Redis): Promise<unknown>;
200
200
  declare function ValidateSanitizeUserInput(inputFields: AnyObjectInterface, pageData: AnyObjectInterface): Promise<AnyObjectInterface[] | undefined>;
201
+ declare function ValidateUserInput(options: AnyObjectInterface): Promise<string | undefined>;
201
202
  /**
202
203
  * TODO: Create lookup of fields of list schema for Vat Setting data
203
204
  *
@@ -231,4 +232,4 @@ declare function GetMailFromString(fromUser: string): string;
231
232
  * @returns string
232
233
  */
233
234
  declare function InvitationMailReplyContent(fromUser: string, fromEmail: string): string;
234
- export { CheckForWhiteListedDomain, ReturnJsonResponse, ConvertFileByteSize, GetObjectByKeyValueFromList, IsEqualArrays, IsEqualValue, CheckUserProfileField, GetPageFieldData, GetPageObjectSchema, GetFieldDetail, UpdateRecentViewObject, UpdateRecentViewFields, SyncChildObjectData, SyncParentObjectData, DeleteFieldInOtherCollection, SyncFieldInSameCollection, SyncFieldInSameCollectionByObjectID, SyncFieldInSameCollectionByObjectIDWithPromise, SyncFieldInOtherCollection, SyncUserInOtherCollection, BuildLookupDataField, CheckDataBeforeAdd, CheckDataBeforeUpdate, BuildGridFieldProjection, BuildFieldProjection, BuildLookupFieldProjection, FilterConditions, GirdHeaderFilters, FieldsGridHeaderFilters, AddLog, CheckFilterFieldsProjection, VerifyEmailPassword, GetMyTeamUsers, ExtractChildUsersTree, GetMaxKeyValueListSchema, VerifyAWSEmailConfig, GenerateId, SyncUserDetailsWithMasterDB, SignoutUserFromAllDevices, SignoutUsersWithPromise, SignoutMultipleUsersFromAllDevices, UserLicenseConsumeCalculate, sendMailWithUserAccount, GetEmailClientConfigs, GetCompanyEncryptionKey, ExecuteDynamicDMLQuery, ExecuteDynamicDQLQuery, GetUserProfilePermissions, MakeUserPasswordInvalid, ConvertJsonToXLXS, SendResetPasswordMail, SendMailToSupport, MailTemplateStructure, SendMailToCustomer, parseMSPCookie, GetIPDetailsFromReq, isEmptyObj, SyncListSchemaFieldInOtherCollection, UpdateTagCountAfterDelete, SyncTagCountAfterUpdate, ReactivateFieldInOtherCollection, SyncUserLicenceConsumedCount, BroadCastEventToAllCompanyUsers, CheckDataPermission, SyncCompanyLicenceInMasterCompanyAfterAdd, NextServiceDateForDashboard, CheckDateNotInPast, GetWeekDayByDayAndOccurance, GetInterValFromOccurance, GetWeekDayInfoInMonth, GetDayIndex, RemoveFieldsFromFilters, GetUserProfile, CheckPageAuthentication, ErrorHandlerForServices, CheckCaptcha, ValidateSanitizeUserInput, CreateBanquetingVATSettingsData, CheckReportFolderAccess, GetMailFromString, InvitationMailReplyContent };
235
+ export { CheckForWhiteListedDomain, ReturnJsonResponse, ConvertFileByteSize, GetObjectByKeyValueFromList, IsEqualArrays, IsEqualValue, CheckUserProfileField, GetPageFieldData, GetPageObjectSchema, GetFieldDetail, UpdateRecentViewObject, UpdateRecentViewFields, SyncChildObjectData, SyncParentObjectData, DeleteFieldInOtherCollection, SyncFieldInSameCollection, SyncFieldInSameCollectionByObjectID, SyncFieldInSameCollectionByObjectIDWithPromise, SyncFieldInOtherCollection, SyncUserInOtherCollection, BuildLookupDataField, CheckDataBeforeAdd, CheckDataBeforeUpdate, BuildGridFieldProjection, BuildFieldProjection, BuildLookupFieldProjection, FilterConditions, GirdHeaderFilters, FieldsGridHeaderFilters, AddLog, CheckFilterFieldsProjection, VerifyEmailPassword, GetMyTeamUsers, ExtractChildUsersTree, GetMaxKeyValueListSchema, VerifyAWSEmailConfig, GenerateId, SyncUserDetailsWithMasterDB, SignoutUserFromAllDevices, SignoutUsersWithPromise, SignoutMultipleUsersFromAllDevices, UserLicenseConsumeCalculate, sendMailWithUserAccount, GetEmailClientConfigs, GetCompanyEncryptionKey, ExecuteDynamicDMLQuery, ExecuteDynamicDQLQuery, GetUserProfilePermissions, MakeUserPasswordInvalid, ConvertJsonToXLXS, SendResetPasswordMail, SendMailToSupport, MailTemplateStructure, SendMailToCustomer, parseMSPCookie, GetIPDetailsFromReq, isEmptyObj, SyncListSchemaFieldInOtherCollection, UpdateTagCountAfterDelete, SyncTagCountAfterUpdate, ReactivateFieldInOtherCollection, SyncUserLicenceConsumedCount, BroadCastEventToAllCompanyUsers, CheckDataPermission, SyncCompanyLicenceInMasterCompanyAfterAdd, NextServiceDateForDashboard, CheckDateNotInPast, GetWeekDayByDayAndOccurance, GetInterValFromOccurance, GetWeekDayInfoInMonth, GetDayIndex, RemoveFieldsFromFilters, GetUserProfile, CheckPageAuthentication, ErrorHandlerForServices, CheckCaptcha, ValidateSanitizeUserInput, ValidateUserInput, CreateBanquetingVATSettingsData, CheckReportFolderAccess, GetMailFromString, InvitationMailReplyContent };
@@ -80,7 +80,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
80
80
  return (mod && mod.__esModule) ? mod : { "default": mod };
81
81
  };
82
82
  Object.defineProperty(exports, "__esModule", { value: true });
83
- exports.InvitationMailReplyContent = exports.GetMailFromString = exports.CheckReportFolderAccess = exports.CreateBanquetingVATSettingsData = exports.ValidateSanitizeUserInput = exports.CheckCaptcha = exports.ErrorHandlerForServices = exports.CheckPageAuthentication = exports.GetUserProfile = exports.RemoveFieldsFromFilters = exports.GetDayIndex = exports.GetWeekDayInfoInMonth = exports.GetInterValFromOccurance = exports.GetWeekDayByDayAndOccurance = exports.CheckDateNotInPast = exports.NextServiceDateForDashboard = exports.SyncCompanyLicenceInMasterCompanyAfterAdd = exports.CheckDataPermission = exports.BroadCastEventToAllCompanyUsers = exports.SyncUserLicenceConsumedCount = exports.ReactivateFieldInOtherCollection = exports.SyncTagCountAfterUpdate = exports.UpdateTagCountAfterDelete = exports.SyncListSchemaFieldInOtherCollection = exports.isEmptyObj = exports.GetIPDetailsFromReq = exports.parseMSPCookie = exports.SendMailToCustomer = exports.MailTemplateStructure = exports.SendMailToSupport = exports.SendResetPasswordMail = exports.ConvertJsonToXLXS = exports.MakeUserPasswordInvalid = exports.GetUserProfilePermissions = exports.ExecuteDynamicDQLQuery = exports.ExecuteDynamicDMLQuery = exports.GetCompanyEncryptionKey = exports.GetEmailClientConfigs = exports.sendMailWithUserAccount = exports.UserLicenseConsumeCalculate = exports.SignoutMultipleUsersFromAllDevices = exports.SignoutUsersWithPromise = exports.SignoutUserFromAllDevices = exports.SyncUserDetailsWithMasterDB = exports.GenerateId = exports.VerifyAWSEmailConfig = exports.GetMaxKeyValueListSchema = exports.ExtractChildUsersTree = exports.GetMyTeamUsers = exports.VerifyEmailPassword = exports.CheckFilterFieldsProjection = exports.AddLog = exports.FieldsGridHeaderFilters = exports.GirdHeaderFilters = exports.FilterConditions = exports.BuildLookupFieldProjection = exports.BuildFieldProjection = exports.BuildGridFieldProjection = exports.CheckDataBeforeUpdate = exports.CheckDataBeforeAdd = exports.BuildLookupDataField = exports.SyncUserInOtherCollection = exports.SyncFieldInOtherCollection = exports.SyncFieldInSameCollectionByObjectIDWithPromise = exports.SyncFieldInSameCollectionByObjectID = exports.SyncFieldInSameCollection = exports.DeleteFieldInOtherCollection = exports.SyncParentObjectData = exports.SyncChildObjectData = exports.UpdateRecentViewFields = exports.UpdateRecentViewObject = exports.GetFieldDetail = exports.GetPageObjectSchema = exports.GetPageFieldData = exports.CheckUserProfileField = exports.IsEqualValue = exports.IsEqualArrays = exports.GetObjectByKeyValueFromList = exports.ConvertFileByteSize = exports.ReturnJsonResponse = exports.CheckForWhiteListedDomain = void 0;
83
+ exports.InvitationMailReplyContent = exports.GetMailFromString = exports.CheckReportFolderAccess = exports.CreateBanquetingVATSettingsData = exports.ValidateUserInput = exports.ValidateSanitizeUserInput = exports.CheckCaptcha = exports.ErrorHandlerForServices = exports.CheckPageAuthentication = exports.GetUserProfile = exports.RemoveFieldsFromFilters = exports.GetDayIndex = exports.GetWeekDayInfoInMonth = exports.GetInterValFromOccurance = exports.GetWeekDayByDayAndOccurance = exports.CheckDateNotInPast = exports.NextServiceDateForDashboard = exports.SyncCompanyLicenceInMasterCompanyAfterAdd = exports.CheckDataPermission = exports.BroadCastEventToAllCompanyUsers = exports.SyncUserLicenceConsumedCount = exports.ReactivateFieldInOtherCollection = exports.SyncTagCountAfterUpdate = exports.UpdateTagCountAfterDelete = exports.SyncListSchemaFieldInOtherCollection = exports.isEmptyObj = exports.GetIPDetailsFromReq = exports.parseMSPCookie = exports.SendMailToCustomer = exports.MailTemplateStructure = exports.SendMailToSupport = exports.SendResetPasswordMail = exports.ConvertJsonToXLXS = exports.MakeUserPasswordInvalid = exports.GetUserProfilePermissions = exports.ExecuteDynamicDQLQuery = exports.ExecuteDynamicDMLQuery = exports.GetCompanyEncryptionKey = exports.GetEmailClientConfigs = exports.sendMailWithUserAccount = exports.UserLicenseConsumeCalculate = exports.SignoutMultipleUsersFromAllDevices = exports.SignoutUsersWithPromise = exports.SignoutUserFromAllDevices = exports.SyncUserDetailsWithMasterDB = exports.GenerateId = exports.VerifyAWSEmailConfig = exports.GetMaxKeyValueListSchema = exports.ExtractChildUsersTree = exports.GetMyTeamUsers = exports.VerifyEmailPassword = exports.CheckFilterFieldsProjection = exports.AddLog = exports.FieldsGridHeaderFilters = exports.GirdHeaderFilters = exports.FilterConditions = exports.BuildLookupFieldProjection = exports.BuildFieldProjection = exports.BuildGridFieldProjection = exports.CheckDataBeforeUpdate = exports.CheckDataBeforeAdd = exports.BuildLookupDataField = exports.SyncUserInOtherCollection = exports.SyncFieldInOtherCollection = exports.SyncFieldInSameCollectionByObjectIDWithPromise = exports.SyncFieldInSameCollectionByObjectID = exports.SyncFieldInSameCollection = exports.DeleteFieldInOtherCollection = exports.SyncParentObjectData = exports.SyncChildObjectData = exports.UpdateRecentViewFields = exports.UpdateRecentViewObject = exports.GetFieldDetail = exports.GetPageObjectSchema = exports.GetPageFieldData = exports.CheckUserProfileField = exports.IsEqualValue = exports.IsEqualArrays = exports.GetObjectByKeyValueFromList = exports.ConvertFileByteSize = exports.ReturnJsonResponse = exports.CheckForWhiteListedDomain = void 0;
84
84
  var moment_1 = __importDefault(require("moment"));
85
85
  var nodemailer_1 = __importDefault(require("nodemailer"));
86
86
  var mongodb_1 = require("mongodb");
@@ -98,6 +98,7 @@ var countrycode_1 = require("./countrycode");
98
98
  require("moment-timezone");
99
99
  var helper_1 = require("./helper");
100
100
  var sanitize = require('mongo-sanitize');
101
+ var phoneUtil = require("google-libphonenumber").PhoneNumberUtil.getInstance();
101
102
  function GetObjectByKeyValueFromList(list, key, val) {
102
103
  if (list && list.length > 0) {
103
104
  for (var i = 0; i < list.length; i++) {
@@ -1020,7 +1021,7 @@ function SyncFieldInSameCollection(objectName, objectIDs, db) {
1020
1021
  }
1021
1022
  db.collection(objectName).find(findObj).forEach(function (objectData) {
1022
1023
  return __awaiter(this, void 0, void 0, function () {
1023
- var updateObj, i, fieldSchema, lookupData, searchValue, ex_1;
1024
+ var updateObj, i, fieldSchema, lookupData, ex_1;
1024
1025
  return __generator(this, function (_a) {
1025
1026
  switch (_a.label) {
1026
1027
  case 0:
@@ -1041,10 +1042,6 @@ function SyncFieldInSameCollection(objectName, objectIDs, db) {
1041
1042
  if (lookupData !== undefined) {
1042
1043
  updateObj[fieldSchema.Name + constants_1.default.LookupAlias] = lookupData;
1043
1044
  }
1044
- searchValue = objectData[fieldSchema.Name + constants_1.default.SearchValueAlias];
1045
- if (searchValue !== undefined) {
1046
- updateObj[fieldSchema.Name + constants_1.default.SearchValueAlias] = searchValue;
1047
- }
1048
1045
  _a.label = 4;
1049
1046
  case 4:
1050
1047
  i++;
@@ -1100,7 +1097,7 @@ function SyncFieldInSameCollectionByObjectID(objectName, objectID, db) {
1100
1097
  if (fieldArr_2) {
1101
1098
  db.collection(objectName).findOne({ '_id': objectID }, function (err, objectData) {
1102
1099
  return __awaiter(this, void 0, void 0, function () {
1103
- var updateObj, i, fieldSchema, lookupData, searchValue;
1100
+ var updateObj, i, fieldSchema, lookupData;
1104
1101
  return __generator(this, function (_a) {
1105
1102
  switch (_a.label) {
1106
1103
  case 0:
@@ -1118,10 +1115,6 @@ function SyncFieldInSameCollectionByObjectID(objectName, objectID, db) {
1118
1115
  if (lookupData !== undefined) {
1119
1116
  updateObj[fieldSchema.Name + constants_1.default.LookupAlias] = lookupData;
1120
1117
  }
1121
- searchValue = objectData[fieldSchema.Name + constants_1.default.SearchValueAlias];
1122
- if (searchValue !== undefined) {
1123
- updateObj[fieldSchema.Name + constants_1.default.SearchValueAlias] = searchValue;
1124
- }
1125
1118
  _a.label = 3;
1126
1119
  case 3:
1127
1120
  i++;
@@ -1150,7 +1143,7 @@ function SyncFieldInSameCollectionByObjectIDWithPromise(objectName, objectID, db
1150
1143
  if (fieldArr_3) {
1151
1144
  db.collection(objectName).findOne({ '_id': objectID }, function (err, objectData) {
1152
1145
  return __awaiter(this, void 0, void 0, function () {
1153
- var updateObj, i, fieldSchema, lookupData, searchValue;
1146
+ var updateObj, i, fieldSchema, lookupData;
1154
1147
  return __generator(this, function (_a) {
1155
1148
  switch (_a.label) {
1156
1149
  case 0:
@@ -1168,10 +1161,6 @@ function SyncFieldInSameCollectionByObjectIDWithPromise(objectName, objectID, db
1168
1161
  if (lookupData !== undefined) {
1169
1162
  updateObj[fieldSchema.Name + constants_1.default.LookupAlias] = lookupData;
1170
1163
  }
1171
- searchValue = objectData[fieldSchema.Name + constants_1.default.SearchValueAlias];
1172
- if (searchValue !== undefined) {
1173
- updateObj[fieldSchema.Name + constants_1.default.SearchValueAlias] = searchValue;
1174
- }
1175
1164
  _a.label = 3;
1176
1165
  case 3:
1177
1166
  i++;
@@ -1473,7 +1462,7 @@ function BuildLookupDataField(fieldSchema, updateObj, db) {
1473
1462
  var fldName = fieldSchema.Name;
1474
1463
  var fldValue_1 = updateObj[fldName];
1475
1464
  var alias_1 = fldName + constants_1.default.LookupAlias;
1476
- var searchAlias_1 = fldName + constants_1.default.SearchValueAlias;
1465
+ var searchAlias = fldName + constants_1.default.SearchValueAlias;
1477
1466
  var fldLookupData_1 = null;
1478
1467
  if (fldValue_1) {
1479
1468
  var aggregateArry = [];
@@ -1516,20 +1505,17 @@ function BuildLookupDataField(fieldSchema, updateObj, db) {
1516
1505
  fldLookupData_1 = data[0];
1517
1506
  updateObj[alias_1] = fldLookupData_1;
1518
1507
  //** Below code is added by Shahzaib on 05/09/2022 to create SearchValue */
1519
- var result = '';
1520
- if (fieldSchema.LookupFields != undefined) {
1521
- var _loop_10 = function (j) {
1522
- if (fieldSchema.ExcludeLookupFieldsOnSearch && fieldSchema.ExcludeLookupFieldsOnSearch.filter(function (x) { return x == fieldSchema.LookupFields[j]; }).length != 0) {
1523
- return "continue";
1524
- }
1525
- if (fldLookupData_1[fieldSchema.LookupFields[j]] != undefined)
1526
- result += fldLookupData_1[fieldSchema.LookupFields[j]].toString() + ' ';
1527
- };
1528
- for (var j = 0; j < fieldSchema.LookupFields.length; j++) {
1529
- _loop_10(j);
1530
- }
1531
- }
1532
- updateObj[searchAlias_1] = result === null || result === void 0 ? void 0 : result.trim();
1508
+ // let result = '';
1509
+ // if (fieldSchema.LookupFields != undefined) {
1510
+ // for (let j = 0; j < fieldSchema.LookupFields.length; j++) {
1511
+ // if (fieldSchema.ExcludeLookupFieldsOnSearch && fieldSchema.ExcludeLookupFieldsOnSearch.filter((x: AnyObjectInterface) => x == fieldSchema.LookupFields[j]).length != 0) {
1512
+ // continue;
1513
+ // }
1514
+ // if (fldLookupData[fieldSchema.LookupFields[j]] != undefined)
1515
+ // result += fldLookupData[fieldSchema.LookupFields[j]].toString() + ' ';
1516
+ // }
1517
+ // }
1518
+ // updateObj[searchAlias] = result?.trim();
1533
1519
  //** Ends here */
1534
1520
  }
1535
1521
  resolve();
@@ -1561,17 +1547,17 @@ function BuildLookupDataField(fieldSchema, updateObj, db) {
1561
1547
  fldLookupData_1 = data;
1562
1548
  updateObj[alias_1] = fldLookupData_1;
1563
1549
  //** Below code is added by Shahzaib on 05/09/2022 to create SearchValue */
1564
- var result = '';
1565
- for (var i = 0; i < data.length; i++) {
1566
- var lookupRecord = data[i];
1567
- if (fieldSchema.LookupFields != undefined) {
1568
- for (var j = 0; j < fieldSchema.LookupFields.length; j++) {
1569
- if (lookupRecord[fieldSchema.LookupFields[j]] != undefined)
1570
- result += lookupRecord[fieldSchema.LookupFields[j]].toString() + ' ';
1571
- }
1572
- }
1573
- }
1574
- updateObj[searchAlias_1] = result === null || result === void 0 ? void 0 : result.trim();
1550
+ // let result = '';
1551
+ // for (let i = 0; i < data.length; i++) {
1552
+ // let lookupRecord = data[i];
1553
+ // if (fieldSchema.LookupFields != undefined) {
1554
+ // for (let j = 0; j < fieldSchema.LookupFields.length; j++) {
1555
+ // if (lookupRecord[fieldSchema.LookupFields[j]] != undefined)
1556
+ // result += lookupRecord[fieldSchema.LookupFields[j]].toString() + ' ';
1557
+ // }
1558
+ // }
1559
+ // }
1560
+ // updateObj[searchAlias] = result?.trim();
1575
1561
  //** Ends here */
1576
1562
  }
1577
1563
  resolve();
@@ -1675,9 +1661,9 @@ function BuildLookupDataField(fieldSchema, updateObj, db) {
1675
1661
  else {
1676
1662
  updateObj[alias_1] = fldLookupData_1;
1677
1663
  // Below if cond was added by Shahzaib on 05/09/2022
1678
- if (fieldSchema.UIDataType == 'lookup' || fieldSchema.UIDataType == 'multilookup') {
1679
- updateObj[searchAlias_1] = fldLookupData_1;
1680
- }
1664
+ // if (fieldSchema.UIDataType == 'lookup' || fieldSchema.UIDataType == 'multilookup') {
1665
+ // updateObj[searchAlias] = fldLookupData;
1666
+ // }
1681
1667
  resolve();
1682
1668
  }
1683
1669
  }
@@ -1690,11 +1676,11 @@ exports.BuildLookupDataField = BuildLookupDataField;
1690
1676
  //CheckDataBeforeAdd it sync object before add
1691
1677
  function CheckDataBeforeAdd(updateObj, objectSchema, db) {
1692
1678
  return __awaiter(this, void 0, void 0, function () {
1693
- var _loop_11, _i, _a, fldName;
1679
+ var _loop_10, _i, _a, fldName;
1694
1680
  return __generator(this, function (_b) {
1695
1681
  switch (_b.label) {
1696
1682
  case 0:
1697
- _loop_11 = function (fldName) {
1683
+ _loop_10 = function (fldName) {
1698
1684
  var fieldSchema, sequenceDocument, val, j, item, num;
1699
1685
  return __generator(this, function (_a) {
1700
1686
  switch (_a.label) {
@@ -1740,7 +1726,7 @@ function CheckDataBeforeAdd(updateObj, objectSchema, db) {
1740
1726
  case 1:
1741
1727
  if (!(_i < _a.length)) return [3 /*break*/, 4];
1742
1728
  fldName = _a[_i];
1743
- return [5 /*yield**/, _loop_11(fldName)];
1729
+ return [5 /*yield**/, _loop_10(fldName)];
1744
1730
  case 2:
1745
1731
  _b.sent();
1746
1732
  _b.label = 3;
@@ -1756,11 +1742,11 @@ exports.CheckDataBeforeAdd = CheckDataBeforeAdd;
1756
1742
  //CheckDataBeforeAdd it sync object before update
1757
1743
  function CheckDataBeforeUpdate(updateObj, objectData, objectSchema, db) {
1758
1744
  return __awaiter(this, void 0, void 0, function () {
1759
- var _loop_12, _i, _a, fldName;
1745
+ var _loop_11, _i, _a, fldName;
1760
1746
  return __generator(this, function (_b) {
1761
1747
  switch (_b.label) {
1762
1748
  case 0:
1763
- _loop_12 = function (fldName) {
1749
+ _loop_11 = function (fldName) {
1764
1750
  var fieldSchema, oldValue, newValue, isSame;
1765
1751
  return __generator(this, function (_a) {
1766
1752
  switch (_a.label) {
@@ -1803,7 +1789,7 @@ function CheckDataBeforeUpdate(updateObj, objectData, objectSchema, db) {
1803
1789
  case 1:
1804
1790
  if (!(_i < _a.length)) return [3 /*break*/, 4];
1805
1791
  fldName = _a[_i];
1806
- return [5 /*yield**/, _loop_12(fldName)];
1792
+ return [5 /*yield**/, _loop_11(fldName)];
1807
1793
  case 2:
1808
1794
  _b.sent();
1809
1795
  _b.label = 3;
@@ -1826,51 +1812,56 @@ function BuildGridFieldProjection(project, field, group) {
1826
1812
  var searchConcatArry = [];
1827
1813
  switch (field.Schema.UIDataType) {
1828
1814
  // below code was added by Shahzaib on 05/09/2022
1829
- case "lookup":
1830
- case "multilookup":
1831
- alias = fldName + constants_1.default.LookupAlias;
1832
- project[fldName] = 1;
1833
- project[alias] = 1;
1834
- project[searchAlias] = 1;
1835
- break;
1836
- // Below code was commented by Shahzaib on 05/09/2022, searchAlias was added instead of it.
1837
1815
  // case "lookup":
1838
- // alias = fldName + constants.LookupAlias;
1839
- // project[fldName] = 1;
1840
- // project[alias] = 1;
1841
- // for (let i = 0; i < field.Schema.LookupFields.length; i++) {
1842
- // if (field.Schema.ExcludeLookupFieldsOnSearch && field.Schema.ExcludeLookupFieldsOnSearch.filter((x: AnyObjectInterface) => x == field.Schema.LookupFields[i]).length != 0) {
1843
- // continue;
1844
- // }
1845
- // // searchConcatArry.push({ "$ifNull": ['$' + alias + '.' + field.Schema.LookupFields[i], ""] });
1846
- // // added by Shahzaib, make int to string and concat
1847
- // searchConcatArry.push({ "$ifNull": [{$toString : '$' + alias + '.' + field.Schema.LookupFields[i]}, ""] });
1848
- // if (i < field.Schema.LookupFields.length - 1) {
1849
- // searchConcatArry.push(" ");
1850
- // }
1851
- // };
1852
- // project[fldName + '_SearchValue'] = { $concat: searchConcatArry };
1853
- // break;
1854
1816
  // case "multilookup":
1855
1817
  // alias = fldName + constants.LookupAlias;
1856
1818
  // project[fldName] = 1;
1857
1819
  // project[alias] = 1;
1858
- // for (let i = 0; i < field.Schema.LookupFields.length; i++) {
1859
- // searchConcatArry.push({ "$ifNull": ['$' + alias + '.' + field.Schema.LookupFields[i], [" "]] });
1860
- // if (i < field.Schema.LookupFields.length - 1) {
1861
- // searchConcatArry.push([" "]);
1862
- // }
1863
- // };
1864
- // //project[fldName + '_SearchValue'] = { $concatArrays: searchConcatArry };
1865
- // project[fldName + '_SearchValue'] = {
1866
- // $reduce: {
1867
- // input: { $concatArrays: searchConcatArry },
1868
- // initialValue: "",
1869
- // //in: { $concat: ["$$value", "$$this"] } // Commented by and below line was added by Shahzaib, make int to string
1870
- // in: { $concat: ["$$value", { $toString : "$$this" }] }
1871
- // }
1872
- // };
1820
+ // project[searchAlias] = 1;
1873
1821
  // break;
1822
+ // Below code was commented by Shahzaib on 05/09/2022, searchAlias was added instead of it.
1823
+ case "lookup":
1824
+ alias = fldName + constants_1.default.LookupAlias;
1825
+ project[fldName] = 1;
1826
+ project[alias] = 1;
1827
+ var _loop_12 = function (i) {
1828
+ if (field.Schema.ExcludeLookupFieldsOnSearch && field.Schema.ExcludeLookupFieldsOnSearch.filter(function (x) { return x == field.Schema.LookupFields[i]; }).length != 0) {
1829
+ return "continue";
1830
+ }
1831
+ // searchConcatArry.push({ "$ifNull": ['$' + alias + '.' + field.Schema.LookupFields[i], ""] });
1832
+ // added by Shahzaib, make int to string and concat
1833
+ searchConcatArry.push({ "$ifNull": [{ $toString: '$' + alias + '.' + field.Schema.LookupFields[i] }, ""] });
1834
+ if (i < field.Schema.LookupFields.length - 1) {
1835
+ searchConcatArry.push(" ");
1836
+ }
1837
+ };
1838
+ for (var i = 0; i < field.Schema.LookupFields.length; i++) {
1839
+ _loop_12(i);
1840
+ }
1841
+ ;
1842
+ project[fldName + '_SearchValue'] = { $concat: searchConcatArry };
1843
+ break;
1844
+ case "multilookup":
1845
+ alias = fldName + constants_1.default.LookupAlias;
1846
+ project[fldName] = 1;
1847
+ project[alias] = 1;
1848
+ for (var i = 0; i < field.Schema.LookupFields.length; i++) {
1849
+ searchConcatArry.push({ "$ifNull": ['$' + alias + '.' + field.Schema.LookupFields[i], [" "]] });
1850
+ if (i < field.Schema.LookupFields.length - 1) {
1851
+ searchConcatArry.push([" "]);
1852
+ }
1853
+ }
1854
+ ;
1855
+ //project[fldName + '_SearchValue'] = { $concatArrays: searchConcatArry };
1856
+ project[fldName + '_SearchValue'] = {
1857
+ $reduce: {
1858
+ input: { $concatArrays: searchConcatArry },
1859
+ initialValue: "",
1860
+ //in: { $concat: ["$$value", "$$this"] } // Commented by and below line was added by Shahzaib, make int to string
1861
+ in: { $concat: ["$$value", { $toString: "$$this" }] }
1862
+ }
1863
+ };
1864
+ break;
1874
1865
  case "dropdown":
1875
1866
  alias = fldName + constants_1.default.LookupAlias;
1876
1867
  project[fldName] = 1;
@@ -4312,6 +4303,12 @@ function EmailValidation(elmValue) {
4312
4303
  }
4313
4304
  return false;
4314
4305
  }
4306
+ function IsStringValue(val) {
4307
+ if (typeof val === 'string' || val instanceof String) {
4308
+ return true;
4309
+ }
4310
+ return false;
4311
+ }
4315
4312
  /*
4316
4313
  * Created by: Mohan as on 09-11-21
4317
4314
  * This is a common function and used to validate and sanitise user input.
@@ -4385,6 +4382,378 @@ function ValidateSanitizeUserInput(inputFields, pageData) {
4385
4382
  });
4386
4383
  }
4387
4384
  exports.ValidateSanitizeUserInput = ValidateSanitizeUserInput;
4385
+ var SystemFields = ["CreatedBy", "CreatedDate", "ModifiedBy", "ModifiedDate", "_id", "IsActive", "CompanyID", "OwnerID", "SyncStatus"];
4386
+ var ObjectSystemFields = [
4387
+ { 'Name': 'Activity', 'Fields': ["Contacts", "Accounts", "Users", "AttendeesData", "CustomRecurrence"] },
4388
+ { 'Name': 'Events', 'Fields': ["RecurrenceData", "CustomRecurrence"] },
4389
+ { 'Name': 'ImplantOutplant', 'Fields': ["AllAccountIDs"] },
4390
+ { 'Name': 'ShopAppointment', 'Fields': ["StartDateTime", "EndDateTime", "AppointmentHistory"] }
4391
+ ];
4392
+ function IsSystemField(objectName, fieldName) {
4393
+ if (SystemFields.includes(fieldName)) {
4394
+ return true;
4395
+ }
4396
+ var objectField = ObjectSystemFields.find(function (x) { return x.Name == objectName && x.Fields.includes(fieldName); });
4397
+ if (objectField) {
4398
+ return true;
4399
+ }
4400
+ return false;
4401
+ }
4402
+ function IsAnotherObjectField(pageData, fieldName) {
4403
+ if (pageData.Groups && pageData.Groups.length) {
4404
+ var groups = pageData.Groups.filter(function (x) { return x.ChildObject != undefined; });
4405
+ if (groups && groups.length) {
4406
+ for (var _i = 0, groups_1 = groups; _i < groups_1.length; _i++) {
4407
+ var group = groups_1[_i];
4408
+ if (group.Fields && group.Fields.find(function (x) { return x.Name == fieldName; })) {
4409
+ return true;
4410
+ }
4411
+ }
4412
+ }
4413
+ }
4414
+ return false;
4415
+ }
4416
+ /*
4417
+ * Created by: Nirbhay as on 01-09-22
4418
+ * This is a common function and used to validate user input format.
4419
+ * Desc: This fuinction maps all fields from user form with objectdata from ObjectSchema collection.
4420
+ * return value: string.
4421
+ * example: if there is no issue found it return "" else return error message - "FirstName is required!"
4422
+ */
4423
+ function ValidateUserInput(options) {
4424
+ return __awaiter(this, void 0, void 0, function () {
4425
+ var inputFields, pageData, documentID, db, action, objectSchema, objectName, pageFields, schemaFields, inputField, msg, _loop_18, _i, inputField_1, name_1, state_1, _loop_19, isValid, _a, pageFields_1, pageField, state_2, err_3;
4426
+ return __generator(this, function (_b) {
4427
+ switch (_b.label) {
4428
+ case 0:
4429
+ _b.trys.push([0, 5, , 6]);
4430
+ inputFields = options.userInput;
4431
+ pageData = options.pageData;
4432
+ documentID = options.objectID;
4433
+ db = options.db;
4434
+ action = (documentID) ? "update" : "add";
4435
+ objectSchema = pageData.ObjectSchema;
4436
+ objectName = objectSchema.Name;
4437
+ pageFields = pageData.AllFields;
4438
+ schemaFields = objectSchema.Fields;
4439
+ if (options.collectionField) {
4440
+ pageFields = objectSchema.Fields.find(function (x) { return x.Name == options.collectionField; }).Fields;
4441
+ schemaFields = objectSchema.Fields.find(function (x) { return x.Name == options.collectionField; }).Fields;
4442
+ }
4443
+ inputField = Object.keys(inputFields);
4444
+ msg = '';
4445
+ if (inputField && inputField.length) {
4446
+ _loop_18 = function (name_1) {
4447
+ var field = pageFields.find(function (x) { return x.Name == name_1; });
4448
+ if (field == undefined && !IsSystemField(objectName, name_1)) {
4449
+ msg = name_1 + " is not valid field!";
4450
+ return "break";
4451
+ }
4452
+ };
4453
+ for (_i = 0, inputField_1 = inputField; _i < inputField_1.length; _i++) {
4454
+ name_1 = inputField_1[_i];
4455
+ state_1 = _loop_18(name_1);
4456
+ if (state_1 === "break")
4457
+ break;
4458
+ }
4459
+ }
4460
+ _loop_19 = function (pageField) {
4461
+ var fieldName, fieldData, field, searchQuery, result, _a, filter, searchObj, result, searchObj, totalRecord, _b, schemaData, result, searchObj, result, schemaData, result, searchObj, totalRecord, regexpression, phone;
4462
+ return __generator(this, function (_c) {
4463
+ switch (_c.label) {
4464
+ case 0:
4465
+ if (msg != "") {
4466
+ return [2 /*return*/, "break"];
4467
+ }
4468
+ fieldName = pageField.Name;
4469
+ fieldData = inputFields[fieldName];
4470
+ field = schemaFields.find(function (x) { return x.Name == fieldName; });
4471
+ if (!field) return [3 /*break*/, 38];
4472
+ if (fieldData && IsStringValue(fieldData) && field.UIDataType != 'dropdown') {
4473
+ fieldData = fieldData.trim();
4474
+ if (["text", "email", "phone"].includes(field.UIDataType)) {
4475
+ inputFields[fieldName] = fieldData;
4476
+ }
4477
+ }
4478
+ if (field.IsRequired == true) {
4479
+ if (fieldData === '' || fieldData === null || (fieldData === undefined && action == "add")) {
4480
+ msg = field.DisplayName + ' is required!';
4481
+ return [2 /*return*/, "break"];
4482
+ }
4483
+ }
4484
+ if (!(field.IsUnique == true)) return [3 /*break*/, 2];
4485
+ if (!(field.UIDataType == "email" && fieldData)) return [3 /*break*/, 2];
4486
+ searchQuery = { IsActive: true };
4487
+ searchQuery[field.Name] = fieldData;
4488
+ if (action == "update") {
4489
+ searchQuery["_id"] = { $ne: documentID };
4490
+ }
4491
+ return [4 /*yield*/, db.collection(objectSchema.Name).findOne(searchQuery)];
4492
+ case 1:
4493
+ result = _c.sent();
4494
+ if (result != null) {
4495
+ msg = 'Email already exists for ' + field.DisplayName + '!';
4496
+ return [2 /*return*/, "break"];
4497
+ }
4498
+ _c.label = 2;
4499
+ case 2:
4500
+ if (!inputField.includes(fieldName)) return [3 /*break*/, 37];
4501
+ if (!(fieldData || fieldData === 0 || fieldData === false)) return [3 /*break*/, 37];
4502
+ _a = field.UIDataType;
4503
+ switch (_a) {
4504
+ case 'int': return [3 /*break*/, 3];
4505
+ case 'decimal': return [3 /*break*/, 3];
4506
+ case 'date': return [3 /*break*/, 4];
4507
+ case 'datetime': return [3 /*break*/, 4];
4508
+ case 'time': return [3 /*break*/, 5];
4509
+ case 'email': return [3 /*break*/, 6];
4510
+ case 'checkbox': return [3 /*break*/, 7];
4511
+ case 'lookup': return [3 /*break*/, 8];
4512
+ case 'multilookup': return [3 /*break*/, 10];
4513
+ case 'dropdown': return [3 /*break*/, 18];
4514
+ case 'multiselect': return [3 /*break*/, 24];
4515
+ case 'url': return [3 /*break*/, 34];
4516
+ case 'phone': return [3 /*break*/, 35];
4517
+ case 'textarea': return [3 /*break*/, 36];
4518
+ case 'text': return [3 /*break*/, 36];
4519
+ case 'texteditor': return [3 /*break*/, 36];
4520
+ }
4521
+ return [3 /*break*/, 37];
4522
+ case 3:
4523
+ {
4524
+ if (IsStringValue(fieldData)) {
4525
+ msg = 'Invalid value for ' + field.DisplayName + '!';
4526
+ }
4527
+ else if (field.UIDataType == 'int' && Number.isInteger(fieldData) == false) {
4528
+ msg = 'Invalid value for ' + field.DisplayName + '!';
4529
+ }
4530
+ else if (field.UIDataType == 'decimal' && isNaN(fieldData)) {
4531
+ msg = 'Invalid value for ' + field.DisplayName + '!';
4532
+ }
4533
+ else if (field.MinValue !== undefined && fieldData < field.MinValue) {
4534
+ msg = field.DisplayName + ' value must be greater then or equal to ' + field.MinValue;
4535
+ }
4536
+ else if (field.MinValue !== undefined && field.MaxValue < fieldData) {
4537
+ msg = field.DisplayName + ' value must be smaller then or equal to ' + field.MaxValue;
4538
+ }
4539
+ }
4540
+ return [3 /*break*/, 37];
4541
+ case 4:
4542
+ {
4543
+ if ((fieldData instanceof Date && !isNaN(inputFields[fieldName])) == false) {
4544
+ msg = 'Invalid date for ' + field.DisplayName + '!';
4545
+ }
4546
+ }
4547
+ return [3 /*break*/, 37];
4548
+ case 5:
4549
+ {
4550
+ isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(fieldData);
4551
+ if (!isValid) {
4552
+ msg = 'Invalid time for ' + field.DisplayName + '!';
4553
+ }
4554
+ }
4555
+ return [3 /*break*/, 37];
4556
+ case 6:
4557
+ {
4558
+ filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
4559
+ if (!filter.test(fieldData)) {
4560
+ msg = 'Invalid email for ' + field.DisplayName + '!';
4561
+ }
4562
+ }
4563
+ return [3 /*break*/, 37];
4564
+ case 7:
4565
+ {
4566
+ if (fieldData !== true && fieldData !== false) {
4567
+ msg = 'Invalid user input for ' + field.DisplayName + '!';
4568
+ }
4569
+ }
4570
+ return [3 /*break*/, 37];
4571
+ case 8:
4572
+ searchObj = { _id: fieldData };
4573
+ if (action == 'add') {
4574
+ searchObj.IsActive = true;
4575
+ }
4576
+ ;
4577
+ return [4 /*yield*/, db.collection(field.LookupObject).findOne(searchObj)];
4578
+ case 9:
4579
+ result = _c.sent();
4580
+ if (result == null) {
4581
+ msg = field.DisplayName + ' does not exist!';
4582
+ }
4583
+ return [3 /*break*/, 37];
4584
+ case 10:
4585
+ if (!Array.isArray(fieldData)) return [3 /*break*/, 16];
4586
+ if (!fieldData.length) return [3 /*break*/, 14];
4587
+ searchObj = { _id: { $in: fieldData } };
4588
+ if (action == 'add') {
4589
+ searchObj.IsActive = true;
4590
+ }
4591
+ ;
4592
+ return [4 /*yield*/, db.collection(field.LookupObject).find(searchObj).count()];
4593
+ case 11:
4594
+ totalRecord = _c.sent();
4595
+ if (!(objectName == "Activity" && field.Name == 'Attendees')) return [3 /*break*/, 13];
4596
+ _b = totalRecord;
4597
+ return [4 /*yield*/, db.collection('Contact').find(searchObj).count()];
4598
+ case 12:
4599
+ totalRecord = _b + _c.sent();
4600
+ _c.label = 13;
4601
+ case 13:
4602
+ if (totalRecord !== fieldData.length) {
4603
+ msg = field.DisplayName + ' does not exist!';
4604
+ }
4605
+ return [3 /*break*/, 15];
4606
+ case 14:
4607
+ if (field.IsRequired) {
4608
+ msg = field.DisplayName + ' is required!';
4609
+ }
4610
+ _c.label = 15;
4611
+ case 15: return [3 /*break*/, 17];
4612
+ case 16:
4613
+ msg = 'Invalid value for ' + field.DisplayName;
4614
+ _c.label = 17;
4615
+ case 17: return [3 /*break*/, 37];
4616
+ case 18:
4617
+ if (!(field.ListSchemaName !== undefined)) return [3 /*break*/, 21];
4618
+ if (!!field.IsMultipleListSchemaName) return [3 /*break*/, 20];
4619
+ schemaData = null;
4620
+ return [4 /*yield*/, db.collection('ListSchema').findOne({ Name: field.ListSchemaName })];
4621
+ case 19:
4622
+ result = _c.sent();
4623
+ if (result && result.Data)
4624
+ schemaData = result.Data.find(function (x) { return x.Key == fieldData; });
4625
+ if (schemaData == null) {
4626
+ msg = field.DisplayName + ' does not exist!';
4627
+ }
4628
+ _c.label = 20;
4629
+ case 20: return [3 /*break*/, 23];
4630
+ case 21:
4631
+ if (!(field.LookupObject !== undefined)) return [3 /*break*/, 23];
4632
+ searchObj = { _id: fieldData };
4633
+ if (action == 'add') {
4634
+ searchObj.IsActive = true;
4635
+ }
4636
+ ;
4637
+ return [4 /*yield*/, db.collection(field.LookupObject).findOne(searchObj)];
4638
+ case 22:
4639
+ result = _c.sent();
4640
+ if (result == null) {
4641
+ msg = field.DisplayName + ' does not exist!';
4642
+ }
4643
+ _c.label = 23;
4644
+ case 23: return [3 /*break*/, 37];
4645
+ case 24:
4646
+ if (!Array.isArray(fieldData)) return [3 /*break*/, 32];
4647
+ if (!fieldData.length) return [3 /*break*/, 30];
4648
+ if (!(field.ListSchemaName !== undefined)) return [3 /*break*/, 27];
4649
+ if (!!field.IsMultipleListSchemaName) return [3 /*break*/, 26];
4650
+ schemaData = [];
4651
+ return [4 /*yield*/, db.collection('ListSchema').findOne({ Name: field.ListSchemaName })];
4652
+ case 25:
4653
+ result = _c.sent();
4654
+ if (result && result.Data)
4655
+ schemaData = result.Data.filter(function (x) { return fieldData.includes(x.Key.toString()); });
4656
+ if (schemaData.length != fieldData.length) {
4657
+ msg = field.DisplayName + ' does not exist!';
4658
+ }
4659
+ _c.label = 26;
4660
+ case 26: return [3 /*break*/, 29];
4661
+ case 27:
4662
+ if (!(field.LookupObject !== undefined)) return [3 /*break*/, 29];
4663
+ searchObj = { _id: { $in: fieldData } };
4664
+ if (action == 'add') {
4665
+ searchObj.IsActive = true;
4666
+ }
4667
+ ;
4668
+ return [4 /*yield*/, db.collection(field.LookupObject).find(searchObj).count()];
4669
+ case 28:
4670
+ totalRecord = _c.sent();
4671
+ if (totalRecord !== fieldData.length) {
4672
+ msg = field.DisplayName + ' does not exist!';
4673
+ }
4674
+ _c.label = 29;
4675
+ case 29: return [3 /*break*/, 31];
4676
+ case 30:
4677
+ if (field.IsRequired) {
4678
+ msg = field.DisplayName + ' is required!';
4679
+ }
4680
+ _c.label = 31;
4681
+ case 31: return [3 /*break*/, 33];
4682
+ case 32:
4683
+ msg = 'Invalid value for ' + field.DisplayName;
4684
+ _c.label = 33;
4685
+ case 33: return [3 /*break*/, 37];
4686
+ case 34:
4687
+ {
4688
+ regexpression = new RegExp('^(https?:\\/\\/)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(\\:\\d+)?(\\/[-a-z\\d%_.~+@,:=#()]*)*(\\?[;&a-z\\d%_@,.:()~+=-]*)?(\\#[-a-z\\d_]*)?$', 'i');
4689
+ if (!regexpression.test(fieldData)) {
4690
+ msg = 'Invalid URL for ' + field.DisplayName + '!';
4691
+ }
4692
+ }
4693
+ return [3 /*break*/, 37];
4694
+ case 35:
4695
+ {
4696
+ if (field.IncludeCountryCode) {
4697
+ // phone must begin with '+'
4698
+ if (!fieldData.indexOf("+")) {
4699
+ phone = phoneUtil.parse(fieldData, "");
4700
+ if (!phoneUtil.isValidNumber(phone)) {
4701
+ msg = fieldData + ' is a invalid phone number!';
4702
+ }
4703
+ }
4704
+ else {
4705
+ msg = fieldData + ' is a invalid phone number!';
4706
+ }
4707
+ }
4708
+ }
4709
+ return [3 /*break*/, 37];
4710
+ case 36:
4711
+ {
4712
+ // Maxlength check;
4713
+ if (field.MaxLength !== undefined && fieldData.length > field.MaxLength) {
4714
+ msg = field.DisplayName + ' can not be greater then ' + field.MaxLength + ' characters!';
4715
+ }
4716
+ if (!IsStringValue(fieldData)) {
4717
+ msg = 'Invalid value for ' + field.DisplayName;
4718
+ }
4719
+ }
4720
+ return [3 /*break*/, 37];
4721
+ case 37: return [3 /*break*/, 39];
4722
+ case 38:
4723
+ if (!IsSystemField(objectName, fieldName) && !IsAnotherObjectField(pageData, fieldName)) {
4724
+ msg = fieldName + " is not valid schema!";
4725
+ return [2 /*return*/, "break"];
4726
+ }
4727
+ _c.label = 39;
4728
+ case 39: return [2 /*return*/];
4729
+ }
4730
+ });
4731
+ };
4732
+ _a = 0, pageFields_1 = pageFields;
4733
+ _b.label = 1;
4734
+ case 1:
4735
+ if (!(_a < pageFields_1.length)) return [3 /*break*/, 4];
4736
+ pageField = pageFields_1[_a];
4737
+ return [5 /*yield**/, _loop_19(pageField)];
4738
+ case 2:
4739
+ state_2 = _b.sent();
4740
+ if (state_2 === "break")
4741
+ return [3 /*break*/, 4];
4742
+ _b.label = 3;
4743
+ case 3:
4744
+ _a++;
4745
+ return [3 /*break*/, 1];
4746
+ case 4: return [2 /*return*/, msg];
4747
+ case 5:
4748
+ err_3 = _b.sent();
4749
+ console.log("Error in ValidateUserInput", err_3);
4750
+ return [3 /*break*/, 6];
4751
+ case 6: return [2 /*return*/];
4752
+ }
4753
+ });
4754
+ });
4755
+ }
4756
+ exports.ValidateUserInput = ValidateUserInput;
4388
4757
  /**
4389
4758
  * TODO: Create lookup of fields of list schema for Vat Setting data
4390
4759
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optimiser/common",
3
- "version": "1.0.286",
3
+ "version": "1.0.289",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -26,6 +26,7 @@
26
26
  "express": "^4.17.1",
27
27
  "express-validator": "^6.9.2",
28
28
  "geoip-lite": "^1.4.2",
29
+ "google-libphonenumber": "^3.2.30",
29
30
  "ioredis": "^4.17.3",
30
31
  "libphonenumber-js": "^1.9.51",
31
32
  "moment": "^2.25.3",