{"_id":"@athena-tracker/react-hooks","_rev":"3-dcfb189c1710aef547a26e2b0ceb73eb","name":"@athena-tracker/react-hooks","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@athena-tracker/react-hooks","version":"1.0.0","keywords":["react","hooks","analytics","athena"],"author":{"name":"Pascal Analytics"},"license":"MIT","_id":"@athena-tracker/react-hooks@1.0.0","maintainers":[{"name":"athena-rubaiyat","email":"r+2@markopolo.ai"}],"dist":{"shasum":"c37dcc27366388d8e61e51d47efd9cdf5d358a42","tarball":"https://registry.npmjs.org/@athena-tracker/react-hooks/-/react-hooks-1.0.0.tgz","fileCount":36,"integrity":"sha512-OaU399hArmD6rSBlBDxIxbCKRYvG0LPwaOrkH8IFoLZASOfiNNNsRlWv3gY7gE9hJPhQZfs4jzLvK+J/fMmYCw==","signatures":[{"sig":"MEUCIE/PFhWWUrIJjkC6K3wmD63cwDKpz5yn8GhRdQVfBxrtAiEA10awdzTSa6CDFyqcshhzVEZSXhNhbJbfx5l9u8/ZZvA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":100714},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"9080f77e9bcc114f8fb1b927f7901610c201fa85","scripts":{"dev":"rollup -c -w","test":"jest","build":"rollup -c","prepublishOnly":"npm run build"},"_npmUser":{"name":"athena-rubaiyat","email":"r+2@markopolo.ai"},"_npmVersion":"10.9.2","description":"React hooks for ATHENA Analytics API","directories":{},"_nodeVersion":"22.14.0","dependencies":{"swr":"^2.2.4"},"_hasShrinkwrap":false,"devDependencies":{"tslib":"^2.6.2","rollup":"^4.9.6","typescript":"^5.3.3","@types/react":"^18.2.48","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.2.3"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-hooks_1.0.0_1772131786181_0.4593527521756049","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@athena-tracker/react-hooks","version":"1.0.1","keywords":["react","hooks","analytics","athena","websocket","realtime"],"author":{"name":"Pascal Team"},"license":"MIT","_id":"@athena-tracker/react-hooks@1.0.1","maintainers":[{"name":"athena-rubaiyat","email":"r+2@markopolo.ai"}],"homepage":"https://github.com/RubaiyatF/Pascal#readme","bugs":{"url":"https://github.com/RubaiyatF/Pascal/issues"},"dist":{"shasum":"96b21f6ba828b7d16a2d2978c058c4ee0b65060e","tarball":"https://registry.npmjs.org/@athena-tracker/react-hooks/-/react-hooks-1.0.1.tgz","fileCount":16,"integrity":"sha512-BZzBvS4nnZ34RtsZlaCMRNyQoeDrJ9un9zmMyeYNfNZObeMsotbV3MiFhFivC6/5mlq/SRjLdBRrMIX0c5zNnw==","signatures":[{"sig":"MEUCIQCdMd1CmELUkBvpcGWTm8i4l+WM0BkstyKZndgEw28JSwIga0n7xlVKRFmolv3Dwa2NliOONYL3nt3Pop6HST/BRnk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37087},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","engines":{"node":">=16.0.0"},"gitHead":"9080f77e9bcc114f8fb1b927f7901610c201fa85","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest --passWithNoTests","build":"rollup -c","test:watch":"jest --watch","build:types":"tsc --declaration --emitDeclarationOnly --outDir dist","prepublishOnly":"npm run build && npm test"},"_npmUser":{"name":"athena-rubaiyat","email":"r+2@markopolo.ai"},"repository":{"url":"git+https://github.com/RubaiyatF/Pascal.git","type":"git","directory":"tracker/packages/react-hooks"},"_npmVersion":"10.9.2","description":"React hooks for ATHENA analytics integration - fetch analytics data, live streams, and manage tracker state","directories":{},"_nodeVersion":"22.14.0","dependencies":{"tslib":"^2.8.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.54.0","rollup":"^4.5.0","ts-jest":"^29.1.1","typescript":"^5.3.2","@babel/core":"^7.23.0","@types/jest":"^29.5.8","@types/react":"^19.0.0","@babel/preset-env":"^7.23.0","@babel/preset-react":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^25.0.7","@babel/preset-typescript":"^7.23.0","@rollup/plugin-typescript":"^11.1.5","@typescript-eslint/parser":"^6.11.0","@rollup/plugin-node-resolve":"^15.2.3","@typescript-eslint/eslint-plugin":"^6.11.0"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-hooks_1.0.1_1772222467941_0.15190078882685087","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@athena-tracker/react-hooks","version":"1.0.2","description":"React hooks for ATHENA analytics integration - fetch analytics data, live streams, and manage tracker state","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c","build:types":"tsc --declaration --emitDeclarationOnly --outDir dist","test":"jest --passWithNoTests","test:watch":"jest --watch","lint":"eslint src --ext .ts,.tsx","prepublishOnly":"npm run build && npm test"},"keywords":["react","hooks","analytics","athena","websocket","realtime"],"author":{"name":"Pascal Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/RubaiyatF/Pascal.git","directory":"tracker/packages/react-hooks"},"peerDependencies":{"react":">=18.0.0"},"dependencies":{"tslib":"^2.8.1"},"devDependencies":{"@babel/core":"^7.23.0","@babel/preset-env":"^7.23.0","@babel/preset-react":"^7.23.0","@babel/preset-typescript":"^7.23.0","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-typescript":"^11.1.5","@types/jest":"^29.5.8","@types/react":"^19.0.0","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","eslint":"^8.54.0","jest":"^29.7.0","react":"^18.2.0","rollup":"^4.5.0","ts-jest":"^29.1.1","typescript":"^5.3.2"},"engines":{"node":">=16.0.0"},"_id":"@athena-tracker/react-hooks@1.0.2","gitHead":"9080f77e9bcc114f8fb1b927f7901610c201fa85","bugs":{"url":"https://github.com/RubaiyatF/Pascal/issues"},"homepage":"https://github.com/RubaiyatF/Pascal#readme","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-sw4V4rWe/2d4gRF2gnWB7m/TNDpd8SLw27gbLe2Vmfc/+9AfSxe8FBM47bW4ixo3fOMEQ/0aYWaITKK3gLyldg==","shasum":"8ca14b2090d12ab9affb3f1fda9b2b61714cce1c","tarball":"https://registry.npmjs.org/@athena-tracker/react-hooks/-/react-hooks-1.0.2.tgz","fileCount":16,"unpackedSize":37087,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIHIrrudRycZocl4ChoUrJ7dTHqlbdNPHNyYTDrNxRbZHAiAzyJixLkd3/UkMY8L9o/FuNyI9Y0SWRFBIlX4wDGwC2w=="}]},"_npmUser":{"name":"athena-rubaiyat","email":"r+2@markopolo.ai"},"directories":{},"maintainers":[{"name":"athena-rubaiyat","email":"r+2@markopolo.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-hooks_1.0.2_1772226758740_0.1263418337275377"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-26T18:49:46.085Z","modified":"2026-02-27T21:12:39.000Z","1.0.0":"2026-02-26T18:49:46.325Z","1.0.1":"2026-02-27T20:01:08.088Z","1.0.2":"2026-02-27T21:12:38.878Z"},"bugs":{"url":"https://github.com/RubaiyatF/Pascal/issues"},"author":{"name":"Pascal Team"},"license":"MIT","homepage":"https://github.com/RubaiyatF/Pascal#readme","keywords":["react","hooks","analytics","athena","websocket","realtime"],"repository":{"type":"git","url":"git+https://github.com/RubaiyatF/Pascal.git","directory":"tracker/packages/react-hooks"},"description":"React hooks for ATHENA analytics integration - fetch analytics data, live streams, and manage tracker state","maintainers":[{"name":"athena-rubaiyat","email":"r+2@markopolo.ai"}],"readme":"# @athena-tracker/react-hooks\r\n\r\n> React hooks for ATHENA analytics integration\r\n\r\n[![npm version](https://img.shields.io/npm/v/@athena-tracker/react-hooks.svg)](https://www.npmjs.com/package/@athena-tracker/react-hooks)\r\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\r\n\r\n## Features\r\n\r\n- ✅ **useAthenaAnalytics** - Fetch analytics data with auto-refresh\r\n- ✅ **useLiveAnalytics** - Real-time event stream via WebSocket\r\n- ✅ **useAthenaTracker** - Initialize ATHENA tracker in React apps\r\n- ✅ **TypeScript Support** - Full type definitions included\r\n- ✅ **Zero Dependencies** - Only requires React 18+\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @athena-tracker/react-hooks\r\n```\r\n\r\n## Quick Start\r\n\r\n### useAthenaAnalytics\r\n\r\nFetch analytics data from ATHENA API:\r\n\r\n```tsx\r\nimport { useAthenaAnalytics } from '@athena-tracker/react-hooks';\r\n\r\nfunction AnalyticsDashboard() {\r\n  const { data, loading, error, refetch } = useAthenaAnalytics({\r\n    appId: 'app_123',\r\n    workspaceToken: process.env.ATHENA_WORKSPACE_JWT,\r\n    endpoint: 'overview',\r\n    period: '7d',\r\n    refreshInterval: 30000 // Auto-refresh every 30 seconds\r\n  });\r\n\r\n  if (loading) return <div>Loading...</div>;\r\n  if (error) return <div>Error: {error.message}</div>;\r\n\r\n  return (\r\n    <div>\r\n      <h2>Analytics Overview</h2>\r\n      <p>Sessions: {data.sessions}</p>\r\n      <p>Events: {data.events}</p>\r\n      <p>Users: {data.users}</p>\r\n      <button onClick={refetch}>Refresh</button>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n### useLiveAnalytics\r\n\r\nStream real-time events via WebSocket:\r\n\r\n```tsx\r\nimport { useLiveAnalytics } from '@athena-tracker/react-hooks';\r\n\r\nfunction LiveEventStream() {\r\n  const { events, connected, error, clearEvents } = useLiveAnalytics({\r\n    appId: 'app_123',\r\n    workspaceToken: process.env.ATHENA_WORKSPACE_JWT,\r\n    onEvent: (event) => {\r\n      console.log('Live event:', event);\r\n      // Trigger notifications, update UI, etc.\r\n    }\r\n  });\r\n\r\n  return (\r\n    <div>\r\n      <div>Status: {connected ? '🟢 Connected' : '🔴 Disconnected'}</div>\r\n      {error && <div>Error: {error.message}</div>}\r\n      <button onClick={clearEvents}>Clear Events</button>\r\n\r\n      <ul>\r\n        {events.map((event, i) => (\r\n          <li key={i}>\r\n            {event.event_type} - {event.user_id} - {new Date(event.timestamp).toLocaleTimeString()}\r\n          </li>\r\n        ))}\r\n      </ul>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n### useAthenaTracker\r\n\r\nInitialize tracker in React Native or web apps:\r\n\r\n```tsx\r\nimport { useAthenaTracker } from '@athena-tracker/react-hooks';\r\n\r\nfunction App() {\r\n  const { initialized, mode, sessionId, error } = useAthenaTracker({\r\n    appToken: 'at_live_xxxxx',\r\n    apiUrl: 'https://tracker.pascal.cx',\r\n    serverInferenceUrl: 'https://pascal-ml-api-cgn7rucynq-uc.a.run.app/v1/predict',\r\n    inferenceMode: 'server',\r\n    debug: true\r\n  });\r\n\r\n  if (!initialized) {\r\n    return <div>Initializing ATHENA tracker...</div>;\r\n  }\r\n\r\n  return (\r\n    <div>\r\n      <p>Tracker Mode: {mode}</p>\r\n      <p>Session ID: {sessionId}</p>\r\n      <YourApp />\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n## API Reference\r\n\r\n### useAthenaAnalytics\r\n\r\n```typescript\r\nconst { data, loading, error, refetch } = useAthenaAnalytics(config);\r\n```\r\n\r\n**Config:**\r\n| Parameter | Type | Required | Description |\r\n|-----------|------|----------|-------------|\r\n| `appId` | string | ✅ | ATHENA app ID |\r\n| `workspaceToken` | string | ✅ | JWT workspace token |\r\n| `endpoint` | string | ✅ | `'overview'` \\| `'journeys'` \\| `'friction'` \\| `'heatmap'` \\| `'predictions'` \\| `'live'` |\r\n| `period` | string | ❌ | `'1h'` \\| `'24h'` \\| `'7d'` \\| `'30d'` \\| `'90d'` (default: `'7d'`) |\r\n| `apiUrl` | string | ❌ | API base URL (default: `'https://tracker.pascal.cx'`) |\r\n| `refreshInterval` | number | ❌ | Auto-refresh interval in ms (default: off) |\r\n\r\n**Returns:**\r\n```typescript\r\n{\r\n  data: AnalyticsData | null;\r\n  loading: boolean;\r\n  error: Error | null;\r\n  refetch: () => Promise<void>;\r\n}\r\n```\r\n\r\n---\r\n\r\n### useLiveAnalytics\r\n\r\n```typescript\r\nconst { events, connected, error, clearEvents } = useLiveAnalytics(config);\r\n```\r\n\r\n**Config:**\r\n| Parameter | Type | Required | Description |\r\n|-----------|------|----------|-------------|\r\n| `appId` | string | ✅ | ATHENA app ID |\r\n| `workspaceToken` | string | ✅ | JWT workspace token |\r\n| `wsUrl` | string | ❌ | WebSocket URL (default: `'wss://tracker.pascal.cx/ws'`) |\r\n| `onEvent` | function | ❌ | Callback fired for each event |\r\n\r\n**Returns:**\r\n```typescript\r\n{\r\n  events: LiveEvent[];\r\n  connected: boolean;\r\n  error: Error | null;\r\n  clearEvents: () => void;\r\n}\r\n```\r\n\r\n---\r\n\r\n### useAthenaTracker\r\n\r\n```typescript\r\nconst { initialized, mode, sessionId, error } = useAthenaTracker(config);\r\n```\r\n\r\n**Config:**\r\n| Parameter | Type | Required | Description |\r\n|-----------|------|----------|-------------|\r\n| `appToken` | string | ✅ | ATHENA app token |\r\n| `apiUrl` | string | ❌ | API base URL (default: `'https://tracker.pascal.cx'`) |\r\n| `serverInferenceUrl` | string | ❌ | ML inference endpoint |\r\n| `inferenceMode` | string | ❌ | `'auto'` \\| `'on-device'` \\| `'server'` (default: `'auto'`) |\r\n| `debug` | boolean | ❌ | Enable debug logging (default: `false`) |\r\n\r\n**Returns:**\r\n```typescript\r\n{\r\n  initialized: boolean;\r\n  mode: string | null;\r\n  sessionId: string | null;\r\n  error: Error | null;\r\n}\r\n```\r\n\r\n## Advanced Usage\r\n\r\n### Combined Dashboard Example\r\n\r\n```tsx\r\nimport { useAthenaAnalytics, useLiveAnalytics } from '@athena-tracker/react-hooks';\r\n\r\nfunction Dashboard({ appId, workspaceToken }) {\r\n  // Fetch overview data\r\n  const overview = useAthenaAnalytics({\r\n    appId,\r\n    workspaceToken,\r\n    endpoint: 'overview',\r\n    period: '7d',\r\n    refreshInterval: 60000 // Refresh every minute\r\n  });\r\n\r\n  // Stream live events\r\n  const liveStream = useLiveAnalytics({\r\n    appId,\r\n    workspaceToken,\r\n    onEvent: (event) => {\r\n      if (event.event_type === 'checkout_completed') {\r\n        // Show toast notification\r\n        showToast(`🎉 New purchase: ${event.properties.order_value}`);\r\n      }\r\n    }\r\n  });\r\n\r\n  return (\r\n    <div>\r\n      {/* Overview Section */}\r\n      <div>\r\n        <h2>Overview (Last 7 Days)</h2>\r\n        {overview.loading ? (\r\n          <p>Loading...</p>\r\n        ) : overview.error ? (\r\n          <p>Error: {overview.error.message}</p>\r\n        ) : (\r\n          <div>\r\n            <p>Sessions: {overview.data.sessions}</p>\r\n            <p>Events: {overview.data.events}</p>\r\n            <p>Users: {overview.data.users}</p>\r\n          </div>\r\n        )}\r\n      </div>\r\n\r\n      {/* Live Stream Section */}\r\n      <div>\r\n        <h2>Live Events</h2>\r\n        <p>Status: {liveStream.connected ? '🟢 Connected' : '🔴 Disconnected'}</p>\r\n        <ul>\r\n          {liveStream.events.slice(-10).map((event, i) => (\r\n            <li key={i}>{event.event_type}</li>\r\n          ))}\r\n        </ul>\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n## Error Handling\r\n\r\nAll hooks return an `error` property for handling failures:\r\n\r\n```tsx\r\nconst { data, loading, error } = useAthenaAnalytics(config);\r\n\r\nif (error) {\r\n  if (error.message.includes('401')) {\r\n    return <div>Authentication failed. Check your workspace token.</div>;\r\n  } else if (error.message.includes('404')) {\r\n    return <div>App not found. Check your appId.</div>;\r\n  } else {\r\n    return <div>Error: {error.message}</div>;\r\n  }\r\n}\r\n```\r\n\r\n## TypeScript Support\r\n\r\nFull TypeScript definitions are included:\r\n\r\n```typescript\r\nimport type { AthenaAnalyticsConfig, AnalyticsData, LiveEvent } from '@athena-tracker/react-hooks';\r\n```\r\n\r\n## License\r\n\r\nMIT\r\n\r\n## Documentation\r\n\r\n- Full documentation: https://docs.athena.ai/react-hooks\r\n- Integration guide: See PARTNER_INTEGRATION_GUIDE.md\r\n- API reference: https://tracker.pascal.cx/docs\r\n\r\n## Support\r\n\r\n- Issues: https://github.com/RubaiyatF/Pascal/issues\r\n- Email: support@pascal.cx\r\n","readmeFilename":"README.md"}