{"_id":"@cartai2025/device-sdk","_rev":"3-2f60b7703590b30457c8bfccdae6841c","name":"@cartai2025/device-sdk","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@cartai2025/device-sdk","version":"1.0.0","keywords":["fraud","fraud detection","fraud prevention","browser","identification","device identification","browser analysis","device analysis","privacy"],"author":{"url":"https://cartai.com","name":"CartAI, Inc"},"license":"BUSL-1.1","_id":"@cartai2025/device-sdk@1.0.0","maintainers":[{"name":"cartai","email":"cartai2025@gmail.com"}],"homepage":"https://github.com/shimiljas/cartai/tree/main/cartai-device-sdk","bugs":{"url":"https://github.com/shimiljas/cartai/issues"},"dist":{"shasum":"f6236ea92a81c733204d4e0e06210b92503a1cc8","tarball":"https://registry.npmjs.org/@cartai2025/device-sdk/-/device-sdk-1.0.0.tgz","fileCount":10,"integrity":"sha512-20pHewr3Gpmi8XRkbcIcji92EPCMFXPYHmlu2S8JwWQf0qgCjjgUUF339BW4cZ2SzioTZKpLoAEfHjUipUuS7g==","signatures":[{"sig":"MEQCIEGlRj+tvH5pnUxzHy2+AHqz4vPsAFC9bECJGmCsQeJaAiBaWmBiwX2juWReyw9eS6QnVXJoTvoikASgFLCIjRkOKg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":619977},"main":"dist/cartai.cjs.js","types":"dist/cartai.d.ts","module":"dist/cartai.esm.js","gitHead":"239aa6d72322d5081ca530e141f59dd649038a67","scripts":{"lint":"eslint --ext .js,.ts --ignore-path .gitignore --max-warnings 0 .","build":"rimraf dist && rollup -c rollup.config.ts --configPlugin \"@rollup/plugin-typescript={tsconfig:'tsconfig.rollupConfig.json'}\"","lint:fix":"yarn lint --fix","check:dts":"tsc --isolatedModules --noEmit dist/cartai.d.ts","check:ssr":"node --require './dist/cartai.cjs.js' --eval '' || (echo \"The distributive files can't be used with server side rendering. Make sure the code doesn't use browser API until an exported function is called.\" && exit 1)","test:local":"karma start --preset local --single-run","build:watch":"yarn build --watch","test:browserstack":"karma start --preset browserstack --single-run","test:browserstack:beta":"karma start --preset browserstack-beta --single-run"},"_npmUser":{"name":"cartai","email":"cartai2025@gmail.com"},"repository":{"url":"git+https://github.com/shimiljas/cartai.git","type":"git","directory":"cartai-device-sdk"},"_npmVersion":"10.8.2","description":"Advanced browser identification library with the highest accuracy and stability","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"got":"^11.8.5","karma":"^6.4.1","eslint":"^8.27.0","rimraf":"^3.0.2","rollup":"^3.25.0","ts-node":"^10.9.1","prettier":"^2.7.1","typescript":"^5.1.6","ua-parser-js":"^1.0.39","@types/jasmine":"^3.10.3","rollup-plugin-dts":"^5.3.1","@rollup/plugin-json":"^5.0.1","@types/ua-parser-js":"^0.7.39","@rollup/plugin-terser":"^0.2.1","rollup-plugin-license":"^3.0.1","eslint-config-prettier":"^8.5.0","eslint-plugin-prettier":"^4.2.1","@fpjs-incubator/broyster":"^0.2.3","@rollup/plugin-typescript":"^10.0.1","@typescript-eslint/parser":"^5.62.0","@rollup/plugin-node-resolve":"^15.0.1","@typescript-eslint/eslint-plugin":"^5.62.0"},"_npmOperationalInternal":{"tmp":"tmp/device-sdk_1.0.0_1759522126753_0.06106091322635576","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@cartai2025/device-sdk","version":"1.0.2","keywords":["fraud","fraud detection","fraud prevention","browser","identification","device identification","browser analysis","device analysis","privacy"],"author":{"url":"https://cartai.com","name":"CartAI, Inc"},"license":"BUSL-1.1","_id":"@cartai2025/device-sdk@1.0.2","maintainers":[{"name":"cartai","email":"cartai2025@gmail.com"}],"homepage":"https://github.com/shimiljas/cartai/tree/main/cartai-device-sdk","bugs":{"url":"https://github.com/shimiljas/cartai/issues"},"dist":{"shasum":"21f4c6b3aeb951ea4cae5297a55aa489c07b5c9f","tarball":"https://registry.npmjs.org/@cartai2025/device-sdk/-/device-sdk-1.0.2.tgz","fileCount":10,"integrity":"sha512-1jjlQiMIOP8X0mI9RaMwtp0C6nyI7/MrVVJxuGZmgMSSZ3tKTgyMih5uKV/QSDEVBAiqobKtcEXhsJ7mH9OvFA==","signatures":[{"sig":"MEYCIQCSzglX8xhjOAaarPSLq+tFSXOXFIUKnRDbcDecy1qqYQIhAIyrx8qcji6ZWWnFb72xJUNQ1tuCiryAncRQRlyAurgq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":619977},"main":"dist/cartai.cjs.js","types":"dist/cartai.d.ts","module":"dist/cartai.esm.js","gitHead":"7479c28d4e86538ccac50fc3f17d6cc011d31fd4","scripts":{"lint":"eslint --ext .js,.ts --ignore-path .gitignore --max-warnings 0 .","build":"rimraf dist && rollup -c rollup.config.ts --configPlugin \"@rollup/plugin-typescript={tsconfig:'tsconfig.rollupConfig.json'}\"","lint:fix":"yarn lint --fix","check:dts":"tsc --isolatedModules --noEmit dist/cartai.d.ts","check:ssr":"node --require './dist/cartai.cjs.js' --eval '' || (echo \"The distributive files can't be used with server side rendering. Make sure the code doesn't use browser API until an exported function is called.\" && exit 1)","test:local":"karma start --preset local --single-run","build:watch":"yarn build --watch","test:browserstack":"karma start --preset browserstack --single-run","test:browserstack:beta":"karma start --preset browserstack-beta --single-run"},"_npmUser":{"name":"cartai","email":"cartai2025@gmail.com"},"repository":{"url":"git+https://github.com/shimiljas/cartai.git","type":"git","directory":"cartai-device-sdk"},"_npmVersion":"10.8.2","description":"Advanced browser identification library with the highest accuracy and stability","directories":{},"sideEffects":false,"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"devDependencies":{"got":"^11.8.5","karma":"^6.4.1","eslint":"^8.27.0","rimraf":"^3.0.2","rollup":"^3.25.0","ts-node":"^10.9.1","prettier":"^2.7.1","typescript":"^5.1.6","ua-parser-js":"^1.0.39","@types/jasmine":"^3.10.3","rollup-plugin-dts":"^5.3.1","@rollup/plugin-json":"^5.0.1","@types/ua-parser-js":"^0.7.39","@rollup/plugin-terser":"^0.2.1","rollup-plugin-license":"^3.0.1","eslint-config-prettier":"^8.5.0","eslint-plugin-prettier":"^4.2.1","@fpjs-incubator/broyster":"^0.2.3","@rollup/plugin-typescript":"^10.0.1","@typescript-eslint/parser":"^5.62.0","@rollup/plugin-node-resolve":"^15.0.1","@typescript-eslint/eslint-plugin":"^5.62.0"},"_npmOperationalInternal":{"tmp":"tmp/device-sdk_1.0.2_1759585529709_0.2793046336881537","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@cartai2025/device-sdk","description":"Advanced browser identification library with the highest accuracy and stability","version":"1.0.3","keywords":["fraud","fraud detection","fraud prevention","browser","identification","device identification","browser analysis","device analysis","privacy"],"author":{"name":"CartAI, Inc","url":"https://cartai.com"},"license":"BUSL-1.1","repository":{"type":"git","url":"git+https://github.com/shimiljas/cartai.git","directory":"cartai-device-sdk"},"bugs":{"url":"https://github.com/shimiljas/cartai/issues"},"homepage":"https://github.com/shimiljas/cartai/tree/main/cartai-device-sdk","main":"dist/cartai-device-sdk.cjs.js","module":"dist/cartai-device-sdk.esm.js","types":"dist/cartai-device-sdk.d.ts","sideEffects":false,"scripts":{"build":"rimraf dist && rollup -c rollup.config.ts --configPlugin \"@rollup/plugin-typescript={tsconfig:'tsconfig.rollupConfig.json'}\"","build:watch":"yarn build --watch","lint":"eslint --ext .js,.ts --ignore-path .gitignore --max-warnings 0 .","lint:fix":"yarn lint --fix","test:local":"karma start --preset local --single-run","test:browserstack":"karma start --preset browserstack --single-run","test:browserstack:beta":"karma start --preset browserstack-beta --single-run","check:dts":"tsc --isolatedModules --noEmit dist/cartai.d.ts","check:ssr":"node --require './dist/cartai.cjs.js' --eval '' || (echo \"The distributive files can't be used with server side rendering. Make sure the code doesn't use browser API until an exported function is called.\" && exit 1)"},"devDependencies":{"@fpjs-incubator/broyster":"^0.2.3","@rollup/plugin-json":"^5.0.1","@rollup/plugin-node-resolve":"^15.0.1","@rollup/plugin-terser":"^0.2.1","@rollup/plugin-typescript":"^10.0.1","@types/jasmine":"^3.10.3","@types/ua-parser-js":"^0.7.39","@typescript-eslint/eslint-plugin":"^5.62.0","@typescript-eslint/parser":"^5.62.0","eslint":"^8.27.0","eslint-config-prettier":"^8.5.0","eslint-plugin-prettier":"^4.2.1","got":"^11.8.5","karma":"^6.4.1","prettier":"^2.7.1","rimraf":"^3.0.2","rollup":"^3.25.0","rollup-plugin-dts":"^5.3.1","rollup-plugin-license":"^3.0.1","ts-node":"^10.9.1","typescript":"^5.1.6","ua-parser-js":"^1.0.39"},"_id":"@cartai2025/device-sdk@1.0.3","gitHead":"c4c5c0992cc5448fe625494d678f84b7a2a08ab4","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-ZAkZIJYBnoiEibQ8Lv9vnOctWI/PMh7xTtM5HbfCsE0kR71hNISMd2VWj9V5iVySt94DP914RgDJq5+Pfmhdiw==","shasum":"e1c1ecf4658c104ecdd087e9e4fc967d55ba9f70","tarball":"https://registry.npmjs.org/@cartai2025/device-sdk/-/device-sdk-1.0.3.tgz","fileCount":10,"unpackedSize":616974,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDsF9uJnWOpvHOGQ4dXExj4NuCP+bxdx6+WybIwQmx1pwIhAPQv/LiHggI2mOn+nxG0nO1khn40BCY5ixn9Sl/Im3r3"}]},"_npmUser":{"name":"cartai","email":"cartai2025@gmail.com"},"directories":{},"maintainers":[{"name":"cartai","email":"cartai2025@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/device-sdk_1.0.3_1762192151012_0.0790937391270301"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-03T20:08:46.643Z","modified":"2025-11-03T17:49:11.477Z","1.0.0":"2025-10-03T20:08:46.989Z","1.0.2":"2025-10-04T13:45:29.931Z","1.0.3":"2025-11-03T17:49:11.273Z"},"bugs":{"url":"https://github.com/shimiljas/cartai/issues"},"author":{"name":"CartAI, Inc","url":"https://cartai.com"},"license":"BUSL-1.1","homepage":"https://github.com/shimiljas/cartai/tree/main/cartai-device-sdk","keywords":["fraud","fraud detection","fraud prevention","browser","identification","device identification","browser analysis","device analysis","privacy"],"repository":{"type":"git","url":"git+https://github.com/shimiljas/cartai.git","directory":"cartai-device-sdk"},"description":"Advanced browser identification library with the highest accuracy and stability","maintainers":[{"name":"cartai","email":"cartai2025@gmail.com"}],"readme":"# CartAI Device SDK\n\nAdvanced browser identification library with the highest accuracy and stability for fraud detection and device analysis.\n\n<!-- Updated: 2025-10-04 -->\n\n## Installation\n\n```bash\nnpm install @cartai2025/device-sdk\n```\n\nOr using yarn:\n\n```bash\nyarn add @cartai2025/device-sdk\n```\n\n## Quick Start\n\n### Basic Usage\n\n```javascript\nimport CartAI from '@cartai2025/device-sdk'\n\n// Initialize the agent\nconst cartaiAgent = await CartAI.load()\n\n// Get visitor identifier\nconst result = await cartaiAgent.get()\n\nconsole.log('Visitor ID:', result.visitorId)\nconsole.log('Confidence:', result.confidence)\n```\n\n### ES Modules\n\n```javascript\nimport { load } from '@cartai2025/device-sdk'\n\nasync function getDeviceFingerprint() {\n  const agent = await load()\n  const result = await agent.get()\n  \n  return {\n    visitorId: result.visitorId,\n    confidence: result.confidence.score,\n    components: result.components\n  }\n}\n\ngetDeviceFingerprint().then(data => {\n  console.log('Device fingerprint:', data)\n})\n```\n\n### CDN Usage (Browser)\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n    <script src=\"https://d24lz8mxe7yhfu.cloudfront.net/cartai-device-sdk/cartai-device-sdk.min.js\"></script>\n</head>\n<body>\n    <script>\n        CartAI.load().then(agent => {\n            return agent.get()\n        }).then(result => {\n            console.log('Visitor ID:', result.visitorId)\n            console.log('Confidence:', result.confidence.score)\n        })\n    </script>\n</body>\n</html>\n```\n\n## API Reference\n\n### `load(options?)`\n\nLoads and initializes the CartAI agent.\n\n**Parameters:**\n- `options` (optional): Configuration options\n  - `delayFallback` (number, default: 50): Fallback delay for older browsers in milliseconds\n  - `debug` (boolean, default: false): Enable debug logging\n\n**Returns:** Promise<Agent>\n\n```javascript\nconst agent = await CartAI.load({\n  delayFallback: 100,\n  debug: true\n})\n```\n\n### `agent.get(options?)`\n\nGets the visitor identifier and device fingerprint.\n\n**Parameters:**\n- `options` (optional): Get options\n  - `debug` (boolean): Enable debug logging (deprecated - use load options instead)\n\n**Returns:** Promise<GetResult>\n\n```javascript\nconst result = await agent.get()\n```\n\n### GetResult Object\n\nThe result object contains:\n\n- `visitorId` (string): Unique visitor identifier\n- `confidence` (Confidence): Confidence score and details\n- `components` (object): Raw fingerprinting components used for identification\n- `version` (string): SDK version used for identification\n\n```javascript\n{\n  visitorId: \"abc123def456...\",\n  confidence: {\n    score: 0.99,\n    comment: \"High confidence\"\n  },\n  components: {\n    // Various device and browser characteristics\n  },\n  version: \"1.0.0\"\n}\n```\n\n## Advanced Usage\n\n### Custom Configuration\n\n```javascript\nimport { load } from '@cartai2025/device-sdk'\n\nconst agent = await load({\n  delayFallback: 200,  // Custom delay for older browsers\n  debug: true          // Enable detailed logging\n})\n\nconst result = await agent.get()\n```\n\n### Working with Components\n\n```javascript\nimport { load, hashComponents, componentsToDebugString } from '@cartai2025/device-sdk'\n\nconst agent = await load()\nconst result = await agent.get()\n\n// Get debug information about components\nconst debugInfo = componentsToDebugString(result.components)\nconsole.log('Components debug info:', debugInfo)\n\n// Generate custom hash from components\nconst customHash = hashComponents(result.components)\nconsole.log('Custom hash:', customHash)\n```\n\n### Error Handling\n\n```javascript\nimport CartAI from '@cartai2025/device-sdk'\n\ntry {\n  const agent = await CartAI.load({\n    debug: true\n  })\n  \n  const result = await agent.get()\n  \n  if (result.confidence.score > 0.8) {\n    console.log('High confidence ID:', result.visitorId)\n  } else {\n    console.log('Lower confidence ID:', result.visitorId)\n    console.log('Confidence details:', result.confidence.comment)\n  }\n} catch (error) {\n  console.error('CartAI initialization failed:', error)\n}\n```\n\n## Browser Compatibility\n\nCartAI Device SDK supports all modern browsers:\n\n- Chrome 49+\n- Firefox 52+\n- Safari 10+\n- Edge 79+\n- Opera 36+\n\n## Privacy & Security\n\n- No personal information is collected\n- All processing happens locally in the browser\n- Compliant with privacy regulations (GDPR, CCPA)\n- Respects Do Not Track headers\n\n## Performance\n\n- Lightweight (~50KB minified)\n- Lazy loading of detection modules\n- Optimized for minimal impact on page load\n- Uses requestIdleCallback when available\n\n## Use Cases\n\n- **Fraud Prevention**: Identify suspicious devices and behavior\n- **Analytics**: Track unique visitors without cookies\n- **Security**: Detect bot traffic and automated attacks\n- **Personalization**: Provide consistent experience across sessions\n- **A/B Testing**: Ensure users stay in the same test group\n\n## TypeScript Support\n\nFull TypeScript definitions are included:\n\n```typescript\nimport { Agent, GetResult, LoadOptions } from '@cartai2025/device-sdk'\n\nconst options: LoadOptions = {\n  delayFallback: 100,\n  debug: false\n}\n\nconst agent: Agent = await CartAI.load(options)\nconst result: GetResult = await agent.get()\n```\n\n## License\n\nThis project is licensed under the Business Source License 1.1 (BUSL-1.1).\n\n## Support\n\nFor support and questions:\n- GitHub Issues: [https://github.com/shimiljas/cartai/issues](https://github.com/shimiljas/cartai/issues)\n- Documentation: [https://github.com/shimiljas/cartai/tree/main/cartai-device-sdk](https://github.com/shimiljas/cartai/tree/main/cartai-device-sdk)\n\n## Changelog\n\nSee [CHANGELOG.md](./CHANGELOG.md) for version history and updates.","readmeFilename":"README.md"}