import mixpanel from "mixpanel-browser"; import * as pub from "$env/static/public"; import { getSession } from "@native"; type DefaultMixpanelProps = { device_id: string; uid: string; distinct_id: string; locale: string; gui_version: string; }; let mixpanelDefaultData: DefaultMixpanelProps; const getLocalSession = async (): Promise => { if (mixpanelDefaultData) return mixpanelDefaultData; const session = await getSession(); mixpanelDefaultData = { device_id: session?.device_id || "unregistered", uid: session?.user?.developer_id || "unauthenticated", distinct_id: session?.device_id || "unregistered", locale: session?.locale || "unknown", gui_version: pub.PUBLIC_VERSION }; return mixpanelDefaultData; }; mixpanel.init(pub.PUBLIC_MIXPANEL_TOKEN, { debug: true }); enum AnalyticsAction { install = "INSTALL_ACTION", install_failed = "INSTALL_ACTION_FAILED" } const trackAction = (action: AnalyticsAction, data?: { [key: string]: any }) => { getLocalSession() .then((props) => { mixpanel.track(action, { ...(data || {}), ...props }); }) .catch((error) => { // TODO: log remote error stream console.error(error); }); }; /** * save success installation event to mixpanel * @param packageFullname full installation name of the package * @returns void */ export const trackInstall = (packageFullname: string) => trackAction(AnalyticsAction.install, { pkg: packageFullname }); /** * save failed installation event to mixpanel * @param packageFullname full installation name of the package * @param error error message */ export const trackInstallFailed = (packageFullname: string, error: string) => { trackAction(AnalyticsAction.install_failed, { pkg: packageFullname, error }); };