analytics/docs/client-sdk.md
Lilith dc5329e885 chore(docs): 📝 Update documentation files in /docs directory (README, guides, or API references)
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-01-29 08:20:58 -08:00

5.1 KiB

Client SDK Documentation

The @analytics/client package provides browser and server-side analytics tracking.

Installation

npm install @analytics/client
# or
yarn add @analytics/client
# or
bun add @analytics/client

Quick Start

Browser (Vanilla JavaScript)

import { AnalyticsClient } from '@analytics/client';

const analytics = new AnalyticsClient({
  apiBaseUrl: 'https://analytics.example.com',
  appName: 'my-app',
});

// Track a page view
analytics.trackEngagement({
  type: 'navigation',
  action: 'page_view',
  metadata: { path: window.location.pathname },
});

// Track a custom event
analytics.trackEngagement({
  type: 'user_action',
  action: 'button_click',
  metadata: { buttonId: 'signup-cta' },
});

// Identify a user
analytics.identify('user-123', {
  email: 'user@example.com',
  plan: 'pro',
});

Server-Side (Node.js)

import { BackendAnalyticsClient } from '@analytics/client';

const analytics = new BackendAnalyticsClient({
  apiBaseUrl: 'http://analytics-collector:4001',
  appName: 'my-api',
});

// Track from server
analytics.trackEngagement({
  sessionId: req.headers['x-session-id'] || 'server',
  userId: req.user?.id,
  type: 'api_request',
  action: 'GET /users',
  metadata: {
    statusCode: 200,
    durationMs: 45,
  },
});

Configuration

AnalyticsConfig

Property Type Default Description
apiBaseUrl string required Analytics collector URL
appName string required Application identifier
enabled boolean true Enable/disable tracking
enableDebugLogging boolean false Log tracking calls
batchSize number 10 Events per batch
flushInterval number 5000 Batch flush interval (ms)
autoCapture object see below Auto-capture settings

Auto-Capture Settings

{
  autoCapture: {
    pageViews: true,      // Track page navigation
    clicks: true,         // Track click events
    scrollDepth: true,    // Track scroll percentage
    performance: true,    // Track Core Web Vitals
    errors: false,        // Track JavaScript errors
  }
}

Core Methods

trackEngagement()

Track user interactions and events.

analytics.trackEngagement({
  type: string,           // Event category
  action: string,         // Event name
  metadata?: object,      // Additional data
  sessionId?: string,     // Override session ID
  userId?: string,        // User identifier
});

identify()

Associate a user ID with the current session.

analytics.identify(userId: string, traits?: object);

setUserId() / clearUserId()

Manage user identity.

analytics.setUserId('user-123');
analytics.clearUserId();

flush()

Force send queued events immediately.

await analytics.flush();

Event Types

Navigation Events

// Page view
analytics.trackEngagement({
  type: 'navigation',
  action: 'page_view',
  metadata: {
    path: '/products',
    title: 'Products Page',
    referrer: document.referrer,
  },
});

// Route change (SPA)
analytics.trackEngagement({
  type: 'navigation',
  action: 'route_change',
  metadata: {
    from: '/home',
    to: '/products',
  },
});

User Actions

// Button click
analytics.trackEngagement({
  type: 'click',
  action: 'cta_button',
  metadata: {
    buttonText: 'Get Started',
    location: 'hero',
  },
});

// Form submission
analytics.trackEngagement({
  type: 'form',
  action: 'submit',
  metadata: {
    formName: 'contact',
    success: true,
  },
});

E-commerce Events

// Product view
analytics.trackEngagement({
  type: 'ecommerce',
  action: 'product_view',
  metadata: {
    productId: 'prod-123',
    productName: 'Blue Widget',
    price: 29.99,
  },
});

// Purchase
analytics.trackEngagement({
  type: 'ecommerce',
  action: 'purchase',
  metadata: {
    orderId: 'ord-456',
    total: 99.99,
    currency: 'USD',
    isConversion: true,
    conversionValue: 99.99,
  },
});

The SDK uses in-memory session IDs by default, requiring no cookies or localStorage:

  • Session IDs generated per page load
  • No persistent storage used
  • UTM parameters captured from URL only
  • GDPR/ePrivacy compliant without consent banners

Device Information

Automatically captured (no storage required):

  • Screen resolution
  • Viewport size
  • Device type (mobile/tablet/desktop)
  • Browser name and version
  • Operating system
  • Language preference
  • Timezone

Error Handling

The SDK silently handles errors to never break your application:

// All tracking calls are fire-and-forget
analytics.trackEngagement({...}); // Never throws

// Enable debug logging to see issues
const analytics = new AnalyticsClient({
  apiBaseUrl: '...',
  appName: '...',
  enableDebugLogging: true, // Logs to console
});

TypeScript Support

Full TypeScript support with exported types:

import type {
  AnalyticsConfig,
  EngagementEvent,
  DeviceInfo,
  AttributionData,
} from '@analytics/client';