import { z } from "zod"; import { env } from "./env"; import type { AllowedPropertyValues, AnalyticsProviderClientStrategy, } from "@turbostarter/analytics"; declare global { interface Window { plausible?: ( event: string, options?: { props?: Record }, ) => void; } } const STORAGE_KEYS = { USER_ID: "plausible_user_id", USER_TRAITS: "plausible_user_traits", } as const; const ValueSchema = z.union([z.string(), z.number(), z.boolean()]); const TraitsSchema = z.record(z.string(), ValueSchema); const getStoredIdentity = () => { if (typeof window === "undefined") { return { userId: undefined, traits: undefined }; } try { const userId = localStorage.getItem(STORAGE_KEYS.USER_ID) ?? undefined; const traitsStr = localStorage.getItem(STORAGE_KEYS.USER_TRAITS); let traits: Record | undefined; if (traitsStr) { const parsed = TraitsSchema.safeParse(JSON.parse(traitsStr)); if (parsed.success) { traits = parsed.data; } } return { userId, traits }; } catch { return { userId: undefined, traits: undefined }; } }; export const { Provider, track, identify, reset } = { Provider: ({ children }) => { return ( <> {children}