diff --git a/web/utils/umami.tsx b/web/utils/umami.tsx index ac9e70304..277ae1223 100644 --- a/web/utils/umami.tsx +++ b/web/utils/umami.tsx @@ -1,65 +1,31 @@ import { useEffect } from 'react' -import Script from 'next/script' - -// Define the type for the umami data object -interface UmamiData { - version: string -} - -declare global { - interface Window { - umami: - | { - track: (event: string, data?: UmamiData) => void - } - | undefined - } -} - const Umami = () => { - const appVersion = VERSION - const analyticsHost = ANALYTICS_HOST - const analyticsId = ANALYTICS_ID - useEffect(() => { - if (!appVersion || !analyticsHost || !analyticsId) return - const ping = () => { - // Check if umami is defined before ping - if (window.umami !== null && typeof window.umami !== 'undefined') { - window.umami.track(appVersion, { - version: appVersion, - }) - } - } + if (!VERSION || !ANALYTICS_HOST || !ANALYTICS_ID) return + fetch(ANALYTICS_HOST, { + method: 'POST', + // eslint-disable-next-line @typescript-eslint/naming-convention + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + payload: { + website: ANALYTICS_ID, + hostname: 'jan.ai', + screen: `${screen.width}x${screen.height}`, + language: navigator.language, + referrer: 'index.html', + data: { version: VERSION }, + type: 'event', + title: document.title, + url: 'index.html', + name: VERSION, + }, + type: 'event', + }), + }) + }, []) - // Wait for umami to be defined before ping - if (window.umami !== null && typeof window.umami !== 'undefined') { - ping() - } else { - // Listen for umami script load event - document.addEventListener('umami:loaded', ping) - } - - // Cleanup function to remove event listener if the component unmounts - return () => { - document.removeEventListener('umami:loaded', ping) - } - }, [appVersion, analyticsHost, analyticsId]) - - return ( - <> - {appVersion && analyticsHost && analyticsId && ( -