@get-tomo/tomo-client-telemetry-sdk
Version:
Drop-in SDK to initialize and instrument web applications. It collects network traces and sends them to the specified collector URL. It follows the OpenTelemetry specification.
168 lines (132 loc) • 4.45 kB
Markdown
# Tomo Client Telemetry SDK
Open Telemetry compatible SDK to ingest network telemetry data from web applications like Next.js, React, Vue, etc.
## Features
- **Automatic HTTP Request Tracing**: All `fetch` requests are automatically traced with request/response data
- **OpenTelemetry Compatible**: Follows OpenTelemetry specification for seamless integration
- **Zero Configuration**: Drop-in solution that works out of the box
- **Framework Agnostic**: Works with any JavaScript framework (React, Vue, Angular, etc.)
- **Multiple Build Formats**: Supports CommonJS, ESM, and UMD formats
## Installation
```bash
npm install @get-tomo/tomo-client-telemetry-sdk
```
## Quick Start
```javascript
import TomoClientTelemetry from '@get-tomo/tomo-client-telemetry-sdk';
// Initialize the SDK
const telemetry = new TomoClientTelemetry({
apiKey: 'your-api-key',
serviceName: 'my-web-app',
serviceVersion: '1.0.0',
collectorUrl: 'https://collector.tomo.ai',
debug: true // Optional: enables console logging
});
// That's it! The SDK automatically starts tracking:
// - HTTP requests via fetch
```
## Configuration
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `apiKey` | string | Yes | Your Tomo API key |
| `serviceName` | string | Yes | Name of your service |
| `serviceVersion` | string | Yes | Version of your service |
| `collectorUrl` | string | Yes | Tomo collector endpoint URL |
| `debug` | boolean | No | Enable debug logging (default: false) |
## Automatic Tracking
### HTTP Requests
All `fetch` requests are automatically traced with:
- Request method, URL, headers, and body
- Response status, headers, and body
- Request/response timing
- Error information
- Query parameters (for GET requests)
- Request body type detection (JSON, FormData, etc.)
## Manual Tracking
### Custom Network Events
```javascript
telemetry.trackNetworkEvent('custom_network_action', {
action: 'api_call',
endpoint: '/api/users',
user_id: '12345'
});
```
## Build and Development
### Building the SDK
```bash
npm run build
```
This creates three distribution formats:
- `dist/index.js` - CommonJS format
- `dist/index.esm.js` - ES Module format
- `dist/index.umd.js` - UMD format
### Development
```bash
npm run dev
```
Runs the build in watch mode for development.
## Usage Examples
### React Application
```javascript
import React, { useEffect } from 'react';
import TomoClientTelemetry from '@get-tomo/tomo-client-telemetry-sdk';
function App() {
useEffect(() => {
const telemetry = new TomoClientTelemetry({
apiKey: process.env.REACT_APP_TOMO_API_KEY,
serviceName: 'my-react-app',
serviceVersion: '1.0.0',
collectorUrl: 'https://collector.tomo.ai'
});
}, []);
return <div>My App</div>;
}
```
### Next.js Application
```javascript
// pages/_app.js
import TomoClientTelemetry from '@get-tomo/tomo-client-telemetry-sdk';
import { useEffect } from 'react';
function MyApp({ Component, pageProps }) {
useEffect(() => {
const telemetry = new TomoClientTelemetry({
apiKey: process.env.NEXT_PUBLIC_TOMO_API_KEY,
serviceName: 'my-nextjs-app',
serviceVersion: '1.0.0',
collectorUrl: 'https://collector.tomo.ai'
});
}, []);
return <Component {...pageProps} />;
}
```
### Vue.js Application
```javascript
// main.js
import { createApp } from 'vue';
import App from './App.vue';
import TomoClientTelemetry from '@get-tomo/tomo-client-telemetry-sdk';
const telemetry = new TomoClientTelemetry({
apiKey: import.meta.env.VITE_TOMO_API_KEY,
serviceName: 'my-vue-app',
serviceVersion: '1.0.0',
collectorUrl: 'https://collector.tomo.ai'
});
createApp(App).mount('#app');
```
## What Gets Tracked
### HTTP Request Details
- **Method**: GET, POST, PUT, DELETE, etc.
- **URL**: Full request URL
- **Host**: Request hostname
- **Path**: Request pathname
- **Query Parameters**: URL query string (for GET requests)
- **Request Body**: Request payload (truncated to 2048 characters)
- **Request Body Type**: JSON, FormData, URLSearchParams, etc.
- **Response Status**: HTTP status code
- **Response Body**: Response payload (truncated to 2048 characters)
- **Response Type**: JSON, text, etc.
- **Timing**: Request duration
- **Errors**: Network errors and exceptions
### Excluded Requests
The SDK automatically excludes tracing requests to the collector endpoint to prevent infinite loops.
## License
MIT