npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@seaverse/track-sdk

v0.1.13

Published

Unified analytics SDK for Firebase and Sensors Analytics

Downloads

1,363

Readme

@seaverse/track-sdk

Unified tracking SDK with token-based configuration. All platform configurations are built-in for simplicity.

Features

  • 🎯 Token-based Configuration: Just provide a token, no need for complex setup
  • 🔒 Code Obfuscation: Production builds automatically obfuscated to protect configuration
  • 🚀 Smart Collection: Automatic user behavior tracking plus manual event tracking
  • 🔌 Multi-platform Support: Simultaneously supports multiple analytics platforms
  • 📦 TypeScript Support: Complete type definitions
  • 🎨 Lazy Loading: Dynamic imports reduce initial load
  • 🐛 Error Monitoring: Optional Sentry integration for real-time error tracking and performance monitoring

Installation

npm install @seaverse/track-sdk

Required dependencies are automatically installed with the SDK.

Quick Start

Method 1: npm Package Import (Recommended)

import { TrackClient } from '@seaverse/track-sdk';

// Create client (using production token)
const trackClient = new TrackClient({
  token: 'prod_2f8a9c1b4e3d',
  platform: 'web', // h5
  version: '1.0.0',
  env: 'production', // local, develop, or production
  app_id: 'my-app-001', // Application ID (max 36 characters)
});

// Initialize (automatically injects GTM if GTM ID is configured)
await trackClient.initialize();

// Manual tracking
await trackClient.track('button_click', {
  button_name: 'Purchase Button',
  page: 'Product Details',
});

Method 2: Browser Script Tag

<!DOCTYPE html>
<html>
<head>
  <!-- Include SDK -->
  <script src="https://unpkg.com/@seaverse/track-sdk/dist/track-sdk.umd.js"></script>
</head>
<body>
  <div id="root"></div>

  <script>
    (function() {
      // Access SDK via global variable SeaVerseTrack
      var TrackClient = SeaVerseTrack.TrackClient;

      // Create client
      var trackClient = new TrackClient({
        token: 'prod_2f8a9c1b4e3d',
        platform: 'web',
        version: '1.0.0',
        env: 'production',
        app_id: 'my-app-001',
        debug: true
      });

      // Initialize
      trackClient.initialize().then(function() {
        console.log('Track SDK initialized');

        // Manual tracking
        trackClient.track('page_view', {
          page: 'home',
          title: 'Home'
        });
      });

      // Export to global for later use
      window.trackClient = trackClient;
    })();
  </script>
</body>
</html>

API Documentation

TrackClient

Constructor

new TrackClient(config: TrackConfig)

Parameters:

interface TrackConfig {
  token: string;                             // Application token (required)
  platform: string;                          // Platform type (required, e.g., web, h5, ios, android)
  version: string;                           // Application version (required)
  env: 'local' | 'develop' | 'production';   // Environment type (required)
  app_id: string;                            // Application ID (required, max 36 characters)
  debug?: boolean;                           // Enable debug mode, default false
  enableSentry?: boolean;                    // Enable Sentry error monitoring, default false
  sentryDsn?: string;                        // Sentry DSN (optional, override token config)
  sentryOptions?: {                          // Sentry custom options
    tracesSampleRate?: number;               // Performance tracing sample rate (0-1), default 1.0
    replaysSessionSampleRate?: number;       // Session replay sample rate, default 0.1
    replaysOnErrorSampleRate?: number;       // Error replay sample rate, default 1.0
    environment?: string;                    // Override environment (defaults to config.env)
  };
}

Methods

initialize(): Promise<void>

Initialize SDK. Must be called before use.

await trackClient.initialize();
track(eventName: string, properties?: EventProperties): Promise<void>

Track events.

await trackClient.track('purchase', {
  product_id: '12345',
  price: 99.99,
  currency: 'CNY',
});
setUserId(userId: string): Promise<void>

Set user ID (call on user login).

await trackClient.setUserId('user_123456');
setUserProperties(properties: UserProperties): Promise<void>

Set user properties.

await trackClient.setUserProperties({
  age: 25,
  gender: 'male',
  vip_level: 'gold',
});
clearUserId(): Promise<void>

Clear user ID (call on user logout).

await trackClient.clearUserId();
getInitializedProviders(): TrackProvider[]

Get list of initialized providers.

const providers = trackClient.getInitializedProviders();
console.log(providers); // List of initialized tracking platforms
trackGTMEvent(eventName: string, parameters?: Record<string, any>): void

Track GTM custom events (web platform only).

trackClient.trackGTMEvent('log_login_accounts', {
  loginType: 'seaart-auth',
});
captureException(error: Error): void

Manually capture exceptions to Sentry (requires Sentry enabled).

try {
  // some code
} catch (error) {
  trackClient.captureException(error);
}
captureMessage(message: string, level?: 'fatal' | 'error' | 'warning' | 'log' | 'info' | 'debug'): void

Manually capture messages to Sentry (requires Sentry enabled).

trackClient.captureMessage('User completed checkout', 'info');
getSentryAdapter(): SentryAdapter | undefined

Get Sentry adapter instance if initialized.

const sentryAdapter = trackClient.getSentryAdapter();
if (sentryAdapter) {
  // Use Sentry adapter directly
}

Usage Examples

React Application

import { useEffect } from 'react';
import { TrackClient } from '@seaverse/track-sdk';

// Create global instance
const trackClient = new TrackClient({
  token: process.env.REACT_APP_TRACK_TOKEN || 'dev_9a3b6c2d1e4f',
  platform: 'web',
  version: '1.0.0', // Recommended to read from package.json
  env: process.env.NODE_ENV === 'production' ? 'production' : 'develop',
  app_id: 'my-react-app',
  debug: process.env.NODE_ENV === 'development',
  enableSentry: true, // Enable Sentry error monitoring
  sentryOptions: {
    tracesSampleRate: 0.5, // 50% performance sampling
  },
});

function App() {
  useEffect(() => {
    // Initialize tracking
    trackClient.initialize().then(() => {
      console.log('Track SDK initialized');
    });
  }, []);

  const handleLogin = async (userId: string) => {
    await trackClient.setUserId(userId);
    await trackClient.track('user_login');
  };

  const handlePurchase = async (productId: string, price: number) => {
    try {
      await trackClient.track('purchase', {
        product_id: productId,
        price,
        currency: 'CNY',
      });
    } catch (error) {
      // Capture error to Sentry
      trackClient.captureException(error);
    }
  };

  const handleCustomGTMEvent = () => {
    // Track GTM custom event
    trackClient.trackGTMEvent('custom_button_click', {
      button_id: 'cta_button',
      page_name: 'home',
    });
  };

  return <div>Your App</div>;
}

export default App;

Vue Application

// plugins/track.ts
import { TrackClient } from '@seaverse/track-sdk';

export const trackClient = new TrackClient({
  token: import.meta.env.VITE_TRACK_TOKEN || 'dev_9a3b6c2d1e4f',
  platform: 'web',
  version: '1.0.0', // Recommended to read from package.json
  env: import.meta.env.PROD ? 'production' : 'develop',
  app_id: 'my-vue-app',
  debug: import.meta.env.DEV,
});

// main.ts
import { createApp } from 'vue';
import App from './App.vue';
import { trackClient } from './plugins/track';

const app = createApp(App);

trackClient.initialize();

app.config.globalProperties.$track = trackClient;

app.mount('#app');

Environment Variables Configuration

React (.env):

# Development environment
REACT_APP_TRACK_TOKEN=dev_9a3b6c2d1e4f

# Testing environment
REACT_APP_TRACK_TOKEN=test_5d7e2a4b8f1c

# Production environment
REACT_APP_TRACK_TOKEN=prod_2f8a9c1b4e3d

Vue (.env):

# Development environment
VITE_TRACK_TOKEN=dev_9a3b6c2d1e4f

# Production environment
VITE_TRACK_TOKEN=prod_2f8a9c1b4e3d

Best Practices

1. Environment Configuration

Use environment variables to manage tokens:

const trackClient = new TrackClient({
  token: process.env.REACT_APP_TRACK_TOKEN || 'dev_9a3b6c2d1e4f',
  platform: 'web',
  version: '1.0.0',
  env: process.env.NODE_ENV === 'production' ? 'production' : 'develop',
  app_id: 'my-app-001',
  debug: process.env.NODE_ENV !== 'production',
});

2. User Lifecycle

// Login
async function onLogin(userId: string) {
  await trackClient.setUserId(userId);
  await trackClient.setUserProperties({
    login_time: Date.now(),
  });
  await trackClient.track('user_login');
}

// Logout
async function onLogout() {
  await trackClient.track('user_logout');
  await trackClient.clearUserId();
}

3. Error Handling

try {
  await trackClient.initialize();
} catch (error) {
  console.error('Tracking initialization failed:', error);
  // Continue running, don't block main flow
}

4. Sentry Integration

Enable Sentry to automatically capture errors and monitor performance:

const trackClient = new TrackClient({
  token: 'your_token',
  platform: 'web',
  version: '1.0.0',
  env: 'production',
  app_id: 'my-app-001',
  enableSentry: true, // Enable Sentry
  sentryOptions: {
    tracesSampleRate: 1.0,        // 100% performance monitoring
    replaysSessionSampleRate: 0.1, // 10% session replay
    replaysOnErrorSampleRate: 1.0, // 100% error replay
  },
});

// Manually capture exceptions
try {
  someDangerousOperation();
} catch (error) {
  trackClient.captureException(error);
}

// Manually capture messages
trackClient.captureMessage('Important event occurred', 'warning');

FAQ

Q: How to apply for a new token?

Contact administrator to add new configuration to src/config.ts.

Q: How to verify tracking is working properly?

Enable debug mode:

const trackClient = new TrackClient({
  token: 'your_token',
  platform: 'web',
  version: '1.0.0',
  env: 'develop',
  app_id: 'my-app-001',
  debug: true,  // Will output logs to console
});

Q: Is Google Tag Manager automatically injected?

Yes, if the platform configuration includes gtmId, the SDK will automatically inject GTM code during Firebase initialization:

  • Automatically inserts GTM script in <head>
  • Automatically inserts noscript fallback at the beginning of <body>
  • Supports duplicate detection to avoid re-injection

GTM ID is set in platform configuration in src/config.ts, no need for users to pass it manually.

Q: How to track GTM custom events?

Use the trackGTMEvent method:

// Track login event
trackClient.trackGTMEvent('log_login_accounts', {
  loginType: 'seaart-auth',
});

// Track button click
trackClient.trackGTMEvent('custom_button_click', {
  button_id: 'purchase_btn',
  page: 'product_detail',
});

Note:

  • This method is only effective on web platform, will output log but not execute on non-web platforms
  • Events are pushed to GTM dataLayer, can configure triggers and tags in GTM dashboard
  • Event name must be a valid string

Q: How to enable Sentry error monitoring?

Set enableSentry: true in the configuration:

const trackClient = new TrackClient({
  token: 'your_token',
  platform: 'web',
  version: '1.0.0',
  env: 'production',
  app_id: 'my-app-001',
  enableSentry: true, // Enable Sentry
});

Sentry will automatically:

  • Capture unhandled errors and promise rejections
  • Monitor performance (page load, API calls, user interactions)
  • Record user actions as breadcrumbs
  • Sync user information (ID and properties)

You can also manually capture exceptions or messages:

trackClient.captureException(new Error('Something went wrong'));
trackClient.captureMessage('Custom log message', 'info');

Q: Can I use a custom Sentry DSN?

Yes, you can override the DSN from token configuration:

const trackClient = new TrackClient({
  token: 'your_token',
  platform: 'web',
  version: '1.0.0',
  env: 'production',
  app_id: 'my-app-001',
  enableSentry: true,
  sentryDsn: 'https://[email protected]/project-id',
});

License

MIT