{"_id":"@asunalabs/tracker-sdk","_rev":"3-ec2245a61438ff20e412631a761b17eb","name":"@asunalabs/tracker-sdk","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@asunalabs/tracker-sdk","version":"1.0.0","keywords":["react","analytics","tracking","engagement","user-tracking","realtime","websocket"],"author":{"name":"Asunalabs"},"license":"MIT","_id":"@asunalabs/tracker-sdk@1.0.0","maintainers":[{"name":"asunalabs","email":"panko.marek@icloud.com"}],"homepage":"https://github.com/asunalabs/tracker-react-sdk#readme","bugs":{"url":"https://github.com/asunalabs/tracker-react-sdk/issues"},"dist":{"shasum":"b7217cda060efd76012c0aa213455363323ef169","tarball":"https://registry.npmjs.org/@asunalabs/tracker-sdk/-/tracker-sdk-1.0.0.tgz","fileCount":15,"integrity":"sha512-773DSGNZ0lfxfayuD8iNOTzxBXRBml0rc4Ub214YZT3N8eM+u0V6LbHh9udzPhcqMS9vE1+G18BB0LT1Fq9r9g==","signatures":[{"sig":"MEYCIQDPJaXVp/N0jAzSg3OjhZEOqJJLzoiUJiH+eYtiDEnikQIhAJ+Cr2ER/G0M/V3QtZ5AXjTOaNL8i0IlfkNYMuaiqpBj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136096},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"79d44fc3683cd340ed0553515956aef114a63a2b","private":false,"scripts":{"dev":"npm run build:watch","lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"rollup -c","example":"cd example && npm start","lint:fix":"eslint src/**/*.{ts,tsx} --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"rollup -c -w","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"asunalabs","email":"panko.marek@icloud.com"},"repository":{"url":"git+https://github.com/asunalabs/tracker-react-sdk.git","type":"git"},"_npmVersion":"11.4.0","description":"React SDK for EngageTrack analytics and user tracking","directories":{},"_nodeVersion":"22.15.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","react":"^18.2.0","tslib":"^2.8.1","eslint":"^8.42.0","rollup":"^3.25.0","ts-jest":"^29.4.0","react-dom":"^18.2.0","typescript":"^5.0.0","@babel/core":"^7.22.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@babel/preset-env":"^7.22.0","@babel/preset-react":"^7.22.0","eslint-plugin-react":"^7.32.0","@rollup/plugin-babel":"^6.0.0","@rollup/plugin-terser":"^0.4.0","@testing-library/react":"^14.0.0","jest-environment-jsdom":"^29.5.0","@rollup/plugin-commonjs":"^25.0.0","@babel/preset-typescript":"^7.22.0","@rollup/plugin-typescript":"^11.0.0","@testing-library/jest-dom":"^5.16.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","@rollup/plugin-node-resolve":"^15.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=18.3.1","react-dom":">=18.3.1"},"_npmOperationalInternal":{"tmp":"tmp/tracker-sdk_1.0.0_1752752404541_0.4842715867753853","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@asunalabs/tracker-sdk","version":"1.0.1","keywords":["react","analytics","tracking","engagement","user-tracking","realtime","websocket"],"author":{"name":"Asunalabs"},"license":"MIT","_id":"@asunalabs/tracker-sdk@1.0.1","maintainers":[{"name":"asunalabs","email":"panko.marek@icloud.com"}],"homepage":"https://github.com/asunalabs/tracker-react-sdk#readme","bugs":{"url":"https://github.com/asunalabs/tracker-react-sdk/issues"},"dist":{"shasum":"9ead61d16a7fd4bd6f47b3b0abc9be2662feca1f","tarball":"https://registry.npmjs.org/@asunalabs/tracker-sdk/-/tracker-sdk-1.0.1.tgz","fileCount":15,"integrity":"sha512-siPN+xFuAwJurNxSPAMUmp7JgwQzfpoKrT6WZej4n37FeP7cbjyruPUhlyTQB1m/6p3FIMmzburV5OiQL+XN4Q==","signatures":[{"sig":"MEQCIC+fpp7ai1APR/zjfOrqM28zozdaKOKscf+YAmW3XergAiAJsEc1nLW4ENXmEeNkNAcUQkrIz93FLW3r2iZlGQ8ymA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":136336},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"2e6ec1ce071c1111bf83d17382f98e2a9ed14eac","private":false,"scripts":{"dev":"npm run build:watch","lint":"eslint src/**/*.{ts,tsx}","test":"jest","build":"rollup -c","example":"cd example && npm start","lint:fix":"eslint src/**/*.{ts,tsx} --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"rollup -c -w","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"asunalabs","email":"panko.marek@icloud.com"},"repository":{"url":"git+https://github.com/asunalabs/tracker-react-sdk.git","type":"git"},"_npmVersion":"11.4.0","description":"React SDK for EngageTrack analytics and user tracking","directories":{},"_nodeVersion":"22.15.1","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","react":"^18.2.0","tslib":"^2.8.1","eslint":"^8.42.0","rollup":"^3.25.0","ts-jest":"^29.4.0","react-dom":"^18.2.0","typescript":"^5.0.0","@babel/core":"^7.22.0","@types/jest":"^29.5.0","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@babel/preset-env":"^7.22.0","@babel/preset-react":"^7.22.0","eslint-plugin-react":"^7.32.0","@rollup/plugin-babel":"^6.0.0","@rollup/plugin-terser":"^0.4.0","@testing-library/react":"^14.0.0","jest-environment-jsdom":"^29.5.0","@rollup/plugin-commonjs":"^25.0.0","@babel/preset-typescript":"^7.22.0","@rollup/plugin-typescript":"^11.0.0","@testing-library/jest-dom":"^5.16.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","@rollup/plugin-node-resolve":"^15.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","rollup-plugin-peer-deps-external":"^2.2.4"},"peerDependencies":{"react":">=18.3.1","react-dom":">=18.3.1"},"_npmOperationalInternal":{"tmp":"tmp/tracker-sdk_1.0.1_1752752600761_0.8802531270929785","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@asunalabs/tracker-sdk","version":"1.0.3","description":"React SDK for EngageTrack analytics and user tracking","type":"module","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","private":false,"scripts":{"build":"rollup -c","build:watch":"rollup -c -w","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src/**/*.{ts,tsx}","lint:fix":"eslint src/**/*.{ts,tsx} --fix","typecheck":"tsc --noEmit","prepublishOnly":"npm run build","dev":"npm run build:watch","example":"cd example && npm start"},"keywords":["react","analytics","tracking","engagement","user-tracking","realtime","websocket"],"author":{"name":"Asunalabs"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/asunalabs/tracker-react-sdk.git"},"bugs":{"url":"https://github.com/asunalabs/tracker-react-sdk/issues"},"homepage":"https://github.com/asunalabs/tracker-react-sdk#readme","peerDependencies":{"react":">=18.3.1","react-dom":">=18.3.1"},"devDependencies":{"@babel/core":"^7.22.0","@babel/preset-env":"^7.22.0","@babel/preset-react":"^7.22.0","@babel/preset-typescript":"^7.22.0","@rollup/plugin-babel":"^6.0.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-node-resolve":"^15.0.0","@rollup/plugin-terser":"^0.4.0","@rollup/plugin-typescript":"^11.0.0","@testing-library/jest-dom":"^5.16.0","@testing-library/react":"^14.0.0","@types/jest":"^29.5.0","@types/node":"^25.0.10","@types/react":"^18.2.0","@types/react-dom":"^18.2.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.42.0","eslint-plugin-react":"^7.32.0","eslint-plugin-react-hooks":"^4.6.0","jest":"^29.5.0","jest-environment-jsdom":"^29.5.0","react":"^18.2.0","react-dom":"^18.2.0","rollup":"^3.25.0","rollup-plugin-peer-deps-external":"^2.2.4","ts-jest":"^29.4.0","tslib":"^2.8.1","typescript":"^5.0.0"},"_id":"@asunalabs/tracker-sdk@1.0.3","gitHead":"094529eaed8a7069a1a40459a531522b8b009a61","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-NjBYvrkypfmNizdFkklTaFHpDlSX80pJRpi4pJOgJbDtzz2UCm2hrEcjoPQ0hgQDQ17BX6ZP5h2jETIoFkJFhg==","shasum":"71ccf26c966fb6f32cc69abb993fbf7f22200243","tarball":"https://registry.npmjs.org/@asunalabs/tracker-sdk/-/tracker-sdk-1.0.3.tgz","fileCount":22,"unpackedSize":175545,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCw5CkImuRLPu9G/WeOwxMy/BGtja/uBus/BdQg0n35mwIgRBmWbkFR8BLCafGYGoRQPQGgSxsMYPHU66E5YBo+58A="}]},"_npmUser":{"name":"asunalabs","email":"panko.marek@icloud.com"},"directories":{},"maintainers":[{"name":"asunalabs","email":"panko.marek@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tracker-sdk_1.0.3_1769444246836_0.8974872156070293"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-17T11:40:04.476Z","modified":"2026-01-26T16:17:27.101Z","1.0.0":"2025-07-17T11:40:04.732Z","1.0.1":"2025-07-17T11:43:20.977Z","1.0.3":"2026-01-26T16:17:26.973Z"},"bugs":{"url":"https://github.com/asunalabs/tracker-react-sdk/issues"},"author":{"name":"Asunalabs"},"license":"MIT","homepage":"https://github.com/asunalabs/tracker-react-sdk#readme","keywords":["react","analytics","tracking","engagement","user-tracking","realtime","websocket"],"repository":{"type":"git","url":"git+https://github.com/asunalabs/tracker-react-sdk.git"},"description":"React SDK for EngageTrack analytics and user tracking","maintainers":[{"name":"asunalabs","email":"panko.marek@icloud.com"}],"readme":"# EngageTrack React SDK\r\n\r\nA comprehensive React SDK for EngageTrack analytics and user tracking. This package provides the same functionality as the vanilla JavaScript SDK but with React-specific hooks and components for seamless integration.\r\n\r\n## Features\r\n\r\n- 🚀 **Easy Integration**: Simple React hooks for tracking\r\n- 📊 **Real-time Analytics**: WebSocket support for live data\r\n- 🔗 **Automatic Link Tracking**: Captures user interactions automatically\r\n- 📈 **Referral Tracking**: Built-in referral and UTM parameter tracking\r\n- 🎯 **Custom Events**: Track any custom event with additional data\r\n- 🔒 **Privacy Friendly**: Respects user privacy with configurable options\r\n- 💻 **TypeScript Support**: Full TypeScript definitions included\r\n- 🌐 **Universal**: Works with SSR/Next.js\r\n- 📱 **Mobile Friendly**: Optimized for mobile devices\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm install @asunalabs/tracker-sdk\r\n# or\r\nyarn add @asunalabs/tracker-sdk\r\n```\r\n\r\n## Basic Usage\r\n\r\n### 1. Initialize the tracker\r\n\r\n```tsx\r\nimport React from \"react\";\r\nimport { useEngageTrack, EngageTrackConfig } from \"@asunalabs/tracker-sdk\";\r\n\r\nconst config: EngageTrackConfig = {\r\n\tsiteId: \"your-site-id\",\r\n\tdomain: \"your-domain.com\",\r\n};\r\n```\r\n\r\n```tsx\r\nimport React from \"react\";\r\nimport { useEngageTrack, EngageTrackConfig } from \"@asunalabs/tracker-sdk\";\r\n\r\nconst config: EngageTrackConfig = {\r\n\tsiteId: \"your-site-id\",\r\n\tdomain: \"your-domain.com\",\r\n};\r\n\r\nfunction App() {\r\n\tconst { track, sessionData, onlineUsers } = useEngageTrack(config);\r\n\r\n\treturn (\r\n\t\t<div>\r\n\t\t\t<h1>My App</h1>\r\n\t\t\t<p>Session ID: {sessionData?.sessionId}</p>\r\n\t\t\t<p>Online Users: {onlineUsers?.count || 0}</p>\r\n\t\t\t<button onClick={() => track(\"custom_event\", { action: \"button_click\" })}>\r\n\t\t\t\tTrack Custom Event\r\n\t\t\t</button>\r\n\t\t</div>\r\n\t);\r\n}\r\n```\r\n\r\n### 2. Track custom events\r\n\r\n```tsx\r\nimport { useEngageTrack } from \"@asunalabs/tracker-sdk\";\r\n\r\nfunction MyComponent() {\r\n\tconst { track } = useEngageTrack(config);\r\n\r\n\tconst handlePurchase = () => {\r\n\t\ttrack(\"purchase\", {\r\n\t\t\tamount: 99.99,\r\n\t\t\tcurrency: \"USD\",\r\n\t\t\tproductId: \"prod-123\",\r\n\t\t});\r\n\t};\r\n\r\n\treturn <button onClick={handlePurchase}>Buy Now</button>;\r\n}\r\n```\r\n\r\n### 3. Track referral conversions\r\n\r\n```tsx\r\nimport { useEngageTrack } from \"@asunalabs/tracker-sdk\";\r\n\r\nfunction SignupForm() {\r\n\tconst { trackReferralConversion } = useEngageTrack(config);\r\n\r\n\tconst handleSignup = () => {\r\n\t\t// Track that the user signed up (conversion)\r\n\t\ttrackReferralConversion({\r\n\t\t\tconversionType: \"signup\",\r\n\t\t\tvalue: \"free_trial\",\r\n\t\t});\r\n\t};\r\n\r\n\treturn <button onClick={handleSignup}>Sign Up</button>;\r\n}\r\n```\r\n\r\n## Configuration Options\r\n\r\n```typescript\r\ninterface EngageTrackConfig {\r\n\tsiteId: string; // Required: Your site ID\r\n\tdomain: string; // Required: Your domain\r\n}\r\n```\r\n\r\n## Event Hooks\r\n\r\nYou can listen to various events using the hooks parameter:\r\n\r\n```tsx\r\nconst { track } = useEngageTrack(config, {\r\n\tonTrackingEvent: (eventType, data) => {\r\n\t\tconsole.log(\"Event tracked:\", eventType, data);\r\n\t},\r\n\tonSessionStart: (sessionData) => {\r\n\t\tconsole.log(\"Session started:\", sessionData);\r\n\t},\r\n\tonSessionEnd: (sessionData) => {\r\n\t\tconsole.log(\"Session ended:\", sessionData);\r\n\t},\r\n\tonWebSocketConnect: () => {\r\n\t\tconsole.log(\"WebSocket connected\");\r\n\t},\r\n\tonWebSocketDisconnect: () => {\r\n\t\tconsole.log(\"WebSocket disconnected\");\r\n\t},\r\n\tonOnlineUsersUpdate: (users) => {\r\n\t\tconsole.log(\"Online users updated:\", users);\r\n\t},\r\n\tonReferralConversion: (referralData) => {\r\n\t\tconsole.log(\"Referral conversion:\", referralData);\r\n\t},\r\n\tonError: (error) => {\r\n\t\tconsole.error(\"EngageTrack error:\", error);\r\n\t},\r\n});\r\n```\r\n\r\n## Available Event Types\r\n\r\n- `page_view` - Page view tracking\r\n- `page_load` - Page load event\r\n- `page_unload` - Page unload event\r\n- `page_hidden` - Page hidden (tab switch)\r\n- `user_click` - User click event\r\n- `idle_timeout` - User idle timeout\r\n- `session_start` - Session start\r\n- `session_end` - Session end\r\n- `referral_conversion` - Referral conversion\r\n- `custom_event` - Custom event\r\n\r\n## Advanced Usage\r\n\r\n### Manual Tracking Only\r\n\r\n```tsx\r\nconst config: EngageTrackConfig = {\r\n\tsiteId: \"your-site-id\",\r\n\tdomain: \"your-domain.com\",\r\n};\r\n\r\nconst { track } = useEngageTrack(config);\r\n\r\n// Manually track what you need\r\ntrack(\"page_view\", { customData: \"value\" });\r\n```\r\n\r\n### Next.js Integration\r\n\r\n```tsx\r\n// pages/_app.tsx\r\nimport { useEngageTrack } from \"@asunalabs/tracker-sdk\";\r\nimport { useRouter } from \"next/router\";\r\nimport { useEffect } from \"react\";\r\n\r\nfunction MyApp({ Component, pageProps }) {\r\n\tconst router = useRouter();\r\n\tconst { track } = useEngageTrack({\r\n\t\tsiteId: process.env.NEXT_PUBLIC_SITE_ID,\r\n\t\tdomain: process.env.NEXT_PUBLIC_DOMAIN,\r\n\t});\r\n\r\n\tuseEffect(() => {\r\n\t\tconst handleRouteChange = (url) => {\r\n\t\t\ttrack(\"page_view\", { url });\r\n\t\t};\r\n\r\n\t\trouter.events.on(\"routeChangeComplete\", handleRouteChange);\r\n\t\treturn () => {\r\n\t\t\trouter.events.off(\"routeChangeComplete\", handleRouteChange);\r\n\t\t};\r\n\t}, [router.events, track]);\r\n\r\n\treturn <Component {...pageProps} />;\r\n}\r\n```\r\n\r\n### Custom Event Tracking\r\n\r\n```tsx\r\n// Track e-commerce events\r\nconst trackPurchase = (orderData) => {\r\n\ttrack(\"purchase\", {\r\n\t\torderId: orderData.id,\r\n\t\tamount: orderData.total,\r\n\t\tcurrency: orderData.currency,\r\n\t\titems: orderData.items.map((item) => ({\r\n\t\t\tid: item.id,\r\n\t\t\tname: item.name,\r\n\t\t\tprice: item.price,\r\n\t\t\tquantity: item.quantity,\r\n\t\t})),\r\n\t});\r\n};\r\n\r\n// Track user engagement\r\nconst trackVideoWatch = (videoId, duration) => {\r\n\ttrack(\"video_watch\", {\r\n\t\tvideoId,\r\n\t\tduration,\r\n\t\ttimestamp: Date.now(),\r\n\t});\r\n};\r\n\r\n// Track form submissions\r\nconst trackFormSubmission = (formName, fields) => {\r\n\ttrack(\"form_submit\", {\r\n\t\tformName,\r\n\t\tfields: Object.keys(fields),\r\n\t\ttimestamp: Date.now(),\r\n\t});\r\n};\r\n```\r\n\r\n## Utility Functions\r\n\r\nThe SDK exports several utility functions:\r\n\r\n```tsx\r\nimport {\r\n\tgenerateId,\r\n\tsetCookie,\r\n\tgetCookie,\r\n\tgetReferralData,\r\n\tparseReferralParams,\r\n\tdetectReferralSource,\r\n} from \"@engagetrack/react\";\r\n\r\n// Generate a unique ID\r\nconst uniqueId = generateId();\r\n\r\n// Work with cookies\r\nsetCookie(\"custom_cookie\", \"value\", 30); // 30 days\r\nconst value = getCookie(\"custom_cookie\");\r\n\r\n// Get referral information\r\nconst referralData = getReferralData();\r\nconst urlParams = parseReferralParams();\r\nconst referralSource = detectReferralSource();\r\n```\r\n\r\n## TypeScript Support\r\n\r\nFull TypeScript support is included with comprehensive type definitions:\r\n\r\n```typescript\r\nimport {\r\n\tEngageTrackConfig,\r\n\tEventType,\r\n\tTrackingData,\r\n\tSessionData,\r\n\tOnlineUsersData,\r\n\tReferralData,\r\n} from \"@engagetrack/react\";\r\n\r\n// Type-safe configuration\r\nconst config: EngageTrackConfig = {\r\n\tsiteId: \"site-123\",\r\n\tdomain: \"example.com\",\r\n};\r\n\r\n// Type-safe event tracking\r\nconst trackEvent = (eventType: EventType, data: TrackingData) => {\r\n\ttrack(eventType, data);\r\n};\r\n```\r\n\r\n## Privacy and GDPR Compliance\r\n\r\nThe SDK is designed with privacy in mind:\r\n\r\n- Only collects necessary analytics data\r\n- Respects user privacy settings\r\n- Supports opt-out mechanisms\r\n- Uses secure, same-site cookies\r\n- No third-party tracking\r\n\r\nTo disable tracking:\r\n\r\n```javascript\r\n// Set this in localStorage to disable tracking\r\nlocalStorage.setItem(\"engageTrackDisabled\", \"true\");\r\n```\r\n\r\n## Development\r\n\r\n```bash\r\n# Install dependencies\r\nnpm install\r\n\r\n# Build the package\r\nnpm run build\r\n\r\n# Run tests\r\nnpm test\r\n\r\n# Run tests with coverage\r\nnpm run test:coverage\r\n\r\n# Start development mode\r\nnpm run dev\r\n\r\n# Run example\r\nnpm run example\r\n```\r\n\r\n## Contributing\r\n\r\n1. Fork the repository\r\n2. Create a feature branch\r\n3. Make your changes\r\n4. Add tests for new functionality\r\n5. Submit a pull request\r\n\r\n## License\r\n\r\nMIT License - see LICENSE file for details\r\n\r\n## Support\r\n\r\nFor issues and questions:\r\n\r\n- GitHub Issues: [github.com/asunalabs/tracker-sdk/issues](https://github.com/asunalabs/tracker-sdk/issues)\r\n- Documentation: [docs.asunalabs.com](https://docs.asunalabs.com/engagetrack)\r\n- Email: support@asunalabs.com\r\n","readmeFilename":"README.md"}