{"_id":"@badsadspam2/scrypted-eufy-security-fixed","name":"@badsadspam2/scrypted-eufy-security-fixed","dist-tags":{"latest":"1.0.0-rc.6-fixed.3"},"versions":{"1.0.0-rc.6-fixed.3":{"name":"@badsadspam2/scrypted-eufy-security-fixed","version":"1.0.0-rc.6-fixed.3","description":"Eufy Security plugin for Scrypted with fallback fixes","main":"dist/plugin.zip","scripts":{"build":"node scripts/apply-runtime-fallback-patch.mjs && scrypted-webpack && mkdir -p dist && cp out/plugin.zip dist/plugin.zip","tsc":"tsc","test":"jest --passWithNoTests","lint":"eslint 'src/**/*.ts'","scrypted-setup-project":"scrypted-setup-project","prescrypted-setup-project":"scrypted-package-json","scrypted-deploy":"scrypted-deploy","scrypted-deploy-debug":"scrypted-deploy-debug","scrypted-debug":"scrypted-debug","prepublishOnly":"NODE_ENV=production npm run build"},"scrypted":{"name":"Eufy Security Fixed","interfaces":["Settings","DeviceProvider","DeviceDiscovery"],"deviceCreator":"EufySecurityPlugin"},"keywords":["scrypted","eufy","homekit","hksv","camera","homebase"],"engines":{"node":">=20"},"license":"Apache-2.0","peerDependencies":{"@scrypted/sdk":"*"},"optionalDependencies":{"eufy-security-client":"^3.7.0"},"overrides":{"image-type":"^6.1.0","file-type":"^21.3.4","@rollup/plugin-terser":"^1.0.0","serialize-javascript":"^7.0.5"},"devDependencies":{"@scrypted/sdk":"latest","@types/jest":"^29.0.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^7.0.0","@typescript-eslint/parser":"^7.0.0","eslint":"^8.0.0","jest":"^29.0.0","ts-jest":"^29.0.0","typescript":"^5.4.0"},"dependencies":{"scrypted-eufy-security":"file:scrypted-eufy-security-1.0.0-rc.6.tgz"},"_id":"@badsadspam2/scrypted-eufy-security-fixed@1.0.0-rc.6-fixed.3","types":"./dist/plugin.d.ts","_nodeVersion":"22.21.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-7bIXq8xnCWbGacFHT1i0d7WStvccuv6Y088WqkigPUeDb6zD7Xtrfp6p21a3VR5CZ8neodLgKWUILLwNt7jFmg==","shasum":"00fa3c8cd39952add0c06d22113531ba89edd874","tarball":"https://registry.npmjs.org/@badsadspam2/scrypted-eufy-security-fixed/-/scrypted-eufy-security-fixed-1.0.0-rc.6-fixed.3.tgz","fileCount":5,"unpackedSize":109541,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCNjZZWH7f1aT9c4nQuPWRMVDdkcRdQaqsl5dbXiX/wMwIgf7ZqZb8FaXysZGzXarh6p5i6p+d6sO967R0waxc6DZo="}]},"_npmUser":{"name":"badsadspam2","email":"badsadspam2@gmail.com"},"directories":{},"maintainers":[{"name":"badsadspam2","email":"badsadspam2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scrypted-eufy-security-fixed_1.0.0-rc.6-fixed.3_1782738788994_0.09596780181687503"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-29T13:13:08.803Z","1.0.0-rc.6-fixed.3":"2026-06-29T13:13:09.150Z","modified":"2026-06-29T13:13:09.564Z"},"maintainers":[{"name":"badsadspam2","email":"badsadspam2@gmail.com"}],"description":"Eufy Security plugin for Scrypted with fallback fixes","keywords":["scrypted","eufy","homekit","hksv","camera","homebase"],"license":"Apache-2.0","readme":"# Scrypted Eufy Security Plugin\n\n**English** | [Deutsch](README.de.md)\n\nDirect [`eufy-security-client`](https://github.com/bropat/eufy-security-client)\nintegration for [Scrypted](https://www.scrypted.app/) — no WebSocket bridge, no\nmiddleware, no Docker, no Home Assistant. The plugin talks P2P to your HomeBase\ndirectly from the Scrypted process and lets Scrypted bridge your cameras to\nHomeKit (including HomeKit Secure Video), Google Home and Home Assistant.\n\n## Features\n\n- ✅ Direct `eufy-security-client` integration — no middleware, no external process\n- ✅ Eufy HomeBase 3 (S380) support\n- ✅ HomeKit Secure Video (HKSV) via the Scrypted HomeKit plugin\n- ✅ P2P livestreaming (H.264 / H.265)\n- ✅ Motion detection (person, pet, vehicle, sound)\n- ✅ Two-way audio / talkback\n- ✅ PTZ pan/tilt for the Indoor Cam C210\n- ✅ Guard Mode (Away / Home / Off)\n- ✅ Automatic reconnect with exponential backoff\n- ✅ Node.js 20+ compatible (via `enableEmbeddedPKCS1Support`)\n- ✅ Falls back to a legacy-crypto child process when needed\n- ⚠️ HomeBase 3: max. 1 stream at a time (hardware limitation)\n\n## Requirements\n\n1. Scrypted (Docker, Home Assistant add-on, or native)\n2. Scrypted HomeKit plugin (for HomeKit Secure Video)\n3. Eufy account credentials\n4. Nothing else — the plugin is self-contained\n\n## Installation\n\nIn Scrypted: **Plugin Store → search \"Eufy Security\" → Install**.\nEnter your credentials in Settings → devices are discovered automatically.\n\n## HomeKit Setup\n\n1. Install the plugin and let it discover your cameras.\n2. In Scrypted, open a camera → **HomeKit → \"Add to HomeKit\"**.\n3. Scan the QR code in the Apple Home app.\n4. HKSV activates automatically if you have an iCloud plan (Home 50 GB+).\n\n## Streaming & Prebuffer (HomeBase 3)\n\nHomeBase 3 allows **only one active stream at a time**. The plugin therefore\ndisables Scrypted's automatic prebuffering for all cameras by default —\nprebuffering every camera would require one permanent stream per camera, which\nthe hardware cannot do (and previously caused an endless stream pre-emption\nloop on startup).\n\n- **Prebuffer camera** (plugin setting): pick the single camera that keeps a\n  permanent prebuffer stream. That camera gets an instant live view and HKSV\n  pre-roll footage. After changing the setting, restart the Rebroadcast\n  plugin so it re-evaluates its prebuffer defaults.\n- All other cameras stream **on demand**: opening their live view takes the\n  3–10 s P2P connection setup and temporarily pre-empts the prebuffer\n  camera's stream. The prebuffer camera reclaims the slot automatically once\n  the live view is closed.\n\n## Known Limitations\n\n- **HomeBase 3:** only one camera can stream at a time (Eufy hardware limit).\n- **RTSP** direct access to HomeBase 3 has been broken since the March 2026\n  firmware — the plugin works around it by using P2P directly.\n- **Stream start** takes 3–10 seconds (P2P connection setup to the HomeBase).\n- **HKSV pre-roll** is only available for the selected prebuffer camera;\n  recordings from other cameras start at the motion event.\n\n## Crypto Compatibility (Node.js 20+)\n\nEufy devices use `RSA_PKCS1_PADDING` in the P2P protocol, which Node.js 20+\nrejects by default (CVE-2023-46809). The plugin handles this in two stages:\n\n1. **Primary:** `EufySecurity.initialize({ enableEmbeddedPKCS1Support: true })` —\n   P2P runs natively inside the Scrypted Node process.\n2. **Fallback:** an automatic child process with `--openssl-legacy-provider`,\n   triggered as soon as a crypto error is detected. Fully bundled with the\n   plugin — no external download.\n\n## Architecture\n\n```\nScrypted Process\n  EufySecurityPlugin (DeviceProvider, Settings, DeviceDiscovery)\n    ├── EufyClient    (DirectEufyClient | ChildProcessEufyClient)\n    ├── StreamManager (session lifecycle, HomeBase 3 limit)\n    ├── EufyCamera[]  (Camera, VideoCamera, MotionSensor, Intercom, [PanTiltZoom])\n    └── EufyStation[] (SecuritySystem)\n```\n\n## Development\n\n```bash\nnpm ci\nnpm run lint\nnpm run build\nnpm test\n```\n\n## License\n\nApache-2.0\n","readmeFilename":"README.md","_rev":"1-803d315f8f53556481367b4f8d87cf8e"}