JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 37
  • Score
    100M100P100Q55274F
  • License MIT

React hooks for Augur Analytics SDK - Easy integration with batching and device detection

Package Exports

  • @augur-ai/analytics-react

Readme

@augur/analytics-react

React hooks and components for the Augur Analytics SDK. Provides a seamless React integration for tracking user interactions and correlating frontend events with backend traces.

Installation

npm install @augur/analytics-react @augur/analytics-core

Quick Start

1. Setup Provider

Wrap your app with the AugurProvider:

import React from "react";
import { AugurProvider } from "@augur/analytics-react";

function App() {
  return (
    <AugurProvider
      config={{
        apiKey: "your-augur-api-key",
        endpoint: "https://augur.com",
        userId: "user123@example.com",
        debug: true,
      }}
    >
      <YourApp />
    </AugurProvider>
  );
}

2. Use Hooks

import React from "react";
import { useTrack, usePage, useIdentify } from "@augur/analytics-react";

function SummaryButton() {
  const track = useTrack();

  const handleClick = () => {
    track("summary_requested", {
      component: "summary_button",
      action: "click",
    });
  };

  return <button onClick={handleClick}>Get Summary</button>;
}

function UserProfile() {
  const identify = useIdentify();

  useEffect(() => {
    identify("user123@example.com", {
      name: "John Doe",
      plan: "premium",
    });
  }, [identify]);

  return <div>User Profile</div>;
}

Hooks Reference

Core Hooks

useAugur()

Get the analytics instance directly.

const analytics = useAugur();
await analytics.track("custom_event", { data: "value" });

useTrack()

Track custom events.

const track = useTrack();

// Track button clicks
const handleClick = () => {
  track("button_clicked", { button_id: "summary-btn" });
};

usePage()

Track page views.

const trackPage = usePage();

// Track page view
trackPage({ path: "/dashboard", title: "Dashboard" });

useIdentify()

Identify users.

const identify = useIdentify();

// Identify user
identify("user123@example.com", {
  name: "John Doe",
  plan: "premium",
});

Advanced Hooks

usePageTracking()

Automatically track page views on route changes.

function App() {
  usePageTracking(); // Automatically tracks page views
  return <Router>{/* Your routes */}</Router>;
}

useComponentTracking(componentName, properties?)

Track component mount/unmount events.

function SummaryWidget() {
  useComponentTracking("SummaryWidget", {
    widget_type: "ai_summary",
  });

  return <div>Summary Widget</div>;
}

useInteractionTracking(eventName, debounceMs?, properties?)

Track user interactions with debouncing.

function SearchInput() {
  const trackSearch = useInteractionTracking("search_typed", 500, {
    component: "search_input",
  });

  const handleChange = (e) => {
    trackSearch({ query: e.target.value });
  };

  return <input onChange={handleChange} />;
}

useFormTracking(formName)

Track form interactions.

function ContactForm() {
  const { trackFormStart, trackFormSubmit, trackFormError } =
    useFormTracking("contact_form");

  const handleSubmit = async (data) => {
    try {
      trackFormStart();
      await submitForm(data);
      trackFormSubmit();
    } catch (error) {
      trackFormError(error.message);
    }
  };

  return <form onSubmit={handleSubmit}>{/* form fields */}</form>;
}

Utility Hooks

useSessionId()

Get the current session ID.

function DebugInfo() {
  const sessionId = useSessionId();
  return <div>Session: {sessionId}</div>;
}

useTiming()

Track timing events.

const trackTiming = useTiming();

// Track API response time
const startTime = Date.now();
const response = await fetch("/api/data");
const duration = Date.now() - startTime;
trackTiming("api", "response_time", duration, "user_data");

useMetric()

Track custom metrics.

const trackMetric = useMetric();

// Track conversion rate
trackMetric("conversion_rate", 0.15, {
  campaign: "summer_sale",
});

Examples

Complete App Setup

import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import {
  AugurProvider,
  usePageTracking,
  useTrack,
  useIdentify,
} from "@augur/analytics-react";

function App() {
  return (
    <AugurProvider
      config={{
        apiKey: process.env.REACT_APP_AUGUR_API_KEY,
        endpoint: process.env.REACT_APP_AUGUR_ENDPOINT,
        userId: getCurrentUser()?.id,
        debug: process.env.NODE_ENV === "development",
      }}
    >
      <BrowserRouter>
        <Routes>
          <Route path="/" element={<HomePage />} />
          <Route path="/dashboard" element={<Dashboard />} />
        </Routes>
      </BrowserRouter>
    </AugurProvider>
  );
}

function HomePage() {
  usePageTracking(); // Auto-track page views
  const track = useTrack();

  return (
    <div>
      <h1>Home Page</h1>
      <button onClick={() => track("cta_clicked", { cta: "get_started" })}>
        Get Started
      </button>
    </div>
  );
}

function Dashboard() {
  const identify = useIdentify();
  const track = useTrack();

  useEffect(() => {
    // Identify user when they access dashboard
    identify(getCurrentUser().id, {
      plan: getCurrentUser().plan,
      last_login: new Date().toISOString(),
    });
  }, [identify]);

  return (
    <div>
      <h1>Dashboard</h1>
      <button
        onClick={() =>
          track("summary_requested", {
            component: "dashboard_summary_btn",
          })
        }
      >
        Generate Summary
      </button>
    </div>
  );
}

Error Tracking

import { useTrack } from "@augur/analytics-react";

function ErrorBoundary({ children }) {
  const track = useTrack();

  useEffect(() => {
    const handleError = (error) => {
      track("error_occurred", {
        error_type: "javascript_error",
        error_message: error.message,
        error_stack: error.stack,
        page: window.location.pathname,
      });
    };

    window.addEventListener("error", handleError);
    return () => window.removeEventListener("error", handleError);
  }, [track]);

  return children;
}

Performance Tracking

import { useTiming, useMetric } from "@augur/analytics-react";

function DataLoader() {
  const trackTiming = useTiming();
  const trackMetric = useMetric();
  const [data, setData] = useState(null);

  useEffect(() => {
    const loadData = async () => {
      const startTime = Date.now();

      try {
        const response = await fetch("/api/data");
        const result = await response.json();

        const duration = Date.now() - startTime;
        trackTiming("api", "data_load", duration, "user_data");
        trackMetric("data_load_success", 1);

        setData(result);
      } catch (error) {
        trackMetric("data_load_error", 1);
        throw error;
      }
    };

    loadData();
  }, [trackTiming, trackMetric]);

  return <div>{data ? "Data loaded" : "Loading..."}</div>;
}

TypeScript Support

Full TypeScript support with comprehensive type definitions:

import { AugurConfig, AugurEvent } from "@augur/analytics-react";

const config: AugurConfig = {
  apiKey: "your-key",
  endpoint: "https://augur.com",
  userId: "user123",
  debug: true,
};

Bundle Size

  • Core: ~3KB (zero dependencies)
  • React: ~2KB (depends on core)
  • Total: ~5KB

License

MIT