index-ticketing
Version:
Automatic error tracking and ticketing system integration
238 lines (184 loc) • 5.96 kB
Markdown
# IndexTicketing 🎫
Automatic error tracking and ticketing system integration for JavaScript applications.
## Features
- 🚨 **Automatic Error Capture**: Catches JavaScript errors, unhandled promises, and React errors
- 🎯 **Smart Grouping**: Groups similar errors using fingerprinting
- 📊 **Rich Context**: Captures breadcrumbs, user info, and environment data
- 🔄 **Retry Logic**: Robust error reporting with automatic retries
- ⚛️ **React Integration**: Error boundaries and hooks for React applications
- 🛡️ **Privacy First**: Automatic filtering of sensitive data
- 📈 **Performance**: Minimal overhead with sampling and batching
## Installation
```bash
npm install index-ticketing
```
## Quick Start
### Basic Setup
```javascript
import { init } from 'index-ticketing';
init({
endpoint: 'https://your-ticketing-system.com',
apiKey: 'your-api-key',
projectId: 'your-project-id',
organizationId: 'your-org-id',
environment: 'production',
user: {
id: '123',
email: 'user@example.com',
name: 'John Doe'
}
});
```
### React Integration
```jsx
import React from 'react';
import { IndexTicketingErrorBoundary, useIndexTicketing } from 'index-ticketing';
import { getCurrentHub } from 'index-ticketing';
function App() {
const errorHandler = getCurrentHub()?.getErrorHandler();
return (
<IndexTicketingErrorBoundary
errorHandler={errorHandler}
fallback={<div>Something went wrong!</div>}
>
<MyComponent />
</IndexTicketingErrorBoundary>
);
}
function MyComponent() {
const { captureError, addBreadcrumb } = useIndexTicketing(
getCurrentHub()?.getErrorHandler()
);
const handleClick = () => {
addBreadcrumb('User clicked button', 'user', 'info');
try {
riskyOperation();
} catch (error) {
captureError(error, { context: 'button-click' });
}
};
return <button onClick={handleClick}>Click me</button>;
}
```
### Manual Error Capture
```javascript
import { captureError, captureMessage, addBreadcrumb } from 'index-ticketing';
// Capture an error
try {
somethingRisky();
} catch (error) {
captureError(error, { context: 'user-action' });
}
// Capture a message
captureMessage('User completed checkout', 'info', {
orderId: '12345',
amount: 99.99
});
// Add breadcrumb for context
addBreadcrumb('User navigated to checkout', 'navigation', 'info');
```
## Configuration
```javascript
import { init } from 'index-ticketing';
init({
// Required
endpoint: 'https://your-ticketing-system.com',
apiKey: 'your-api-key',
projectId: 'your-project-id',
organizationId: 'your-org-id',
// Optional
environment: 'production', // 'development', 'staging', 'production'
release: '1.0.0', // Your app version
sampleRate: 1.0, // 0.0 to 1.0 (percentage of errors to capture)
maxBreadcrumbs: 50, // Maximum number of breadcrumbs to keep
autoCapture: true, // Automatically install global handlers
// User context
user: {
id: 'user-id',
email: 'user@example.com',
name: 'User Name'
},
// Custom tags
tags: {
team: 'frontend',
feature: 'checkout'
},
// Filter sensitive data
beforeSend: (event) => {
// Remove sensitive information
if (event.extra?.creditCard) {
delete event.extra.creditCard;
}
return event;
}
});
```
## API Reference
### Core Methods
- `init(config)` - Initialize IndexTicketing
- `captureError(error, extra?)` - Manually capture an error
- `captureMessage(message, level?, extra?)` - Capture a message
- `addBreadcrumb(message, category?, level?, data?)` - Add a breadcrumb
- `setUser(user)` - Update user context
- `setTags(tags)` - Update tags
### React Components
- `<IndexTicketingErrorBoundary>` - Error boundary component
- `withIndexTicketingErrorBoundary(Component)` - HOC wrapper
- `useIndexTicketing(errorHandler)` - React hook
### Error Levels
- `error` - Error level (default for exceptions)
- `warning` - Warning level
- `info` - Info level
- `debug` - Debug level
## How It Works
1. **Error Capture**: Automatically captures JavaScript errors, unhandled promises, and React errors
2. **Context Collection**: Gathers breadcrumbs, user info, environment data, and stack traces
3. **Smart Grouping**: Uses fingerprinting to group similar errors together
4. **Ticket Creation**: Automatically creates tickets in your ticketing system with rich context
5. **Email Notifications**: Sends email notifications to relevant team members
## Integration with Your Ticketing System
The package integrates with your existing ticketing system API. When an error occurs:
1. Error is captured with full context
2. A ticket is automatically created via your API
3. Email notifications are sent to assigned developers
4. Similar errors are grouped together to avoid spam
## Examples
### Next.js Integration
```javascript
// pages/_app.js
import { init } from 'index-ticketing';
init({
endpoint: process.env.NEXT_PUBLIC_TICKETING_ENDPOINT,
apiKey: process.env.NEXT_PUBLIC_TICKETING_API_KEY,
projectId: process.env.NEXT_PUBLIC_PROJECT_ID,
organizationId: process.env.NEXT_PUBLIC_ORG_ID,
environment: process.env.NODE_ENV,
});
export default function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />;
}
```
### Express.js Integration
```javascript
const express = require('express');
const { init, captureError } = require('index-ticketing');
init({
endpoint: process.env.TICKETING_ENDPOINT,
apiKey: process.env.TICKETING_API_KEY,
projectId: process.env.PROJECT_ID,
organizationId: process.env.ORG_ID,
environment: process.env.NODE_ENV,
});
const app = express();
// Global error handler
app.use((error, req, res, next) => {
captureError(error, {
url: req.url,
method: req.method,
user: req.user?.id,
});
res.status(500).json({ error: 'Internal Server Error' });
});
```
## License
MIT License - see LICENSE file for details.