@mkgalaxy/utilitiesjs
Advanced tools
+15
-0
@@ -23,2 +23,3 @@ "use strict"; | ||
| __export(index_exports, { | ||
| calculateDistance: () => calculateDistance, | ||
| copyTextToClipboard: () => copyTextToClipboard, | ||
@@ -110,4 +111,18 @@ getIp: () => getIp, | ||
| }; | ||
| // src/utils.ts | ||
| var calculateDistance = (lat1, lng1, lat2, lng2, unit = "mi") => { | ||
| if (!lat1 || !lng1 || !lat2 || !lng2) { | ||
| return -1; | ||
| } | ||
| const R = unit === "mi" ? 3959 : 6371; | ||
| const dLat = (lat2 - lat1) * (Math.PI / 180); | ||
| const dLng = (lng2 - lng1) * (Math.PI / 180); | ||
| const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1 * (Math.PI / 180)) * Math.cos(lat2 * (Math.PI / 180)) * Math.sin(dLng / 2) * Math.sin(dLng / 2); | ||
| const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); | ||
| return R * c; | ||
| }; | ||
| // Annotate the CommonJS export names for ESM import in node: | ||
| 0 && (module.exports = { | ||
| calculateDistance, | ||
| copyTextToClipboard, | ||
@@ -114,0 +129,0 @@ getIp, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/index.ts","../src/geo/geobyip_funcs.ts","../src/copyToClipboard/utils.ts"],"sourcesContent":["export { getLocationBasedOnIp, getIp } from \"./geo/geobyip_funcs\";\r\nexport { copyTextToClipboard } from \"./copyToClipboard/utils\";\r\n","const baseURL = \"https://parseserver.us/api\";\r\n\r\nexport const getIp = async () => {\r\n const url = `${baseURL}/ip.php`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch IP\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\n// /locations/getUsersLocationByIp.php?latitude=-67.57&longitude=68.12\r\nexport const get_users_location_by_ip = async (ip: string) => {\r\n const url = `${baseURL}/locations/getUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const result = await response.json();\r\n if (result.lat) result.lat = Number.parseFloat(result.lat);\r\n if (result.lng) result.lng = Number.parseFloat(result.lng);\r\n result.cache = true;\r\n return result;\r\n};\r\n\r\n// /locations/putUsersLocation.php?latitude=-67.57&longitude=68.12\r\nexport const put_users_location_by_ip = async (ip: string, payload: any) => {\r\n const url = `/locations/putUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(payload),\r\n });\r\n if (!response.ok) {\r\n throw new Error(\"Failed to update user location\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\nexport const getLocationBasedOnIp = async (ip?: string) => {\r\n try {\r\n let newIp = ip;\r\n if (!newIp) {\r\n const ip = await getIp();\r\n newIp = ip?.ip;\r\n }\r\n if (!newIp) {\r\n return null;\r\n }\r\n let location = await get_users_location_by_ip(newIp);\r\n if (!location) {\r\n const url = `https://ipinfo.io/${newIp}/json?token=1e8db72d9a0924`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const responseData = await response.json();\r\n location = await put_users_location_by_ip(newIp, {\r\n ...responseData,\r\n cache: false,\r\n });\r\n }\r\n return { ip: newIp, location };\r\n } catch (err: unknown) {\r\n throw new Error(\r\n err instanceof Error ? err.message : \"Could not get location.\"\r\n );\r\n }\r\n};\r\n","export const copyTextToClipboard = async (text: string, showAlert: boolean) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n if (showAlert) {\r\n window.alert(\"Copied to clipboard\");\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to copy text: \", err);\r\n }\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAM,UAAU;AAET,IAAM,QAAQ,YAAY;AAC/B,QAAM,MAAM,GAAG,OAAO;AACtB,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACtC;AACA,QAAM,SAAS,MAAM,SAAS,KAAK;AACnC,SAAO;AACT;AAGO,IAAM,2BAA2B,OAAO,OAAe;AAC5D,QAAM,MAAM,GAAG,OAAO,0CAA0C,EAAE;AAClE,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,QAAM,SAAS,MAAM,SAAS,KAAK;AACnC,MAAI,OAAO,IAAK,QAAO,MAAM,OAAO,WAAW,OAAO,GAAG;AACzD,MAAI,OAAO,IAAK,QAAO,MAAM,OAAO,WAAW,OAAO,GAAG;AACzD,SAAO,QAAQ;AACf,SAAO;AACT;AAGO,IAAM,2BAA2B,OAAO,IAAY,YAAiB;AAC1E,QAAM,MAAM,0CAA0C,EAAE;AACxD,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,KAAK,UAAU,OAAO;AAAA,EAC9B,CAAC;AACD,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AACA,QAAM,SAAS,MAAM,SAAS,KAAK;AACnC,SAAO;AACT;AAEO,IAAM,uBAAuB,OAAO,OAAgB;AACzD,MAAI;AACF,QAAI,QAAQ;AACZ,QAAI,CAAC,OAAO;AACV,YAAMA,MAAK,MAAM,MAAM;AACvB,cAAQA,KAAI;AAAA,IACd;AACA,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AACA,QAAI,WAAW,MAAM,yBAAyB,KAAK;AACnD,QAAI,CAAC,UAAU;AACb,YAAM,MAAM,qBAAqB,KAAK;AACtC,YAAM,WAAW,MAAM,MAAM,GAAG;AAChC,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,+BAA+B;AAAA,MACjD;AACA,YAAM,eAAe,MAAM,SAAS,KAAK;AACzC,iBAAW,MAAM,yBAAyB,OAAO;AAAA,QAC/C,GAAG;AAAA,QACH,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,WAAO,EAAE,IAAI,OAAO,SAAS;AAAA,EAC/B,SAAS,KAAc;AACrB,UAAM,IAAI;AAAA,MACR,eAAe,QAAQ,IAAI,UAAU;AAAA,IACvC;AAAA,EACF;AACF;;;ACxEO,IAAM,sBAAsB,OAAO,MAAc,cAAuB;AAC7E,MAAI;AACF,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,QAAI,WAAW;AACb,aAAO,MAAM,qBAAqB;AAAA,IACpC;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,MAAM,yBAAyB,GAAG;AAAA,EAC5C;AACF;","names":["ip"]} | ||
| {"version":3,"sources":["../src/index.ts","../src/geo/geobyip_funcs.ts","../src/copyToClipboard/utils.ts","../src/utils.ts"],"sourcesContent":["export { getLocationBasedOnIp, getIp } from \"./geo/geobyip_funcs\";\r\nexport { copyTextToClipboard } from \"./copyToClipboard/utils\";\r\nexport { calculateDistance } from \"./utils\";\r\n","const baseURL = \"https://parseserver.us/api\";\r\n\r\nexport const getIp = async () => {\r\n const url = `${baseURL}/ip.php`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch IP\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\n// /locations/getUsersLocationByIp.php?latitude=-67.57&longitude=68.12\r\nexport const get_users_location_by_ip = async (ip: string) => {\r\n const url = `${baseURL}/locations/getUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const result = await response.json();\r\n if (result.lat) result.lat = Number.parseFloat(result.lat);\r\n if (result.lng) result.lng = Number.parseFloat(result.lng);\r\n result.cache = true;\r\n return result;\r\n};\r\n\r\n// /locations/putUsersLocation.php?latitude=-67.57&longitude=68.12\r\nexport const put_users_location_by_ip = async (ip: string, payload: any) => {\r\n const url = `/locations/putUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(payload),\r\n });\r\n if (!response.ok) {\r\n throw new Error(\"Failed to update user location\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\nexport const getLocationBasedOnIp = async (ip?: string) => {\r\n try {\r\n let newIp = ip;\r\n if (!newIp) {\r\n const ip = await getIp();\r\n newIp = ip?.ip;\r\n }\r\n if (!newIp) {\r\n return null;\r\n }\r\n let location = await get_users_location_by_ip(newIp);\r\n if (!location) {\r\n const url = `https://ipinfo.io/${newIp}/json?token=1e8db72d9a0924`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const responseData = await response.json();\r\n location = await put_users_location_by_ip(newIp, {\r\n ...responseData,\r\n cache: false,\r\n });\r\n }\r\n return { ip: newIp, location };\r\n } catch (err: unknown) {\r\n throw new Error(\r\n err instanceof Error ? err.message : \"Could not get location.\"\r\n );\r\n }\r\n};\r\n","export const copyTextToClipboard = async (text: string, showAlert: boolean) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n if (showAlert) {\r\n window.alert(\"Copied to clipboard\");\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to copy text: \", err);\r\n }\r\n};\r\n","/**\r\n * Calculate distance between two geographic points using Haversine formula\r\n * @param lat1 - Latitude of first point\r\n * @param lng1 - Longitude of first point\r\n * @param lat2 - Latitude of second point\r\n * @param lng2 - Longitude of second point\r\n * @param unit - Unit of measurement ('mi' for miles, 'km' for kilometers)\r\n * @returns Distance between the two points in the specified unit\r\n */\r\nexport const calculateDistance = (\r\n lat1?: number,\r\n lng1?: number,\r\n lat2?: number,\r\n lng2?: number,\r\n unit: \"mi\" | \"km\" = \"mi\"\r\n): number => {\r\n if (!lat1 || !lng1 || !lat2 || !lng2) {\r\n return -1;\r\n }\r\n const R = unit === \"mi\" ? 3959 : 6371; // Earth's radius in miles or kilometers\r\n const dLat = (lat2 - lat1) * (Math.PI / 180);\r\n const dLng = (lng2 - lng1) * (Math.PI / 180);\r\n const a =\r\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n Math.cos(lat1 * (Math.PI / 180)) *\r\n Math.cos(lat2 * (Math.PI / 180)) *\r\n Math.sin(dLng / 2) *\r\n Math.sin(dLng / 2);\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n return R * c;\r\n};\r\n"],"mappings":"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","names":["ip"]} |
+12
-1
@@ -9,2 +9,13 @@ declare const getIp: () => Promise<any>; | ||
| export { copyTextToClipboard, getIp, getLocationBasedOnIp }; | ||
| /** | ||
| * Calculate distance between two geographic points using Haversine formula | ||
| * @param lat1 - Latitude of first point | ||
| * @param lng1 - Longitude of first point | ||
| * @param lat2 - Latitude of second point | ||
| * @param lng2 - Longitude of second point | ||
| * @param unit - Unit of measurement ('mi' for miles, 'km' for kilometers) | ||
| * @returns Distance between the two points in the specified unit | ||
| */ | ||
| declare const calculateDistance: (lat1?: number, lng1?: number, lat2?: number, lng2?: number, unit?: "mi" | "km") => number; | ||
| export { calculateDistance, copyTextToClipboard, getIp, getLocationBasedOnIp }; |
+12
-1
@@ -9,2 +9,13 @@ declare const getIp: () => Promise<any>; | ||
| export { copyTextToClipboard, getIp, getLocationBasedOnIp }; | ||
| /** | ||
| * Calculate distance between two geographic points using Haversine formula | ||
| * @param lat1 - Latitude of first point | ||
| * @param lng1 - Longitude of first point | ||
| * @param lat2 - Latitude of second point | ||
| * @param lng2 - Longitude of second point | ||
| * @param unit - Unit of measurement ('mi' for miles, 'km' for kilometers) | ||
| * @returns Distance between the two points in the specified unit | ||
| */ | ||
| declare const calculateDistance: (lat1?: number, lng1?: number, lat2?: number, lng2?: number, unit?: "mi" | "km") => number; | ||
| export { calculateDistance, copyTextToClipboard, getIp, getLocationBasedOnIp }; |
+14
-0
@@ -81,3 +81,17 @@ // src/geo/geobyip_funcs.ts | ||
| }; | ||
| // src/utils.ts | ||
| var calculateDistance = (lat1, lng1, lat2, lng2, unit = "mi") => { | ||
| if (!lat1 || !lng1 || !lat2 || !lng2) { | ||
| return -1; | ||
| } | ||
| const R = unit === "mi" ? 3959 : 6371; | ||
| const dLat = (lat2 - lat1) * (Math.PI / 180); | ||
| const dLng = (lng2 - lng1) * (Math.PI / 180); | ||
| const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1 * (Math.PI / 180)) * Math.cos(lat2 * (Math.PI / 180)) * Math.sin(dLng / 2) * Math.sin(dLng / 2); | ||
| const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); | ||
| return R * c; | ||
| }; | ||
| export { | ||
| calculateDistance, | ||
| copyTextToClipboard, | ||
@@ -84,0 +98,0 @@ getIp, |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/geo/geobyip_funcs.ts","../src/copyToClipboard/utils.ts"],"sourcesContent":["const baseURL = \"https://parseserver.us/api\";\r\n\r\nexport const getIp = async () => {\r\n const url = `${baseURL}/ip.php`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch IP\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\n// /locations/getUsersLocationByIp.php?latitude=-67.57&longitude=68.12\r\nexport const get_users_location_by_ip = async (ip: string) => {\r\n const url = `${baseURL}/locations/getUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const result = await response.json();\r\n if (result.lat) result.lat = Number.parseFloat(result.lat);\r\n if (result.lng) result.lng = Number.parseFloat(result.lng);\r\n result.cache = true;\r\n return result;\r\n};\r\n\r\n// /locations/putUsersLocation.php?latitude=-67.57&longitude=68.12\r\nexport const put_users_location_by_ip = async (ip: string, payload: any) => {\r\n const url = `/locations/putUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(payload),\r\n });\r\n if (!response.ok) {\r\n throw new Error(\"Failed to update user location\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\nexport const getLocationBasedOnIp = async (ip?: string) => {\r\n try {\r\n let newIp = ip;\r\n if (!newIp) {\r\n const ip = await getIp();\r\n newIp = ip?.ip;\r\n }\r\n if (!newIp) {\r\n return null;\r\n }\r\n let location = await get_users_location_by_ip(newIp);\r\n if (!location) {\r\n const url = `https://ipinfo.io/${newIp}/json?token=1e8db72d9a0924`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const responseData = await response.json();\r\n location = await put_users_location_by_ip(newIp, {\r\n ...responseData,\r\n cache: false,\r\n });\r\n }\r\n return { ip: newIp, location };\r\n } catch (err: unknown) {\r\n throw new Error(\r\n err instanceof Error ? err.message : \"Could not get location.\"\r\n );\r\n }\r\n};\r\n","export const copyTextToClipboard = async (text: string, showAlert: boolean) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n if (showAlert) {\r\n window.alert(\"Copied to clipboard\");\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to copy text: \", err);\r\n }\r\n};\r\n"],"mappings":";AAAA,IAAM,UAAU;AAET,IAAM,QAAQ,YAAY;AAC/B,QAAM,MAAM,GAAG,OAAO;AACtB,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACtC;AACA,QAAM,SAAS,MAAM,SAAS,KAAK;AACnC,SAAO;AACT;AAGO,IAAM,2BAA2B,OAAO,OAAe;AAC5D,QAAM,MAAM,GAAG,OAAO,0CAA0C,EAAE;AAClE,QAAM,WAAW,MAAM,MAAM,GAAG;AAChC,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AACA,QAAM,SAAS,MAAM,SAAS,KAAK;AACnC,MAAI,OAAO,IAAK,QAAO,MAAM,OAAO,WAAW,OAAO,GAAG;AACzD,MAAI,OAAO,IAAK,QAAO,MAAM,OAAO,WAAW,OAAO,GAAG;AACzD,SAAO,QAAQ;AACf,SAAO;AACT;AAGO,IAAM,2BAA2B,OAAO,IAAY,YAAiB;AAC1E,QAAM,MAAM,0CAA0C,EAAE;AACxD,QAAM,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,KAAK,UAAU,OAAO;AAAA,EAC9B,CAAC;AACD,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,gCAAgC;AAAA,EAClD;AACA,QAAM,SAAS,MAAM,SAAS,KAAK;AACnC,SAAO;AACT;AAEO,IAAM,uBAAuB,OAAO,OAAgB;AACzD,MAAI;AACF,QAAI,QAAQ;AACZ,QAAI,CAAC,OAAO;AACV,YAAMA,MAAK,MAAM,MAAM;AACvB,cAAQA,KAAI;AAAA,IACd;AACA,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AACA,QAAI,WAAW,MAAM,yBAAyB,KAAK;AACnD,QAAI,CAAC,UAAU;AACb,YAAM,MAAM,qBAAqB,KAAK;AACtC,YAAM,WAAW,MAAM,MAAM,GAAG;AAChC,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,+BAA+B;AAAA,MACjD;AACA,YAAM,eAAe,MAAM,SAAS,KAAK;AACzC,iBAAW,MAAM,yBAAyB,OAAO;AAAA,QAC/C,GAAG;AAAA,QACH,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AACA,WAAO,EAAE,IAAI,OAAO,SAAS;AAAA,EAC/B,SAAS,KAAc;AACrB,UAAM,IAAI;AAAA,MACR,eAAe,QAAQ,IAAI,UAAU;AAAA,IACvC;AAAA,EACF;AACF;;;ACxEO,IAAM,sBAAsB,OAAO,MAAc,cAAuB;AAC7E,MAAI;AACF,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,QAAI,WAAW;AACb,aAAO,MAAM,qBAAqB;AAAA,IACpC;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,MAAM,yBAAyB,GAAG;AAAA,EAC5C;AACF;","names":["ip"]} | ||
| {"version":3,"sources":["../src/geo/geobyip_funcs.ts","../src/copyToClipboard/utils.ts","../src/utils.ts"],"sourcesContent":["const baseURL = \"https://parseserver.us/api\";\r\n\r\nexport const getIp = async () => {\r\n const url = `${baseURL}/ip.php`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch IP\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\n// /locations/getUsersLocationByIp.php?latitude=-67.57&longitude=68.12\r\nexport const get_users_location_by_ip = async (ip: string) => {\r\n const url = `${baseURL}/locations/getUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const result = await response.json();\r\n if (result.lat) result.lat = Number.parseFloat(result.lat);\r\n if (result.lng) result.lng = Number.parseFloat(result.lng);\r\n result.cache = true;\r\n return result;\r\n};\r\n\r\n// /locations/putUsersLocation.php?latitude=-67.57&longitude=68.12\r\nexport const put_users_location_by_ip = async (ip: string, payload: any) => {\r\n const url = `/locations/putUsersLocationByIp.php?ip=${ip}`;\r\n const response = await fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(payload),\r\n });\r\n if (!response.ok) {\r\n throw new Error(\"Failed to update user location\");\r\n }\r\n const result = await response.json();\r\n return result;\r\n};\r\n\r\nexport const getLocationBasedOnIp = async (ip?: string) => {\r\n try {\r\n let newIp = ip;\r\n if (!newIp) {\r\n const ip = await getIp();\r\n newIp = ip?.ip;\r\n }\r\n if (!newIp) {\r\n return null;\r\n }\r\n let location = await get_users_location_by_ip(newIp);\r\n if (!location) {\r\n const url = `https://ipinfo.io/${newIp}/json?token=1e8db72d9a0924`;\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\"Failed to fetch user location\");\r\n }\r\n const responseData = await response.json();\r\n location = await put_users_location_by_ip(newIp, {\r\n ...responseData,\r\n cache: false,\r\n });\r\n }\r\n return { ip: newIp, location };\r\n } catch (err: unknown) {\r\n throw new Error(\r\n err instanceof Error ? err.message : \"Could not get location.\"\r\n );\r\n }\r\n};\r\n","export const copyTextToClipboard = async (text: string, showAlert: boolean) => {\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n if (showAlert) {\r\n window.alert(\"Copied to clipboard\");\r\n }\r\n } catch (err) {\r\n console.error(\"Failed to copy text: \", err);\r\n }\r\n};\r\n","/**\r\n * Calculate distance between two geographic points using Haversine formula\r\n * @param lat1 - Latitude of first point\r\n * @param lng1 - Longitude of first point\r\n * @param lat2 - Latitude of second point\r\n * @param lng2 - Longitude of second point\r\n * @param unit - Unit of measurement ('mi' for miles, 'km' for kilometers)\r\n * @returns Distance between the two points in the specified unit\r\n */\r\nexport const calculateDistance = (\r\n lat1?: number,\r\n lng1?: number,\r\n lat2?: number,\r\n lng2?: number,\r\n unit: \"mi\" | \"km\" = \"mi\"\r\n): number => {\r\n if (!lat1 || !lng1 || !lat2 || !lng2) {\r\n return -1;\r\n }\r\n const R = unit === \"mi\" ? 3959 : 6371; // Earth's radius in miles or kilometers\r\n const dLat = (lat2 - lat1) * (Math.PI / 180);\r\n const dLng = (lng2 - lng1) * (Math.PI / 180);\r\n const a =\r\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\r\n Math.cos(lat1 * (Math.PI / 180)) *\r\n Math.cos(lat2 * (Math.PI / 180)) *\r\n Math.sin(dLng / 2) *\r\n Math.sin(dLng / 2);\r\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\r\n return R * c;\r\n};\r\n"],"mappings":"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","names":["ip"]} |
+1
-1
| { | ||
| "name": "@mkgalaxy/utilitiesjs", | ||
| "version": "1.0.4", | ||
| "version": "1.0.5", | ||
| "description": "Tiny TS lib", | ||
@@ -5,0 +5,0 @@ "type": "module", |
22156
34.08%239
18.32%