akeyless-client-commons 1.1.18 → 1.1.19

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.
@@ -5847,9 +5847,9 @@ var InputContainer = function(param) {
5847
5847
  minLength: minLength,
5848
5848
  placeholder: placeholder,
5849
5849
  className: cn("flex-1 bg-inherit h-9 py-2 px-3", defaultFormElementBorderClassName, elementClassName),
5850
- defaultValue: defaultValue
5850
+ defaultValue: value ? void 0 : defaultValue,
5851
+ value: defaultValue ? void 0 : value
5851
5852
  }), validationProps), {
5852
- value: value,
5853
5853
  onChange: function(e) {
5854
5854
  return handleChangeFunction(e);
5855
5855
  },
@@ -6075,13 +6075,13 @@ var TextAreaContainer = function(param) {
6075
6075
  ]);
6076
6076
  return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FormElementContainer, _object_spread_props(_object_spread({}, containerProps), {
6077
6077
  children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("textarea", _object_spread_props(_object_spread({}, props), {
6078
- value: value,
6078
+ defaultValue: value ? void 0 : defaultValue,
6079
+ value: defaultValue ? void 0 : value,
6079
6080
  onChange: onChange,
6080
6081
  dir: direction,
6081
6082
  minLength: minLength,
6082
6083
  placeholder: placeholder,
6083
6084
  className: cn("flex-1 bg-inherit min-h-16 max-h-52 overflow-auto px-2 py-1", defaultFormElementBorderClassName, elementClassName),
6084
- defaultValue: defaultValue,
6085
6085
  required: required,
6086
6086
  name: name,
6087
6087
  onKeyDown: onKeyDown
@@ -5625,9 +5625,9 @@ var InputContainer = function(param) {
5625
5625
  minLength: minLength,
5626
5626
  placeholder: placeholder,
5627
5627
  className: cn("flex-1 bg-inherit h-9 py-2 px-3", defaultFormElementBorderClassName, elementClassName),
5628
- defaultValue: defaultValue
5628
+ defaultValue: value ? void 0 : defaultValue,
5629
+ value: defaultValue ? void 0 : value
5629
5630
  }), validationProps), {
5630
- value: value,
5631
5631
  onChange: function(e) {
5632
5632
  return handleChangeFunction(e);
5633
5633
  },
@@ -5853,13 +5853,13 @@ var TextAreaContainer = function(param) {
5853
5853
  ]);
5854
5854
  return /* @__PURE__ */ jsx20(FormElementContainer, _object_spread_props(_object_spread({}, containerProps), {
5855
5855
  children: /* @__PURE__ */ jsx20("textarea", _object_spread_props(_object_spread({}, props), {
5856
- value: value,
5856
+ defaultValue: value ? void 0 : defaultValue,
5857
+ value: defaultValue ? void 0 : value,
5857
5858
  onChange: onChange,
5858
5859
  dir: direction,
5859
5860
  minLength: minLength,
5860
5861
  placeholder: placeholder,
5861
5862
  className: cn("flex-1 bg-inherit min-h-16 max-h-52 overflow-auto px-2 py-1", defaultFormElementBorderClassName, elementClassName),
5862
- defaultValue: defaultValue,
5863
5863
  required: required,
5864
5864
  name: name,
5865
5865
  onKeyDown: onKeyDown
@@ -1 +1 @@
1
- {"version":3,"sources":["c:\\work\\akeyless\\commons\\client_commons\\dist\\helpers\\index.mjs"],"names":[],"mappings":"AAAA,0BAA0B","sourcesContent":["// src/helpers/firebase.ts\nimport moment from \"moment\";\nimport { initializeApp } from \"firebase/app\";\nimport { getStorage } from \"firebase/storage\";\nimport { getAuth } from \"firebase/auth\";\nimport {\n addDoc,\n collection,\n deleteDoc,\n doc,\n getDoc,\n getDocs,\n query,\n setDoc,\n Timestamp,\n where,\n getFirestore,\n onSnapshot,\n orderBy\n} from \"firebase/firestore\";\n\n// src/helpers/cars.ts\nvar formatCarNumber = (car_number) => {\n var cn2 = car_number;\n if (cn2?.length == 8) return `${cn2[0]}${cn2[1]}${cn2[2]}-${cn2[3]}${cn2[4]}-${cn2[5]}${cn2[6]}${cn2[7]}`;\n if (cn2?.length == 7) return `${cn2[0]}${cn2[1]}-${cn2[2]}${cn2[3]}${cn2[4]}-${cn2[5]}${cn2[6]}`;\n if (cn2?.length == 6) return `${cn2[0]}${cn2[1]}-${cn2[2]}${cn2[3]}-${cn2[4]}${cn2[5]}`;\n if (cn2?.length == 5) return `${cn2[0]}-${cn2[1]}${cn2[2]}-${cn2[3]}${cn2[4]}`;\n return cn2;\n};\n\n// src/helpers/firebase.ts\nvar initApp = () => {\n const isNodeEnv2 = typeof process !== \"undefined\" && process.env;\n const firebaseConfig = {\n apiKey: isNodeEnv2 ? process.env.NEXT_PUBLIC_API_KEY : import.meta.env.VITE_API_KEY,\n authDomain: isNodeEnv2 ? process.env.NEXT_PUBLIC_AUTH_DOMAIN : import.meta.env.VITE_AUTH_DOMAIN,\n projectId: isNodeEnv2 ? process.env.NEXT_PUBLIC_PROJECT_ID : import.meta.env.VITE_PROJECT_ID,\n storageBucket: isNodeEnv2 ? process.env.NEXT_PUBLIC_STORAGE_BUCKET : import.meta.env.VITE_STORAGE_BUCKET,\n messagingSenderId: isNodeEnv2 ? process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID : import.meta.env.VITE_MESSAGING_SENDER_ID,\n appId: isNodeEnv2 ? process.env.NEXT_PUBLIC_APP_ID : import.meta.env.VITE_APP_ID\n };\n try {\n const app = initializeApp(firebaseConfig);\n const auth2 = getAuth(app);\n const db2 = getFirestore(app);\n const storage2 = getStorage(app);\n return { db: db2, auth: auth2, storage: storage2 };\n } catch (error) {\n console.error(\"Failed to initialize Firebase app:\", error);\n return {};\n }\n};\nvar { db, auth, storage } = initApp();\nvar collections = {\n clients: collection(db, \"nx-clients\"),\n sites: collection(db, \"nx-sites\"),\n cars: collection(db, \"units\"),\n users: collection(db, \"nx-users\"),\n lastLocations: collection(db, \"last_locations\"),\n ermEvents: collection(db, \"erm_events_general\"),\n erm2Events: collection(db, \"erm2_events_general\"),\n ruptelaEvents: collection(db, \"ruptela_events_general\"),\n polygons: collection(db, \"nx-polygons\"),\n polygonEvents: collection(db, \"polygon_events\"),\n polygonCars: collection(db, \"polygon_cars\"),\n canbus: collection(db, \"erm_canbus_parameters\"),\n states: collection(db, \"erm_states\"),\n app_pro_commands_queue: collection(db, \"app_pro_commands_queue\"),\n trips: collection(db, \"erm2_trip\"),\n tripsDetails: collection(db, \"erm2_trip_details\"),\n audit: collection(db, \"nx-audit\"),\n nx_settings: collection(db, \"nx-settings\"),\n settings: collection(db, \"settings\"),\n translations: collection(db, \"nx-translations\"),\n nx_cars: collection(db, \"nx-cars\"),\n boards: collection(db, \"boards\"),\n protection_types: collection(db, \"protectionTypes\"),\n board_types: collection(db, \"boardTypes\"),\n charge_capacities: collection(db, \"nx-charge-capacities\")\n};\nvar fire_base_TIME_TEMP = Timestamp.now;\nvar extractAlertsData = (doc2) => {\n const data = doc2.data();\n const { car_number, timestamp } = data;\n return {\n ...data,\n timestamp_seconds: timestamp.seconds,\n timestamp_ui: moment.unix(timestamp.seconds).format(\"DD/MM/YY HH:mm\"),\n car_number: formatCarNumber(car_number)\n };\n};\nvar simpleExtractData = (doc2) => {\n const docData = doc2.data();\n return {\n ...docData,\n id: doc2.id\n };\n};\nvar extractSiteData = (doc2) => {\n const data = doc2.data();\n const dateUpdated = new Date(data.updated?.seconds * 1e3 + data.updated.nanoseconds / 1e6);\n const dateCreated = new Date(data.created?.seconds * 1e3 + data.created.nanoseconds / 1e6);\n return {\n ...data,\n id: doc2.id,\n created: moment(dateCreated).format(\"DD.MM.YYYY - HH:mm\"),\n updated: moment(dateUpdated).format(\"DD.MM.YYYY - HH:mm\")\n };\n};\nvar extractClientData = (doc2) => {\n const data = doc2.data();\n const dateUpdated = new Date(data.updated?.seconds * 1e3 + data.updated.nanoseconds / 1e6);\n const dateCreated = new Date(data.created?.seconds * 1e3 + data.created.nanoseconds / 1e6);\n return {\n ...data,\n id: doc2.id,\n created: moment(dateCreated).format(\"HH:mm DD/MM/YY\"),\n updated: moment(dateUpdated).format(\"HH:mm DD/MM/YY\")\n };\n};\nvar extractBoardsData = (doc2) => {\n const data = doc2.data();\n const dateUploaded = typeof data.uploaded === \"string\" ? data.uploaded : moment.unix(data.uploaded?.seconds).format(\"DD/MM/YY HH:mm\");\n return {\n ...data,\n id: doc2.id,\n uploaded: dateUploaded\n };\n};\nvar extractCarsData = (doc2) => {\n const carData = doc2.data();\n let icon;\n const gov_info = carData.gov_info;\n if (gov_info) {\n if (carData.icon) {\n icon = carData.icon;\n } else if (gov_info.vehicle_type === \"atv\") {\n icon = \"truck\";\n } else if (gov_info.vehicle_type === \"motorcycle\") {\n icon = \"motorcycle\";\n } else {\n icon = \"car\";\n }\n } else {\n icon = \"car\";\n }\n return {\n ...carData,\n id: doc2.id,\n brand: carData.brand || carData.manufacturer,\n car_number: carData.carId,\n icon\n };\n};\nvar extractCanbusData = (doc2) => {\n const data = doc2.data();\n let newDate = null;\n if (data.timestamp && typeof data.timestamp.seconds === \"number\" && data.timestamp.seconds > 0) {\n newDate = new Date(data.timestamp.seconds * 1e3);\n }\n return {\n ...data,\n date_ui: newDate ? moment(newDate).format(\"DD/MM/YYYY - HH:mm\") : \"N/A\"\n };\n};\nvar extractLocationData = (doc2) => {\n const locationData = doc2.data();\n const { latitude, longitude, spd, timestamp, prev_latitude, prev_longitude } = locationData;\n return {\n ...locationData,\n id: doc2.id,\n lat: latitude,\n lng: longitude,\n prev_lat: prev_latitude,\n prev_lng: prev_longitude,\n timestamp: timestamp?.seconds,\n spd: Number(spd).toFixed(0)\n };\n};\nvar get_all_documents = async (collection_path) => {\n try {\n const snapshot2 = await getDocs(collection(db, collection_path));\n const documents = snapshot2.docs.map((doc2) => simpleExtractData(doc2));\n return documents;\n } catch (error) {\n return [];\n }\n};\nvar get_document_by_id = async (collection_path, doc_id) => {\n try {\n const doc_ref = doc(db, collection_path, doc_id);\n const doc_snap = await getDoc(doc_ref);\n if (!doc_snap.exists()) {\n throw new Error(\"Document not found, document id: \" + doc_id);\n }\n return simpleExtractData(doc_snap);\n } catch (error) {\n console.error(\"Error from get_document_by_id\", error);\n return null;\n }\n};\nvar set_document = async (collection_path, doc_id, data) => {\n try {\n const doc_ref = doc(db, collection_path, doc_id);\n await setDoc(doc_ref, data, { merge: true });\n return true;\n } catch (error) {\n console.error(`Failed to create document by id: ${doc_id} in collection: ${collection_path}`, { error, data });\n return false;\n }\n};\nvar add_document = async (collection_path, data, include_id = false) => {\n try {\n const col_ref = collection(db, collection_path);\n const doc_ref = await addDoc(col_ref, data);\n if (include_id) {\n await setDoc(doc_ref, { ...data, id: doc_ref.id }, { merge: true });\n }\n return true;\n } catch (error) {\n console.error(`Failed to create document in collection: ${collection_path}`, error);\n return false;\n }\n};\nvar delete_document = async (collection_path, doc_id) => {\n try {\n const doc_ref = doc(db, collection_path, doc_id);\n await deleteDoc(doc_ref);\n return true;\n } catch (error) {\n console.error(`Failed to delete document with id ${doc_id} from collection ${collection_path}`, error);\n return false;\n }\n};\nvar query_document = async (collection_path, field_name, operator, value, ignore_log = false) => {\n try {\n const q = query(collection(db, collection_path), where(field_name, operator, value));\n const query_snapshot = await getDocs(q);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n if (documents.length < 1) {\n throw new Error(\n `No data to return from: \ncollection: ${collection_path}, \nfield_name: ${field_name}, \noperator: ${operator}, \nvalue: ${value}`\n );\n }\n return documents[0];\n } catch (error) {\n if (!ignore_log) {\n console.error(\"Error querying document:\", error);\n }\n return null;\n }\n};\nvar query_documents = async (collection_path, field_name, operator, value) => {\n try {\n const q = query(collection(db, collection_path), where(field_name, operator, value));\n const query_snapshot = await getDocs(q);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n return documents;\n } catch (error) {\n console.error(`Error querying documents: ${collection_path} - ${field_name} - ${operator} - ${value} `, error);\n return [];\n }\n};\nvar query_documents_by_conditions = async (collection_path, where_conditions) => {\n try {\n let db_query = collection(db, collection_path);\n where_conditions.forEach((condition) => {\n db_query = query(db_query, where(condition.field_name, condition.operator, condition.value));\n });\n const query_snapshot = await getDocs(db_query);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n return documents;\n } catch (error) {\n console.error(`Error querying documents: ${collection_path} - ${JSON.stringify(where_conditions)} `, error);\n return [];\n }\n};\nvar query_document_by_conditions = async (collection_path, where_conditions) => {\n try {\n let db_query = collection(db, collection_path);\n where_conditions.forEach((condition) => {\n db_query = query(db_query, where(condition.field_name, condition.operator, condition.value));\n });\n const query_snapshot = await getDocs(db_query);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n if (!documents[0]) {\n throw new Error(\"No data returned from DB\");\n }\n return documents[0];\n } catch (error) {\n console.error(`Error querying documents: ${collection_path} - ${JSON.stringify(where_conditions)} `, error);\n return null;\n }\n};\nvar snapshot = (config, snapshotsFirstTime) => {\n let resolvePromise;\n let isResolved = false;\n const promise = new Promise((resolve) => {\n console.log(`==> ${config.collectionName} subscribed.`);\n resolvePromise = () => {\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n });\n let collectionRef = collection(db, config.collectionName);\n if (config.conditions) {\n config.conditions.forEach((condition) => {\n collectionRef = query(collectionRef, where(condition.field_name, condition.operator, condition.value));\n });\n }\n if (config.orderBy) {\n config.orderBy.forEach((order) => {\n collectionRef = query(collectionRef, orderBy(order.fieldName, order.direction));\n });\n }\n const unsubscribe = onSnapshot(\n collectionRef,\n (snapshot2) => {\n if (!snapshotsFirstTime.includes(config.collectionName)) {\n snapshotsFirstTime.push(config.collectionName);\n const documents = snapshot2.docs.map((doc2) => simpleExtractData(doc2));\n config.onFirstTime?.(documents, config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onFirstTime?.(documents, config);\n });\n resolvePromise();\n } else {\n const addedDocs = [];\n const modifiedDocs = [];\n const removedDocs = [];\n snapshot2.docChanges().forEach((change) => {\n if (change.type === \"added\") {\n addedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"modified\") {\n modifiedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"removed\") {\n removedDocs.push(simpleExtractData(change.doc));\n }\n });\n addedDocs.length && config.onAdd?.(addedDocs, config);\n modifiedDocs.length && config.onModify?.(modifiedDocs, config);\n removedDocs.length && config.onRemove?.(removedDocs, config);\n config.extraParsers?.forEach((extraParser) => {\n addedDocs.length && extraParser.onAdd?.(addedDocs, config);\n modifiedDocs.length && extraParser.onModify?.(modifiedDocs, config);\n removedDocs.length && extraParser.onRemove?.(removedDocs, config);\n });\n }\n },\n (error) => {\n console.error(`Error listening to collection: ${config.collectionName}`, error);\n resolvePromise();\n }\n );\n return { promise, unsubscribe };\n};\nvar snapshotDocument = (config, snapshotsFirstTime) => {\n let resolvePromise;\n let isResolved = false;\n const promise = new Promise((resolve) => {\n console.log(`==> Document in ${config.collectionName} subscribed.`);\n resolvePromise = () => {\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n });\n const documentRef = doc(db, config.collectionName, config.documentId);\n const unsubscribe = onSnapshot(\n documentRef,\n (docSnapshot) => {\n if (!snapshotsFirstTime.includes(config.collectionName)) {\n snapshotsFirstTime.push(config.collectionName);\n if (docSnapshot.exists()) {\n const document2 = simpleExtractData(docSnapshot);\n if (checkConditions(document2, config.conditions)) {\n config.onFirstTime?.([document2], config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onFirstTime?.([document2], config);\n });\n } else {\n console.warn(`Document in ${config.collectionName} does not meet conditions.`);\n }\n } else {\n console.warn(`Document not found in ${config.collectionName}.`);\n }\n resolvePromise();\n } else {\n if (docSnapshot.exists()) {\n const document2 = simpleExtractData(docSnapshot);\n if (checkConditions(document2, config.conditions)) {\n config.onModify?.([document2], config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onModify?.([document2], config);\n });\n }\n } else {\n config.onRemove?.([], config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onRemove?.([], config);\n });\n }\n }\n },\n (error) => {\n console.error(`Error listening to document in ${config.collectionName}:`, error);\n resolvePromise();\n }\n );\n return { promise, unsubscribe };\n};\nvar checkConditions = (document2, conditions) => {\n if (!conditions || conditions.length === 0) return true;\n return conditions.every((condition) => {\n const fieldValue = document2[condition.field_name];\n switch (condition.operator) {\n case \"==\":\n return fieldValue === condition.value;\n case \"!=\":\n return fieldValue !== condition.value;\n case \"<\":\n return fieldValue < condition.value;\n case \"<=\":\n return fieldValue <= condition.value;\n case \">\":\n return fieldValue > condition.value;\n case \">=\":\n return fieldValue >= condition.value;\n case \"array-contains\":\n return Array.isArray(fieldValue) && fieldValue.includes(condition.value);\n default:\n return false;\n }\n });\n};\nvar cleanNxSites = async () => {\n const clients = (await get_all_documents(\"nx-clients\")).map((v) => v.id);\n const sites = await get_all_documents(\"nx-sites\");\n const allSitesToDelete = sites.filter((v) => !clients.includes(v.client));\n console.log(\"allSitesToDelete\", allSitesToDelete);\n allSitesToDelete.forEach(async (v) => {\n await delete_document(\"nx-sites\", v.id);\n console.log(`Site ${v.id} deleted.`);\n });\n};\n\n// src/helpers/global.ts\nimport { CountryOptions } from \"akeyless-types-commons\";\nimport axios from \"axios\";\n\n// src/helpers/phoneNumber.ts\nimport { parsePhoneNumberFromString } from \"libphonenumber-js\";\nvar isInternational = (phone_number) => {\n return phone_number.startsWith(\"+\");\n};\nvar isInternationalIsraelPhone = (phone_number) => {\n return phone_number.startsWith(\"+9725\");\n};\nvar local_israel_phone_format = (international_number) => {\n return international_number.replace(\"+972\", \"0\");\n};\nvar international_israel_phone_format = (phone) => {\n const validNumber = phone.slice(1, phone.length);\n return \"+972\".concat(validNumber);\n};\nvar displayFormatPhoneNumber = (phoneNumber) => {\n if (isInternational(phoneNumber)) {\n const phoneNumberObject = parsePhoneNumberFromString(phoneNumber);\n if (!phoneNumberObject) {\n return phoneNumber;\n }\n return phoneNumberObject.formatInternational().replace(/\\s/g, \"\");\n }\n return phoneNumber.replace(/(\\d{3})(\\d{3})(\\d{4})/, \"$1-$2-$3\");\n};\nvar is_iccid = (number) => {\n if (number.length < 19 || number.length > 22) return false;\n if (!/^\\d+$/.test(number)) return false;\n if (!number.startsWith(\"89\")) return false;\n return true;\n};\n\n// src/helpers/global.ts\nimport { isEqual } from \"lodash\";\nvar calculateBearing = (startLat, startLng, endLat, endLng) => {\n if (startLat === endLat || startLng === endLng) {\n return 0;\n }\n if (startLat === void 0 || startLng === void 0 || endLat === void 0 || endLng === void 0) {\n return 0;\n }\n const startLatRad = startLat * Math.PI / 180;\n const startLngRad = startLng * Math.PI / 180;\n const endLatRad = endLat * Math.PI / 180;\n const endLngRad = endLng * Math.PI / 180;\n const dLon = endLngRad - startLngRad;\n const y = Math.sin(dLon) * Math.cos(endLatRad);\n const x = Math.cos(startLatRad) * Math.sin(endLatRad) - Math.sin(startLatRad) * Math.cos(endLatRad) * Math.cos(dLon);\n const bearing = Math.atan2(y, x) * 180 / Math.PI;\n return (bearing + 360) % 360;\n};\nvar renderOnce = () => {\n return true;\n};\nvar propsAreEqual = (prevProps, nextProps) => {\n return isEqual(prevProps, nextProps);\n};\nvar getUserCountryByIp = async () => {\n try {\n const response = await axios.get(\"https://ipapi.co/json/\");\n return (response.data.country_code || CountryOptions.IL).toLowerCase();\n } catch (error) {\n console.error(\"Error fetching Country:\", error);\n return CountryOptions.IL;\n }\n};\nvar parsePermissions = (object) => {\n if (!object?.features) {\n return {};\n }\n const features = object.features;\n let result = {};\n features.forEach((feature) => {\n if (!feature.includes(\"__\")) {\n return;\n }\n const [featureType, featureName] = feature.split(\"__\");\n if (!featureType || !featureName) {\n return;\n }\n if (!result[featureType]) {\n result[featureType] = {};\n }\n result[featureType][featureName] = true;\n });\n return result;\n};\nvar initializeUserPermissions = async ({ phoneNumber, firstTimeArray, getUpdatePermissions }) => {\n let unsubscribe = null;\n let permissions = {};\n try {\n const { promise, unsubscribe: unsubscribeSnapshot } = snapshot(\n {\n collectionName: \"nx-users\",\n conditions: [{ field_name: \"phone_number\", operator: \"in\", value: [phoneNumber, local_israel_phone_format(phoneNumber)] }],\n onFirstTime: (docs) => {\n if (!docs.length) {\n throw new Error(\"User not found\");\n }\n permissions = parsePermissions(docs[0]);\n getUpdatePermissions(parsePermissions(docs[0]));\n },\n onModify: (docs) => {\n getUpdatePermissions(parsePermissions(docs[0]));\n }\n },\n firstTimeArray\n );\n unsubscribe = unsubscribeSnapshot;\n await promise;\n return { unsubscribe, permissions };\n } catch (error) {\n if (unsubscribe) {\n unsubscribe();\n }\n console.error(\"Error initializing user permissions:\", error.message);\n throw error;\n }\n};\nvar userNameFormat = (user) => {\n return `${user?.first_name || \"\"} ${user?.last_name || \"\"}`.trim();\n};\nvar multiStringFormat = (str1, str2, str3) => {\n return `${str1} ${str2 || \"\"} ${str3 || \"\"}`.trim();\n};\nvar getLocationUrl = (lang, lat) => {\n return `https://www.google.com/maps?q=${lang},${lat}`;\n};\nvar isNodeEnv = typeof process !== \"undefined\" && process.env;\nvar { mode, isLocal } = {\n mode: isNodeEnv ? process.env.NEXT_PUBLIC_MODE : import.meta.env.VITE_MODE,\n isLocal: (isNodeEnv ? process.env.NEXT_PUBLIC_IS_LOCAL : import.meta.env.VITE_is_local) === \"true\"\n};\n\n// src/helpers/forms.ts\nimport XRegExp from \"xregexp\";\nvar textRegex = XRegExp(\"[^\\\\p{L}\\\\s-]\", \"gu\");\nvar numbersRegex = XRegExp(\"[^0-9\\\\s-+]\", \"g\");\nvar numbersOnlyRegex = XRegExp(\"[^0-9]\", \"g\");\nvar priceRegex = XRegExp(\"[^0-9.]\", \"g\");\nvar emailRegex = XRegExp(\"[^\\\\p{L}0-9.@\\\\s-]\", \"gu\");\nvar colorRegex = XRegExp(\"[^#0-9A-Fa-f]\", \"g\");\nvar carsRegex = XRegExp(\"[^\\\\p{L}0-9,_]\", \"gu\");\nvar textNumbersRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s+\\\\-]\", \"gu\");\nvar addressRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,+-\\\\-]\", \"gu\");\nvar chartsRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,_@!+-\\\\-]\", \"gu\");\nvar handleChange = (e) => {\n e.target.setCustomValidity(\"\");\n const validation = e.target.getAttribute(\"data-validation\");\n if (validation === \"text\") {\n e.target.value = XRegExp.replace(e.target.value, textRegex, \"\");\n } else if (validation === \"numbers\") {\n e.target.value = XRegExp.replace(e.target.value, numbersRegex, \"\");\n } else if (validation === \"numbersOnly\") {\n e.target.value = XRegExp.replace(e.target.value, numbersOnlyRegex, \"\");\n } else if (validation === \"price\") {\n e.target.value = XRegExp.replace(e.target.value, priceRegex, \"\");\n } else if (validation === \"textNumbers\") {\n e.target.value = XRegExp.replace(e.target.value, textNumbersRegex, \"\");\n } else if (validation === \"email\") {\n e.target.value = XRegExp.replace(e.target.value, emailRegex, \"\");\n } else if (validation === \"color\") {\n e.target.value = XRegExp.replace(e.target.value, colorRegex, \"\");\n } else if (validation === \"address\") {\n e.target.value = XRegExp.replace(e.target.value, addressRegex, \"\");\n } else if (validation === \"cars\") {\n e.target.value = XRegExp.replace(e.target.value, carsRegex, \"\");\n } else if (validation === \"charts\") {\n e.target.value = XRegExp.replace(e.target.value, chartsRegex, \"\");\n }\n};\nvar handlePaste = (e) => {\n const validation = e.currentTarget.getAttribute(\"data-validation\");\n let pasteData = e.clipboardData.getData(\"text\");\n if (validation === \"text\") {\n pasteData = XRegExp.replace(pasteData, textRegex, \"\");\n } else if (validation === \"numbers\") {\n pasteData = XRegExp.replace(pasteData, numbersRegex, \"\");\n } else if (validation === \"numbersOnly\") {\n pasteData = XRegExp.replace(pasteData, numbersOnlyRegex, \"\");\n } else if (validation === \"price\") {\n pasteData = XRegExp.replace(pasteData, priceRegex, \"\");\n } else if (validation === \"textNumbers\") {\n pasteData = XRegExp.replace(pasteData, textNumbersRegex, \"\");\n } else if (validation === \"email\") {\n pasteData = XRegExp.replace(pasteData, emailRegex, \"\");\n } else if (validation === \"color\") {\n pasteData = XRegExp.replace(pasteData, colorRegex, \"\");\n } else if (validation === \"address\") {\n pasteData = XRegExp.replace(pasteData, addressRegex, \"\");\n } else if (validation === \"cars\") {\n pasteData = XRegExp.replace(pasteData, carsRegex, \"\");\n } else if (validation === \"charts\") {\n pasteData = XRegExp.replace(pasteData, chartsRegex, \"\");\n }\n e.preventDefault();\n document.execCommand(\"insertText\", false, pasteData);\n};\nvar handleInvalid = (e, requireError) => {\n e.target.setCustomValidity(requireError || \"This filed is required !\");\n};\nvar useValidation = (validationType, requireError) => {\n return {\n onChange: handleChange,\n onPaste: handlePaste,\n onInvalid: (e) => handleInvalid(e, requireError),\n \"data-validation\": validationType\n };\n};\nvar getFormElementValue = (form, name) => {\n return form.elements.namedItem(name)?.value || \"\";\n};\nvar parseMultiSelectInput = (input) => {\n const value = JSON.parse(input) || [];\n return value.map((v) => v.value);\n};\n\n// src/helpers/store.ts\nvar setState = (updater, set, stateName) => {\n return set((state) => ({\n [stateName]: typeof updater === \"function\" ? updater(state[stateName]) : updater\n }));\n};\nvar createSelectors = (store) => {\n let selectors = {};\n for (let k of Object.keys(store.getState())) {\n selectors[k] = () => store((s) => s[k]);\n }\n return selectors;\n};\nvar useStoreValues = (store, keys) => {\n const result = {};\n keys.forEach((key) => {\n result[key] = store.use[key]();\n });\n return result;\n};\n\n// src/lib/utils.ts\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nfunction cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n\n// src/helpers/time_helpers.ts\nimport { Timestamp as Timestamp2 } from \"firebase/firestore\";\nimport moment2 from \"moment-timezone\";\nfunction timestamp_to_string(firebaseTimestamp, options) {\n let date;\n if (firebaseTimestamp instanceof Timestamp2) {\n date = firebaseTimestamp.toDate();\n } else if (firebaseTimestamp instanceof Date) {\n date = firebaseTimestamp;\n } else if (typeof firebaseTimestamp === \"string\") {\n date = moment2.utc(firebaseTimestamp, options?.fromFormat || \"DD/MM/YYYY HH:mm:ss\").toDate();\n if (isNaN(date.getTime())) {\n throw new Error(\"Invalid date string format\");\n }\n } else {\n throw new Error(\"Invalid input: firebaseTimestamp must be a Timestamp, Date, or valid date string.\");\n }\n if (options?.tz) {\n const result = moment2(date).tz(options?.tz).format(options?.format || \"DD/MM/YYYY HH:mm:ss\");\n return result;\n }\n return moment2.utc(date).format(options?.format || \"DD/MM/YYYY HH:mm:ss\");\n}\nfunction timestamp_to_millis(firebaseTimestamp) {\n const timestamp = new Timestamp2(firebaseTimestamp?.seconds, firebaseTimestamp?.nanoseconds);\n return timestamp.toMillis();\n}\nfunction sort_by_timestamp(a, b, reverse = false) {\n return reverse ? timestamp_to_millis(b) - timestamp_to_millis(a) : timestamp_to_millis(a) - timestamp_to_millis(b);\n}\n\n// src/helpers/api.ts\nimport axios2 from \"axios\";\nvar baseDomain = mode === \"qa\" ? \"https://nx-api.xyz/api\" : \"https://nx-api.info/api\";\nvar devicesDomain = isLocal ? \"http://localhost:9001/api/devices\" : baseDomain + \"/devices\";\nvar biDomain = isLocal ? \"http://localhost:9002/api/bi\" : baseDomain + \"/bi\";\nvar callCenterDomain = isLocal ? \"http://localhost:9003/api/call-center\" : baseDomain + \"/call-center\";\nvar akeylessOnlineDomain = mode === \"qa\" ? \"https://akeyless-online.xyz\" : \"https://akeyless-online.info\";\nvar nx_api_call = async (serverName, method, url, data) => {\n try {\n let urlResult = `${devicesDomain}/${url}`;\n switch (serverName) {\n case \"bi\":\n urlResult = `${biDomain}/${url}`;\n break;\n case \"devices\":\n urlResult = `${devicesDomain}/${url}`;\n break;\n case \"call-center\":\n urlResult = `${callCenterDomain}/${url}`;\n break;\n default:\n break;\n }\n const headers = {\n authorization: \"bearer \" + await auth.currentUser.getIdToken()\n };\n const response = await axios2({\n method,\n url: urlResult,\n headers,\n data\n });\n return response.data || null;\n } catch (error) {\n console.error(`Error from nx_api_call: ${JSON.stringify({ serverName, method, url, data })}`, error?.response?.data || error);\n return null;\n }\n};\nexport {\n add_document,\n addressRegex,\n akeylessOnlineDomain,\n auth,\n baseDomain,\n biDomain,\n calculateBearing,\n callCenterDomain,\n carsRegex,\n chartsRegex,\n cleanNxSites,\n cn,\n collections,\n colorRegex,\n createSelectors,\n db,\n delete_document,\n devicesDomain,\n displayFormatPhoneNumber,\n emailRegex,\n extractAlertsData,\n extractBoardsData,\n extractCanbusData,\n extractCarsData,\n extractClientData,\n extractLocationData,\n extractSiteData,\n fire_base_TIME_TEMP,\n formatCarNumber,\n getFormElementValue,\n getLocationUrl,\n getUserCountryByIp,\n get_all_documents,\n get_document_by_id,\n handleChange,\n handleInvalid,\n handlePaste,\n initializeUserPermissions,\n international_israel_phone_format,\n isInternational,\n isInternationalIsraelPhone,\n isLocal,\n isNodeEnv,\n is_iccid,\n local_israel_phone_format,\n mode,\n multiStringFormat,\n numbersOnlyRegex,\n numbersRegex,\n nx_api_call,\n parseMultiSelectInput,\n parsePermissions,\n priceRegex,\n propsAreEqual,\n query_document,\n query_document_by_conditions,\n query_documents,\n query_documents_by_conditions,\n renderOnce,\n setState,\n set_document,\n simpleExtractData,\n snapshot,\n snapshotDocument,\n sort_by_timestamp,\n storage,\n textNumbersRegex,\n textRegex,\n timestamp_to_millis,\n timestamp_to_string,\n useStoreValues,\n useValidation,\n userNameFormat\n};\n"]}
1
+ {"version":3,"sources":["c:\\work\\akeyless\\commons\\client_commons\\dist\\helpers\\index.mjs"],"names":[],"mappings":"0BAA0B","sourcesContent":["// src/helpers/firebase.ts\nimport moment from \"moment\";\nimport { initializeApp } from \"firebase/app\";\nimport { getStorage } from \"firebase/storage\";\nimport { getAuth } from \"firebase/auth\";\nimport {\n addDoc,\n collection,\n deleteDoc,\n doc,\n getDoc,\n getDocs,\n query,\n setDoc,\n Timestamp,\n where,\n getFirestore,\n onSnapshot,\n orderBy\n} from \"firebase/firestore\";\n\n// src/helpers/cars.ts\nvar formatCarNumber = (car_number) => {\n var cn2 = car_number;\n if (cn2?.length == 8) return `${cn2[0]}${cn2[1]}${cn2[2]}-${cn2[3]}${cn2[4]}-${cn2[5]}${cn2[6]}${cn2[7]}`;\n if (cn2?.length == 7) return `${cn2[0]}${cn2[1]}-${cn2[2]}${cn2[3]}${cn2[4]}-${cn2[5]}${cn2[6]}`;\n if (cn2?.length == 6) return `${cn2[0]}${cn2[1]}-${cn2[2]}${cn2[3]}-${cn2[4]}${cn2[5]}`;\n if (cn2?.length == 5) return `${cn2[0]}-${cn2[1]}${cn2[2]}-${cn2[3]}${cn2[4]}`;\n return cn2;\n};\n\n// src/helpers/firebase.ts\nvar initApp = () => {\n const isNodeEnv2 = typeof process !== \"undefined\" && process.env;\n const firebaseConfig = {\n apiKey: isNodeEnv2 ? process.env.NEXT_PUBLIC_API_KEY : import.meta.env.VITE_API_KEY,\n authDomain: isNodeEnv2 ? process.env.NEXT_PUBLIC_AUTH_DOMAIN : import.meta.env.VITE_AUTH_DOMAIN,\n projectId: isNodeEnv2 ? process.env.NEXT_PUBLIC_PROJECT_ID : import.meta.env.VITE_PROJECT_ID,\n storageBucket: isNodeEnv2 ? process.env.NEXT_PUBLIC_STORAGE_BUCKET : import.meta.env.VITE_STORAGE_BUCKET,\n messagingSenderId: isNodeEnv2 ? process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID : import.meta.env.VITE_MESSAGING_SENDER_ID,\n appId: isNodeEnv2 ? process.env.NEXT_PUBLIC_APP_ID : import.meta.env.VITE_APP_ID\n };\n try {\n const app = initializeApp(firebaseConfig);\n const auth2 = getAuth(app);\n const db2 = getFirestore(app);\n const storage2 = getStorage(app);\n return { db: db2, auth: auth2, storage: storage2 };\n } catch (error) {\n console.error(\"Failed to initialize Firebase app:\", error);\n return {};\n }\n};\nvar { db, auth, storage } = initApp();\nvar collections = {\n clients: collection(db, \"nx-clients\"),\n sites: collection(db, \"nx-sites\"),\n cars: collection(db, \"units\"),\n users: collection(db, \"nx-users\"),\n lastLocations: collection(db, \"last_locations\"),\n ermEvents: collection(db, \"erm_events_general\"),\n erm2Events: collection(db, \"erm2_events_general\"),\n ruptelaEvents: collection(db, \"ruptela_events_general\"),\n polygons: collection(db, \"nx-polygons\"),\n polygonEvents: collection(db, \"polygon_events\"),\n polygonCars: collection(db, \"polygon_cars\"),\n canbus: collection(db, \"erm_canbus_parameters\"),\n states: collection(db, \"erm_states\"),\n app_pro_commands_queue: collection(db, \"app_pro_commands_queue\"),\n trips: collection(db, \"erm2_trip\"),\n tripsDetails: collection(db, \"erm2_trip_details\"),\n audit: collection(db, \"nx-audit\"),\n nx_settings: collection(db, \"nx-settings\"),\n settings: collection(db, \"settings\"),\n translations: collection(db, \"nx-translations\"),\n nx_cars: collection(db, \"nx-cars\"),\n boards: collection(db, \"boards\"),\n protection_types: collection(db, \"protectionTypes\"),\n board_types: collection(db, \"boardTypes\"),\n charge_capacities: collection(db, \"nx-charge-capacities\")\n};\nvar fire_base_TIME_TEMP = Timestamp.now;\nvar extractAlertsData = (doc2) => {\n const data = doc2.data();\n const { car_number, timestamp } = data;\n return {\n ...data,\n timestamp_seconds: timestamp.seconds,\n timestamp_ui: moment.unix(timestamp.seconds).format(\"DD/MM/YY HH:mm\"),\n car_number: formatCarNumber(car_number)\n };\n};\nvar simpleExtractData = (doc2) => {\n const docData = doc2.data();\n return {\n ...docData,\n id: doc2.id\n };\n};\nvar extractSiteData = (doc2) => {\n const data = doc2.data();\n const dateUpdated = new Date(data.updated?.seconds * 1e3 + data.updated.nanoseconds / 1e6);\n const dateCreated = new Date(data.created?.seconds * 1e3 + data.created.nanoseconds / 1e6);\n return {\n ...data,\n id: doc2.id,\n created: moment(dateCreated).format(\"DD.MM.YYYY - HH:mm\"),\n updated: moment(dateUpdated).format(\"DD.MM.YYYY - HH:mm\")\n };\n};\nvar extractClientData = (doc2) => {\n const data = doc2.data();\n const dateUpdated = new Date(data.updated?.seconds * 1e3 + data.updated.nanoseconds / 1e6);\n const dateCreated = new Date(data.created?.seconds * 1e3 + data.created.nanoseconds / 1e6);\n return {\n ...data,\n id: doc2.id,\n created: moment(dateCreated).format(\"HH:mm DD/MM/YY\"),\n updated: moment(dateUpdated).format(\"HH:mm DD/MM/YY\")\n };\n};\nvar extractBoardsData = (doc2) => {\n const data = doc2.data();\n const dateUploaded = typeof data.uploaded === \"string\" ? data.uploaded : moment.unix(data.uploaded?.seconds).format(\"DD/MM/YY HH:mm\");\n return {\n ...data,\n id: doc2.id,\n uploaded: dateUploaded\n };\n};\nvar extractCarsData = (doc2) => {\n const carData = doc2.data();\n let icon;\n const gov_info = carData.gov_info;\n if (gov_info) {\n if (carData.icon) {\n icon = carData.icon;\n } else if (gov_info.vehicle_type === \"atv\") {\n icon = \"truck\";\n } else if (gov_info.vehicle_type === \"motorcycle\") {\n icon = \"motorcycle\";\n } else {\n icon = \"car\";\n }\n } else {\n icon = \"car\";\n }\n return {\n ...carData,\n id: doc2.id,\n brand: carData.brand || carData.manufacturer,\n car_number: carData.carId,\n icon\n };\n};\nvar extractCanbusData = (doc2) => {\n const data = doc2.data();\n let newDate = null;\n if (data.timestamp && typeof data.timestamp.seconds === \"number\" && data.timestamp.seconds > 0) {\n newDate = new Date(data.timestamp.seconds * 1e3);\n }\n return {\n ...data,\n date_ui: newDate ? moment(newDate).format(\"DD/MM/YYYY - HH:mm\") : \"N/A\"\n };\n};\nvar extractLocationData = (doc2) => {\n const locationData = doc2.data();\n const { latitude, longitude, spd, timestamp, prev_latitude, prev_longitude } = locationData;\n return {\n ...locationData,\n id: doc2.id,\n lat: latitude,\n lng: longitude,\n prev_lat: prev_latitude,\n prev_lng: prev_longitude,\n timestamp: timestamp?.seconds,\n spd: Number(spd).toFixed(0)\n };\n};\nvar get_all_documents = async (collection_path) => {\n try {\n const snapshot2 = await getDocs(collection(db, collection_path));\n const documents = snapshot2.docs.map((doc2) => simpleExtractData(doc2));\n return documents;\n } catch (error) {\n return [];\n }\n};\nvar get_document_by_id = async (collection_path, doc_id) => {\n try {\n const doc_ref = doc(db, collection_path, doc_id);\n const doc_snap = await getDoc(doc_ref);\n if (!doc_snap.exists()) {\n throw new Error(\"Document not found, document id: \" + doc_id);\n }\n return simpleExtractData(doc_snap);\n } catch (error) {\n console.error(\"Error from get_document_by_id\", error);\n return null;\n }\n};\nvar set_document = async (collection_path, doc_id, data) => {\n try {\n const doc_ref = doc(db, collection_path, doc_id);\n await setDoc(doc_ref, data, { merge: true });\n return true;\n } catch (error) {\n console.error(`Failed to create document by id: ${doc_id} in collection: ${collection_path}`, { error, data });\n return false;\n }\n};\nvar add_document = async (collection_path, data, include_id = false) => {\n try {\n const col_ref = collection(db, collection_path);\n const doc_ref = await addDoc(col_ref, data);\n if (include_id) {\n await setDoc(doc_ref, { ...data, id: doc_ref.id }, { merge: true });\n }\n return true;\n } catch (error) {\n console.error(`Failed to create document in collection: ${collection_path}`, error);\n return false;\n }\n};\nvar delete_document = async (collection_path, doc_id) => {\n try {\n const doc_ref = doc(db, collection_path, doc_id);\n await deleteDoc(doc_ref);\n return true;\n } catch (error) {\n console.error(`Failed to delete document with id ${doc_id} from collection ${collection_path}`, error);\n return false;\n }\n};\nvar query_document = async (collection_path, field_name, operator, value, ignore_log = false) => {\n try {\n const q = query(collection(db, collection_path), where(field_name, operator, value));\n const query_snapshot = await getDocs(q);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n if (documents.length < 1) {\n throw new Error(\n `No data to return from: \ncollection: ${collection_path}, \nfield_name: ${field_name}, \noperator: ${operator}, \nvalue: ${value}`\n );\n }\n return documents[0];\n } catch (error) {\n if (!ignore_log) {\n console.error(\"Error querying document:\", error);\n }\n return null;\n }\n};\nvar query_documents = async (collection_path, field_name, operator, value) => {\n try {\n const q = query(collection(db, collection_path), where(field_name, operator, value));\n const query_snapshot = await getDocs(q);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n return documents;\n } catch (error) {\n console.error(`Error querying documents: ${collection_path} - ${field_name} - ${operator} - ${value} `, error);\n return [];\n }\n};\nvar query_documents_by_conditions = async (collection_path, where_conditions) => {\n try {\n let db_query = collection(db, collection_path);\n where_conditions.forEach((condition) => {\n db_query = query(db_query, where(condition.field_name, condition.operator, condition.value));\n });\n const query_snapshot = await getDocs(db_query);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n return documents;\n } catch (error) {\n console.error(`Error querying documents: ${collection_path} - ${JSON.stringify(where_conditions)} `, error);\n return [];\n }\n};\nvar query_document_by_conditions = async (collection_path, where_conditions) => {\n try {\n let db_query = collection(db, collection_path);\n where_conditions.forEach((condition) => {\n db_query = query(db_query, where(condition.field_name, condition.operator, condition.value));\n });\n const query_snapshot = await getDocs(db_query);\n const documents = query_snapshot.docs.map((doc2) => simpleExtractData(doc2));\n if (!documents[0]) {\n throw new Error(\"No data returned from DB\");\n }\n return documents[0];\n } catch (error) {\n console.error(`Error querying documents: ${collection_path} - ${JSON.stringify(where_conditions)} `, error);\n return null;\n }\n};\nvar snapshot = (config, snapshotsFirstTime) => {\n let resolvePromise;\n let isResolved = false;\n const promise = new Promise((resolve) => {\n console.log(`==> ${config.collectionName} subscribed.`);\n resolvePromise = () => {\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n });\n let collectionRef = collection(db, config.collectionName);\n if (config.conditions) {\n config.conditions.forEach((condition) => {\n collectionRef = query(collectionRef, where(condition.field_name, condition.operator, condition.value));\n });\n }\n if (config.orderBy) {\n config.orderBy.forEach((order) => {\n collectionRef = query(collectionRef, orderBy(order.fieldName, order.direction));\n });\n }\n const unsubscribe = onSnapshot(\n collectionRef,\n (snapshot2) => {\n if (!snapshotsFirstTime.includes(config.collectionName)) {\n snapshotsFirstTime.push(config.collectionName);\n const documents = snapshot2.docs.map((doc2) => simpleExtractData(doc2));\n config.onFirstTime?.(documents, config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onFirstTime?.(documents, config);\n });\n resolvePromise();\n } else {\n const addedDocs = [];\n const modifiedDocs = [];\n const removedDocs = [];\n snapshot2.docChanges().forEach((change) => {\n if (change.type === \"added\") {\n addedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"modified\") {\n modifiedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"removed\") {\n removedDocs.push(simpleExtractData(change.doc));\n }\n });\n addedDocs.length && config.onAdd?.(addedDocs, config);\n modifiedDocs.length && config.onModify?.(modifiedDocs, config);\n removedDocs.length && config.onRemove?.(removedDocs, config);\n config.extraParsers?.forEach((extraParser) => {\n addedDocs.length && extraParser.onAdd?.(addedDocs, config);\n modifiedDocs.length && extraParser.onModify?.(modifiedDocs, config);\n removedDocs.length && extraParser.onRemove?.(removedDocs, config);\n });\n }\n },\n (error) => {\n console.error(`Error listening to collection: ${config.collectionName}`, error);\n resolvePromise();\n }\n );\n return { promise, unsubscribe };\n};\nvar snapshotDocument = (config, snapshotsFirstTime) => {\n let resolvePromise;\n let isResolved = false;\n const promise = new Promise((resolve) => {\n console.log(`==> Document in ${config.collectionName} subscribed.`);\n resolvePromise = () => {\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n });\n const documentRef = doc(db, config.collectionName, config.documentId);\n const unsubscribe = onSnapshot(\n documentRef,\n (docSnapshot) => {\n if (!snapshotsFirstTime.includes(config.collectionName)) {\n snapshotsFirstTime.push(config.collectionName);\n if (docSnapshot.exists()) {\n const document2 = simpleExtractData(docSnapshot);\n if (checkConditions(document2, config.conditions)) {\n config.onFirstTime?.([document2], config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onFirstTime?.([document2], config);\n });\n } else {\n console.warn(`Document in ${config.collectionName} does not meet conditions.`);\n }\n } else {\n console.warn(`Document not found in ${config.collectionName}.`);\n }\n resolvePromise();\n } else {\n if (docSnapshot.exists()) {\n const document2 = simpleExtractData(docSnapshot);\n if (checkConditions(document2, config.conditions)) {\n config.onModify?.([document2], config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onModify?.([document2], config);\n });\n }\n } else {\n config.onRemove?.([], config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onRemove?.([], config);\n });\n }\n }\n },\n (error) => {\n console.error(`Error listening to document in ${config.collectionName}:`, error);\n resolvePromise();\n }\n );\n return { promise, unsubscribe };\n};\nvar checkConditions = (document2, conditions) => {\n if (!conditions || conditions.length === 0) return true;\n return conditions.every((condition) => {\n const fieldValue = document2[condition.field_name];\n switch (condition.operator) {\n case \"==\":\n return fieldValue === condition.value;\n case \"!=\":\n return fieldValue !== condition.value;\n case \"<\":\n return fieldValue < condition.value;\n case \"<=\":\n return fieldValue <= condition.value;\n case \">\":\n return fieldValue > condition.value;\n case \">=\":\n return fieldValue >= condition.value;\n case \"array-contains\":\n return Array.isArray(fieldValue) && fieldValue.includes(condition.value);\n default:\n return false;\n }\n });\n};\nvar cleanNxSites = async () => {\n const clients = (await get_all_documents(\"nx-clients\")).map((v) => v.id);\n const sites = await get_all_documents(\"nx-sites\");\n const allSitesToDelete = sites.filter((v) => !clients.includes(v.client));\n console.log(\"allSitesToDelete\", allSitesToDelete);\n allSitesToDelete.forEach(async (v) => {\n await delete_document(\"nx-sites\", v.id);\n console.log(`Site ${v.id} deleted.`);\n });\n};\n\n// src/helpers/global.ts\nimport { CountryOptions } from \"akeyless-types-commons\";\nimport axios from \"axios\";\n\n// src/helpers/phoneNumber.ts\nimport { parsePhoneNumberFromString } from \"libphonenumber-js\";\nvar isInternational = (phone_number) => {\n return phone_number.startsWith(\"+\");\n};\nvar isInternationalIsraelPhone = (phone_number) => {\n return phone_number.startsWith(\"+9725\");\n};\nvar local_israel_phone_format = (international_number) => {\n return international_number.replace(\"+972\", \"0\");\n};\nvar international_israel_phone_format = (phone) => {\n const validNumber = phone.slice(1, phone.length);\n return \"+972\".concat(validNumber);\n};\nvar displayFormatPhoneNumber = (phoneNumber) => {\n if (isInternational(phoneNumber)) {\n const phoneNumberObject = parsePhoneNumberFromString(phoneNumber);\n if (!phoneNumberObject) {\n return phoneNumber;\n }\n return phoneNumberObject.formatInternational().replace(/\\s/g, \"\");\n }\n return phoneNumber.replace(/(\\d{3})(\\d{3})(\\d{4})/, \"$1-$2-$3\");\n};\nvar is_iccid = (number) => {\n if (number.length < 19 || number.length > 22) return false;\n if (!/^\\d+$/.test(number)) return false;\n if (!number.startsWith(\"89\")) return false;\n return true;\n};\n\n// src/helpers/global.ts\nimport { isEqual } from \"lodash\";\nvar calculateBearing = (startLat, startLng, endLat, endLng) => {\n if (startLat === endLat || startLng === endLng) {\n return 0;\n }\n if (startLat === void 0 || startLng === void 0 || endLat === void 0 || endLng === void 0) {\n return 0;\n }\n const startLatRad = startLat * Math.PI / 180;\n const startLngRad = startLng * Math.PI / 180;\n const endLatRad = endLat * Math.PI / 180;\n const endLngRad = endLng * Math.PI / 180;\n const dLon = endLngRad - startLngRad;\n const y = Math.sin(dLon) * Math.cos(endLatRad);\n const x = Math.cos(startLatRad) * Math.sin(endLatRad) - Math.sin(startLatRad) * Math.cos(endLatRad) * Math.cos(dLon);\n const bearing = Math.atan2(y, x) * 180 / Math.PI;\n return (bearing + 360) % 360;\n};\nvar renderOnce = () => {\n return true;\n};\nvar propsAreEqual = (prevProps, nextProps) => {\n return isEqual(prevProps, nextProps);\n};\nvar getUserCountryByIp = async () => {\n try {\n const response = await axios.get(\"https://ipapi.co/json/\");\n return (response.data.country_code || CountryOptions.IL).toLowerCase();\n } catch (error) {\n console.error(\"Error fetching Country:\", error);\n return CountryOptions.IL;\n }\n};\nvar parsePermissions = (object) => {\n if (!object?.features) {\n return {};\n }\n const features = object.features;\n let result = {};\n features.forEach((feature) => {\n if (!feature.includes(\"__\")) {\n return;\n }\n const [featureType, featureName] = feature.split(\"__\");\n if (!featureType || !featureName) {\n return;\n }\n if (!result[featureType]) {\n result[featureType] = {};\n }\n result[featureType][featureName] = true;\n });\n return result;\n};\nvar initializeUserPermissions = async ({ phoneNumber, firstTimeArray, getUpdatePermissions }) => {\n let unsubscribe = null;\n let permissions = {};\n try {\n const { promise, unsubscribe: unsubscribeSnapshot } = snapshot(\n {\n collectionName: \"nx-users\",\n conditions: [{ field_name: \"phone_number\", operator: \"in\", value: [phoneNumber, local_israel_phone_format(phoneNumber)] }],\n onFirstTime: (docs) => {\n if (!docs.length) {\n throw new Error(\"User not found\");\n }\n permissions = parsePermissions(docs[0]);\n getUpdatePermissions(parsePermissions(docs[0]));\n },\n onModify: (docs) => {\n getUpdatePermissions(parsePermissions(docs[0]));\n }\n },\n firstTimeArray\n );\n unsubscribe = unsubscribeSnapshot;\n await promise;\n return { unsubscribe, permissions };\n } catch (error) {\n if (unsubscribe) {\n unsubscribe();\n }\n console.error(\"Error initializing user permissions:\", error.message);\n throw error;\n }\n};\nvar userNameFormat = (user) => {\n return `${user?.first_name || \"\"} ${user?.last_name || \"\"}`.trim();\n};\nvar multiStringFormat = (str1, str2, str3) => {\n return `${str1} ${str2 || \"\"} ${str3 || \"\"}`.trim();\n};\nvar getLocationUrl = (lang, lat) => {\n return `https://www.google.com/maps?q=${lang},${lat}`;\n};\nvar isNodeEnv = typeof process !== \"undefined\" && process.env;\nvar { mode, isLocal } = {\n mode: isNodeEnv ? process.env.NEXT_PUBLIC_MODE : import.meta.env.VITE_MODE,\n isLocal: (isNodeEnv ? process.env.NEXT_PUBLIC_IS_LOCAL : import.meta.env.VITE_is_local) === \"true\"\n};\n\n// src/helpers/forms.ts\nimport XRegExp from \"xregexp\";\nvar textRegex = XRegExp(\"[^\\\\p{L}\\\\s-]\", \"gu\");\nvar numbersRegex = XRegExp(\"[^0-9\\\\s-+]\", \"g\");\nvar numbersOnlyRegex = XRegExp(\"[^0-9]\", \"g\");\nvar priceRegex = XRegExp(\"[^0-9.]\", \"g\");\nvar emailRegex = XRegExp(\"[^\\\\p{L}0-9.@\\\\s-]\", \"gu\");\nvar colorRegex = XRegExp(\"[^#0-9A-Fa-f]\", \"g\");\nvar carsRegex = XRegExp(\"[^\\\\p{L}0-9,_]\", \"gu\");\nvar textNumbersRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s+\\\\-]\", \"gu\");\nvar addressRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,+-\\\\-]\", \"gu\");\nvar chartsRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,_@!+-\\\\-]\", \"gu\");\nvar handleChange = (e) => {\n e.target.setCustomValidity(\"\");\n const validation = e.target.getAttribute(\"data-validation\");\n if (validation === \"text\") {\n e.target.value = XRegExp.replace(e.target.value, textRegex, \"\");\n } else if (validation === \"numbers\") {\n e.target.value = XRegExp.replace(e.target.value, numbersRegex, \"\");\n } else if (validation === \"numbersOnly\") {\n e.target.value = XRegExp.replace(e.target.value, numbersOnlyRegex, \"\");\n } else if (validation === \"price\") {\n e.target.value = XRegExp.replace(e.target.value, priceRegex, \"\");\n } else if (validation === \"textNumbers\") {\n e.target.value = XRegExp.replace(e.target.value, textNumbersRegex, \"\");\n } else if (validation === \"email\") {\n e.target.value = XRegExp.replace(e.target.value, emailRegex, \"\");\n } else if (validation === \"color\") {\n e.target.value = XRegExp.replace(e.target.value, colorRegex, \"\");\n } else if (validation === \"address\") {\n e.target.value = XRegExp.replace(e.target.value, addressRegex, \"\");\n } else if (validation === \"cars\") {\n e.target.value = XRegExp.replace(e.target.value, carsRegex, \"\");\n } else if (validation === \"charts\") {\n e.target.value = XRegExp.replace(e.target.value, chartsRegex, \"\");\n }\n};\nvar handlePaste = (e) => {\n const validation = e.currentTarget.getAttribute(\"data-validation\");\n let pasteData = e.clipboardData.getData(\"text\");\n if (validation === \"text\") {\n pasteData = XRegExp.replace(pasteData, textRegex, \"\");\n } else if (validation === \"numbers\") {\n pasteData = XRegExp.replace(pasteData, numbersRegex, \"\");\n } else if (validation === \"numbersOnly\") {\n pasteData = XRegExp.replace(pasteData, numbersOnlyRegex, \"\");\n } else if (validation === \"price\") {\n pasteData = XRegExp.replace(pasteData, priceRegex, \"\");\n } else if (validation === \"textNumbers\") {\n pasteData = XRegExp.replace(pasteData, textNumbersRegex, \"\");\n } else if (validation === \"email\") {\n pasteData = XRegExp.replace(pasteData, emailRegex, \"\");\n } else if (validation === \"color\") {\n pasteData = XRegExp.replace(pasteData, colorRegex, \"\");\n } else if (validation === \"address\") {\n pasteData = XRegExp.replace(pasteData, addressRegex, \"\");\n } else if (validation === \"cars\") {\n pasteData = XRegExp.replace(pasteData, carsRegex, \"\");\n } else if (validation === \"charts\") {\n pasteData = XRegExp.replace(pasteData, chartsRegex, \"\");\n }\n e.preventDefault();\n document.execCommand(\"insertText\", false, pasteData);\n};\nvar handleInvalid = (e, requireError) => {\n e.target.setCustomValidity(requireError || \"This filed is required !\");\n};\nvar useValidation = (validationType, requireError) => {\n return {\n onChange: handleChange,\n onPaste: handlePaste,\n onInvalid: (e) => handleInvalid(e, requireError),\n \"data-validation\": validationType\n };\n};\nvar getFormElementValue = (form, name) => {\n return form.elements.namedItem(name)?.value || \"\";\n};\nvar parseMultiSelectInput = (input) => {\n const value = JSON.parse(input) || [];\n return value.map((v) => v.value);\n};\n\n// src/helpers/store.ts\nvar setState = (updater, set, stateName) => {\n return set((state) => ({\n [stateName]: typeof updater === \"function\" ? updater(state[stateName]) : updater\n }));\n};\nvar createSelectors = (store) => {\n let selectors = {};\n for (let k of Object.keys(store.getState())) {\n selectors[k] = () => store((s) => s[k]);\n }\n return selectors;\n};\nvar useStoreValues = (store, keys) => {\n const result = {};\n keys.forEach((key) => {\n result[key] = store.use[key]();\n });\n return result;\n};\n\n// src/lib/utils.ts\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nfunction cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n\n// src/helpers/time_helpers.ts\nimport { Timestamp as Timestamp2 } from \"firebase/firestore\";\nimport moment2 from \"moment-timezone\";\nfunction timestamp_to_string(firebaseTimestamp, options) {\n let date;\n if (firebaseTimestamp instanceof Timestamp2) {\n date = firebaseTimestamp.toDate();\n } else if (firebaseTimestamp instanceof Date) {\n date = firebaseTimestamp;\n } else if (typeof firebaseTimestamp === \"string\") {\n date = moment2.utc(firebaseTimestamp, options?.fromFormat || \"DD/MM/YYYY HH:mm:ss\").toDate();\n if (isNaN(date.getTime())) {\n throw new Error(\"Invalid date string format\");\n }\n } else {\n throw new Error(\"Invalid input: firebaseTimestamp must be a Timestamp, Date, or valid date string.\");\n }\n if (options?.tz) {\n const result = moment2(date).tz(options?.tz).format(options?.format || \"DD/MM/YYYY HH:mm:ss\");\n return result;\n }\n return moment2.utc(date).format(options?.format || \"DD/MM/YYYY HH:mm:ss\");\n}\nfunction timestamp_to_millis(firebaseTimestamp) {\n const timestamp = new Timestamp2(firebaseTimestamp?.seconds, firebaseTimestamp?.nanoseconds);\n return timestamp.toMillis();\n}\nfunction sort_by_timestamp(a, b, reverse = false) {\n return reverse ? timestamp_to_millis(b) - timestamp_to_millis(a) : timestamp_to_millis(a) - timestamp_to_millis(b);\n}\n\n// src/helpers/api.ts\nimport axios2 from \"axios\";\nvar baseDomain = mode === \"qa\" ? \"https://nx-api.xyz/api\" : \"https://nx-api.info/api\";\nvar devicesDomain = isLocal ? \"http://localhost:9001/api/devices\" : baseDomain + \"/devices\";\nvar biDomain = isLocal ? \"http://localhost:9002/api/bi\" : baseDomain + \"/bi\";\nvar callCenterDomain = isLocal ? \"http://localhost:9003/api/call-center\" : baseDomain + \"/call-center\";\nvar akeylessOnlineDomain = mode === \"qa\" ? \"https://akeyless-online.xyz\" : \"https://akeyless-online.info\";\nvar nx_api_call = async (serverName, method, url, data) => {\n try {\n let urlResult = `${devicesDomain}/${url}`;\n switch (serverName) {\n case \"bi\":\n urlResult = `${biDomain}/${url}`;\n break;\n case \"devices\":\n urlResult = `${devicesDomain}/${url}`;\n break;\n case \"call-center\":\n urlResult = `${callCenterDomain}/${url}`;\n break;\n default:\n break;\n }\n const headers = {\n authorization: \"bearer \" + await auth.currentUser.getIdToken()\n };\n const response = await axios2({\n method,\n url: urlResult,\n headers,\n data\n });\n return response.data || null;\n } catch (error) {\n console.error(`Error from nx_api_call: ${JSON.stringify({ serverName, method, url, data })}`, error?.response?.data || error);\n return null;\n }\n};\nexport {\n add_document,\n addressRegex,\n akeylessOnlineDomain,\n auth,\n baseDomain,\n biDomain,\n calculateBearing,\n callCenterDomain,\n carsRegex,\n chartsRegex,\n cleanNxSites,\n cn,\n collections,\n colorRegex,\n createSelectors,\n db,\n delete_document,\n devicesDomain,\n displayFormatPhoneNumber,\n emailRegex,\n extractAlertsData,\n extractBoardsData,\n extractCanbusData,\n extractCarsData,\n extractClientData,\n extractLocationData,\n extractSiteData,\n fire_base_TIME_TEMP,\n formatCarNumber,\n getFormElementValue,\n getLocationUrl,\n getUserCountryByIp,\n get_all_documents,\n get_document_by_id,\n handleChange,\n handleInvalid,\n handlePaste,\n initializeUserPermissions,\n international_israel_phone_format,\n isInternational,\n isInternationalIsraelPhone,\n isLocal,\n isNodeEnv,\n is_iccid,\n local_israel_phone_format,\n mode,\n multiStringFormat,\n numbersOnlyRegex,\n numbersRegex,\n nx_api_call,\n parseMultiSelectInput,\n parsePermissions,\n priceRegex,\n propsAreEqual,\n query_document,\n query_document_by_conditions,\n query_documents,\n query_documents_by_conditions,\n renderOnce,\n setState,\n set_document,\n simpleExtractData,\n snapshot,\n snapshotDocument,\n sort_by_timestamp,\n storage,\n textNumbersRegex,\n textRegex,\n timestamp_to_millis,\n timestamp_to_string,\n useStoreValues,\n useValidation,\n userNameFormat\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["c:\\work\\akeyless\\commons\\client_commons\\dist\\hooks\\index.mjs"],"names":[],"mappings":"AAAA,sBAAsB","sourcesContent":["// src/hooks/global.ts\nimport { CountryOptions as CountryOptions2 } from \"akeyless-types-commons\";\nimport { useEffect as useEffect2, useLayoutEffect, useRef as useRef2 } from \"react\";\n\n// src/helpers/firebase.ts\nimport moment from \"moment\";\nimport { initializeApp } from \"firebase/app\";\nimport { getStorage } from \"firebase/storage\";\nimport { getAuth } from \"firebase/auth\";\nimport {\n addDoc,\n collection,\n deleteDoc,\n doc,\n getDoc,\n getDocs,\n query,\n setDoc,\n Timestamp,\n where,\n getFirestore,\n onSnapshot,\n orderBy\n} from \"firebase/firestore\";\nvar initApp = () => {\n const isNodeEnv2 = typeof process !== \"undefined\" && process.env;\n const firebaseConfig = {\n apiKey: isNodeEnv2 ? process.env.NEXT_PUBLIC_API_KEY : import.meta.env.VITE_API_KEY,\n authDomain: isNodeEnv2 ? process.env.NEXT_PUBLIC_AUTH_DOMAIN : import.meta.env.VITE_AUTH_DOMAIN,\n projectId: isNodeEnv2 ? process.env.NEXT_PUBLIC_PROJECT_ID : import.meta.env.VITE_PROJECT_ID,\n storageBucket: isNodeEnv2 ? process.env.NEXT_PUBLIC_STORAGE_BUCKET : import.meta.env.VITE_STORAGE_BUCKET,\n messagingSenderId: isNodeEnv2 ? process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID : import.meta.env.VITE_MESSAGING_SENDER_ID,\n appId: isNodeEnv2 ? process.env.NEXT_PUBLIC_APP_ID : import.meta.env.VITE_APP_ID\n };\n try {\n const app = initializeApp(firebaseConfig);\n const auth2 = getAuth(app);\n const db2 = getFirestore(app);\n const storage2 = getStorage(app);\n return { db: db2, auth: auth2, storage: storage2 };\n } catch (error) {\n console.error(\"Failed to initialize Firebase app:\", error);\n return {};\n }\n};\nvar { db, auth, storage } = initApp();\nvar collections = {\n clients: collection(db, \"nx-clients\"),\n sites: collection(db, \"nx-sites\"),\n cars: collection(db, \"units\"),\n users: collection(db, \"nx-users\"),\n lastLocations: collection(db, \"last_locations\"),\n ermEvents: collection(db, \"erm_events_general\"),\n erm2Events: collection(db, \"erm2_events_general\"),\n ruptelaEvents: collection(db, \"ruptela_events_general\"),\n polygons: collection(db, \"nx-polygons\"),\n polygonEvents: collection(db, \"polygon_events\"),\n polygonCars: collection(db, \"polygon_cars\"),\n canbus: collection(db, \"erm_canbus_parameters\"),\n states: collection(db, \"erm_states\"),\n app_pro_commands_queue: collection(db, \"app_pro_commands_queue\"),\n trips: collection(db, \"erm2_trip\"),\n tripsDetails: collection(db, \"erm2_trip_details\"),\n audit: collection(db, \"nx-audit\"),\n nx_settings: collection(db, \"nx-settings\"),\n settings: collection(db, \"settings\"),\n translations: collection(db, \"nx-translations\"),\n nx_cars: collection(db, \"nx-cars\"),\n boards: collection(db, \"boards\"),\n protection_types: collection(db, \"protectionTypes\"),\n board_types: collection(db, \"boardTypes\"),\n charge_capacities: collection(db, \"nx-charge-capacities\")\n};\nvar fire_base_TIME_TEMP = Timestamp.now;\nvar simpleExtractData = (doc2) => {\n const docData = doc2.data();\n return {\n ...docData,\n id: doc2.id\n };\n};\nvar snapshot = (config, snapshotsFirstTime) => {\n let resolvePromise;\n let isResolved = false;\n const promise = new Promise((resolve) => {\n console.log(`==> ${config.collectionName} subscribed.`);\n resolvePromise = () => {\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n });\n let collectionRef = collection(db, config.collectionName);\n if (config.conditions) {\n config.conditions.forEach((condition) => {\n collectionRef = query(collectionRef, where(condition.field_name, condition.operator, condition.value));\n });\n }\n if (config.orderBy) {\n config.orderBy.forEach((order) => {\n collectionRef = query(collectionRef, orderBy(order.fieldName, order.direction));\n });\n }\n const unsubscribe = onSnapshot(\n collectionRef,\n (snapshot2) => {\n if (!snapshotsFirstTime.includes(config.collectionName)) {\n snapshotsFirstTime.push(config.collectionName);\n const documents = snapshot2.docs.map((doc2) => simpleExtractData(doc2));\n config.onFirstTime?.(documents, config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onFirstTime?.(documents, config);\n });\n resolvePromise();\n } else {\n const addedDocs = [];\n const modifiedDocs = [];\n const removedDocs = [];\n snapshot2.docChanges().forEach((change) => {\n if (change.type === \"added\") {\n addedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"modified\") {\n modifiedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"removed\") {\n removedDocs.push(simpleExtractData(change.doc));\n }\n });\n addedDocs.length && config.onAdd?.(addedDocs, config);\n modifiedDocs.length && config.onModify?.(modifiedDocs, config);\n removedDocs.length && config.onRemove?.(removedDocs, config);\n config.extraParsers?.forEach((extraParser) => {\n addedDocs.length && extraParser.onAdd?.(addedDocs, config);\n modifiedDocs.length && extraParser.onModify?.(modifiedDocs, config);\n removedDocs.length && extraParser.onRemove?.(removedDocs, config);\n });\n }\n },\n (error) => {\n console.error(`Error listening to collection: ${config.collectionName}`, error);\n resolvePromise();\n }\n );\n return { promise, unsubscribe };\n};\n\n// src/helpers/global.ts\nimport { CountryOptions } from \"akeyless-types-commons\";\nimport axios from \"axios\";\n\n// src/helpers/phoneNumber.ts\nimport { parsePhoneNumberFromString } from \"libphonenumber-js\";\n\n// src/helpers/global.ts\nimport { isEqual } from \"lodash\";\nvar getUserCountryByIp = async () => {\n try {\n const response = await axios.get(\"https://ipapi.co/json/\");\n return (response.data.country_code || CountryOptions.IL).toLowerCase();\n } catch (error) {\n console.error(\"Error fetching Country:\", error);\n return CountryOptions.IL;\n }\n};\nvar isNodeEnv = typeof process !== \"undefined\" && process.env;\nvar { mode, isLocal } = {\n mode: isNodeEnv ? process.env.NEXT_PUBLIC_MODE : import.meta.env.VITE_MODE,\n isLocal: (isNodeEnv ? process.env.NEXT_PUBLIC_IS_LOCAL : import.meta.env.VITE_is_local) === \"true\"\n};\n\n// src/helpers/forms.ts\nimport XRegExp from \"xregexp\";\nvar textRegex = XRegExp(\"[^\\\\p{L}\\\\s-]\", \"gu\");\nvar numbersRegex = XRegExp(\"[^0-9\\\\s-+]\", \"g\");\nvar numbersOnlyRegex = XRegExp(\"[^0-9]\", \"g\");\nvar priceRegex = XRegExp(\"[^0-9.]\", \"g\");\nvar emailRegex = XRegExp(\"[^\\\\p{L}0-9.@\\\\s-]\", \"gu\");\nvar colorRegex = XRegExp(\"[^#0-9A-Fa-f]\", \"g\");\nvar carsRegex = XRegExp(\"[^\\\\p{L}0-9,_]\", \"gu\");\nvar textNumbersRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s+\\\\-]\", \"gu\");\nvar addressRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,+-\\\\-]\", \"gu\");\nvar chartsRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,_@!+-\\\\-]\", \"gu\");\n\n// src/lib/utils.ts\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n// src/helpers/time_helpers.ts\nimport { Timestamp as Timestamp2 } from \"firebase/firestore\";\nimport moment2 from \"moment-timezone\";\n\n// src/helpers/api.ts\nimport axios2 from \"axios\";\nvar baseDomain = mode === \"qa\" ? \"https://nx-api.xyz/api\" : \"https://nx-api.info/api\";\nvar devicesDomain = isLocal ? \"http://localhost:9001/api/devices\" : baseDomain + \"/devices\";\nvar biDomain = isLocal ? \"http://localhost:9002/api/bi\" : baseDomain + \"/bi\";\nvar callCenterDomain = isLocal ? \"http://localhost:9003/api/call-center\" : baseDomain + \"/call-center\";\n\n// src/hooks/react.ts\nimport { isEqual as isEqual2 } from \"lodash\";\nimport { useEffect, useMemo, useRef } from \"react\";\nfunction useSafeEffect(callback, dependencies, error_message) {\n useEffect(() => {\n try {\n callback();\n } catch (error) {\n console.error(error_message || \"Error in useEffect:\", error);\n }\n }, dependencies);\n}\nvar useDeepCompareMemo = (factory, dependencies) => {\n const previousDepsRef = useRef([]);\n if (!isEqual2(dependencies, previousDepsRef.current)) {\n previousDepsRef.current = dependencies;\n }\n return useMemo(factory, previousDepsRef.current);\n};\nfunction useDeepCompareEffect(effect, dependencies) {\n const previousDepsRef = useRef();\n if (!isEqual2(previousDepsRef.current, dependencies)) {\n previousDepsRef.current = dependencies;\n }\n useEffect(effect, [previousDepsRef.current]);\n}\n\n// src/hooks/global.ts\nvar useDocumentTitle = (title) => {\n useEffect2(() => {\n document.title = title;\n }, [title]);\n return null;\n};\nvar useSnapshotBulk = (configs, label) => {\n const snapshotsFirstTime = useRef2([]);\n const unsubscribeFunctions = useRef2([]);\n useDeepCompareEffect(() => {\n const start = performance.now();\n console.log(`==> ${label || \"Custom snapshots\"} started... `);\n const snapshotResults = configs.map((config) => snapshot(config, snapshotsFirstTime.current));\n unsubscribeFunctions.current = snapshotResults.map((result) => result.unsubscribe);\n Promise.all(snapshotResults.map((result) => result.promise)).then(() => {\n console.log(`==> ${label || \"Custom snapshots\"} ended. It took ${(performance.now() - start).toFixed(2)} ms`);\n });\n }, [configs, label]);\n useEffect2(() => {\n return () => {\n unsubscribeFunctions.current.forEach((unsubscribe) => {\n if (unsubscribe) {\n unsubscribe();\n }\n });\n };\n }, []);\n};\nvar useSetUserCountry = (setUserCountry, changLang) => {\n useLayoutEffect(() => {\n const currentCountry = localStorage.getItem(\"userCountry\");\n if (!currentCountry) {\n const updateCountry = async () => {\n const country = await getUserCountryByIp();\n changLang(country === CountryOptions2.IL ? \"he\" : \"en\");\n setUserCountry(country);\n localStorage.setItem(\"userCountry\", country);\n };\n updateCountry();\n }\n }, []);\n return null;\n};\n\n// src/hooks/WebWorker.ts\nimport { useCallback, useEffect as useEffect3, useRef as useRef3 } from \"react\";\nexport {\n useDeepCompareEffect,\n useDeepCompareMemo,\n useDocumentTitle,\n useSafeEffect,\n useSetUserCountry,\n useSnapshotBulk\n};\n"]}
1
+ {"version":3,"sources":["c:\\work\\akeyless\\commons\\client_commons\\dist\\hooks\\index.mjs"],"names":[],"mappings":"sBAAsB","sourcesContent":["// src/hooks/global.ts\nimport { CountryOptions as CountryOptions2 } from \"akeyless-types-commons\";\nimport { useEffect as useEffect2, useLayoutEffect, useRef as useRef2 } from \"react\";\n\n// src/helpers/firebase.ts\nimport moment from \"moment\";\nimport { initializeApp } from \"firebase/app\";\nimport { getStorage } from \"firebase/storage\";\nimport { getAuth } from \"firebase/auth\";\nimport {\n addDoc,\n collection,\n deleteDoc,\n doc,\n getDoc,\n getDocs,\n query,\n setDoc,\n Timestamp,\n where,\n getFirestore,\n onSnapshot,\n orderBy\n} from \"firebase/firestore\";\nvar initApp = () => {\n const isNodeEnv2 = typeof process !== \"undefined\" && process.env;\n const firebaseConfig = {\n apiKey: isNodeEnv2 ? process.env.NEXT_PUBLIC_API_KEY : import.meta.env.VITE_API_KEY,\n authDomain: isNodeEnv2 ? process.env.NEXT_PUBLIC_AUTH_DOMAIN : import.meta.env.VITE_AUTH_DOMAIN,\n projectId: isNodeEnv2 ? process.env.NEXT_PUBLIC_PROJECT_ID : import.meta.env.VITE_PROJECT_ID,\n storageBucket: isNodeEnv2 ? process.env.NEXT_PUBLIC_STORAGE_BUCKET : import.meta.env.VITE_STORAGE_BUCKET,\n messagingSenderId: isNodeEnv2 ? process.env.NEXT_PUBLIC_MESSAGING_SENDER_ID : import.meta.env.VITE_MESSAGING_SENDER_ID,\n appId: isNodeEnv2 ? process.env.NEXT_PUBLIC_APP_ID : import.meta.env.VITE_APP_ID\n };\n try {\n const app = initializeApp(firebaseConfig);\n const auth2 = getAuth(app);\n const db2 = getFirestore(app);\n const storage2 = getStorage(app);\n return { db: db2, auth: auth2, storage: storage2 };\n } catch (error) {\n console.error(\"Failed to initialize Firebase app:\", error);\n return {};\n }\n};\nvar { db, auth, storage } = initApp();\nvar collections = {\n clients: collection(db, \"nx-clients\"),\n sites: collection(db, \"nx-sites\"),\n cars: collection(db, \"units\"),\n users: collection(db, \"nx-users\"),\n lastLocations: collection(db, \"last_locations\"),\n ermEvents: collection(db, \"erm_events_general\"),\n erm2Events: collection(db, \"erm2_events_general\"),\n ruptelaEvents: collection(db, \"ruptela_events_general\"),\n polygons: collection(db, \"nx-polygons\"),\n polygonEvents: collection(db, \"polygon_events\"),\n polygonCars: collection(db, \"polygon_cars\"),\n canbus: collection(db, \"erm_canbus_parameters\"),\n states: collection(db, \"erm_states\"),\n app_pro_commands_queue: collection(db, \"app_pro_commands_queue\"),\n trips: collection(db, \"erm2_trip\"),\n tripsDetails: collection(db, \"erm2_trip_details\"),\n audit: collection(db, \"nx-audit\"),\n nx_settings: collection(db, \"nx-settings\"),\n settings: collection(db, \"settings\"),\n translations: collection(db, \"nx-translations\"),\n nx_cars: collection(db, \"nx-cars\"),\n boards: collection(db, \"boards\"),\n protection_types: collection(db, \"protectionTypes\"),\n board_types: collection(db, \"boardTypes\"),\n charge_capacities: collection(db, \"nx-charge-capacities\")\n};\nvar fire_base_TIME_TEMP = Timestamp.now;\nvar simpleExtractData = (doc2) => {\n const docData = doc2.data();\n return {\n ...docData,\n id: doc2.id\n };\n};\nvar snapshot = (config, snapshotsFirstTime) => {\n let resolvePromise;\n let isResolved = false;\n const promise = new Promise((resolve) => {\n console.log(`==> ${config.collectionName} subscribed.`);\n resolvePromise = () => {\n if (!isResolved) {\n isResolved = true;\n resolve();\n }\n };\n });\n let collectionRef = collection(db, config.collectionName);\n if (config.conditions) {\n config.conditions.forEach((condition) => {\n collectionRef = query(collectionRef, where(condition.field_name, condition.operator, condition.value));\n });\n }\n if (config.orderBy) {\n config.orderBy.forEach((order) => {\n collectionRef = query(collectionRef, orderBy(order.fieldName, order.direction));\n });\n }\n const unsubscribe = onSnapshot(\n collectionRef,\n (snapshot2) => {\n if (!snapshotsFirstTime.includes(config.collectionName)) {\n snapshotsFirstTime.push(config.collectionName);\n const documents = snapshot2.docs.map((doc2) => simpleExtractData(doc2));\n config.onFirstTime?.(documents, config);\n config.extraParsers?.forEach((extraParser) => {\n extraParser.onFirstTime?.(documents, config);\n });\n resolvePromise();\n } else {\n const addedDocs = [];\n const modifiedDocs = [];\n const removedDocs = [];\n snapshot2.docChanges().forEach((change) => {\n if (change.type === \"added\") {\n addedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"modified\") {\n modifiedDocs.push(simpleExtractData(change.doc));\n } else if (change.type === \"removed\") {\n removedDocs.push(simpleExtractData(change.doc));\n }\n });\n addedDocs.length && config.onAdd?.(addedDocs, config);\n modifiedDocs.length && config.onModify?.(modifiedDocs, config);\n removedDocs.length && config.onRemove?.(removedDocs, config);\n config.extraParsers?.forEach((extraParser) => {\n addedDocs.length && extraParser.onAdd?.(addedDocs, config);\n modifiedDocs.length && extraParser.onModify?.(modifiedDocs, config);\n removedDocs.length && extraParser.onRemove?.(removedDocs, config);\n });\n }\n },\n (error) => {\n console.error(`Error listening to collection: ${config.collectionName}`, error);\n resolvePromise();\n }\n );\n return { promise, unsubscribe };\n};\n\n// src/helpers/global.ts\nimport { CountryOptions } from \"akeyless-types-commons\";\nimport axios from \"axios\";\n\n// src/helpers/phoneNumber.ts\nimport { parsePhoneNumberFromString } from \"libphonenumber-js\";\n\n// src/helpers/global.ts\nimport { isEqual } from \"lodash\";\nvar getUserCountryByIp = async () => {\n try {\n const response = await axios.get(\"https://ipapi.co/json/\");\n return (response.data.country_code || CountryOptions.IL).toLowerCase();\n } catch (error) {\n console.error(\"Error fetching Country:\", error);\n return CountryOptions.IL;\n }\n};\nvar isNodeEnv = typeof process !== \"undefined\" && process.env;\nvar { mode, isLocal } = {\n mode: isNodeEnv ? process.env.NEXT_PUBLIC_MODE : import.meta.env.VITE_MODE,\n isLocal: (isNodeEnv ? process.env.NEXT_PUBLIC_IS_LOCAL : import.meta.env.VITE_is_local) === \"true\"\n};\n\n// src/helpers/forms.ts\nimport XRegExp from \"xregexp\";\nvar textRegex = XRegExp(\"[^\\\\p{L}\\\\s-]\", \"gu\");\nvar numbersRegex = XRegExp(\"[^0-9\\\\s-+]\", \"g\");\nvar numbersOnlyRegex = XRegExp(\"[^0-9]\", \"g\");\nvar priceRegex = XRegExp(\"[^0-9.]\", \"g\");\nvar emailRegex = XRegExp(\"[^\\\\p{L}0-9.@\\\\s-]\", \"gu\");\nvar colorRegex = XRegExp(\"[^#0-9A-Fa-f]\", \"g\");\nvar carsRegex = XRegExp(\"[^\\\\p{L}0-9,_]\", \"gu\");\nvar textNumbersRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s+\\\\-]\", \"gu\");\nvar addressRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,+-\\\\-]\", \"gu\");\nvar chartsRegex = XRegExp(\"[^\\\\p{L}0-9\\\\s.,_@!+-\\\\-]\", \"gu\");\n\n// src/lib/utils.ts\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n// src/helpers/time_helpers.ts\nimport { Timestamp as Timestamp2 } from \"firebase/firestore\";\nimport moment2 from \"moment-timezone\";\n\n// src/helpers/api.ts\nimport axios2 from \"axios\";\nvar baseDomain = mode === \"qa\" ? \"https://nx-api.xyz/api\" : \"https://nx-api.info/api\";\nvar devicesDomain = isLocal ? \"http://localhost:9001/api/devices\" : baseDomain + \"/devices\";\nvar biDomain = isLocal ? \"http://localhost:9002/api/bi\" : baseDomain + \"/bi\";\nvar callCenterDomain = isLocal ? \"http://localhost:9003/api/call-center\" : baseDomain + \"/call-center\";\n\n// src/hooks/react.ts\nimport { isEqual as isEqual2 } from \"lodash\";\nimport { useEffect, useMemo, useRef } from \"react\";\nfunction useSafeEffect(callback, dependencies, error_message) {\n useEffect(() => {\n try {\n callback();\n } catch (error) {\n console.error(error_message || \"Error in useEffect:\", error);\n }\n }, dependencies);\n}\nvar useDeepCompareMemo = (factory, dependencies) => {\n const previousDepsRef = useRef([]);\n if (!isEqual2(dependencies, previousDepsRef.current)) {\n previousDepsRef.current = dependencies;\n }\n return useMemo(factory, previousDepsRef.current);\n};\nfunction useDeepCompareEffect(effect, dependencies) {\n const previousDepsRef = useRef();\n if (!isEqual2(previousDepsRef.current, dependencies)) {\n previousDepsRef.current = dependencies;\n }\n useEffect(effect, [previousDepsRef.current]);\n}\n\n// src/hooks/global.ts\nvar useDocumentTitle = (title) => {\n useEffect2(() => {\n document.title = title;\n }, [title]);\n return null;\n};\nvar useSnapshotBulk = (configs, label) => {\n const snapshotsFirstTime = useRef2([]);\n const unsubscribeFunctions = useRef2([]);\n useDeepCompareEffect(() => {\n const start = performance.now();\n console.log(`==> ${label || \"Custom snapshots\"} started... `);\n const snapshotResults = configs.map((config) => snapshot(config, snapshotsFirstTime.current));\n unsubscribeFunctions.current = snapshotResults.map((result) => result.unsubscribe);\n Promise.all(snapshotResults.map((result) => result.promise)).then(() => {\n console.log(`==> ${label || \"Custom snapshots\"} ended. It took ${(performance.now() - start).toFixed(2)} ms`);\n });\n }, [configs, label]);\n useEffect2(() => {\n return () => {\n unsubscribeFunctions.current.forEach((unsubscribe) => {\n if (unsubscribe) {\n unsubscribe();\n }\n });\n };\n }, []);\n};\nvar useSetUserCountry = (setUserCountry, changLang) => {\n useLayoutEffect(() => {\n const currentCountry = localStorage.getItem(\"userCountry\");\n if (!currentCountry) {\n const updateCountry = async () => {\n const country = await getUserCountryByIp();\n changLang(country === CountryOptions2.IL ? \"he\" : \"en\");\n setUserCountry(country);\n localStorage.setItem(\"userCountry\", country);\n };\n updateCountry();\n }\n }, []);\n return null;\n};\n\n// src/hooks/WebWorker.ts\nimport { useCallback, useEffect as useEffect3, useRef as useRef3 } from \"react\";\nexport {\n useDeepCompareEffect,\n useDeepCompareMemo,\n useDocumentTitle,\n useSafeEffect,\n useSetUserCountry,\n useSnapshotBulk\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "akeyless-client-commons",
3
- "version": "1.1.18",
3
+ "version": "1.1.19",
4
4
  "scripts": {
5
5
  "build": "tsup",
6
6
  "deploy": "npm run build && npm version patch --no-git-tag-version && npm publish",