diff --git a/src/helper/handle-insights.ts b/src/helper/handle-insights.ts index 6dfe73a..6c5f85d 100644 --- a/src/helper/handle-insights.ts +++ b/src/helper/handle-insights.ts @@ -1,31 +1,22 @@ -const baseUri = 'https://insights.decla.red'; -const type = 'sdf-2d-demo'; +import { track } from '../analytics'; export const handleInsights = async (initialData: any): Promise<(data: any) => void> => { - try { - const sessionId = await createSession(initialData); - return (data) => createFrame(sessionId, data); - } catch { - return () => null; - } + track('Session Insights', { props: toStringProps(initialData) }); + + let performanceReported = false; + return (data) => { + if (performanceReported) { + return; + } + performanceReported = true; + track('Performance Insights', { props: toStringProps(data) }); + }; }; -const createSession = async (data: any): Promise => { - const response = await sendPostRequest(`${baseUri}/${type}/sessions/`, data); - const { sessionId } = await response.json(); - return sessionId; -}; - -const createFrame = (sessionId: string, data: any): Promise => - sendPostRequest(`${baseUri}/${type}/sessions/${sessionId}`, data).catch(); - -const sendPostRequest = async (uri: string, data: any): Promise => - await fetch(uri, { - method: 'POST', - mode: 'cors', - redirect: 'follow', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(data), - }); +const toStringProps = (data: Record): Record => + Object.entries(data).reduce>((props, [key, value]) => { + if (value !== undefined && value !== null) { + props[key] = String(value); + } + return props; + }, {});