AnalyticsProvider

Wraps your app with analytics context. Supports multiple adapters — all adapters receive every event.

import { AnalyticsProvider } from "@allem-sdk/analytics";

AnalyticsAdapter interface

interface AnalyticsAdapter {
  track: (event: string, properties?: Record<string, unknown>) => void;
  page: (name?: string, properties?: Record<string, unknown>) => void;
  identify: (userId: string, traits?: Record<string, unknown>) => void;
}

Usage

const mixpanelAdapter = {
  track: (event, props) => mixpanel.track(event, props),
  page: (name, props) => mixpanel.track_pageview({ page: name, ...props }),
  identify: (userId) => mixpanel.identify(userId),
};

const posthogAdapter = {
  track: (event, props) => posthog.capture(event, props),
  page: (name, props) => posthog.capture("$pageview", { page: name, ...props }),
  identify: (userId, traits) => posthog.identify(userId, traits),
};

// Dev adapter for logging
const consoleAdapter = {
  track: (e, p) => console.log("[analytics] track", e, p),
  page: (n, p) => console.log("[analytics] page", n, p),
  identify: (id, t) => console.log("[analytics] identify", id, t),
};

<AnalyticsProvider adapters={[mixpanelAdapter, posthogAdapter]}>
  <App />
</AnalyticsProvider>