266 lines
5.1 KiB
Markdown
266 lines
5.1 KiB
Markdown
# Client SDK Documentation
|
|
|
|
The `@analytics/client` package provides browser and server-side analytics tracking.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install @analytics/client
|
|
# or
|
|
yarn add @analytics/client
|
|
# or
|
|
bun add @analytics/client
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### Browser (Vanilla JavaScript)
|
|
|
|
```typescript
|
|
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)
|
|
|
|
```typescript
|
|
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
|
|
|
|
```typescript
|
|
{
|
|
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.
|
|
|
|
```typescript
|
|
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.
|
|
|
|
```typescript
|
|
analytics.identify(userId: string, traits?: object);
|
|
```
|
|
|
|
### setUserId() / clearUserId()
|
|
|
|
Manage user identity.
|
|
|
|
```typescript
|
|
analytics.setUserId('user-123');
|
|
analytics.clearUserId();
|
|
```
|
|
|
|
### flush()
|
|
|
|
Force send queued events immediately.
|
|
|
|
```typescript
|
|
await analytics.flush();
|
|
```
|
|
|
|
## Event Types
|
|
|
|
### Navigation Events
|
|
|
|
```typescript
|
|
// 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
|
|
|
|
```typescript
|
|
// 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
|
|
|
|
```typescript
|
|
// 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,
|
|
},
|
|
});
|
|
```
|
|
|
|
## Consent-Free Mode
|
|
|
|
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:
|
|
|
|
```typescript
|
|
// 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:
|
|
|
|
```typescript
|
|
import type {
|
|
AnalyticsConfig,
|
|
EngagementEvent,
|
|
DeviceInfo,
|
|
AttributionData,
|
|
} from '@analytics/client';
|
|
```
|