@homebridge-plugins/homebridge-eufy-security 4.7.2 → 5.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/AUTHORS +4 -0
  2. package/CODE_OF_CONDUCT.md +30 -0
  3. package/CONTRIBUTING.md +77 -0
  4. package/README.md +152 -49
  5. package/SECURITY.md +30 -0
  6. package/config.schema.json +92 -3
  7. package/dist/account/ownership.js +290 -0
  8. package/dist/account/ownership.js.map +1 -0
  9. package/dist/account/persistence.js +274 -0
  10. package/dist/account/persistence.js.map +1 -0
  11. package/dist/account/temporary-authentication.js +348 -0
  12. package/dist/account/temporary-authentication.js.map +1 -0
  13. package/dist/configuration.js +167 -0
  14. package/dist/configuration.js.map +1 -0
  15. package/dist/device/member-evidence.js +66 -0
  16. package/dist/device/member-evidence.js.map +1 -0
  17. package/dist/device/member-trust.js +114 -0
  18. package/dist/device/member-trust.js.map +1 -0
  19. package/dist/device/snapshot.js +190 -0
  20. package/dist/device/snapshot.js.map +1 -0
  21. package/dist/diagnostics.js +2218 -0
  22. package/dist/diagnostics.js.map +1 -0
  23. package/dist/homekit/adapter.js +2 -0
  24. package/dist/homekit/adapter.js.map +1 -0
  25. package/dist/homekit/adapters/battery.js +208 -0
  26. package/dist/homekit/adapters/battery.js.map +1 -0
  27. package/dist/homekit/adapters/camera-controls.js +527 -0
  28. package/dist/homekit/adapters/camera-controls.js.map +1 -0
  29. package/dist/homekit/adapters/camera-streaming.js +1515 -0
  30. package/dist/homekit/adapters/camera-streaming.js.map +1 -0
  31. package/dist/homekit/adapters/contact.js +138 -0
  32. package/dist/homekit/adapters/contact.js.map +1 -0
  33. package/dist/homekit/adapters/doorbell.js +57 -0
  34. package/dist/homekit/adapters/doorbell.js.map +1 -0
  35. package/dist/homekit/adapters/information.js +55 -0
  36. package/dist/homekit/adapters/information.js.map +1 -0
  37. package/dist/homekit/adapters/lock.js +489 -0
  38. package/dist/homekit/adapters/lock.js.map +1 -0
  39. package/dist/homekit/adapters/motion.js +100 -0
  40. package/dist/homekit/adapters/motion.js.map +1 -0
  41. package/dist/homekit/adapters/registry.js +26 -0
  42. package/dist/homekit/adapters/registry.js.map +1 -0
  43. package/dist/homekit/adapters/security-system.js +425 -0
  44. package/dist/homekit/adapters/security-system.js.map +1 -0
  45. package/dist/homekit/adapters/siren.js +136 -0
  46. package/dist/homekit/adapters/siren.js.map +1 -0
  47. package/dist/homekit/adapters/smart-light.js +662 -0
  48. package/dist/homekit/adapters/smart-light.js.map +1 -0
  49. package/dist/homekit/coverage-matrix.js +119 -0
  50. package/dist/homekit/coverage-matrix.js.map +1 -0
  51. package/dist/homekit/device-control.js +175 -0
  52. package/dist/homekit/device-control.js.map +1 -0
  53. package/dist/homekit/reconciler.js +319 -0
  54. package/dist/homekit/reconciler.js.map +1 -0
  55. package/dist/homekit/representation.js +23 -0
  56. package/dist/homekit/representation.js.map +1 -0
  57. package/dist/index.js +4 -9
  58. package/dist/index.js.map +1 -1
  59. package/dist/media/contracts.js +2 -0
  60. package/dist/media/contracts.js.map +1 -0
  61. package/dist/media/last-successful-image.js +208 -0
  62. package/dist/media/last-successful-image.js.map +1 -0
  63. package/dist/media/live-stream.js +1003 -0
  64. package/dist/media/live-stream.js.map +1 -0
  65. package/dist/media/recording.js +560 -0
  66. package/dist/media/recording.js.map +1 -0
  67. package/dist/media/session-budget.js +39 -0
  68. package/dist/media/session-budget.js.map +1 -0
  69. package/dist/media/snapshot.js +406 -0
  70. package/dist/media/snapshot.js.map +1 -0
  71. package/dist/media/station-live-sessions.js +101 -0
  72. package/dist/media/station-live-sessions.js.map +1 -0
  73. package/dist/platform.js +97 -809
  74. package/dist/platform.js.map +1 -1
  75. package/dist/runtime/channel.js +375 -0
  76. package/dist/runtime/channel.js.map +1 -0
  77. package/dist/runtime/owner.js +682 -0
  78. package/dist/runtime/owner.js.map +1 -0
  79. package/dist/runtime/sdk-client.js +211 -0
  80. package/dist/runtime/sdk-client.js.map +1 -0
  81. package/dist/runtime/tracker.js +211 -0
  82. package/dist/runtime/tracker.js.map +1 -0
  83. package/dist/settings.js +1 -43
  84. package/dist/settings.js.map +1 -1
  85. package/dist/storage.js +59 -0
  86. package/dist/storage.js.map +1 -0
  87. package/dist/ui/dashboard.js +181 -0
  88. package/dist/ui/dashboard.js.map +1 -0
  89. package/dist/ui/device-image.js +22 -0
  90. package/dist/ui/device-image.js.map +1 -0
  91. package/dist/ui/runtime-channel-client.js +305 -0
  92. package/dist/ui/runtime-channel-client.js.map +1 -0
  93. package/dist/ui/server.js +259 -0
  94. package/dist/ui/server.js.map +1 -0
  95. package/homebridge-ui/public/app.css +1902 -0
  96. package/homebridge-ui/public/assets/devices/clean/clean-T1250.webp +0 -0
  97. package/homebridge-ui/public/assets/devices/clean/clean-T2070.webp +0 -0
  98. package/homebridge-ui/public/assets/devices/clean/clean-T2080.webp +0 -0
  99. package/homebridge-ui/public/assets/devices/clean/clean-T2081.webp +0 -0
  100. package/homebridge-ui/public/assets/devices/clean/clean-T2103.webp +0 -0
  101. package/homebridge-ui/public/assets/devices/clean/clean-T2117.webp +0 -0
  102. package/homebridge-ui/public/assets/devices/clean/clean-T2118.webp +0 -0
  103. package/homebridge-ui/public/assets/devices/clean/clean-T2119.webp +0 -0
  104. package/homebridge-ui/public/assets/devices/clean/clean-T211A.webp +0 -0
  105. package/homebridge-ui/public/assets/devices/clean/clean-T2120.webp +0 -0
  106. package/homebridge-ui/public/assets/devices/clean/clean-T2123.webp +0 -0
  107. package/homebridge-ui/public/assets/devices/clean/clean-T2128.webp +0 -0
  108. package/homebridge-ui/public/assets/devices/clean/clean-T2130.webp +0 -0
  109. package/homebridge-ui/public/assets/devices/clean/clean-T2132.webp +0 -0
  110. package/homebridge-ui/public/assets/devices/clean/clean-T2150.webp +0 -0
  111. package/homebridge-ui/public/assets/devices/clean/clean-T2181.webp +0 -0
  112. package/homebridge-ui/public/assets/devices/clean/clean-T2182.webp +0 -0
  113. package/homebridge-ui/public/assets/devices/clean/clean-T2190.webp +0 -0
  114. package/homebridge-ui/public/assets/devices/clean/clean-T2192.webp +0 -0
  115. package/homebridge-ui/public/assets/devices/clean/clean-T2193.webp +0 -0
  116. package/homebridge-ui/public/assets/devices/clean/clean-T2194.webp +0 -0
  117. package/homebridge-ui/public/assets/devices/clean/clean-T2210.webp +0 -0
  118. package/homebridge-ui/public/assets/devices/clean/clean-T2250.webp +0 -0
  119. package/homebridge-ui/public/assets/devices/clean/clean-T2251.webp +0 -0
  120. package/homebridge-ui/public/assets/devices/clean/clean-T2252.webp +0 -0
  121. package/homebridge-ui/public/assets/devices/clean/clean-T2253.webp +0 -0
  122. package/homebridge-ui/public/assets/devices/clean/clean-T2254.webp +0 -0
  123. package/homebridge-ui/public/assets/devices/clean/clean-T2255.webp +0 -0
  124. package/homebridge-ui/public/assets/devices/clean/clean-T2256.webp +0 -0
  125. package/homebridge-ui/public/assets/devices/clean/clean-T2257.webp +0 -0
  126. package/homebridge-ui/public/assets/devices/clean/clean-T2258.webp +0 -0
  127. package/homebridge-ui/public/assets/devices/clean/clean-T2259.webp +0 -0
  128. package/homebridge-ui/public/assets/devices/clean/clean-T2261.webp +0 -0
  129. package/homebridge-ui/public/assets/devices/clean/clean-T2262.webp +0 -0
  130. package/homebridge-ui/public/assets/devices/clean/clean-T2266.webp +0 -0
  131. package/homebridge-ui/public/assets/devices/clean/clean-T2267.webp +0 -0
  132. package/homebridge-ui/public/assets/devices/clean/clean-T2268.webp +0 -0
  133. package/homebridge-ui/public/assets/devices/clean/clean-T2270.webp +0 -0
  134. package/homebridge-ui/public/assets/devices/clean/clean-T2272.webp +0 -0
  135. package/homebridge-ui/public/assets/devices/clean/clean-T2273.webp +0 -0
  136. package/homebridge-ui/public/assets/devices/clean/clean-T2276.webp +0 -0
  137. package/homebridge-ui/public/assets/devices/clean/clean-T2277.webp +0 -0
  138. package/homebridge-ui/public/assets/devices/clean/clean-T2278.webp +0 -0
  139. package/homebridge-ui/public/assets/devices/clean/clean-T2280.webp +0 -0
  140. package/homebridge-ui/public/assets/devices/clean/clean-T2292.webp +0 -0
  141. package/homebridge-ui/public/assets/devices/clean/clean-T2320.webp +0 -0
  142. package/homebridge-ui/public/assets/devices/clean/clean-T2351.webp +0 -0
  143. package/homebridge-ui/public/assets/devices/clean/clean-T2352.webp +0 -0
  144. package/homebridge-ui/public/assets/devices/clean/clean-T2353.webp +0 -0
  145. package/homebridge-ui/public/assets/devices/life/life-T8L00.webp +0 -0
  146. package/homebridge-ui/public/assets/devices/life/life-T8L01.webp +0 -0
  147. package/homebridge-ui/public/assets/devices/life/life-T8L02.webp +0 -0
  148. package/homebridge-ui/public/assets/devices/life/life-T8L04.webp +0 -0
  149. package/homebridge-ui/public/assets/devices/life/life-T8L10.webp +0 -0
  150. package/homebridge-ui/public/assets/devices/life/life-T8L20.webp +0 -0
  151. package/homebridge-ui/public/assets/devices/life/life-T8L30.webp +0 -0
  152. package/homebridge-ui/public/assets/devices/life/life-T8L40.webp +0 -0
  153. package/homebridge-ui/public/assets/devices/mower/mower-T2801.webp +0 -0
  154. package/homebridge-ui/public/assets/devices/mower/mower-T280B.webp +0 -0
  155. package/homebridge-ui/public/assets/devices/mower/mower-T2880.webp +0 -0
  156. package/homebridge-ui/public/assets/devices/security/security-T7400.webp +0 -0
  157. package/homebridge-ui/public/assets/devices/security/security-T7401.webp +0 -0
  158. package/homebridge-ui/public/assets/devices/security/security-T8001.webp +0 -0
  159. package/homebridge-ui/public/assets/devices/security/security-T8002.webp +0 -0
  160. package/homebridge-ui/public/assets/devices/security/security-T8010.webp +0 -0
  161. package/homebridge-ui/public/assets/devices/security/security-T8021.webp +0 -0
  162. package/homebridge-ui/public/assets/devices/security/security-T8023.webp +0 -0
  163. package/homebridge-ui/public/assets/devices/security/security-T8025.webp +0 -0
  164. package/homebridge-ui/public/assets/devices/security/security-T8030.webp +0 -0
  165. package/homebridge-ui/public/assets/devices/security/security-T8110.webp +0 -0
  166. package/homebridge-ui/public/assets/devices/security/security-T8111.webp +0 -0
  167. package/homebridge-ui/public/assets/devices/security/security-T8112.webp +0 -0
  168. package/homebridge-ui/public/assets/devices/security/security-T8113.webp +0 -0
  169. package/homebridge-ui/public/assets/devices/security/security-T8114.webp +0 -0
  170. package/homebridge-ui/public/assets/devices/security/security-T8122.webp +0 -0
  171. package/homebridge-ui/public/assets/devices/security/security-T8123.webp +0 -0
  172. package/homebridge-ui/public/assets/devices/security/security-T8124.webp +0 -0
  173. package/homebridge-ui/public/assets/devices/security/security-T8130.webp +0 -0
  174. package/homebridge-ui/public/assets/devices/security/security-T8131.webp +0 -0
  175. package/homebridge-ui/public/assets/devices/security/security-T8134.webp +0 -0
  176. package/homebridge-ui/public/assets/devices/security/security-T8140.webp +0 -0
  177. package/homebridge-ui/public/assets/devices/security/security-T8141.webp +0 -0
  178. package/homebridge-ui/public/assets/devices/security/security-T8150.webp +0 -0
  179. package/homebridge-ui/public/assets/devices/security/security-T8151.webp +0 -0
  180. package/homebridge-ui/public/assets/devices/security/security-T8152.webp +0 -0
  181. package/homebridge-ui/public/assets/devices/security/security-T8153.webp +0 -0
  182. package/homebridge-ui/public/assets/devices/security/security-T8160.webp +0 -0
  183. package/homebridge-ui/public/assets/devices/security/security-T8161.webp +0 -0
  184. package/homebridge-ui/public/assets/devices/security/security-T8162.webp +0 -0
  185. package/homebridge-ui/public/assets/devices/security/security-T8170.webp +0 -0
  186. package/homebridge-ui/public/assets/devices/security/security-T8171.webp +0 -0
  187. package/homebridge-ui/public/assets/devices/security/security-T8172.webp +0 -0
  188. package/homebridge-ui/public/assets/devices/security/security-T8173.webp +0 -0
  189. package/homebridge-ui/public/assets/devices/security/security-T8200.webp +0 -0
  190. package/homebridge-ui/public/assets/devices/security/security-T8200X.webp +0 -0
  191. package/homebridge-ui/public/assets/devices/security/security-T8201.webp +0 -0
  192. package/homebridge-ui/public/assets/devices/security/security-T8203.webp +0 -0
  193. package/homebridge-ui/public/assets/devices/security/security-T8210.webp +0 -0
  194. package/homebridge-ui/public/assets/devices/security/security-T8213.webp +0 -0
  195. package/homebridge-ui/public/assets/devices/security/security-T8214.webp +0 -0
  196. package/homebridge-ui/public/assets/devices/security/security-T8222.webp +0 -0
  197. package/homebridge-ui/public/assets/devices/security/security-T8400.webp +0 -0
  198. package/homebridge-ui/public/assets/devices/security/security-T8401.webp +0 -0
  199. package/homebridge-ui/public/assets/devices/security/security-T8410.webp +0 -0
  200. package/homebridge-ui/public/assets/devices/security/security-T8411.webp +0 -0
  201. package/homebridge-ui/public/assets/devices/security/security-T8414.webp +0 -0
  202. package/homebridge-ui/public/assets/devices/security/security-T8416.webp +0 -0
  203. package/homebridge-ui/public/assets/devices/security/security-T8417.webp +0 -0
  204. package/homebridge-ui/public/assets/devices/security/security-T8419.webp +0 -0
  205. package/homebridge-ui/public/assets/devices/security/security-T8419N.webp +0 -0
  206. package/homebridge-ui/public/assets/devices/security/security-T8420.webp +0 -0
  207. package/homebridge-ui/public/assets/devices/security/security-T8420X.webp +0 -0
  208. package/homebridge-ui/public/assets/devices/security/security-T8422.webp +0 -0
  209. package/homebridge-ui/public/assets/devices/security/security-T8423.webp +0 -0
  210. package/homebridge-ui/public/assets/devices/security/security-T8424.webp +0 -0
  211. package/homebridge-ui/public/assets/devices/security/security-T8425.webp +0 -0
  212. package/homebridge-ui/public/assets/devices/security/security-T8441.webp +0 -0
  213. package/homebridge-ui/public/assets/devices/security/security-T8442.webp +0 -0
  214. package/homebridge-ui/public/assets/devices/security/security-T8452.webp +0 -0
  215. package/homebridge-ui/public/assets/devices/security/security-T84A0.webp +0 -0
  216. package/homebridge-ui/public/assets/devices/security/security-T84A1.webp +0 -0
  217. package/homebridge-ui/public/assets/devices/security/security-T8500.webp +0 -0
  218. package/homebridge-ui/public/assets/devices/security/security-T8502.webp +0 -0
  219. package/homebridge-ui/public/assets/devices/security/security-T8503.webp +0 -0
  220. package/homebridge-ui/public/assets/devices/security/security-T8504.webp +0 -0
  221. package/homebridge-ui/public/assets/devices/security/security-T8506.webp +0 -0
  222. package/homebridge-ui/public/assets/devices/security/security-T8510.webp +0 -0
  223. package/homebridge-ui/public/assets/devices/security/security-T8510P.webp +0 -0
  224. package/homebridge-ui/public/assets/devices/security/security-T8520.webp +0 -0
  225. package/homebridge-ui/public/assets/devices/security/security-T8520P.webp +0 -0
  226. package/homebridge-ui/public/assets/devices/security/security-T8530.webp +0 -0
  227. package/homebridge-ui/public/assets/devices/security/security-T8531.webp +0 -0
  228. package/homebridge-ui/public/assets/devices/security/security-T85D0.webp +0 -0
  229. package/homebridge-ui/public/assets/devices/security/security-T85L0.webp +0 -0
  230. package/homebridge-ui/public/assets/devices/security/security-T85P0.webp +0 -0
  231. package/homebridge-ui/public/assets/devices/security/security-T85V0.webp +0 -0
  232. package/homebridge-ui/public/assets/devices/security/security-T8600.webp +0 -0
  233. package/homebridge-ui/public/assets/devices/security/security-T86P2.webp +0 -0
  234. package/homebridge-ui/public/assets/devices/security/security-T8790.webp +0 -0
  235. package/homebridge-ui/public/assets/devices/security/security-T87B0.webp +0 -0
  236. package/homebridge-ui/public/assets/devices/security/security-T87B2.webp +0 -0
  237. package/homebridge-ui/public/assets/devices/security/security-T8900.webp +0 -0
  238. package/homebridge-ui/public/assets/devices/security/security-T8910.webp +0 -0
  239. package/homebridge-ui/public/assets/devices/security/security-T8920.webp +0 -0
  240. package/homebridge-ui/public/assets/devices/security/security-T8960.webp +0 -0
  241. package/homebridge-ui/public/assets/devices/security/security-T8B0.webp +0 -0
  242. package/homebridge-ui/public/assets/devices/security/security-T8E00.webp +0 -0
  243. package/homebridge-ui/public/assets/devices/security/security-T8N00.webp +0 -0
  244. package/homebridge-ui/public/assets/devices/security/security-T8W11C.webp +0 -0
  245. package/homebridge-ui/public/assets/devices/security/security-T90F0.webp +0 -0
  246. package/homebridge-ui/public/assets/devices/security/security-T90M0.webp +0 -0
  247. package/homebridge-ui/public/assets/devices/security/security-T90R0.webp +0 -0
  248. package/homebridge-ui/public/assets/devices/security/security-T90S0.webp +0 -0
  249. package/homebridge-ui/public/assets/icons/inventory.svg +1 -1
  250. package/homebridge-ui/public/assets/icons/troubleshoot.svg +1 -0
  251. package/homebridge-ui/public/assets/icons/warning.svg +1 -1
  252. package/homebridge-ui/public/assets/logo-dark.svg +10 -0
  253. package/homebridge-ui/public/assets/logo.svg +10 -0
  254. package/homebridge-ui/public/i18n/en.json +218 -0
  255. package/homebridge-ui/public/i18n/fr.json +218 -0
  256. package/homebridge-ui/public/index.html +377 -28
  257. package/homebridge-ui/public/js/app.js +1065 -0
  258. package/homebridge-ui/public/js/dashboard.js +385 -0
  259. package/homebridge-ui/public/js/legacy-settings.js +37 -0
  260. package/homebridge-ui/public/js/profile-wizard.js +68 -0
  261. package/homebridge-ui/server.js +2 -1393
  262. package/i18n/runtime/en.json +100 -0
  263. package/media/Snapshot-Unavailable.jpg +0 -0
  264. package/media/Snapshot-black.jpg +0 -0
  265. package/media/camera-disabled.jpg +0 -0
  266. package/media/camera-offline.jpg +0 -0
  267. package/package.json +29 -24
  268. package/.claude/CLAUDE.md +0 -175
  269. package/.claude/PRD.md +0 -241
  270. package/.claude/docs/debug-recording-lessons.md +0 -91
  271. package/.claude/docs/hksv-recording-fix.md +0 -160
  272. package/.claude/skills/architect/SKILL.md +0 -76
  273. package/.claude/skills/developer/SKILL.md +0 -59
  274. package/.claude/skills/new-device-support/SKILL.md +0 -212
  275. package/.claude/skills/new-device-support/check-device.mjs +0 -363
  276. package/.claude/skills/new-device-support/map-properties.mjs +0 -450
  277. package/.claude/skills/new-device-support/verify-device.mjs +0 -272
  278. package/.claude/skills/planner/SKILL.md +0 -100
  279. package/.claude/skills/qa/SKILL.md +0 -79
  280. package/.claude/skills/support/SKILL.md +0 -175
  281. package/.prettierignore +0 -7
  282. package/.prettierrc.json +0 -7
  283. package/FUNDING.yml +0 -1
  284. package/dist/accessories/AutoSyncStationAccessory.js +0 -157
  285. package/dist/accessories/AutoSyncStationAccessory.js.map +0 -1
  286. package/dist/accessories/BaseAccessory.js +0 -261
  287. package/dist/accessories/BaseAccessory.js.map +0 -1
  288. package/dist/accessories/CameraAccessory.js +0 -459
  289. package/dist/accessories/CameraAccessory.js.map +0 -1
  290. package/dist/accessories/Device.js +0 -65
  291. package/dist/accessories/Device.js.map +0 -1
  292. package/dist/accessories/EntrySensorAccessory.js +0 -48
  293. package/dist/accessories/EntrySensorAccessory.js.map +0 -1
  294. package/dist/accessories/GarageDoorAccessory.js +0 -160
  295. package/dist/accessories/GarageDoorAccessory.js.map +0 -1
  296. package/dist/accessories/LockAccessory.js +0 -142
  297. package/dist/accessories/LockAccessory.js.map +0 -1
  298. package/dist/accessories/MotionSensorAccessory.js +0 -48
  299. package/dist/accessories/MotionSensorAccessory.js.map +0 -1
  300. package/dist/accessories/SmartDropAccessory.js +0 -141
  301. package/dist/accessories/SmartDropAccessory.js.map +0 -1
  302. package/dist/accessories/StationAccessory.js +0 -373
  303. package/dist/accessories/StationAccessory.js.map +0 -1
  304. package/dist/config.js +0 -26
  305. package/dist/config.js.map +0 -1
  306. package/dist/controller/DebugRecordingManager.js +0 -402
  307. package/dist/controller/DebugRecordingManager.js.map +0 -1
  308. package/dist/controller/LocalLivestreamManager.js +0 -371
  309. package/dist/controller/LocalLivestreamManager.js.map +0 -1
  310. package/dist/controller/recordingDelegate.js +0 -252
  311. package/dist/controller/recordingDelegate.js.map +0 -1
  312. package/dist/controller/snapshotDelegate.js +0 -348
  313. package/dist/controller/snapshotDelegate.js.map +0 -1
  314. package/dist/controller/streamingDelegate.js +0 -389
  315. package/dist/controller/streamingDelegate.js.map +0 -1
  316. package/dist/interfaces.js +0 -2
  317. package/dist/interfaces.js.map +0 -1
  318. package/dist/media/Snapshot-Unavailable.png +0 -0
  319. package/dist/media/Snapshot-Unavailable.xcf +0 -0
  320. package/dist/media/Snapshot-black.png +0 -0
  321. package/dist/media/camera-disabled.png +0 -0
  322. package/dist/media/camera-offline.png +0 -0
  323. package/dist/media/media/Snapshot-Unavailable.png +0 -0
  324. package/dist/media/media/Snapshot-Unavailable.xcf +0 -0
  325. package/dist/media/media/Snapshot-black.png +0 -0
  326. package/dist/media/media/camera-disabled.png +0 -0
  327. package/dist/media/media/camera-offline.png +0 -0
  328. package/dist/utils/Talkback.js +0 -162
  329. package/dist/utils/Talkback.js.map +0 -1
  330. package/dist/utils/accessoriesStore.js +0 -210
  331. package/dist/utils/accessoriesStore.js.map +0 -1
  332. package/dist/utils/configTypes.js +0 -38
  333. package/dist/utils/configTypes.js.map +0 -1
  334. package/dist/utils/ffmpeg.js +0 -1111
  335. package/dist/utils/ffmpeg.js.map +0 -1
  336. package/dist/utils/interfaces.js +0 -8
  337. package/dist/utils/interfaces.js.map +0 -1
  338. package/dist/utils/utils.js +0 -224
  339. package/dist/utils/utils.js.map +0 -1
  340. package/dist/version.js +0 -2
  341. package/dist/version.js.map +0 -1
  342. package/homebridge-eufy-security.png +0 -0
  343. package/homebridge-ui/diagnosticsCrypto.js +0 -112
  344. package/homebridge-ui/public/app.js +0 -237
  345. package/homebridge-ui/public/assets/devices/4g_lte_cam_s330_large.png +0 -0
  346. package/homebridge-ui/public/assets/devices/4g_lte_starlight_large.jpg +0 -0
  347. package/homebridge-ui/public/assets/devices/BATTERY_DOORBELL_C30.png +0 -0
  348. package/homebridge-ui/public/assets/devices/BATTERY_DOORBELL_C31.png +0 -0
  349. package/homebridge-ui/public/assets/devices/batterydoorbell1080p_large.jpg +0 -0
  350. package/homebridge-ui/public/assets/devices/batterydoorbell2k_large.png +0 -0
  351. package/homebridge-ui/public/assets/devices/batterydoorbell2kdual_large.jpg +0 -0
  352. package/homebridge-ui/public/assets/devices/batterydoorbell_e340_large.png +0 -0
  353. package/homebridge-ui/public/assets/devices/eufy-security-client.png +0 -0
  354. package/homebridge-ui/public/assets/devices/eufyCamS4_large.png +0 -0
  355. package/homebridge-ui/public/assets/devices/eufycam2_large.png +0 -0
  356. package/homebridge-ui/public/assets/devices/eufycam2c_large.jpg +0 -0
  357. package/homebridge-ui/public/assets/devices/eufycam2cpro_large.jpg +0 -0
  358. package/homebridge-ui/public/assets/devices/eufycam2pro_large.jpg +0 -0
  359. package/homebridge-ui/public/assets/devices/eufycam3_large.jpg +0 -0
  360. package/homebridge-ui/public/assets/devices/eufycam3c_large.jpg +0 -0
  361. package/homebridge-ui/public/assets/devices/eufycam3pro_large.png +0 -0
  362. package/homebridge-ui/public/assets/devices/eufycam_large.jpg +0 -0
  363. package/homebridge-ui/public/assets/devices/eufycame330_large.jpg +0 -0
  364. package/homebridge-ui/public/assets/devices/flood_freeze_sensor_e20_t90F0_large.png +0 -0
  365. package/homebridge-ui/public/assets/devices/floodlight2_large.jpg +0 -0
  366. package/homebridge-ui/public/assets/devices/floodlight2pro_large.jpg +0 -0
  367. package/homebridge-ui/public/assets/devices/floodlight_large.jpg +0 -0
  368. package/homebridge-ui/public/assets/devices/floodlightcame340_large.jpg +0 -0
  369. package/homebridge-ui/public/assets/devices/garage_camera_t8452_large.png +0 -0
  370. package/homebridge-ui/public/assets/devices/homebase2_large.png +0 -0
  371. package/homebridge-ui/public/assets/devices/homebase3_large.png +0 -0
  372. package/homebridge-ui/public/assets/devices/homebase_large.jpg +0 -0
  373. package/homebridge-ui/public/assets/devices/homebasemini_large.png +0 -0
  374. package/homebridge-ui/public/assets/devices/indoorcamC210_large.png +0 -0
  375. package/homebridge-ui/public/assets/devices/indoorcamC220_large.png +0 -0
  376. package/homebridge-ui/public/assets/devices/indoorcamC220_t8419N_large.png +0 -0
  377. package/homebridge-ui/public/assets/devices/indoorcamE30_large.png +0 -0
  378. package/homebridge-ui/public/assets/devices/indoorcamc120_large.png +0 -0
  379. package/homebridge-ui/public/assets/devices/indoorcammini_large.jpg +0 -0
  380. package/homebridge-ui/public/assets/devices/indoorcamp24_large.png +0 -0
  381. package/homebridge-ui/public/assets/devices/indoorcams350_large.png +0 -0
  382. package/homebridge-ui/public/assets/devices/keypad_large.png +0 -0
  383. package/homebridge-ui/public/assets/devices/minibase_chime_T8023_large.jpg +0 -0
  384. package/homebridge-ui/public/assets/devices/motionsensor_large.png +0 -0
  385. package/homebridge-ui/public/assets/devices/nvr_s4_max_T8N00_large.png +0 -0
  386. package/homebridge-ui/public/assets/devices/pir_sensor_e20_large.png +0 -0
  387. package/homebridge-ui/public/assets/devices/poe_bullet_ptz_cam_s4_T8E00_large.png +0 -0
  388. package/homebridge-ui/public/assets/devices/sensor_large.png +0 -0
  389. package/homebridge-ui/public/assets/devices/siren_sensor_e20_large.png +0 -0
  390. package/homebridge-ui/public/assets/devices/smartdrop_t8790_large.png +0 -0
  391. package/homebridge-ui/public/assets/devices/smartlock_t8500_large.png +0 -0
  392. package/homebridge-ui/public/assets/devices/smartlock_t8500_wifibridge_large.jpg +0 -0
  393. package/homebridge-ui/public/assets/devices/smartlock_t8503_large.png +0 -0
  394. package/homebridge-ui/public/assets/devices/smartlock_t8504_large.jpg +0 -0
  395. package/homebridge-ui/public/assets/devices/smartlock_t8510P_t8520P_large.png +0 -0
  396. package/homebridge-ui/public/assets/devices/smartlock_t85D0_large.png +0 -0
  397. package/homebridge-ui/public/assets/devices/smartlock_t85L0_large.png +0 -0
  398. package/homebridge-ui/public/assets/devices/smartlock_t85P0_large.png +0 -0
  399. package/homebridge-ui/public/assets/devices/smartlock_t85V0_large.png +0 -0
  400. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8502_large.png +0 -0
  401. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8506_large.png +0 -0
  402. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8520_large.png +0 -0
  403. package/homebridge-ui/public/assets/devices/smartlock_touch_t8510_large.png +0 -0
  404. package/homebridge-ui/public/assets/devices/smartlock_touch_t8510_wifibridge_large.jpg +0 -0
  405. package/homebridge-ui/public/assets/devices/smartlock_video_t8530_large.png +0 -0
  406. package/homebridge-ui/public/assets/devices/smartlock_video_t8531_large.png +0 -0
  407. package/homebridge-ui/public/assets/devices/smartlockwifibridge_t8021_large.jpg +0 -0
  408. package/homebridge-ui/public/assets/devices/smartsafe_s10_t7400_large.png +0 -0
  409. package/homebridge-ui/public/assets/devices/smartsafe_s12_t7401_large.png +0 -0
  410. package/homebridge-ui/public/assets/devices/smarttrack_card_t87B2_large.png +0 -0
  411. package/homebridge-ui/public/assets/devices/smarttrack_link_t87B0_large.png +0 -0
  412. package/homebridge-ui/public/assets/devices/smoke_alarm_e10_t90S0_large.png +0 -0
  413. package/homebridge-ui/public/assets/devices/solocamc210_large.jpg +0 -0
  414. package/homebridge-ui/public/assets/devices/solocamc35_large.png +0 -0
  415. package/homebridge-ui/public/assets/devices/solocame20_large.jpg +0 -0
  416. package/homebridge-ui/public/assets/devices/solocame30_large.png +0 -0
  417. package/homebridge-ui/public/assets/devices/solocame40_large.jpg +0 -0
  418. package/homebridge-ui/public/assets/devices/solocame42_large.png +0 -0
  419. package/homebridge-ui/public/assets/devices/solocaml20_large.jpg +0 -0
  420. package/homebridge-ui/public/assets/devices/solocams220_large.jpg +0 -0
  421. package/homebridge-ui/public/assets/devices/solocams340_large.png +0 -0
  422. package/homebridge-ui/public/assets/devices/solocams40_large.jpg +0 -0
  423. package/homebridge-ui/public/assets/devices/soloindoorcamc24_large.jpg +0 -0
  424. package/homebridge-ui/public/assets/devices/solooutdoorcamc22_large.png +0 -0
  425. package/homebridge-ui/public/assets/devices/solooutdoorcamc24_large.jpg +0 -0
  426. package/homebridge-ui/public/assets/devices/unknown.png +0 -0
  427. package/homebridge-ui/public/assets/devices/walllight_s100_large.png +0 -0
  428. package/homebridge-ui/public/assets/devices/walllight_s120_large.png +0 -0
  429. package/homebridge-ui/public/assets/devices/water_freeze_sensor_t8920_large.png +0 -0
  430. package/homebridge-ui/public/assets/devices/wireddoorbell1080p_large.jpg +0 -0
  431. package/homebridge-ui/public/assets/devices/wireddoorbell2k_large.png +0 -0
  432. package/homebridge-ui/public/assets/devices/wireddoorbelldual_large.jpg +0 -0
  433. package/homebridge-ui/public/assets/icons/attach.svg +0 -1
  434. package/homebridge-ui/public/assets/icons/battery_0.svg +0 -1
  435. package/homebridge-ui/public/assets/icons/battery_1.svg +0 -1
  436. package/homebridge-ui/public/assets/icons/battery_2.svg +0 -1
  437. package/homebridge-ui/public/assets/icons/battery_3.svg +0 -1
  438. package/homebridge-ui/public/assets/icons/battery_4.svg +0 -1
  439. package/homebridge-ui/public/assets/icons/battery_5.svg +0 -1
  440. package/homebridge-ui/public/assets/icons/battery_6.svg +0 -1
  441. package/homebridge-ui/public/assets/icons/copy.svg +0 -1
  442. package/homebridge-ui/public/assets/icons/delete.svg +0 -1
  443. package/homebridge-ui/public/assets/icons/download.svg +0 -1
  444. package/homebridge-ui/public/assets/icons/info.svg +0 -1
  445. package/homebridge-ui/public/assets/icons/refresh.svg +0 -1
  446. package/homebridge-ui/public/assets/icons/satellite_alt.svg +0 -1
  447. package/homebridge-ui/public/assets/icons/solar_power.svg +0 -1
  448. package/homebridge-ui/public/components/device-card.js +0 -174
  449. package/homebridge-ui/public/components/guard-modes.js +0 -88
  450. package/homebridge-ui/public/components/number-input.js +0 -121
  451. package/homebridge-ui/public/components/select.js +0 -73
  452. package/homebridge-ui/public/components/toggle.js +0 -68
  453. package/homebridge-ui/public/services/api.js +0 -250
  454. package/homebridge-ui/public/services/config.js +0 -144
  455. package/homebridge-ui/public/style.css +0 -818
  456. package/homebridge-ui/public/utils/countries.js +0 -73
  457. package/homebridge-ui/public/utils/device-images.js +0 -102
  458. package/homebridge-ui/public/utils/helpers.js +0 -115
  459. package/homebridge-ui/public/views/dashboard.js +0 -226
  460. package/homebridge-ui/public/views/device-detail.js +0 -654
  461. package/homebridge-ui/public/views/diagnostics.js +0 -402
  462. package/homebridge-ui/public/views/login.js +0 -650
  463. package/homebridge-ui/public/views/recordings.js +0 -319
  464. package/homebridge-ui/public/views/settings.js +0 -197
  465. package/homebridge-ui/public/views/unsupported-detail.js +0 -296
  466. package/media/Snapshot-Unavailable.png +0 -0
  467. package/media/Snapshot-Unavailable.xcf +0 -0
  468. package/media/Snapshot-black.png +0 -0
  469. package/media/camera-disabled.png +0 -0
  470. package/media/camera-offline.png +0 -0
  471. package/scripts/decrypt-diagnostics.mjs +0 -257
package/AUTHORS ADDED
@@ -0,0 +1,4 @@
1
+ # Current maintainer of Homebridge Eufy. This does not replace repository history or claim sole
2
+ # authorship of prior contributions.
3
+
4
+ lenoxys
@@ -0,0 +1,30 @@
1
+ # Code of conduct
2
+
3
+ ## The short version
4
+
5
+ Be decent. Assume the other person is trying to help. Argue about the code, not the person behind it.
6
+
7
+ This project is maintained in spare time. Nobody is on call or owes anyone a fix, and a maintainer
8
+ who says "not now" or "won't do" is answering, not being rude.
9
+
10
+ ## Not acceptable
11
+
12
+ - Harassment, insults, personal attacks, or discriminatory language.
13
+ - Unwelcome attention or comments about someone's experience, English, or contribution quality.
14
+ - Publishing private information, credentials, device data, account details, logs, or captures.
15
+ - Demanding, entitled, or repeated pressure on maintainers.
16
+
17
+ ## Scope
18
+
19
+ This applies in issues, pull requests, commits, discussions, Discord, and anywhere someone acts as
20
+ part of this project.
21
+
22
+ ## Enforcement
23
+
24
+ Maintainers may remove, edit, or reject contributions that do not fit these expectations. Repeated or
25
+ severe behavior may result in a block. Report conduct concerns privately to a maintainer; reports are
26
+ handled discreetly.
27
+
28
+ ## Attribution
29
+
30
+ Adapted in spirit from the [Contributor Covenant](https://www.contributor-covenant.org).
@@ -0,0 +1,77 @@
1
+ # Contributing
2
+
3
+ Thanks for helping. This file covers setup, development workflow, and pull requests. Architecture and
4
+ code rules are in [AGENTS.md](./AGENTS.md); read them before changing the plugin.
5
+
6
+ ## License
7
+
8
+ The project is licensed under [Apache-2.0](./LICENSE). By opening a pull request, you agree that your
9
+ contribution is provided under the same license.
10
+
11
+ ## Setup
12
+
13
+ ```bash
14
+ nvm use
15
+ npm install
16
+ npm run verify
17
+ ```
18
+
19
+ Node 24.5.0 or newer is required. `npm run verify` runs the same local quality gate expected before a
20
+ pull request: formatting, the guard against restoring `eufy-security-client`, the build, and the
21
+ hermetic Vitest contracts.
22
+
23
+ ## Architecture
24
+
25
+ The SDK owns verified Eufy device truth and transport behavior. This plugin owns Homebridge lifecycle
26
+ and HomeKit representation. Use explicit capability and bundle adapters; do not infer services from
27
+ primitive SDK shapes and do not bypass evidence-gated SDK operations.
28
+
29
+ The current vocabulary is in [CONTEXT.md](./CONTEXT.md).
30
+
31
+ ## Development workflow
32
+
33
+ - Start from the active `beta-X.Y.Z` branch and open the pull request against that branch unless a
34
+ maintainer says otherwise.
35
+ - Use Conventional Commits.
36
+ - Keep each change focused and run `npm run verify` before requesting review.
37
+ - Do not add `Co-authored-by` trailers automatically.
38
+ - Explain new runtime dependencies, including why existing dependencies or `node:*` APIs are
39
+ insufficient and what transitive/audit cost is introduced.
40
+ - Treat real-device access as read-only unless the owner explicitly approves a write operation.
41
+
42
+ ### Live qualification
43
+
44
+ `npm run verify` stays hermetic, so anything needing a real account, camera, or transport is
45
+ qualified by a script in [scripts/](./scripts/). Its index,
46
+ [scripts/README.md](./scripts/README.md), describes every procedure and says which scripts write.
47
+
48
+ ## Pull requests
49
+
50
+ Keep the body concise and developer-focused:
51
+
52
+ - what changed and why;
53
+ - what was verified;
54
+ - device, Homebridge, or Home app evidence used;
55
+ - anything unverified, intentionally omitted, or deferred;
56
+ - migration or release impact.
57
+
58
+ Never include real serials, P2P identifiers, account or user IDs, device names, addresses,
59
+ credentials, tokens, keys, logs, or captures. Use synthetic placeholders and review the diff before
60
+ submission.
61
+
62
+ ## Release notes
63
+
64
+ Release notes are for users. Put required actions, compatibility changes, removed settings, and
65
+ behavior changes first. Avoid internal milestones and implementation detail.
66
+
67
+ ## Working with AI agents
68
+
69
+ - Point the agent at [AGENTS.md](./AGENTS.md), [CONTEXT.md](./CONTEXT.md), and relevant ADRs.
70
+ - Verify every claimed SDK symbol and behavior against the current checkout.
71
+ - Do not let an agent infer protocol behavior from an older third-party Eufy client.
72
+ - Review generated output for secrets, real device data, incompatible code, and unsupported claims.
73
+ - The contributor remains responsible for every submitted line.
74
+
75
+ ## Reporting security issues
76
+
77
+ Do not open a public issue. Follow [SECURITY.md](./SECURITY.md).
package/README.md CHANGED
@@ -1,67 +1,170 @@
1
- <p align="center">
2
- <a href="https://github.com/homebridge-plugins/homebridge-eufy-security"><img src="https://raw.githubusercontent.com/wiki/homebridge-eufy-security/plugin/img/homebridge-eufy-security.png" width="456px"></a>
3
- </p>
4
-
5
- <p align="center">
6
- <strong>Control your Eufy Security devices from Apple HomeKit</strong>
7
- </p>
8
-
9
- <p align="center">
10
- <a href="https://www.npmjs.com/package/@homebridge-plugins/homebridge-eufy-security"><img src="https://img.shields.io/npm/v/@homebridge-plugins/homebridge-eufy-security?color=green&label=stable" alt="stable"></a>
11
- <a href="https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Special-Version-(BETA---RC---HKSV)"><img src="https://img.shields.io/npm/v/@homebridge-plugins/homebridge-eufy-security/beta?label=beta" alt="beta"></a>
12
- <a href="https://github.com/homebridge/plugins/wiki/Scoped-Plugins"><img src="https://badgen.net/badge/homebridge/scoped/purple" alt="scoped"></a>
13
- <a href="https://www.npmjs.com/package/@homebridge-plugins/homebridge-eufy-security"><img src="https://img.shields.io/npm/dt/@homebridge-plugins/homebridge-eufy-security" alt="downloads"></a>
14
- <a href="https://discord.com/channels/432663330281226270/876907345962229791"><img src="https://img.shields.io/discord/432663330281226270?color=728ED5&logo=discord&label=discord" alt="discord"></a>
15
- </p>
1
+ <div align="center">
16
2
 
17
- ---
3
+ <!-- The suffix names the mode: logo-dark.svg is the white glyph for dark backgrounds. -->
4
+ <picture>
5
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/homebridge-plugins/homebridge-eufy/beta-5.0.0/homebridge-ui/public/assets/logo-dark.svg">
6
+ <img src="https://raw.githubusercontent.com/homebridge-plugins/homebridge-eufy/beta-5.0.0/homebridge-ui/public/assets/logo.svg" alt="Homebridge Eufy" height="96">
7
+ </picture>
18
8
 
19
- ## ✨ Features
9
+ **Bring verified eufy device capabilities into Apple Home through Homebridge.**
20
10
 
21
- | | |
22
- |---|---|
23
- | 🎥 **Live Streaming** | P2P & RTSP livestream in the Home app |
24
- | 📹 **HomeKit Secure Video** | Record and review clips natively in HomeKit |
25
- | 🔔 **Doorbell & Sensors** | Ring notifications, motion & entry sensors |
26
- | 🔐 **Locks & Guard Modes** | Smart lock control, arm/disarm your station |
27
- | 🏠 **Bridged & Unbridged** | Run cameras as separate accessories for performance |
11
+ [![verified-by-homebridge](https://img.shields.io/badge/homebridge-verified-blueviolet?color=%23491F59&style=flat)](https://github.com/homebridge/homebridge/wiki/Verified-Plugins)
12
+ [![npm](https://img.shields.io/npm/v/@homebridge-plugins/homebridge-eufy-security?logo=npm&color=cb3837)](https://www.npmjs.com/package/@homebridge-plugins/homebridge-eufy-security)
28
13
 
29
- > **Supported devices** — Cameras, doorbells, floodlights, indoor cams, locks, sensors, stations & more.
30
- > See the full [Supported Devices](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Supported-Devices) list.
14
+ [Documentation](https://homebridge-plugins.github.io/homebridge-eufy/) · [Contributing](./CONTRIBUTING.md) · [Security](./SECURITY.md) · [Releases](https://github.com/homebridge-plugins/homebridge-eufy/releases)
15
+
16
+ </div>
31
17
 
32
18
  ---
33
19
 
34
- ## 🚀 Getting Started
20
+ > [!IMPORTANT]
21
+ > **V5 is a beta and not yet a replacement for the stable V4 plugin.** Every capability area is
22
+ > implemented, covered by the contract suite, and exercised against a real device fleet. What remains is
23
+ > qualifying one immutable artifact and approving the public beta.
24
+ >
25
+ > **V5 does not adopt V4 HomeKit accessories.** It registers its own, so expect to remove the V4
26
+ > accessories and reassign rooms, names, and automations once. A V4 configuration block is not loaded
27
+ > either. A device the SDK recognizes is not automatically represented in HomeKit: representation requires
28
+ > an explicit adapter for a primary-purpose member.
35
29
 
36
- | Requirement | |
37
- |---|---|
38
- | [Homebridge](https://homebridge.io) | `>=2.0.0` |
39
- | Node.js | `>=24.5.0` |
40
- | Eufy Account | A [dedicated guest account](https://support.eufylife.com/s/article/Share-Your-eufySecurity-Devices-With-Your-Family) is **mandatory** |
30
+ ## What it is
41
31
 
42
- > **💡 Node.js & RSA_PKCS1_PADDING** — Node.js `24.5.0+` restores native `RSA_PKCS1_PADDING`, so P2P livestream works out of the box and no workaround is needed. See the [compatibility guide](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Node.js-Compatibility-with-Eufy-Security-Plugin) for details.
32
+ Homebridge Eufy is a Homebridge 2 platform plugin for the eufy ecosystem. It maintains one persisted
33
+ eufy session, discovers the account's devices through
34
+ [`@mega-yfue/eufy-sdk`](https://github.com/mega-yfue/eufy-sdk), and maps verified SDK capabilities to
35
+ official HomeKit services through explicit capability adapters.
43
36
 
44
- ---
37
+ The SDK owns device and transport truth. This plugin owns Homebridge lifecycle, stable accessory
38
+ identity, HomeKit representation and policy, configuration, diagnostics, and media adaptation. It
39
+ does not infer HomeKit meaning from raw value shapes or manufacture controls that the SDK cannot
40
+ verify.
45
41
 
46
- ## 📖 Documentation
42
+ ## Requirements
47
43
 
48
- | Setup | Features | Help |
49
- |---|---|---|
50
- | [Installation](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Installation-and-Configuration#installation) | [Streaming](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Streaming-Settings) | [Troubleshooting](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Basic-Troubleshooting) |
51
- | [Configuration](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Installation-and-Configuration#configuration) | [HomeKit Secure Video](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/HomeKit-Secure-Video) | [Common Issues](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Common-Issues) |
52
- | [Bridged & Unbridged](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Bridged-and-Unbridged-Mode-and-Problems) | [Supported Devices](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Supported-Devices) | [Report a Bug](https://github.com/homebridge-plugins/homebridge-eufy-security/issues/new/choose) |
53
- | [Beta Versions](https://github.com/homebridge-plugins/homebridge-eufy-security/wiki/Special-Version-(BETA---RC---HKSV)) | | [Changelog](https://github.com/homebridge-plugins/homebridge-eufy-security/blob/master/CHANGELOG.md) |
44
+ - [Homebridge](https://homebridge.io/) 2.4 or newer
45
+ - Node.js 24.5.0 or newer
46
+ - A dedicated guest eufy account with the relevant home and devices shared to it
54
47
 
55
- ---
48
+ Using a guest account keeps the personal eufy app and Homebridge from competing for one session. See
49
+ eufy's [sharing guide](https://support.eufylife.com/s/article/Share-Your-eufySecurity-Devices-With-Your-Family).
56
50
 
57
- ## 💛 Supporting
51
+ ## Install
58
52
 
59
- | Active Contributors |
60
- |---|
61
- | [Lenoxys](https://github.com/sponsors/lenoxys) |
53
+ Install stable releases through the Homebridge UI by searching for **Homebridge Eufy**, or
54
+ from npm:
62
55
 
63
- **Founded by** [samemory](https://ko-fi.com/S6S24XCVJ) · **Powered by** [bropat](https://ko-fi.com/bropat)'s [eufy-security-client](https://github.com/bropat/eufy-security-client)
56
+ ```bash
57
+ npm install -g @homebridge-plugins/homebridge-eufy-security
58
+ ```
64
59
 
65
- ---
60
+ While V5 is a beta, it is published under the `beta` dist-tag rather than `latest`:
66
61
 
67
- <sub>This project is not affiliated with Anker or Eufy Security. Use entirely at your own risk — see [LICENSE](LICENSE) for details.</sub>
62
+ ```bash
63
+ npm install -g @homebridge-plugins/homebridge-eufy-security@beta
64
+ ```
65
+
66
+ ## First-time setup
67
+
68
+ 1. Create a dedicated guest eufy account and share the required home and devices with it.
69
+ 2. Install the plugin and open its custom UI from Homebridge.
70
+ 3. Enter the guest account details and complete captcha or two-factor verification if requested.
71
+ 4. Wait for authentication and complete discovery to finish.
72
+ 5. Restart Homebridge so the long-lived runtime can acquire the persisted session.
73
+
74
+ V5 uses the new `HomebridgeEufy` platform alias. A V4 block using `EufySecurity` is not loaded and must
75
+ be replaced with a fresh V5 configuration block.
76
+
77
+ Credentials are persisted in Homebridge/plugin configuration. Challenge answers stay inside the
78
+ temporary authentication flow, and the runtime never falls back to interactive login.
79
+
80
+ ## Current V5 scope
81
+
82
+ | Area | Status |
83
+ |---|---|
84
+ | Interactive login, captcha, and two-factor continuation | Implemented |
85
+ | Persisted session restore and single runtime ownership | Implemented |
86
+ | Complete device discovery, runtime snapshot, and dashboard | Implemented |
87
+ | Contact sensors, motion, and doorbell presses | Implemented |
88
+ | Camera live video and audio, snapshots, and talkback | Implemented |
89
+ | HomeKit Secure Video recording | Implemented |
90
+ | Security system arming, locks, sirens, and lights | Implemented |
91
+ | Battery, charging, and low-battery enrichment | Implemented |
92
+ | Guided diagnostics and redacted support archives | Implemented |
93
+ | Continuous validation against a real device fleet | Ongoing |
94
+ | Qualification of an immutable pilot artifact, then public beta approval | Remaining |
95
+
96
+ Support is capability-led rather than model-led, so capability evidence decides coverage instead of product
97
+ naming, and a newly recognized model that exposes an already-adapted capability works without an allowlist.
98
+ Of the 303 rows in the coverage matrix, 57 have an admitted HomeKit adapter, 230 remain diagnostic-only, and
99
+ 16 are blocked by a declared SDK gap. Recognized devices therefore appear in the dashboard before, or
100
+ without, an explicit HomeKit adapter for their primary purpose.
101
+
102
+ Device behaviour is grounded in measurement rather than inference: [`docs/architecture.md`](./docs/architecture.md)
103
+ records the observed timings and outcomes behind the live, recording, and control decisions, and
104
+ [`scripts/`](./scripts/README.md) holds the checks that produce them against real cameras.
105
+
106
+ ## Documentation
107
+
108
+ The [documentation site](https://homebridge-plugins.github.io/homebridge-eufy/) contains the
109
+ current V5 contract and a clearly separated migration of useful legacy V4 wiki material. Current V5
110
+ work is tracked in the [beta issues](https://github.com/homebridge-plugins/homebridge-eufy/issues)
111
+ and release notes.
112
+
113
+ - [Installation](https://homebridge-plugins.github.io/homebridge-eufy/guide/installation)
114
+ - [Configuration](https://homebridge-plugins.github.io/homebridge-eufy/reference/configuration)
115
+ - [Troubleshooting](https://homebridge-plugins.github.io/homebridge-eufy/troubleshooting/)
116
+ - [Current releases](https://github.com/homebridge-plugins/homebridge-eufy/releases)
117
+ - [SDK documentation](https://mega-yfue.github.io/)
118
+
119
+ ## Design
120
+
121
+ V5 uses one dependency direction:
122
+
123
+ ```text
124
+ Homebridge lifecycle
125
+ -> runtime and temporary authentication owners
126
+ -> @mega-yfue/eufy-sdk
127
+ -> canonical device registry and complete snapshot
128
+ -> explicit capability and bundle adapters
129
+ -> official HomeKit services and characteristics
130
+ ```
131
+
132
+ Capability adapters are closed-world and semantic. Unsupported SDK capabilities remain visible as
133
+ diagnostics but do not receive a generic HomeKit fallback. The domain vocabulary lives in
134
+ [`CONTEXT.md`](./CONTEXT.md).
135
+
136
+ ## Develop
137
+
138
+ ```bash
139
+ nvm use
140
+ npm install
141
+ npm run verify
142
+ ```
143
+
144
+ For local SDK development, replace the SDK dependency with `file:../eufy-sdk` and run `npm install`
145
+ again. `npm run verify` is the complete repository gate: formatting, dependency guard, TypeScript
146
+ build, packed-artifact import, and contract tests.
147
+
148
+ ## Contributing
149
+
150
+ Pull requests are welcome. [`CONTRIBUTING.md`](./CONTRIBUTING.md) covers setup and workflow;
151
+ [`AGENTS.md`](./AGENTS.md) defines the code and architecture rules. Report security issues through
152
+ [`SECURITY.md`](./SECURITY.md), never through a public issue.
153
+
154
+ ## Funding and credits
155
+
156
+ Development is supported by [Lenoxys](https://github.com/sponsors/lenoxys). The project was founded by
157
+ [samemory](https://ko-fi.com/S6S24XCVJ). Earlier releases were built on bropat's
158
+ [`eufy-security-client`](https://github.com/bropat/eufy-security-client); V5 uses
159
+ [`@mega-yfue/eufy-sdk`](https://github.com/mega-yfue/eufy-sdk).
160
+
161
+ ## License
162
+
163
+ [Apache-2.0](./LICENSE). Contributions are accepted under the same license.
164
+
165
+ ## Disclaimer
166
+
167
+ Independent and unofficial, built for interoperability with eufy devices you own. **Not affiliated
168
+ with, endorsed by, or sponsored by Anker Innovations or eufy.** "eufy" and "Anker" are trademarks of
169
+ their respective owners and appear here only to identify compatible hardware. Use responsibly: rapid
170
+ or failed login attempts can trigger captcha challenges or temporary account cooldowns.
package/SECURITY.md ADDED
@@ -0,0 +1,30 @@
1
+ # Security policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ **Do not open a public issue.** Report privately through GitHub Security Advisories:
6
+
7
+ > [Report a vulnerability](https://github.com/homebridge-plugins/homebridge-eufy/security/advisories/new)
8
+
9
+ Include the affected version, reproduction steps, and impact where possible. Reports are handled
10
+ privately, and reporters are credited unless they prefer anonymity.
11
+
12
+ ## Scope
13
+
14
+ In scope are vulnerabilities in this repository that weaken a user's Homebridge host, Eufy account,
15
+ devices, or private data, including credential and session handling, UI/runtime IPC, diagnostics,
16
+ media processing, configuration, and reachable dependency vulnerabilities.
17
+
18
+ Vulnerabilities in Eufy, Anker, Apple, or Homebridge services themselves are out of scope and should
19
+ be reported to the relevant vendor. A flaw in how this plugin integrates with those systems is in
20
+ scope.
21
+
22
+ ## Supported versions
23
+
24
+ Only the latest stable release and current published beta receive security fixes.
25
+
26
+ ## Credentials and diagnostics
27
+
28
+ Never commit Homebridge configuration, SDK sessions, diagnostics, or recordings. If Eufy credentials
29
+ or a session may have been exposed, invalidate active sessions from the Eufy app and change the
30
+ account password. Treat unencrypted diagnostics as sensitive even after automated redaction.
@@ -1,6 +1,95 @@
1
1
  {
2
- "pluginAlias": "EufySecurity",
2
+ "pluginAlias": "HomebridgeEufy",
3
3
  "pluginType": "platform",
4
4
  "singular": true,
5
- "customUi": true
6
- }
5
+ "customUi": true,
6
+ "schema": {
7
+ "type": "object",
8
+ "properties": {
9
+ "username": {
10
+ "title": "Eufy account email",
11
+ "type": "string"
12
+ },
13
+ "password": {
14
+ "title": "Eufy account password",
15
+ "format": "password",
16
+ "type": "string"
17
+ },
18
+ "country": {
19
+ "title": "Account country",
20
+ "description": "Two-letter country code used to select the Eufy account region.",
21
+ "default": "US",
22
+ "pattern": "^[A-Za-z]{2}$",
23
+ "type": "string"
24
+ },
25
+ "trustedDeviceName": {
26
+ "title": "Trusted-device name",
27
+ "default": "Homebridge Eufy",
28
+ "minLength": 1,
29
+ "type": "string"
30
+ },
31
+ "pollingIntervalMinutes": {
32
+ "title": "Polling interval in minutes",
33
+ "default": 10,
34
+ "minimum": 0,
35
+ "type": "integer"
36
+ },
37
+ "maxConcurrentMediaSessions": {
38
+ "title": "Concurrent camera media limit",
39
+ "description": "How many cameras may stream live video or take a fresh still at the same time. Use 0 for unlimited, which is the default. A camera refused because the limit is reached is never interrupted once it has started, and a still that cannot be taken now is answered with the camera’s most recent picture instead. Set this if several cameras at once make live view stutter on this host.",
40
+ "default": 0,
41
+ "minimum": 0,
42
+ "type": "integer"
43
+ },
44
+ "warmUpEvents": {
45
+ "title": "Warm up camera connections",
46
+ "description": "Events that open a camera’s connection as soon as it reports one, so the live view or snapshot straight afterwards starts immediately. Every camera is independent: an event opens only the camera that reported it, and only for the events chosen here. A camera on its own battery is kept awake for several minutes each time; wired cameras and those behind a HomeBase are unaffected. Choose these in the plugin interface, which offers whatever your devices actually report.",
47
+ "type": "array",
48
+ "default": [
49
+ "doorbellPress"
50
+ ],
51
+ "uniqueItems": true,
52
+ "items": {
53
+ "type": "string"
54
+ }
55
+ },
56
+ "ffmpegPath": {
57
+ "title": "FFmpeg path",
58
+ "description": "Leave unset to use the FFmpeg executable bundled with the plugin.",
59
+ "minLength": 1,
60
+ "type": "string"
61
+ },
62
+ "entityPreferences": {
63
+ "title": "Entity preferences",
64
+ "additionalProperties": false,
65
+ "default": {},
66
+ "type": "object",
67
+ "patternProperties": {
68
+ "^.+$": {
69
+ "additionalProperties": false,
70
+ "properties": {
71
+ "represented": {
72
+ "default": true,
73
+ "type": "boolean"
74
+ },
75
+ "audio": {
76
+ "default": true,
77
+ "type": "boolean"
78
+ },
79
+ "snapshotMode": {
80
+ "default": "Refresh",
81
+ "enum": [
82
+ "Cloud",
83
+ "Live",
84
+ "Refresh"
85
+ ],
86
+ "type": "string"
87
+ }
88
+ },
89
+ "type": "object"
90
+ }
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }