@homebridge-plugins/homebridge-eufy-security 4.7.1 → 5.0.0-beta.0

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 (469) 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 -769
  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 -431
  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/LockAccessory.js +0 -142
  295. package/dist/accessories/LockAccessory.js.map +0 -1
  296. package/dist/accessories/MotionSensorAccessory.js +0 -48
  297. package/dist/accessories/MotionSensorAccessory.js.map +0 -1
  298. package/dist/accessories/SmartDropAccessory.js +0 -141
  299. package/dist/accessories/SmartDropAccessory.js.map +0 -1
  300. package/dist/accessories/StationAccessory.js +0 -373
  301. package/dist/accessories/StationAccessory.js.map +0 -1
  302. package/dist/config.js +0 -26
  303. package/dist/config.js.map +0 -1
  304. package/dist/controller/DebugRecordingManager.js +0 -402
  305. package/dist/controller/DebugRecordingManager.js.map +0 -1
  306. package/dist/controller/LocalLivestreamManager.js +0 -371
  307. package/dist/controller/LocalLivestreamManager.js.map +0 -1
  308. package/dist/controller/recordingDelegate.js +0 -252
  309. package/dist/controller/recordingDelegate.js.map +0 -1
  310. package/dist/controller/snapshotDelegate.js +0 -348
  311. package/dist/controller/snapshotDelegate.js.map +0 -1
  312. package/dist/controller/streamingDelegate.js +0 -389
  313. package/dist/controller/streamingDelegate.js.map +0 -1
  314. package/dist/interfaces.js +0 -2
  315. package/dist/interfaces.js.map +0 -1
  316. package/dist/media/Snapshot-Unavailable.png +0 -0
  317. package/dist/media/Snapshot-Unavailable.xcf +0 -0
  318. package/dist/media/Snapshot-black.png +0 -0
  319. package/dist/media/camera-disabled.png +0 -0
  320. package/dist/media/camera-offline.png +0 -0
  321. package/dist/media/media/Snapshot-Unavailable.png +0 -0
  322. package/dist/media/media/Snapshot-Unavailable.xcf +0 -0
  323. package/dist/media/media/Snapshot-black.png +0 -0
  324. package/dist/media/media/camera-disabled.png +0 -0
  325. package/dist/media/media/camera-offline.png +0 -0
  326. package/dist/utils/Talkback.js +0 -162
  327. package/dist/utils/Talkback.js.map +0 -1
  328. package/dist/utils/accessoriesStore.js +0 -207
  329. package/dist/utils/accessoriesStore.js.map +0 -1
  330. package/dist/utils/configTypes.js +0 -36
  331. package/dist/utils/configTypes.js.map +0 -1
  332. package/dist/utils/ffmpeg.js +0 -1111
  333. package/dist/utils/ffmpeg.js.map +0 -1
  334. package/dist/utils/interfaces.js +0 -8
  335. package/dist/utils/interfaces.js.map +0 -1
  336. package/dist/utils/utils.js +0 -224
  337. package/dist/utils/utils.js.map +0 -1
  338. package/dist/version.js +0 -2
  339. package/dist/version.js.map +0 -1
  340. package/homebridge-eufy-security.png +0 -0
  341. package/homebridge-ui/diagnosticsCrypto.js +0 -112
  342. package/homebridge-ui/public/app.js +0 -237
  343. package/homebridge-ui/public/assets/devices/4g_lte_cam_s330_large.png +0 -0
  344. package/homebridge-ui/public/assets/devices/4g_lte_starlight_large.jpg +0 -0
  345. package/homebridge-ui/public/assets/devices/BATTERY_DOORBELL_C30.png +0 -0
  346. package/homebridge-ui/public/assets/devices/BATTERY_DOORBELL_C31.png +0 -0
  347. package/homebridge-ui/public/assets/devices/batterydoorbell1080p_large.jpg +0 -0
  348. package/homebridge-ui/public/assets/devices/batterydoorbell2k_large.png +0 -0
  349. package/homebridge-ui/public/assets/devices/batterydoorbell2kdual_large.jpg +0 -0
  350. package/homebridge-ui/public/assets/devices/batterydoorbell_e340_large.png +0 -0
  351. package/homebridge-ui/public/assets/devices/eufy-security-client.png +0 -0
  352. package/homebridge-ui/public/assets/devices/eufyCamS4_large.png +0 -0
  353. package/homebridge-ui/public/assets/devices/eufycam2_large.png +0 -0
  354. package/homebridge-ui/public/assets/devices/eufycam2c_large.jpg +0 -0
  355. package/homebridge-ui/public/assets/devices/eufycam2cpro_large.jpg +0 -0
  356. package/homebridge-ui/public/assets/devices/eufycam2pro_large.jpg +0 -0
  357. package/homebridge-ui/public/assets/devices/eufycam3_large.jpg +0 -0
  358. package/homebridge-ui/public/assets/devices/eufycam3c_large.jpg +0 -0
  359. package/homebridge-ui/public/assets/devices/eufycam3pro_large.png +0 -0
  360. package/homebridge-ui/public/assets/devices/eufycam_large.jpg +0 -0
  361. package/homebridge-ui/public/assets/devices/eufycame330_large.jpg +0 -0
  362. package/homebridge-ui/public/assets/devices/flood_freeze_sensor_e20_t90F0_large.png +0 -0
  363. package/homebridge-ui/public/assets/devices/floodlight2_large.jpg +0 -0
  364. package/homebridge-ui/public/assets/devices/floodlight2pro_large.jpg +0 -0
  365. package/homebridge-ui/public/assets/devices/floodlight_large.jpg +0 -0
  366. package/homebridge-ui/public/assets/devices/floodlightcame340_large.jpg +0 -0
  367. package/homebridge-ui/public/assets/devices/garage_camera_t8452_large.png +0 -0
  368. package/homebridge-ui/public/assets/devices/homebase2_large.png +0 -0
  369. package/homebridge-ui/public/assets/devices/homebase3_large.png +0 -0
  370. package/homebridge-ui/public/assets/devices/homebase_large.jpg +0 -0
  371. package/homebridge-ui/public/assets/devices/homebasemini_large.png +0 -0
  372. package/homebridge-ui/public/assets/devices/indoorcamC210_large.png +0 -0
  373. package/homebridge-ui/public/assets/devices/indoorcamC220_large.png +0 -0
  374. package/homebridge-ui/public/assets/devices/indoorcamC220_t8419N_large.png +0 -0
  375. package/homebridge-ui/public/assets/devices/indoorcamE30_large.png +0 -0
  376. package/homebridge-ui/public/assets/devices/indoorcamc120_large.png +0 -0
  377. package/homebridge-ui/public/assets/devices/indoorcammini_large.jpg +0 -0
  378. package/homebridge-ui/public/assets/devices/indoorcamp24_large.png +0 -0
  379. package/homebridge-ui/public/assets/devices/indoorcams350_large.png +0 -0
  380. package/homebridge-ui/public/assets/devices/keypad_large.png +0 -0
  381. package/homebridge-ui/public/assets/devices/minibase_chime_T8023_large.jpg +0 -0
  382. package/homebridge-ui/public/assets/devices/motionsensor_large.png +0 -0
  383. package/homebridge-ui/public/assets/devices/nvr_s4_max_T8N00_large.png +0 -0
  384. package/homebridge-ui/public/assets/devices/pir_sensor_e20_large.png +0 -0
  385. package/homebridge-ui/public/assets/devices/poe_bullet_ptz_cam_s4_T8E00_large.png +0 -0
  386. package/homebridge-ui/public/assets/devices/sensor_large.png +0 -0
  387. package/homebridge-ui/public/assets/devices/siren_sensor_e20_large.png +0 -0
  388. package/homebridge-ui/public/assets/devices/smartdrop_t8790_large.png +0 -0
  389. package/homebridge-ui/public/assets/devices/smartlock_t8500_large.png +0 -0
  390. package/homebridge-ui/public/assets/devices/smartlock_t8500_wifibridge_large.jpg +0 -0
  391. package/homebridge-ui/public/assets/devices/smartlock_t8503_large.png +0 -0
  392. package/homebridge-ui/public/assets/devices/smartlock_t8504_large.jpg +0 -0
  393. package/homebridge-ui/public/assets/devices/smartlock_t8510P_t8520P_large.png +0 -0
  394. package/homebridge-ui/public/assets/devices/smartlock_t85D0_large.png +0 -0
  395. package/homebridge-ui/public/assets/devices/smartlock_t85L0_large.png +0 -0
  396. package/homebridge-ui/public/assets/devices/smartlock_t85P0_large.png +0 -0
  397. package/homebridge-ui/public/assets/devices/smartlock_t85V0_large.png +0 -0
  398. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8502_large.png +0 -0
  399. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8506_large.png +0 -0
  400. package/homebridge-ui/public/assets/devices/smartlock_touch_and_wifi_t8520_large.png +0 -0
  401. package/homebridge-ui/public/assets/devices/smartlock_touch_t8510_large.png +0 -0
  402. package/homebridge-ui/public/assets/devices/smartlock_touch_t8510_wifibridge_large.jpg +0 -0
  403. package/homebridge-ui/public/assets/devices/smartlock_video_t8530_large.png +0 -0
  404. package/homebridge-ui/public/assets/devices/smartlock_video_t8531_large.png +0 -0
  405. package/homebridge-ui/public/assets/devices/smartlockwifibridge_t8021_large.jpg +0 -0
  406. package/homebridge-ui/public/assets/devices/smartsafe_s10_t7400_large.png +0 -0
  407. package/homebridge-ui/public/assets/devices/smartsafe_s12_t7401_large.png +0 -0
  408. package/homebridge-ui/public/assets/devices/smarttrack_card_t87B2_large.png +0 -0
  409. package/homebridge-ui/public/assets/devices/smarttrack_link_t87B0_large.png +0 -0
  410. package/homebridge-ui/public/assets/devices/smoke_alarm_e10_t90S0_large.png +0 -0
  411. package/homebridge-ui/public/assets/devices/solocamc210_large.jpg +0 -0
  412. package/homebridge-ui/public/assets/devices/solocamc35_large.png +0 -0
  413. package/homebridge-ui/public/assets/devices/solocame20_large.jpg +0 -0
  414. package/homebridge-ui/public/assets/devices/solocame30_large.png +0 -0
  415. package/homebridge-ui/public/assets/devices/solocame40_large.jpg +0 -0
  416. package/homebridge-ui/public/assets/devices/solocame42_large.png +0 -0
  417. package/homebridge-ui/public/assets/devices/solocaml20_large.jpg +0 -0
  418. package/homebridge-ui/public/assets/devices/solocams220_large.jpg +0 -0
  419. package/homebridge-ui/public/assets/devices/solocams340_large.png +0 -0
  420. package/homebridge-ui/public/assets/devices/solocams40_large.jpg +0 -0
  421. package/homebridge-ui/public/assets/devices/soloindoorcamc24_large.jpg +0 -0
  422. package/homebridge-ui/public/assets/devices/solooutdoorcamc22_large.png +0 -0
  423. package/homebridge-ui/public/assets/devices/solooutdoorcamc24_large.jpg +0 -0
  424. package/homebridge-ui/public/assets/devices/unknown.png +0 -0
  425. package/homebridge-ui/public/assets/devices/walllight_s100_large.png +0 -0
  426. package/homebridge-ui/public/assets/devices/walllight_s120_large.png +0 -0
  427. package/homebridge-ui/public/assets/devices/water_freeze_sensor_t8920_large.png +0 -0
  428. package/homebridge-ui/public/assets/devices/wireddoorbell1080p_large.jpg +0 -0
  429. package/homebridge-ui/public/assets/devices/wireddoorbell2k_large.png +0 -0
  430. package/homebridge-ui/public/assets/devices/wireddoorbelldual_large.jpg +0 -0
  431. package/homebridge-ui/public/assets/icons/attach.svg +0 -1
  432. package/homebridge-ui/public/assets/icons/battery_0.svg +0 -1
  433. package/homebridge-ui/public/assets/icons/battery_1.svg +0 -1
  434. package/homebridge-ui/public/assets/icons/battery_2.svg +0 -1
  435. package/homebridge-ui/public/assets/icons/battery_3.svg +0 -1
  436. package/homebridge-ui/public/assets/icons/battery_4.svg +0 -1
  437. package/homebridge-ui/public/assets/icons/battery_5.svg +0 -1
  438. package/homebridge-ui/public/assets/icons/battery_6.svg +0 -1
  439. package/homebridge-ui/public/assets/icons/copy.svg +0 -1
  440. package/homebridge-ui/public/assets/icons/delete.svg +0 -1
  441. package/homebridge-ui/public/assets/icons/download.svg +0 -1
  442. package/homebridge-ui/public/assets/icons/info.svg +0 -1
  443. package/homebridge-ui/public/assets/icons/refresh.svg +0 -1
  444. package/homebridge-ui/public/assets/icons/satellite_alt.svg +0 -1
  445. package/homebridge-ui/public/assets/icons/solar_power.svg +0 -1
  446. package/homebridge-ui/public/components/device-card.js +0 -174
  447. package/homebridge-ui/public/components/guard-modes.js +0 -88
  448. package/homebridge-ui/public/components/number-input.js +0 -121
  449. package/homebridge-ui/public/components/select.js +0 -73
  450. package/homebridge-ui/public/components/toggle.js +0 -68
  451. package/homebridge-ui/public/services/api.js +0 -250
  452. package/homebridge-ui/public/services/config.js +0 -144
  453. package/homebridge-ui/public/style.css +0 -818
  454. package/homebridge-ui/public/utils/countries.js +0 -73
  455. package/homebridge-ui/public/utils/device-images.js +0 -102
  456. package/homebridge-ui/public/utils/helpers.js +0 -115
  457. package/homebridge-ui/public/views/dashboard.js +0 -226
  458. package/homebridge-ui/public/views/device-detail.js +0 -626
  459. package/homebridge-ui/public/views/diagnostics.js +0 -402
  460. package/homebridge-ui/public/views/login.js +0 -650
  461. package/homebridge-ui/public/views/recordings.js +0 -319
  462. package/homebridge-ui/public/views/settings.js +0 -197
  463. package/homebridge-ui/public/views/unsupported-detail.js +0 -296
  464. package/media/Snapshot-Unavailable.png +0 -0
  465. package/media/Snapshot-Unavailable.xcf +0 -0
  466. package/media/Snapshot-black.png +0 -0
  467. package/media/camera-disabled.png +0 -0
  468. package/media/camera-offline.png +0 -0
  469. package/scripts/decrypt-diagnostics.mjs +0 -257
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-stream.js","sourceRoot":"","sources":["../../src/media/live-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,560 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { AdaptationStderr, PROCESS_STOP_GRACE_MS, SOURCE_START_BACKSTOP_MS, } from './live-stream.js';
3
+ /**
4
+ * Why a source stopped producing, as this domain's bounded vocabulary.
5
+ *
6
+ * A station serving another of its cameras is not a fault: a base serves one at a time and the SDK refuses a
7
+ * second rather than degrading both, so the recording could not have the station and nothing is broken.
8
+ * Naming it apart from a real source error is what lets an operator read the difference, and what stops a
9
+ * recording that was simply outranked from looking like a camera that failed.
10
+ */
11
+ function sourceFailure(error) {
12
+ return error instanceof Error && error.name === 'StationBusyError' ? 'station-busy' : 'source-error';
13
+ }
14
+ /**
15
+ * How long the adaptation is given to write out what the source already handed it, once the source has
16
+ * ended and its input is closed.
17
+ *
18
+ * The output backstop is already discharged by then, so without this bound a stalled adaptation would
19
+ * leave a consumer waiting for a recording that had in fact finished. Expiry ends the recording with
20
+ * whatever was flushed rather than failing it, because the media up to that point is complete.
21
+ */
22
+ const OUTPUT_FLUSH_DEADLINE_MS = 5_000;
23
+ /**
24
+ * How much media each source fragment is asked to carry.
25
+ *
26
+ * This bounds only how long adapted output waits behind media the camera has already captured, and has
27
+ * nothing to do with the fragment length HomeKit selected, because the adaptation refragments its output on
28
+ * its own keyframes regardless. Asking for the selected length instead makes first output wait a whole
29
+ * output fragment behind a source that already had the media: measured on a wired camera, asking for one
30
+ * second rather than the selected four brought first output forward by more than two seconds. The source
31
+ * still closes a fragment only on a keyframe, so a camera with a longer group of pictures simply delivers
32
+ * on its own cadence and nothing here shortens it.
33
+ */
34
+ const SOURCE_FRAGMENT_SECONDS = 1;
35
+ /**
36
+ * Adapts an SDK fragment recording into fragmented MP4 output that honours a negotiated HomeKit recording
37
+ * contract.
38
+ *
39
+ * The SDK's own fragments are Eufy source truth: they carry the camera's codec, profile, level, geometry,
40
+ * frame rate and keyframe cadence unchanged, and no negotiated contract can be satisfied by passing them
41
+ * through. They are therefore demuxed and recoded here, and the output is refragmented on this plugin's
42
+ * own keyframes so every fragment starts with one and none is longer than the selected fragment length.
43
+ */
44
+ export class FfmpegRecordingMedia {
45
+ executable;
46
+ adaptationDiagnostics;
47
+ createProcess;
48
+ constructor(executable, adaptationDiagnostics, createProcess = spawnRecordingMediaProcess) {
49
+ this.executable = executable;
50
+ this.adaptationDiagnostics = adaptationDiagnostics;
51
+ this.createProcess = createProcess;
52
+ }
53
+ /**
54
+ * Starts one recording and returns it before any output exists, because a HomeKit controller consumes
55
+ * the units as they are produced rather than waiting for a complete recording.
56
+ *
57
+ * A pre-event window is asked for only when the negotiated recording carries one, and the source
58
+ * decides how much of it there is to give: a window is drained from media the camera's shared source
59
+ * already retained, so a source with nothing retained simply begins at the trigger. The drained run
60
+ * arrives as a burst of source fragments each opening on a keyframe, and the adaptation refragments it
61
+ * on its own keyframes like any other media, so nothing here treats pre-event media as a special case.
62
+ *
63
+ * A recording ends in exactly one of three ways: its consumer stops it, its source runs out of media
64
+ * and the final unit is marked as last, or it fails and the iteration rejects. Every one of them
65
+ * releases the SDK handle, the adaptation process, and the source's budget extension exactly once.
66
+ *
67
+ * An adaptation input that stops accepting media is a failure only while the source still has media to
68
+ * give. Once the source has ended, the input has been closed and what remains is a flush the adaptation
69
+ * is free to have already finished, so a recording whose media is complete is completed rather than
70
+ * failed.
71
+ */
72
+ record(source, negotiated, lifecycle) {
73
+ const units = new RecordedFragmentQueue();
74
+ let handle;
75
+ let child;
76
+ let stopped = false;
77
+ let sourceEnded = false;
78
+ let outputBackstop;
79
+ let flushDeadline;
80
+ const trailing = [];
81
+ const teardown = () => {
82
+ if (stopped) {
83
+ return;
84
+ }
85
+ stopped = true;
86
+ clearTimeout(outputBackstop);
87
+ clearTimeout(flushDeadline);
88
+ handle?.stop();
89
+ if (child) {
90
+ child.stdin.destroy();
91
+ child.kill('SIGTERM');
92
+ const killDeadline = setTimeout(() => child?.kill('SIGKILL'), PROCESS_STOP_GRACE_MS);
93
+ killDeadline.unref?.();
94
+ child.on('exit', () => clearTimeout(killDeadline));
95
+ }
96
+ };
97
+ /**
98
+ * Ends the recording at its consumer's request. A HomeKit controller closes a recording stream
99
+ * whenever it decides it has enough, so the iteration completes rather than reporting a failure.
100
+ */
101
+ const stop = () => {
102
+ teardown();
103
+ units.end();
104
+ };
105
+ /**
106
+ * Ends the recording on a failure, naming which bounded reason ended it.
107
+ *
108
+ * A HomeKit controller surfaces this error through HDS into the operator's log, so it is the one place a
109
+ * failed recording explains itself there. It names the reason and not the SDK's own error, whose text is
110
+ * unbounded and may carry device material; the reason is the bounded vocabulary this domain owns.
111
+ */
112
+ const fail = (reason) => {
113
+ if (units.settled) {
114
+ return;
115
+ }
116
+ teardown();
117
+ lifecycle?.onOutcome?.({ outcome: 'failed', reason });
118
+ units.fail(new Error(`recording produced no further usable output: ${reason}`));
119
+ };
120
+ /**
121
+ * Ends the recording once its adaptation has written everything the source gave it, marking the last
122
+ * unit so the controller is told the recording is complete rather than merely interrupted.
123
+ */
124
+ const finish = () => {
125
+ if (units.settled) {
126
+ return;
127
+ }
128
+ for (const [index, data] of trailing.entries()) {
129
+ units.push({ data, last: index === trailing.length - 1 });
130
+ }
131
+ trailing.length = 0;
132
+ teardown();
133
+ units.end();
134
+ };
135
+ const emit = (data, initialization) => {
136
+ if (units.settled) {
137
+ return;
138
+ }
139
+ if (initialization) {
140
+ clearTimeout(outputBackstop);
141
+ outputBackstop = undefined;
142
+ units.push({ data, last: false });
143
+ lifecycle?.onOutcome?.({ outcome: 'recording' });
144
+ return;
145
+ }
146
+ if (sourceEnded) {
147
+ trailing.push(data);
148
+ return;
149
+ }
150
+ units.push({ data, last: false });
151
+ };
152
+ try {
153
+ handle = source.recordFragments?.({
154
+ fragmentSeconds: SOURCE_FRAGMENT_SECONDS,
155
+ ...(negotiated.prebufferLengthMs > 0
156
+ ? { preBufferSeconds: negotiated.prebufferLengthMs / 1_000 }
157
+ : {}),
158
+ });
159
+ }
160
+ catch {
161
+ handle = undefined;
162
+ }
163
+ if (!handle) {
164
+ fail('source-unavailable');
165
+ return recordingOf(units, stop);
166
+ }
167
+ handle.on('budget', (notice) => {
168
+ if (!stopped) {
169
+ notice.extend();
170
+ }
171
+ });
172
+ try {
173
+ child = this.createProcess(this.executable, recordingArguments(negotiated));
174
+ }
175
+ catch {
176
+ this.adaptationDiagnostics?.report({ role: 'recording', event: 'spawn-failed' });
177
+ fail('adaptation-failed');
178
+ return recordingOf(units, stop);
179
+ }
180
+ const adaptation = child;
181
+ const output = new Fmp4OutputReader(emit);
182
+ const stderr = new AdaptationStderr();
183
+ let producedOutput = false;
184
+ /**
185
+ * Reports what this recording's adaptation did, whether or not the recording fails for it. An `output`
186
+ * report carries nothing but the tail, so a silent process that ended as intended is not reported.
187
+ */
188
+ let sourceFragments = 0;
189
+ const report = (event, code, signal) => {
190
+ const tail = stderr.tail();
191
+ if (event === 'output' && tail.length === 0) {
192
+ return;
193
+ }
194
+ this.adaptationDiagnostics?.report({
195
+ role: 'recording',
196
+ event,
197
+ ...(typeof code === 'number' ? { code } : {}),
198
+ ...(typeof signal === 'string' ? { signal } : {}),
199
+ sourceFragments,
200
+ ...(tail.length ? { stderr: tail } : {}),
201
+ });
202
+ };
203
+ adaptation.stderr.on('data', (chunk) => stderr.observe(chunk));
204
+ adaptation.stdout.on('data', (chunk) => {
205
+ producedOutput = true;
206
+ output.read(chunk);
207
+ });
208
+ adaptation.stdout.on('end', () => {
209
+ if (sourceEnded) {
210
+ finish();
211
+ }
212
+ });
213
+ adaptation.stdin.on('error', () => {
214
+ if (!stopped && !sourceEnded) {
215
+ report('input-failed');
216
+ fail('adaptation-failed');
217
+ }
218
+ });
219
+ adaptation.on('error', () => {
220
+ if (!stopped) {
221
+ report(producedOutput ? 'exited-while-streaming' : 'spawn-failed');
222
+ fail('adaptation-failed');
223
+ }
224
+ });
225
+ adaptation.on('exit', (code, signal) => {
226
+ if (stopped || sourceEnded) {
227
+ report('output', code, signal);
228
+ if (!stopped) {
229
+ finish();
230
+ }
231
+ return;
232
+ }
233
+ report(producedOutput ? 'exited-while-streaming' : 'exited-before-output', code, signal);
234
+ fail('adaptation-failed');
235
+ });
236
+ outputBackstop = setTimeout(() => fail('no-output-within-backstop'), SOURCE_START_BACKSTOP_MS);
237
+ outputBackstop.unref?.();
238
+ void (async () => {
239
+ try {
240
+ for await (const fragment of handle) {
241
+ if (stopped) {
242
+ return;
243
+ }
244
+ await writeSourceFragment(adaptation, fragment);
245
+ sourceFragments++;
246
+ if (stopped) {
247
+ return;
248
+ }
249
+ }
250
+ if (stopped) {
251
+ return;
252
+ }
253
+ sourceEnded = true;
254
+ adaptation.stdin.end();
255
+ flushDeadline = setTimeout(finish, OUTPUT_FLUSH_DEADLINE_MS);
256
+ flushDeadline.unref?.();
257
+ }
258
+ catch (error) {
259
+ if (!stopped) {
260
+ fail(sourceFailure(error));
261
+ }
262
+ }
263
+ })();
264
+ return recordingOf(units, stop);
265
+ }
266
+ }
267
+ /**
268
+ * Writes one source fragment to the adaptation, leading with the initialization segment it carries, and
269
+ * does not return until that input has room for the next one.
270
+ *
271
+ * A recording is pulled rather than pushed, so holding the pull is how this path applies backpressure. An
272
+ * adaptation that stops reading stops the iteration instead of having every later fragment accumulate in a
273
+ * byte-blind pipe buffer for the life of the recording; the source then holds what it has already muxed and
274
+ * bounds that itself. Nothing is dropped here, because a fragment is a complete ordered unit and the
275
+ * recording that contains it would not survive losing one.
276
+ */
277
+ async function writeSourceFragment(adaptation, fragment) {
278
+ let accepted = true;
279
+ if (fragment.init) {
280
+ accepted = adaptation.stdin.write(fragment.init) && accepted;
281
+ }
282
+ if (fragment.data.length > 0) {
283
+ accepted = adaptation.stdin.write(fragment.data) && accepted;
284
+ }
285
+ if (!accepted) {
286
+ await drained(adaptation.stdin);
287
+ }
288
+ }
289
+ /**
290
+ * Resolves when an adaptation input has room again, or at once when it can no longer take anything at all.
291
+ *
292
+ * A closed, failed or ended input never emits the `drain` it was waiting for, so those settle the wait too:
293
+ * the recording's own failure handling then owns what happens next, rather than the pull being stranded.
294
+ */
295
+ function drained(stdin) {
296
+ return new Promise((resolve) => {
297
+ if (stdin.destroyed || stdin.writableEnded) {
298
+ resolve();
299
+ return;
300
+ }
301
+ const settle = () => {
302
+ stdin.off('drain', settle);
303
+ stdin.off('close', settle);
304
+ stdin.off('error', settle);
305
+ resolve();
306
+ };
307
+ stdin.on('drain', settle);
308
+ stdin.on('close', settle);
309
+ stdin.on('error', settle);
310
+ });
311
+ }
312
+ function recordingOf(units, stop) {
313
+ return {
314
+ stop,
315
+ [Symbol.asyncIterator]() {
316
+ return {
317
+ next: () => units.next(),
318
+ return: async () => {
319
+ stop();
320
+ units.end();
321
+ return { done: true, value: undefined };
322
+ },
323
+ };
324
+ },
325
+ };
326
+ }
327
+ /**
328
+ * Hands adapted units from the event-driven adaptation to the one consumer iterating them.
329
+ *
330
+ * A recording is settled exactly once: either the source ran out and the last unit was marked, or the
331
+ * recording failed. Units produced after that are dropped rather than delivered, because a HomeKit
332
+ * controller closes a stream the moment it is told the recording ended.
333
+ */
334
+ class RecordedFragmentQueue {
335
+ pending = [];
336
+ waiting;
337
+ ended = false;
338
+ failure;
339
+ get settled() {
340
+ return this.ended || this.failure !== undefined;
341
+ }
342
+ push(fragment) {
343
+ if (this.settled) {
344
+ return;
345
+ }
346
+ if (this.waiting) {
347
+ const waiting = this.waiting;
348
+ this.waiting = undefined;
349
+ waiting.resolve({ done: false, value: fragment });
350
+ return;
351
+ }
352
+ this.pending.push(fragment);
353
+ }
354
+ end() {
355
+ if (this.settled) {
356
+ return;
357
+ }
358
+ this.ended = true;
359
+ this.waiting?.resolve({ done: true, value: undefined });
360
+ this.waiting = undefined;
361
+ }
362
+ fail(error) {
363
+ if (this.settled) {
364
+ return;
365
+ }
366
+ this.failure = error;
367
+ this.waiting?.reject(error);
368
+ this.waiting = undefined;
369
+ }
370
+ next() {
371
+ const ready = this.pending.shift();
372
+ if (ready) {
373
+ return Promise.resolve({ done: false, value: ready });
374
+ }
375
+ if (this.failure !== undefined) {
376
+ return Promise.reject(this.failure);
377
+ }
378
+ if (this.ended) {
379
+ return Promise.resolve({ done: true, value: undefined });
380
+ }
381
+ return new Promise((resolve, reject) => {
382
+ this.waiting = { resolve, reject };
383
+ });
384
+ }
385
+ }
386
+ const BOX_HEADER_BYTES = 8;
387
+ const LARGE_SIZE_BYTES = 8;
388
+ /**
389
+ * Splits the adaptation's fragmented MP4 output into the units a HomeKit recording stream transports.
390
+ *
391
+ * The first unit is the initialization segment, emitted as soon as the movie box completes so a controller
392
+ * is not made to wait for media it cannot use yet. Every later unit is one complete `moof` and its `mdat`,
393
+ * held until both boxes have arrived because a controller cannot use half a fragment. Anything else the
394
+ * muxer writes at the end of the stream, such as a random-access index, belongs to a file rather than to a
395
+ * recording and is dropped.
396
+ */
397
+ class Fmp4OutputReader {
398
+ emit;
399
+ buffered = Buffer.alloc(0);
400
+ initialization = [];
401
+ initialized = false;
402
+ fragment;
403
+ constructor(emit) {
404
+ this.emit = emit;
405
+ }
406
+ read(chunk) {
407
+ this.buffered = this.buffered.length === 0 ? chunk : Buffer.concat([this.buffered, chunk]);
408
+ for (;;) {
409
+ const box = this.takeBox();
410
+ if (!box) {
411
+ return;
412
+ }
413
+ this.accept(box);
414
+ }
415
+ }
416
+ takeBox() {
417
+ if (this.buffered.length < BOX_HEADER_BYTES) {
418
+ return undefined;
419
+ }
420
+ const declared = this.buffered.readUInt32BE(0);
421
+ const type = this.buffered.toString('ascii', 4, BOX_HEADER_BYTES);
422
+ let size = declared;
423
+ if (declared === 1) {
424
+ if (this.buffered.length < BOX_HEADER_BYTES + LARGE_SIZE_BYTES) {
425
+ return undefined;
426
+ }
427
+ size = Number(this.buffered.readBigUInt64BE(BOX_HEADER_BYTES));
428
+ }
429
+ if (size < BOX_HEADER_BYTES || this.buffered.length < size) {
430
+ return undefined;
431
+ }
432
+ const data = this.buffered.subarray(0, size);
433
+ this.buffered = this.buffered.subarray(size);
434
+ return { type, data };
435
+ }
436
+ accept({ type, data }) {
437
+ if (!this.initialized) {
438
+ this.initialization.push(data);
439
+ if (type === 'moov') {
440
+ this.initialized = true;
441
+ this.emit(Buffer.concat(this.initialization), true);
442
+ this.initialization.length = 0;
443
+ }
444
+ return;
445
+ }
446
+ if (type === 'moof') {
447
+ this.fragment = data;
448
+ return;
449
+ }
450
+ if (type === 'mdat' && this.fragment) {
451
+ const fragment = Buffer.concat([this.fragment, data]);
452
+ this.fragment = undefined;
453
+ this.emit(fragment, false);
454
+ }
455
+ }
456
+ }
457
+ /**
458
+ * Recodes one fragment recording into the negotiated HomeKit output.
459
+ *
460
+ * The input is a container with its own timeline, so nothing here generates or overrides timestamps: the
461
+ * source's own decode times are what make a fragment's duration and a track's alignment meaningful, which
462
+ * is exactly what a live elementary-stream input cannot supply.
463
+ *
464
+ * A negotiated frame rate is a maximum, not a target, so the rate is bounded rather than fixed. Pinning it
465
+ * makes the encoder duplicate frames a slower source never sent, and every duplicate spends the negotiated
466
+ * bit rate on a frame that carries nothing.
467
+ *
468
+ * The VBV buffer holds one second of the negotiated rate rather than two. A buffer is an allowance a window
469
+ * may exceed the rate by, so its size decides how far over the ceiling a finite recording can sit: two
470
+ * seconds of buffer owes a 45-second window 4.4 percent over on arithmetic alone. The live path shares this
471
+ * buffer rule and additionally reserves the transport its own packetization adds; a recording is carried as
472
+ * fragmented MP4 over the HAP session rather than as RTP, so it has neither those packets nor a measurement
473
+ * of what its own container costs.
474
+ *
475
+ * Fragmentation is driven only by keyframes, so every fragment necessarily starts with one. A keyframe
476
+ * interval longer than the fragment length cannot also bound the fragment, so the shorter of the two
477
+ * governs; a duration-driven cut would instead be free to land between keyframes and produce a fragment no
478
+ * controller can open.
479
+ *
480
+ * The forced interval is one frame shorter than that bound, because a keyframe can only be coded on a
481
+ * frame the encoder actually has: asking for one at the bound itself puts the boundary on the first frame
482
+ * at or after it, which measurably overruns the fragment length a controller selected. Shifting the
483
+ * request back by exactly the quantum the boundary can be late by keeps every fragment inside it, and
484
+ * keyframes slightly more often than selected are within a selected maximum.
485
+ *
486
+ * `superfast` is the cheapest `libx264` preset that retains CABAC, and therefore the cheapest one whose
487
+ * coded stream can carry a negotiated Main or High profile.
488
+ */
489
+ function recordingArguments(negotiated) {
490
+ const frameInterval = 1 / Math.max(negotiated.fps, 1);
491
+ const boundSeconds = Math.min(negotiated.iFrameIntervalMs, negotiated.fragmentLengthMs) / 1_000;
492
+ const keyframeInterval = Math.max(boundSeconds - frameInterval, frameInterval);
493
+ const groupOfPictures = String(Math.max(1, Math.round(negotiated.fps * keyframeInterval)));
494
+ return [
495
+ '-hide_banner',
496
+ '-loglevel',
497
+ 'warning',
498
+ '-nostats',
499
+ '-f',
500
+ 'mp4',
501
+ '-i',
502
+ 'pipe:0',
503
+ '-map',
504
+ '0:v:0',
505
+ ...(negotiated.audio ? ['-map', '0:a:0?'] : []),
506
+ '-c:v',
507
+ 'libx264',
508
+ '-preset',
509
+ 'superfast',
510
+ '-tune',
511
+ 'zerolatency',
512
+ '-profile:v',
513
+ negotiated.profile,
514
+ '-level:v',
515
+ negotiated.level,
516
+ '-pix_fmt',
517
+ 'yuv420p',
518
+ '-vf',
519
+ `scale=${negotiated.width}:${negotiated.height}:force_original_aspect_ratio=decrease,pad=${negotiated.width}:${negotiated.height}:(ow-iw)/2:(oh-ih)/2`,
520
+ '-fpsmax',
521
+ String(negotiated.fps),
522
+ '-g',
523
+ groupOfPictures,
524
+ '-keyint_min',
525
+ groupOfPictures,
526
+ '-sc_threshold',
527
+ '0',
528
+ '-force_key_frames',
529
+ `expr:gte(t,n_forced*${keyframeInterval.toFixed(4)})`,
530
+ '-b:v',
531
+ `${negotiated.maxBitRate}k`,
532
+ '-maxrate',
533
+ `${negotiated.maxBitRate}k`,
534
+ '-bufsize',
535
+ `${negotiated.maxBitRate}k`,
536
+ ...(negotiated.audio
537
+ ? [
538
+ '-c:a',
539
+ 'libfdk_aac',
540
+ '-profile:a',
541
+ negotiated.audio.codec === 'AAC-eld' ? 'aac_eld' : 'aac_low',
542
+ '-ar',
543
+ `${negotiated.audio.sampleRate}k`,
544
+ '-ac',
545
+ String(negotiated.audio.channels),
546
+ '-b:a',
547
+ `${negotiated.audio.maxBitRate}k`,
548
+ ]
549
+ : ['-an']),
550
+ '-f',
551
+ 'mp4',
552
+ '-movflags',
553
+ 'frag_keyframe+empty_moov+default_base_moof',
554
+ 'pipe:1',
555
+ ];
556
+ }
557
+ function spawnRecordingMediaProcess(executable, args) {
558
+ return spawn(executable, args, { stdio: ['pipe', 'pipe', 'pipe'] });
559
+ }
560
+ //# sourceMappingURL=recording.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recording.js","sourceRoot":"","sources":["../../src/media/recording.ts"],"names":[],"mappings":"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"}