{"_id":"@anandvechalapu/eventtracker-sdk","name":"@anandvechalapu/eventtracker-sdk","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@anandvechalapu/eventtracker-sdk","version":"1.0.0","description":"JavaScript SDK for EventTracker - A plug-and-play event tracking system for CRM/CTI applications","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","dev":"tsc --watch","prepublishOnly":"echo \"Build files already included\"","publish:safe":"node scripts/publish.js","test":"echo \"No tests specified\" && exit 0"},"keywords":["event-tracking","analytics","crm","cti","javascript","sdk"],"author":{"name":"EventTracker"},"license":"MIT","devDependencies":{"typescript":"^5.0.0","@types/node":"^18.0.0"},"repository":{"type":"git","url":"git+https://github.com/eventtracker/sdk.git"},"bugs":{"url":"https://github.com/eventtracker/sdk/issues"},"homepage":"https://github.com/eventtracker/sdk#readme","publishConfig":{"access":"public"},"engines":{"node":">=14.0.0"},"_id":"@anandvechalapu/eventtracker-sdk@1.0.0","gitHead":"92522d514042178c984e4c6da3aa68eb6c7b5cea","_nodeVersion":"20.19.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-XM8IshuQ7Osng8IQQHkDiVxOpBbiwtVqo33x5CfUj4VS0y+BZTTu4t3Gu1dHz9VM+WRMk/dWIf+F9g+R0HZDew==","shasum":"aeaf107560e5be4cef03526fbb1a37471dfc37eb","tarball":"https://registry.npmjs.org/@anandvechalapu/eventtracker-sdk/-/eventtracker-sdk-1.0.0.tgz","fileCount":7,"unpackedSize":60222,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDhBwTyvktZJE2cv/BR4yUJnLL6l1n85LUpTUKffPahzgIhAMRj+/a42B/41q4B3IVCIEnfC6Nr9DVLneVSPFIebL2h"}]},"_npmUser":{"name":"anandvechalapu","email":"anand.vechalapu@gmail.com"},"directories":{},"maintainers":[{"name":"anandvechalapu","email":"anand.vechalapu@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/eventtracker-sdk_1.0.0_1752852116269_0.6532153662856874"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-18T15:21:56.212Z","1.0.0":"2025-07-18T15:21:56.450Z","modified":"2025-07-18T15:21:56.714Z"},"maintainers":[{"name":"anandvechalapu","email":"anand.vechalapu@gmail.com"}],"description":"JavaScript SDK for EventTracker - A plug-and-play event tracking system for CRM/CTI applications","homepage":"https://github.com/eventtracker/sdk#readme","keywords":["event-tracking","analytics","crm","cti","javascript","sdk"],"repository":{"type":"git","url":"git+https://github.com/eventtracker/sdk.git"},"author":{"name":"EventTracker"},"bugs":{"url":"https://github.com/eventtracker/sdk/issues"},"license":"MIT","readme":"# EventTracker SDK\n\nA lightweight, plug-and-play JavaScript SDK for tracking user events in CRM/CTI applications. Perfect for tracking user interactions during call sessions and customer interactions.\n\n## Installation\n\n```bash\nnpm install @anandvechalapu/eventtracker-sdk\n```\n\nOr include directly in your HTML:\n\n```html\n<script src=\"https://unpkg.com/@anandvechalapu/eventtracker-sdk@1.0.0/dist/browser.js\"></script>\n```\n\n## Quick Start\n\n### 1. Initialize the SDK\n\n```javascript\nimport EventTracker from '@anandvechalapu/eventtracker-sdk';\n\n// Initialize when a CRM screen is opened (e.g., during an incoming call)\nawait EventTracker.init({\n  apiKey: 'your-api-key',\n  tenantId: 'tenant_001',\n  agentId: 'agent_123',\n  sessionId: 'session_456',\n  autoTrack: true // Enable all auto-tracking (default)\n});\n```\n\n### 2. Log Events\n\n```javascript\n// Log custom events\nawait EventTracker.logEvent('appointmentBooked', {\n  patientId: 'p123',\n  appointmentDate: '2024-01-15',\n  doctorId: 'dr456'\n});\n\nawait EventTracker.logEvent('reportViewed', {\n  reportId: 'r789',\n  reportType: 'medical',\n  duration: 45\n});\n```\n\n### 3. Close Session\n\n```javascript\n// Close the ticket when the session ends\nawait EventTracker.closeTicket();\n```\n\n## React Integration\n\nFor React applications, use the provided hook for easy integration:\n\n```javascript\n// hooks/useEventTracker.js\nimport { useEffect, useState } from 'react';\nimport EventTracker from '@eventtracker/sdk';\n\nexport const useEventTracker = (config) => {\n  const [isInitialized, setIsInitialized] = useState(false);\n\n  useEffect(() => {\n    const initializeSDK = async () => {\n      try {\n        await EventTracker.init({\n          ...config,\n          autoTrack: true // Enable ALL auto-tracking\n        });\n        setIsInitialized(true);\n        console.log('Auto-tracking is now active!');\n      } catch (err) {\n        console.error('EventTracker failed:', err);\n      }\n    };\n\n    if (config?.apiKey) {\n      initializeSDK();\n    }\n\n    return () => {\n      if (isInitialized) {\n        EventTracker.closeTicket().catch(console.error);\n      }\n    };\n  }, [config?.apiKey]);\n\n  return { isInitialized };\n};\n```\n\nUse in your App component:\n\n```javascript\nimport React from 'react';\nimport { useEventTracker } from './hooks/useEventTracker';\n\nfunction App() {\n  const { isInitialized } = useEventTracker({\n    apiKey: 'your-api-key',\n    tenantId: 'your-tenant-id',\n    agentId: 'agent-123',\n    sessionId: 'session-456'\n  });\n\n  return (\n    <div className=\"App\">\n      <h1>My CRM Application</h1>\n      {isInitialized && <p>✓ Auto-tracking is active</p>}\n      \n      {/* All interactions below are tracked automatically */}\n      <button onClick={() => console.log('Clicked!')}>\n        Sample Button\n      </button>\n      \n      <form onSubmit={(e) => e.preventDefault()}>\n        <input type=\"text\" placeholder=\"Type something...\" />\n        <button type=\"submit\">Submit</button>\n      </form>\n    </div>\n  );\n}\n\nexport default App;\n```\n\nSee `examples/react-integration.md` for complete React setup guide.\n\n## Configuration Options\n\n### Auto-tracking Configuration\n\nYou can configure which events to track automatically:\n\n```javascript\nawait EventTracker.init({\n  apiKey: 'your-api-key',\n  tenantId: 'tenant_001',\n  agentId: 'agent_123',\n  sessionId: 'session_456',\n  autoTrack: {\n    pageVisits: true,     // Track page loads and navigation\n    clicks: true,         // Track button and link clicks\n    forms: true,          // Track form submissions\n    inputs: true,         // Track input changes and focus\n    scrolling: true,      // Track scroll events\n    performance: true,    // Track performance metrics\n    errors: true,         // Track JavaScript errors\n    visibility: true      // Track tab/window changes\n  }\n});\n```\n\n### Advanced Configuration\n\n```javascript\nawait EventTracker.init({\n  apiKey: 'your-api-key',\n  tenantId: 'tenant_001',\n  agentId: 'agent_123',\n  sessionId: 'session_456',\n  baseUrl: 'https://your-server.com',  // Custom server URL\n  autoTrack: false,                    // Disable auto-tracking\n  retryAttempts: 3,                    // Number of retry attempts\n  queueSize: 100,                      // Maximum events in queue\n  flushInterval: 5000                  // Flush interval in milliseconds\n});\n```\n\n## Features\n\n### ✅ Comprehensive Auto-tracking\n- **Page visits**: Navigation events, page loads, and user agent details\n- **Click tracking**: All interactive elements (buttons, links, clickable areas)\n- **Form interactions**: Submissions, field changes, and focus events\n- **Input monitoring**: Debounced input changes and field focus tracking\n- **Scroll tracking**: Throttled scroll events with position and percentage\n- **Performance metrics**: Load times, DOM ready events, and navigation timing\n- **Error tracking**: JavaScript errors and unhandled promise rejections\n- **Visibility events**: Tab switching, window focus, and resize events\n\n### ✅ Offline Support\n- **Event queuing**: Events are queued when offline and sent when connection is restored\n- **Retry logic**: Failed requests are automatically retried with exponential backoff\n- **Network detection**: Automatically detects online/offline status\n\n### ✅ Multi-tenant Support\n- **Tenant isolation**: Each API key is tied to a specific tenant\n- **Data separation**: All events are isolated per tenant for security\n\n### ✅ Error Handling\n- **Graceful degradation**: SDK continues to work even if some events fail\n- **Detailed logging**: Comprehensive error logging for debugging\n- **Retry mechanisms**: Automatic retry for failed requests\n\n## Configuration Options\n\n```javascript\nawait EventTracker.init({\n  apiKey: 'your-api-key',           // Required: Your API key\n  tenantId: 'tenant_001',           // Required: Tenant identifier\n  agentId: 'agent_123',             // Required: Agent identifier\n  sessionId: 'session_456',         // Required: Session identifier\n  baseUrl: 'https://your-api.com',  // Optional: Custom API endpoint\n  autoTrack: true,                  // Optional: Enable auto-tracking (default: true)\n  retryAttempts: 3,                 // Optional: Number of retry attempts (default: 3)\n  queueSize: 100,                   // Optional: Maximum queue size (default: 100)\n  flushInterval: 5000               // Optional: Flush interval in ms (default: 5000)\n});\n```\n\n## API Reference\n\n### `EventTracker.init(config)`\nInitializes the SDK and creates a new tracking ticket.\n\n**Parameters:**\n- `config`: Configuration object (see above)\n\n**Returns:** `Promise<void>`\n\n### `EventTracker.logEvent(eventType, eventData)`\nLogs a custom event.\n\n**Parameters:**\n- `eventType`: String identifying the event type\n- `eventData`: Optional object containing event data\n\n**Returns:** `Promise<void>`\n\n### `EventTracker.closeTicket()`\nCloses the current tracking ticket and flushes any pending events.\n\n**Returns:** `Promise<void>`\n\n### `EventTracker.flush()`\nImmediately sends all queued events to the server.\n\n**Returns:** `Promise<void>`\n\n### `EventTracker.isInitialized()`\nChecks if the SDK is initialized.\n\n**Returns:** `boolean`\n\n### `EventTracker.getTicketId()`\nGets the current ticket ID.\n\n**Returns:** `string | null`\n\n## Usage Examples\n\n### React Integration\n\n```javascript\nimport { useEffect } from 'react';\nimport EventTracker from '@eventtracker/sdk';\n\nfunction App() {\n  useEffect(() => {\n    // Initialize when component mounts\n    EventTracker.init({\n      apiKey: process.env.REACT_APP_EVENTTRACKER_API_KEY,\n      tenantId: 'tenant_001',\n      agentId: getCurrentAgentId(),\n      sessionId: getCurrentSessionId()\n    });\n\n    // Cleanup on unmount\n    return () => {\n      EventTracker.closeTicket();\n    };\n  }, []);\n\n  const handleAppointmentBook = async (appointmentData) => {\n    // Log the appointment booking event\n    await EventTracker.logEvent('appointmentBooked', appointmentData);\n    \n    // Continue with your booking logic\n    await bookAppointment(appointmentData);\n  };\n\n  return (\n    <div>\n      <button onClick={() => handleAppointmentBook({ patientId: 'p123' })}>\n        Book Appointment\n      </button>\n    </div>\n  );\n}\n```\n\n### Vanilla JavaScript\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n  <title>CRM Application</title>\n  <script src=\"https://unpkg.com/@eventtracker/sdk/dist/index.js\"></script>\n</head>\n<body>\n  <script>\n    // Initialize EventTracker when page loads\n    window.addEventListener('load', async () => {\n      await EventTracker.init({\n        apiKey: 'your-api-key',\n        tenantId: 'tenant_001',\n        agentId: 'agent_123',\n        sessionId: 'session_456'\n      });\n    });\n\n    // Log events on user actions\n    function onReportView(reportId) {\n      EventTracker.logEvent('reportViewed', {\n        reportId: reportId,\n        timestamp: new Date().toISOString()\n      });\n    }\n\n    // Close ticket when page unloads\n    window.addEventListener('beforeunload', () => {\n      EventTracker.closeTicket();\n    });\n  </script>\n</body>\n</html>\n```\n\n### Vue.js Integration\n\n```javascript\n// main.js\nimport { createApp } from 'vue';\nimport EventTracker from '@eventtracker/sdk';\nimport App from './App.vue';\n\nconst app = createApp(App);\n\n// Initialize EventTracker globally\napp.config.globalProperties.$eventTracker = EventTracker;\n\n// Initialize when app mounts\napp.mount('#app');\n\nEventTracker.init({\n  apiKey: process.env.VUE_APP_EVENTTRACKER_API_KEY,\n  tenantId: 'tenant_001',\n  agentId: 'agent_123',\n  sessionId: 'session_456'\n});\n```\n\n## Event Types\n\nThe SDK supports any custom event type, but here are some common examples:\n\n- `appointmentBooked` - When an appointment is scheduled\n- `reportViewed` - When a report is opened\n- `patientSearched` - When searching for patients\n- `callStarted` - When a call begins\n- `callEnded` - When a call ends\n- `noteAdded` - When a note is added\n- `documentUploaded` - When a document is uploaded\n- `reminderSet` - When a reminder is created\n\n## Error Handling\n\nThe SDK includes comprehensive error handling:\n\n```javascript\ntry {\n  await EventTracker.logEvent('customEvent', { data: 'value' });\n} catch (error) {\n  console.error('Failed to log event:', error);\n  // Event will be queued and retried automatically\n}\n```\n\n## Browser Support\n\n- Chrome 60+\n- Firefox 55+\n- Safari 11+\n- Edge 79+\n- Internet Explorer 11+ (with polyfills)\n\n## License\n\nMIT\n\n## Support\n\nFor support, please contact our development team or create an issue in the repository.","readmeFilename":"README.md","_rev":"1-1f1b129c5650c51189ddb416adb1dfa9"}