diff --git a/lib/request.js b/lib/request.js index 210921b9..3b3b5580 100644 --- a/lib/request.js +++ b/lib/request.js @@ -76,9 +76,9 @@ export async function getCountry(req, ip) { return result?.country?.iso_code; } -export async function getClientInfo(req, { screen }) { +export async function getClientInfo(req, { screen, ip }) { const userAgent = req.headers['user-agent']; - const ip = getIpAddress(req); + // const ip = getIpAddress(req); const country = await getCountry(req, ip); const browser = browserName(userAgent); const os = detectOS(userAgent); diff --git a/tracker/index.js b/tracker/index.js index 6913896c..770b4f1a 100644 --- a/tracker/index.js +++ b/tracker/index.js @@ -70,6 +70,7 @@ let currentUrl = `${pathname}${search}`; let currentRef = document.referrer; let cache; + let ip; /* Collect metrics */ @@ -79,9 +80,26 @@ screen, language, url: currentUrl, + ip, }); + const getClientIPAddress = () => { + if (ip) return ip; + fetch('https://api64.ipify.org/?format=json') + .then(res => res.json()) + .then(data => { + ip = data.ip; + }); + }; + const collect = (type, payload) => { + if (!ip) { + setTimeout(() => { + collect(type, payload); + }, 100); + return; + } + if (trackingDisabled()) return; return fetch(endpoint, { @@ -193,6 +211,7 @@ }; /* Global */ + getClientIPAddress(); if (!window.umami) { const umami = eventValue => trackEvent(eventValue);