@chrisalvir1/camera-ui-homekit-4k 0.0.0-stage → 0.6.14

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 (394) hide show
  1. package/CHANGELOG.md +136 -0
  2. package/LICENSE +21 -0
  3. package/LICENSE.md +8 -0
  4. package/README.md +65 -2
  5. package/dist/accessories/AccessoryConfigStore.d.ts +36 -0
  6. package/dist/accessories/AccessoryConfigStore.js +79 -0
  7. package/dist/accessories/CameraAccessoryManager.d.ts +125 -0
  8. package/dist/accessories/CameraAccessoryManager.js +1501 -0
  9. package/dist/accessories/DetectionMotion.d.ts +20 -0
  10. package/dist/accessories/DetectionMotion.js +38 -0
  11. package/dist/accessories/HapCameraAccessory.d.ts +99 -0
  12. package/dist/accessories/HapCameraAccessory.js +366 -0
  13. package/dist/accessories/RecordingAudioDefaults.d.ts +12 -0
  14. package/dist/accessories/RecordingAudioDefaults.js +11 -0
  15. package/dist/admin/AdminController.d.ts +96 -0
  16. package/dist/admin/AdminController.js +494 -0
  17. package/dist/admin/AdminModels.d.ts +124 -0
  18. package/dist/admin/AdminModels.js +1 -0
  19. package/dist/audio/AacConfiguration.d.ts +7 -0
  20. package/dist/audio/AacConfiguration.js +23 -0
  21. package/dist/audio/AacEldRtpTranscoder.d.ts +22 -0
  22. package/dist/audio/AacEldRtpTranscoder.js +118 -0
  23. package/dist/audio/AacRtpPacket.d.ts +2 -0
  24. package/dist/audio/AacRtpPacket.js +23 -0
  25. package/dist/audio/AudioCapabilityResolver.d.ts +6 -0
  26. package/dist/audio/AudioCapabilityResolver.js +27 -0
  27. package/dist/audio/AudioClockVerifier.d.ts +4 -0
  28. package/dist/audio/AudioClockVerifier.js +45 -0
  29. package/dist/audio/AudioFixtureProvenance.d.ts +8 -0
  30. package/dist/audio/AudioFixtureProvenance.js +23 -0
  31. package/dist/audio/AudioRecordingInspector.d.ts +22 -0
  32. package/dist/audio/AudioRecordingInspector.js +189 -0
  33. package/dist/audio/AudioRecordingMuxer.d.ts +1 -0
  34. package/dist/audio/AudioRecordingMuxer.js +41 -0
  35. package/dist/audio/AudioRtpInspector.d.ts +40 -0
  36. package/dist/audio/AudioRtpInspector.js +66 -0
  37. package/dist/audio/AudioSessionEvidence.d.ts +86 -0
  38. package/dist/audio/AudioSessionEvidence.js +29 -0
  39. package/dist/audio/AudioSignalVerifier.d.ts +13 -0
  40. package/dist/audio/AudioSignalVerifier.js +47 -0
  41. package/dist/audio/AudioSourceInspector.d.ts +6 -0
  42. package/dist/audio/AudioSourceInspector.js +29 -0
  43. package/dist/audio/AudioTranscodePlan.d.ts +2 -0
  44. package/dist/audio/AudioTranscodePlan.js +8 -0
  45. package/dist/audio/AudioTypes.d.ts +81 -0
  46. package/dist/audio/AudioTypes.js +1 -0
  47. package/dist/audio/G711.d.ts +4 -0
  48. package/dist/audio/G711.js +18 -0
  49. package/dist/audio/IsoBmff.d.ts +15 -0
  50. package/dist/audio/IsoBmff.js +33 -0
  51. package/dist/audio/NativeAudioEngine.d.ts +48 -0
  52. package/dist/audio/NativeAudioEngine.js +55 -0
  53. package/dist/audio/OpusPacket.d.ts +6 -0
  54. package/dist/audio/OpusPacket.js +15 -0
  55. package/dist/audio/RtpAudioPacket.d.ts +9 -0
  56. package/dist/audio/RtpAudioPacket.js +16 -0
  57. package/dist/audio/SyntheticOpusOgg.d.ts +2 -0
  58. package/dist/audio/SyntheticOpusOgg.js +40 -0
  59. package/dist/camera-ui/CameraUiAdapter.d.ts +227 -0
  60. package/dist/camera-ui/CameraUiAdapter.js +693 -0
  61. package/dist/camera-ui/CameraUiAudioAdapter.d.ts +13 -0
  62. package/dist/camera-ui/CameraUiAudioAdapter.js +258 -0
  63. package/dist/camera-ui/RuntimeMetadata.d.ts +9 -0
  64. package/dist/camera-ui/RuntimeMetadata.js +31 -0
  65. package/dist/camera-ui/adminSchema.d.ts +4 -0
  66. package/dist/camera-ui/adminSchema.js +69 -0
  67. package/dist/camera-ui/cameraSettingsSchema.d.ts +4 -0
  68. package/dist/camera-ui/cameraSettingsSchema.js +77 -0
  69. package/dist/capabilities/CapabilityResolver.d.ts +21 -0
  70. package/dist/capabilities/CapabilityResolver.js +12 -0
  71. package/dist/config/FeatureFlagStore.d.ts +16 -0
  72. package/dist/config/FeatureFlagStore.js +43 -0
  73. package/dist/diagnostics/DiagnosticBundleExporter.d.ts +23 -0
  74. package/dist/diagnostics/DiagnosticBundleExporter.js +57 -0
  75. package/dist/diagnostics/DiagnosticModeStore.d.ts +20 -0
  76. package/dist/diagnostics/DiagnosticModeStore.js +53 -0
  77. package/dist/diagnostics/Diagnostics.d.ts +18 -0
  78. package/dist/diagnostics/Diagnostics.js +44 -0
  79. package/dist/diagnostics/RateLimitedLogger.d.ts +24 -0
  80. package/dist/diagnostics/RateLimitedLogger.js +55 -0
  81. package/dist/diagnostics/SecretRedactor.d.ts +4 -0
  82. package/dist/diagnostics/SecretRedactor.js +55 -0
  83. package/dist/diagnostics/StructuredLogger.d.ts +12 -0
  84. package/dist/diagnostics/StructuredLogger.js +23 -0
  85. package/dist/errors/errors.d.ts +28 -0
  86. package/dist/errors/errors.js +25 -0
  87. package/dist/generated/build-info.d.ts +12 -0
  88. package/dist/generated/build-info.js +227 -0
  89. package/dist/h264/AudioRuntime.d.ts +21 -0
  90. package/dist/h264/AudioRuntime.js +130 -0
  91. package/dist/h264/H264CameraStreamDelegate.d.ts +46 -0
  92. package/dist/h264/H264CameraStreamDelegate.js +419 -0
  93. package/dist/h264/H264RecordingSession.d.ts +50 -0
  94. package/dist/h264/H264RecordingSession.js +247 -0
  95. package/dist/h264/LiveRtpSession.d.ts +59 -0
  96. package/dist/h264/LiveRtpSession.js +230 -0
  97. package/dist/h264/NetworkEndpoint.d.ts +6 -0
  98. package/dist/h264/NetworkEndpoint.js +49 -0
  99. package/dist/h264/RtpContinuity.d.ts +12 -0
  100. package/dist/h264/RtpContinuity.js +31 -0
  101. package/dist/h264/VideoProcessing.d.ts +13 -0
  102. package/dist/h264/VideoProcessing.js +21 -0
  103. package/dist/hap/HapAdapter.d.ts +29 -0
  104. package/dist/hap/HapAdapter.js +73 -0
  105. package/dist/hap/SrtpContext.d.ts +34 -0
  106. package/dist/hap/SrtpContext.js +184 -0
  107. package/dist/hksv3/ConcurrentTierProbe.d.ts +29 -0
  108. package/dist/hksv3/ConcurrentTierProbe.js +82 -0
  109. package/dist/hksv3/Fmp4TierMeasurement.d.ts +4 -0
  110. package/dist/hksv3/Fmp4TierMeasurement.js +17 -0
  111. package/dist/hksv3/H264RtpTranscoder.d.ts +21 -0
  112. package/dist/hksv3/H264RtpTranscoder.js +154 -0
  113. package/dist/hksv3/HapWebRtcDelegate.d.ts +79 -0
  114. package/dist/hksv3/HapWebRtcDelegate.js +92 -0
  115. package/dist/hksv3/LocalRtpDelegate.d.ts +68 -0
  116. package/dist/hksv3/LocalRtpDelegate.js +699 -0
  117. package/dist/hksv3/LocalRtpProtocol.d.ts +89 -0
  118. package/dist/hksv3/LocalRtpProtocol.js +239 -0
  119. package/dist/hksv3/OpusRtpTranscoder.d.ts +39 -0
  120. package/dist/hksv3/OpusRtpTranscoder.js +227 -0
  121. package/dist/hksv3/SFrame.d.ts +71 -0
  122. package/dist/hksv3/SFrame.js +326 -0
  123. package/dist/hksv3/SFrameRtp.d.ts +38 -0
  124. package/dist/hksv3/SFrameRtp.js +137 -0
  125. package/dist/hksv3/VideoTierResolver.d.ts +49 -0
  126. package/dist/hksv3/VideoTierResolver.js +86 -0
  127. package/dist/hksv3/WebRtcSecureVideoSession.d.ts +94 -0
  128. package/dist/hksv3/WebRtcSecureVideoSession.js +493 -0
  129. package/dist/identity/IdentityStore.d.ts +16 -0
  130. package/dist/identity/IdentityStore.js +46 -0
  131. package/dist/index.d.ts +46 -0
  132. package/dist/index.js +206 -0
  133. package/dist/media/AccessUnitDigest.d.ts +10 -0
  134. package/dist/media/AccessUnitDigest.js +59 -0
  135. package/dist/media/AccessUnitMatcher.d.ts +43 -0
  136. package/dist/media/AccessUnitMatcher.js +80 -0
  137. package/dist/media/AudioPolicy.d.ts +7 -0
  138. package/dist/media/AudioPolicy.js +19 -0
  139. package/dist/media/CameraMediaProfile.d.ts +13 -0
  140. package/dist/media/CameraMediaProfile.js +25 -0
  141. package/dist/media/FixtureProvenance.d.ts +79 -0
  142. package/dist/media/FixtureProvenance.js +100 -0
  143. package/dist/media/Fmp4Inspector.d.ts +27 -0
  144. package/dist/media/Fmp4Inspector.js +253 -0
  145. package/dist/media/H264RtpAssembler.d.ts +43 -0
  146. package/dist/media/H264RtpAssembler.js +184 -0
  147. package/dist/media/HevcRtpAssembler.d.ts +49 -0
  148. package/dist/media/HevcRtpAssembler.js +203 -0
  149. package/dist/media/MediaPolicy.d.ts +12 -0
  150. package/dist/media/MediaPolicy.js +13 -0
  151. package/dist/media/NativePassthroughVerifier.d.ts +20 -0
  152. package/dist/media/NativePassthroughVerifier.js +53 -0
  153. package/dist/media/NativeVideoEngine.d.ts +38 -0
  154. package/dist/media/NativeVideoEngine.js +93 -0
  155. package/dist/media/Phase3Evidence.d.ts +36 -0
  156. package/dist/media/Phase3Evidence.js +170 -0
  157. package/dist/media/SourceBitstreamExtractor.d.ts +27 -0
  158. package/dist/media/SourceBitstreamExtractor.js +302 -0
  159. package/dist/media/SourceInspector.d.ts +15 -0
  160. package/dist/media/SourceInspector.js +224 -0
  161. package/dist/media/SourceSelector.d.ts +13 -0
  162. package/dist/media/SourceSelector.js +31 -0
  163. package/dist/media/VideoCapabilityResolver.d.ts +5 -0
  164. package/dist/media/VideoCapabilityResolver.js +10 -0
  165. package/dist/media/VideoEvidenceCollector.d.ts +12 -0
  166. package/dist/media/VideoEvidenceCollector.js +34 -0
  167. package/dist/media/VideoPolicy.d.ts +8 -0
  168. package/dist/media/VideoPolicy.js +43 -0
  169. package/dist/media/VideoSessionManager.d.ts +16 -0
  170. package/dist/media/VideoSessionManager.js +61 -0
  171. package/dist/mqtt/MqttEntityMapper.d.ts +23 -0
  172. package/dist/mqtt/MqttEntityMapper.js +120 -0
  173. package/dist/mqtt/MqttPtzBridge.d.ts +51 -0
  174. package/dist/mqtt/MqttPtzBridge.js +349 -0
  175. package/dist/mqtt/MqttSettingsStore.d.ts +18 -0
  176. package/dist/mqtt/MqttSettingsStore.js +56 -0
  177. package/dist/pairing/PairingPresenter.d.ts +7 -0
  178. package/dist/pairing/PairingPresenter.js +6 -0
  179. package/dist/persistence/AtomicJsonStore.d.ts +12 -0
  180. package/dist/persistence/AtomicJsonStore.js +62 -0
  181. package/dist/recording/AudioOnlyFmp4Session.d.ts +46 -0
  182. package/dist/recording/AudioOnlyFmp4Session.js +276 -0
  183. package/dist/recording/CameraUiHdsRecordingDelegate.d.ts +47 -0
  184. package/dist/recording/CameraUiHdsRecordingDelegate.js +334 -0
  185. package/dist/recording/HevcOpusCmafDelegate.d.ts +34 -0
  186. package/dist/recording/HevcOpusCmafDelegate.js +267 -0
  187. package/dist/recording/RecordingAdapter.d.ts +8 -0
  188. package/dist/recording/RecordingAdapter.js +4 -0
  189. package/dist/recording/RecordingTiming.d.ts +4 -0
  190. package/dist/recording/RecordingTiming.js +107 -0
  191. package/dist/services/ServiceMapper.d.ts +11 -0
  192. package/dist/services/ServiceMapper.js +9 -0
  193. package/dist/sessions/LiveSessionManager.d.ts +2 -0
  194. package/dist/sessions/LiveSessionManager.js +2 -0
  195. package/dist/sessions/SessionContext.d.ts +1 -0
  196. package/dist/sessions/SessionContext.js +1 -0
  197. package/dist/sessions/SessionId.d.ts +1 -0
  198. package/dist/sessions/SessionId.js +2 -0
  199. package/dist/sessions/SessionManager.d.ts +24 -0
  200. package/dist/sessions/SessionManager.js +60 -0
  201. package/dist/sessions/resilience.d.ts +3 -0
  202. package/dist/sessions/resilience.js +29 -0
  203. package/dist/types/diagnostics.d.ts +21 -0
  204. package/dist/types/diagnostics.js +1 -0
  205. package/dist/types/media.d.ts +163 -0
  206. package/dist/types/media.js +9 -0
  207. package/dist/types/sessions.d.ts +11 -0
  208. package/dist/types/sessions.js +1 -0
  209. package/dist/version/LocalRegistryServer.d.ts +12 -0
  210. package/dist/version/LocalRegistryServer.js +165 -0
  211. package/dist/version/VersionManager.d.ts +12 -0
  212. package/dist/version/VersionManager.js +15 -0
  213. package/docs/CONFIRMED_CHANGES_AND_VERSIONING.md +527 -0
  214. package/docs/HKSV3_HEVC_CHANGES.md +25 -0
  215. package/docs/architecture.md +192 -0
  216. package/docs/atomic-rule-hevc-hksv3.md +74 -0
  217. package/docs/audio-fixtures-manifest.json +105 -0
  218. package/docs/bidirectional-audio.md +19 -0
  219. package/docs/capability-audit-plan.md +53 -0
  220. package/docs/deployment-0.6.12.md +56 -0
  221. package/docs/detection-bridge-policy.md +120 -0
  222. package/docs/development.md +181 -0
  223. package/docs/diagnostics.md +87 -0
  224. package/docs/file-tree.txt +83 -0
  225. package/docs/fixture-determinism.json +30 -0
  226. package/docs/fixtures-manifest.json +525 -0
  227. package/docs/h264-audio-normalization.md +97 -0
  228. package/docs/h264-wifi-validation.md +68 -0
  229. package/docs/hksv3-ios27-audit-plan.md +133 -0
  230. package/docs/hksv3-ios27-checkpoint.md +328 -0
  231. package/docs/hksv3-phase-1-audit.md +76 -0
  232. package/docs/hksv3-readiness-audit-2026-10-16.md +54 -0
  233. package/docs/home-assistant-mqtt.md +103 -0
  234. package/docs/live-hevc-preserved-settings.md +11 -0
  235. package/docs/npm-publication-readiness.md +55 -0
  236. package/docs/phase-1-validation.md +108 -0
  237. package/docs/phase-2-validation.md +222 -0
  238. package/docs/phase-3-evidence-history.json +854 -0
  239. package/docs/phase-3-evidence.json +2877 -0
  240. package/docs/phase-3-validation.md +345 -0
  241. package/docs/phase-4-checkpoint.md +96 -0
  242. package/docs/phase-4-harness.json +1499 -0
  243. package/docs/phase-4-runtime-evidence.json +904 -0
  244. package/docs/phase-4-validation.md +217 -0
  245. package/docs/security.md +124 -0
  246. package/docs/tapo-c402-current-checkpoint.md +168 -0
  247. package/logo.png +0 -0
  248. package/package.json +86 -3
  249. package/vendor/hap-nodejs/LICENSE +176 -0
  250. package/vendor/hap-nodejs/PATCH.md +37 -0
  251. package/vendor/hap-nodejs/README.md +86 -0
  252. package/vendor/hap-nodejs/dist/accessories/AirConditioner_accessory.d.ts +2 -0
  253. package/vendor/hap-nodejs/dist/accessories/AirConditioner_accessory.js +128 -0
  254. package/vendor/hap-nodejs/dist/accessories/AppleTVRemote_accessory.d.ts +2 -0
  255. package/vendor/hap-nodejs/dist/accessories/AppleTVRemote_accessory.js +159 -0
  256. package/vendor/hap-nodejs/dist/accessories/Camera_accessory.d.ts +2 -0
  257. package/vendor/hap-nodejs/dist/accessories/Camera_accessory.js +545 -0
  258. package/vendor/hap-nodejs/dist/accessories/Fan_accessory.d.ts +2 -0
  259. package/vendor/hap-nodejs/dist/accessories/Fan_accessory.js +74 -0
  260. package/vendor/hap-nodejs/dist/accessories/GarageDoorOpener_accessory.d.ts +2 -0
  261. package/vendor/hap-nodejs/dist/accessories/GarageDoorOpener_accessory.js +78 -0
  262. package/vendor/hap-nodejs/dist/accessories/Light-AdaptiveLighting_accessory.d.ts +2 -0
  263. package/vendor/hap-nodejs/dist/accessories/Light-AdaptiveLighting_accessory.js +106 -0
  264. package/vendor/hap-nodejs/dist/accessories/Light_accessory.d.ts +2 -0
  265. package/vendor/hap-nodejs/dist/accessories/Light_accessory.js +145 -0
  266. package/vendor/hap-nodejs/dist/accessories/Lock_accessory.d.ts +2 -0
  267. package/vendor/hap-nodejs/dist/accessories/Lock_accessory.js +76 -0
  268. package/vendor/hap-nodejs/dist/accessories/MotionSensor_accessory.d.ts +2 -0
  269. package/vendor/hap-nodejs/dist/accessories/MotionSensor_accessory.js +45 -0
  270. package/vendor/hap-nodejs/dist/accessories/Outlet_accessory.d.ts +2 -0
  271. package/vendor/hap-nodejs/dist/accessories/Outlet_accessory.js +79 -0
  272. package/vendor/hap-nodejs/dist/accessories/SmartSpeaker_accessory.d.ts +2 -0
  273. package/vendor/hap-nodejs/dist/accessories/SmartSpeaker_accessory.js +44 -0
  274. package/vendor/hap-nodejs/dist/accessories/Sprinkler_accessory.d.ts +2 -0
  275. package/vendor/hap-nodejs/dist/accessories/Sprinkler_accessory.js +128 -0
  276. package/vendor/hap-nodejs/dist/accessories/TV_accessory.d.ts +2 -0
  277. package/vendor/hap-nodejs/dist/accessories/TV_accessory.js +101 -0
  278. package/vendor/hap-nodejs/dist/accessories/TemperatureSensor_accessory.d.ts +2 -0
  279. package/vendor/hap-nodejs/dist/accessories/TemperatureSensor_accessory.js +44 -0
  280. package/vendor/hap-nodejs/dist/accessories/Wi-FiRouter_accessory.d.ts +3 -0
  281. package/vendor/hap-nodejs/dist/accessories/Wi-FiRouter_accessory.js +17 -0
  282. package/vendor/hap-nodejs/dist/accessories/Wi-FiSatellite_accessory.d.ts +3 -0
  283. package/vendor/hap-nodejs/dist/accessories/Wi-FiSatellite_accessory.js +19 -0
  284. package/vendor/hap-nodejs/dist/accessories/gstreamer-audioProducer.d.ts +25 -0
  285. package/vendor/hap-nodejs/dist/accessories/gstreamer-audioProducer.js +145 -0
  286. package/vendor/hap-nodejs/dist/accessories/types.d.ts +78 -0
  287. package/vendor/hap-nodejs/dist/accessories/types.js +88 -0
  288. package/vendor/hap-nodejs/dist/index.d.ts +50 -0
  289. package/vendor/hap-nodejs/dist/index.js +54 -0
  290. package/vendor/hap-nodejs/dist/internal-types.d.ts +76 -0
  291. package/vendor/hap-nodejs/dist/internal-types.js +80 -0
  292. package/vendor/hap-nodejs/dist/lib/Accessory.d.ts +521 -0
  293. package/vendor/hap-nodejs/dist/lib/Accessory.js +1762 -0
  294. package/vendor/hap-nodejs/dist/lib/Advertiser.d.ts +190 -0
  295. package/vendor/hap-nodejs/dist/lib/Advertiser.js +592 -0
  296. package/vendor/hap-nodejs/dist/lib/Bridge.d.ts +12 -0
  297. package/vendor/hap-nodejs/dist/lib/Bridge.js +19 -0
  298. package/vendor/hap-nodejs/dist/lib/Characteristic.d.ts +1768 -0
  299. package/vendor/hap-nodejs/dist/lib/Characteristic.js +2532 -0
  300. package/vendor/hap-nodejs/dist/lib/HAPServer.d.ts +299 -0
  301. package/vendor/hap-nodejs/dist/lib/HAPServer.js +968 -0
  302. package/vendor/hap-nodejs/dist/lib/Service.d.ts +598 -0
  303. package/vendor/hap-nodejs/dist/lib/Service.js +797 -0
  304. package/vendor/hap-nodejs/dist/lib/camera/CMAFIngest.d.ts +102 -0
  305. package/vendor/hap-nodejs/dist/lib/camera/CMAFIngest.js +317 -0
  306. package/vendor/hap-nodejs/dist/lib/camera/HDSSnapshotTransport.d.ts +38 -0
  307. package/vendor/hap-nodejs/dist/lib/camera/HDSSnapshotTransport.js +174 -0
  308. package/vendor/hap-nodejs/dist/lib/camera/RTPProxy.d.ts +59 -0
  309. package/vendor/hap-nodejs/dist/lib/camera/RTPProxy.js +267 -0
  310. package/vendor/hap-nodejs/dist/lib/camera/RTPStreamManagement.d.ts +379 -0
  311. package/vendor/hap-nodejs/dist/lib/camera/RTPStreamManagement.js +1021 -0
  312. package/vendor/hap-nodejs/dist/lib/camera/RecordingManagement.d.ts +325 -0
  313. package/vendor/hap-nodejs/dist/lib/camera/RecordingManagement.js +800 -0
  314. package/vendor/hap-nodejs/dist/lib/camera/SecureVideoCredentials.d.ts +20 -0
  315. package/vendor/hap-nodejs/dist/lib/camera/SecureVideoCredentials.js +48 -0
  316. package/vendor/hap-nodejs/dist/lib/camera/SecureVideoTypes.d.ts +618 -0
  317. package/vendor/hap-nodejs/dist/lib/camera/SecureVideoTypes.js +911 -0
  318. package/vendor/hap-nodejs/dist/lib/camera/index.d.ts +8 -0
  319. package/vendor/hap-nodejs/dist/lib/camera/index.js +11 -0
  320. package/vendor/hap-nodejs/dist/lib/controller/AdaptiveLightingController.d.ts +452 -0
  321. package/vendor/hap-nodejs/dist/lib/controller/AdaptiveLightingController.js +868 -0
  322. package/vendor/hap-nodejs/dist/lib/controller/CameraController.d.ts +410 -0
  323. package/vendor/hap-nodejs/dist/lib/controller/CameraController.js +658 -0
  324. package/vendor/hap-nodejs/dist/lib/controller/Controller.d.ts +197 -0
  325. package/vendor/hap-nodejs/dist/lib/controller/Controller.js +32 -0
  326. package/vendor/hap-nodejs/dist/lib/controller/DoorbellController.d.ts +59 -0
  327. package/vendor/hap-nodejs/dist/lib/controller/DoorbellController.js +102 -0
  328. package/vendor/hap-nodejs/dist/lib/controller/RemoteController.d.ts +434 -0
  329. package/vendor/hap-nodejs/dist/lib/controller/RemoteController.js +1178 -0
  330. package/vendor/hap-nodejs/dist/lib/controller/SecureVideoController.d.ts +380 -0
  331. package/vendor/hap-nodejs/dist/lib/controller/SecureVideoController.js +947 -0
  332. package/vendor/hap-nodejs/dist/lib/controller/index.d.ts +7 -0
  333. package/vendor/hap-nodejs/dist/lib/controller/index.js +10 -0
  334. package/vendor/hap-nodejs/dist/lib/datastream/DataStreamManagement.d.ts +73 -0
  335. package/vendor/hap-nodejs/dist/lib/datastream/DataStreamManagement.js +205 -0
  336. package/vendor/hap-nodejs/dist/lib/datastream/DataStreamParser.d.ts +186 -0
  337. package/vendor/hap-nodejs/dist/lib/datastream/DataStreamParser.js +880 -0
  338. package/vendor/hap-nodejs/dist/lib/datastream/DataStreamServer.d.ts +351 -0
  339. package/vendor/hap-nodejs/dist/lib/datastream/DataStreamServer.js +878 -0
  340. package/vendor/hap-nodejs/dist/lib/datastream/index.d.ts +4 -0
  341. package/vendor/hap-nodejs/dist/lib/datastream/index.js +7 -0
  342. package/vendor/hap-nodejs/dist/lib/definitions/CharacteristicDefinitions.d.ts +2245 -0
  343. package/vendor/hap-nodejs/dist/lib/definitions/CharacteristicDefinitions.js +4957 -0
  344. package/vendor/hap-nodejs/dist/lib/definitions/ServiceDefinitions.d.ts +584 -0
  345. package/vendor/hap-nodejs/dist/lib/definitions/ServiceDefinitions.js +1518 -0
  346. package/vendor/hap-nodejs/dist/lib/definitions/generate-definitions.d.ts +34 -0
  347. package/vendor/hap-nodejs/dist/lib/definitions/generate-definitions.js +624 -0
  348. package/vendor/hap-nodejs/dist/lib/definitions/generator-configuration.d.ts +22 -0
  349. package/vendor/hap-nodejs/dist/lib/definitions/generator-configuration.js +734 -0
  350. package/vendor/hap-nodejs/dist/lib/definitions/index.d.ts +3 -0
  351. package/vendor/hap-nodejs/dist/lib/definitions/index.js +6 -0
  352. package/vendor/hap-nodejs/dist/lib/gen/HomeKit.d.ts +8 -0
  353. package/vendor/hap-nodejs/dist/lib/gen/HomeKit.js +9 -0
  354. package/vendor/hap-nodejs/dist/lib/model/AccessoryInfo.d.ts +91 -0
  355. package/vendor/hap-nodejs/dist/lib/model/AccessoryInfo.js +311 -0
  356. package/vendor/hap-nodejs/dist/lib/model/ControllerStorage.d.ts +46 -0
  357. package/vendor/hap-nodejs/dist/lib/model/ControllerStorage.js +277 -0
  358. package/vendor/hap-nodejs/dist/lib/model/HAPFileStorage.d.ts +75 -0
  359. package/vendor/hap-nodejs/dist/lib/model/HAPFileStorage.js +190 -0
  360. package/vendor/hap-nodejs/dist/lib/model/HAPStorage.d.ts +26 -0
  361. package/vendor/hap-nodejs/dist/lib/model/HAPStorage.js +79 -0
  362. package/vendor/hap-nodejs/dist/lib/model/IdentifierCache.d.ts +33 -0
  363. package/vendor/hap-nodejs/dist/lib/model/IdentifierCache.js +114 -0
  364. package/vendor/hap-nodejs/dist/lib/tv/AccessControlManagement.d.ts +83 -0
  365. package/vendor/hap-nodejs/dist/lib/tv/AccessControlManagement.js +127 -0
  366. package/vendor/hap-nodejs/dist/lib/util/checkName.d.ts +8 -0
  367. package/vendor/hap-nodejs/dist/lib/util/checkName.js +28 -0
  368. package/vendor/hap-nodejs/dist/lib/util/clone.d.ts +7 -0
  369. package/vendor/hap-nodejs/dist/lib/util/clone.js +22 -0
  370. package/vendor/hap-nodejs/dist/lib/util/color-utils.d.ts +18 -0
  371. package/vendor/hap-nodejs/dist/lib/util/color-utils.js +442 -0
  372. package/vendor/hap-nodejs/dist/lib/util/eventedhttp.d.ts +251 -0
  373. package/vendor/hap-nodejs/dist/lib/util/eventedhttp.js +714 -0
  374. package/vendor/hap-nodejs/dist/lib/util/hapCrypto.d.ts +50 -0
  375. package/vendor/hap-nodejs/dist/lib/util/hapCrypto.js +185 -0
  376. package/vendor/hap-nodejs/dist/lib/util/hapStatusError.d.ts +16 -0
  377. package/vendor/hap-nodejs/dist/lib/util/hapStatusError.js +29 -0
  378. package/vendor/hap-nodejs/dist/lib/util/net-utils.d.ts +21 -0
  379. package/vendor/hap-nodejs/dist/lib/util/net-utils.js +79 -0
  380. package/vendor/hap-nodejs/dist/lib/util/once.d.ts +7 -0
  381. package/vendor/hap-nodejs/dist/lib/util/once.js +22 -0
  382. package/vendor/hap-nodejs/dist/lib/util/promise-utils.d.ts +14 -0
  383. package/vendor/hap-nodejs/dist/lib/util/promise-utils.js +29 -0
  384. package/vendor/hap-nodejs/dist/lib/util/request-util.d.ts +36 -0
  385. package/vendor/hap-nodejs/dist/lib/util/request-util.js +108 -0
  386. package/vendor/hap-nodejs/dist/lib/util/time.d.ts +9 -0
  387. package/vendor/hap-nodejs/dist/lib/util/time.js +23 -0
  388. package/vendor/hap-nodejs/dist/lib/util/tlv.d.ts +90 -0
  389. package/vendor/hap-nodejs/dist/lib/util/tlv.js +318 -0
  390. package/vendor/hap-nodejs/dist/lib/util/uuid.d.ts +23 -0
  391. package/vendor/hap-nodejs/dist/lib/util/uuid.js +78 -0
  392. package/vendor/hap-nodejs/dist/types.d.ts +276 -0
  393. package/vendor/hap-nodejs/dist/types.js +11 -0
  394. package/vendor/hap-nodejs/package.json +93 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,136 @@
1
+ # Changelog
2
+
3
+ ## [0.6.14] — npm account scope correction
4
+
5
+ - Rename the public package from `@chrisalvir/camera-ui-homekit-4k` to
6
+ `@chrisalvir1/camera-ui-homekit-4k` so its scope matches the authenticated npm
7
+ username. Update local bundle validation, Camera.UI's development registry,
8
+ and bundle smoke checks to use the same identity. No camera runtime behavior
9
+ changed.
10
+
11
+ ## [0.6.13] — public package preparation
12
+
13
+ - Correct the public README to describe the 0.6.12 runtime evidence and its
14
+ limits instead of the obsolete 0.4.0 phase status.
15
+ - Narrow the npm package allowlist to compiled runtime files, required HAP
16
+ runtime files, documentation, and the official logo. This removes stale
17
+ compiler copies, source maps, and nested binary shims from the release
18
+ tarball. No media, detection, pairing, or camera runtime behavior changed.
19
+ - Add owner-selected proprietary use terms and public-release metadata. No media,
20
+ detection, pairing, or camera runtime behavior changed.
21
+
22
+ ## [0.6.12]
23
+
24
+ - Keep very brief visual events asserted for at least one second so a same-tick SDK start/end cannot collapse into a missed HomeKit notification. Long detections still follow the SDK lifecycle; pending release is canceled on renewed motion and disposed on unpublish. Applies to both H.264 and HEVC exports.
25
+
26
+ ## [0.6.11]
27
+
28
+ - Preserve Camera.UI motion/object events until their actual SDK end; remove the artificial 15-second motion reset that interrupted long detections for both H.264/HKSV and HEVC/HKSV3. Log HomeKit motion transitions per camera without retaining images or identities.
29
+ - Keep HAP dependencies at the package root so Camera.UI extraction cannot remove them after dependency installation. Bundle smoke now imports the extracted HAP runtime rather than the workspace copy.
30
+
31
+ ## [0.6.10]
32
+
33
+ - Accept valid legacy HomeKit live requests up to 1080p without rejecting an existing paired controller solely for a different requested resolution. The selected measured-source policy still determines actual video output: native passthrough up to 1080p and 1080p conversion above it. Logs distinguish requested and actual output dimensions.
34
+
35
+ ## [0.6.9]
36
+
37
+ - H.264 live and HKSV use measured source dimensions: video up to 1920×1080 is passed through; larger sources use a verified H.264 encoder at 1920×1080. Existing negotiated audio routes are retained.
38
+ - Shared Camera.UI detection bridge accepts visual object labels such as car, truck, dog and cat from assigned detectors, including future camera exports. Aggregate event end always releases motion even when closing metadata is empty.
39
+ - HEVC/HKSV3 recording audio receives its persistent one-time first-export default after HAP restores state. Later HomeKit audio choices are retained.
40
+ - HEVC video/audio transport, its recording implementation and pairing identities are preserved. A worker reload briefly interrupts every accessory served by that worker.
41
+
42
+ ## [0.6.8]
43
+
44
+ - **Camera.UI bundle updates:** The loopback update registry now serves the official `cui bundle` package, including its `bundle.zip`. Camera.UI extracts that bundle into the worker runtime after installation; a source-only package archive could update package metadata while leaving the old runtime code active.
45
+
46
+ ## [0.6.7]
47
+
48
+ - **Reliable Camera.UI self-updates:** Moved the scoped package registry to a detached loopback daemon with a storage-backed package snapshot and worker lease. Camera.UI can now stop the plugin worker before fetching its replacement without taking down the package endpoint; the daemon exits after the worker has been absent for five minutes.
49
+ - **Fail closed on invalid packages:** Removed the fake 29-byte gzip fallback. The registry refuses to advertise an update unless it can create or verify a real package archive and matching SHA-1/SHA-512 integrity values.
50
+
51
+ ## [0.6.6]
52
+
53
+ - **Simplified Camera.UI Admin:** Removed redundant global administration, diagnostic-mode, GitHub-updater, and HomeKit-camera tabs; pairing and unlink controls remain with each camera.
54
+ - **Camera.UI-native updates:** Removed the duplicate in-plugin GitHub update flow so plugin updates are managed by Camera.UI.
55
+ - **Removed unused audio settings UI:** Deleted the unconnected audio settings form while retaining the existing audio engines and runtime diagnostics.
56
+
57
+ ## [0.6.5]
58
+
59
+ - **Camera.UI Backchannel Discovery:** Explicitly probes each exported Camera.UI source for microphone/backchannel support before constructing HAP services. H.264 and HEVC/HKSV3 expose HomeKit talkback only when the selected source reports a supported codec and does not disable backchannel; accessory service updates preserve existing pairing.
60
+
61
+ ## [0.6.3]
62
+
63
+ - **Universal HEVC & HKSV3 Configuration Parity (IPCAM IPC Blueprint):** All Vimtag cameras (SALA, OFICINA, JARDIN, COCHERA, AREA DE CAFE, RECAMARA) and any newly added HEVC cameras automatically adopt the exact configuration established on IPCAM IPC. Automatically assigns `@chrisalvir/camera-ui-homekit-4k`, `@camera.ui/camera-ui-coreml`, and `@camera.ui/camera-ui-opencv` for full motion, object, face, person, and clip detection.
64
+ - **Go2RTC Stream Preload & Elimination of Audio Teardown Collision:** Configured persistent Go2RTC stream preloading (`preload: audio=&video=`) and disabled RTSP backchannel handshakes (`backchannelDisabled: true`, `#backchannel=0#noBackchannel`) on Vimtag cloud relay sources, preventing WAN timeout disconnects (`i/o timeout`) and resolving Go2RTC's `error="start from CONN state"`.
65
+ - **RTSP Direct Resolution Fallback for Multiplexed Sources:** Refined `resolveDirectCameraRtspUrl` to strictly return direct URLs only for verified private LAN IP addresses (`192.168.x.x`, `10.x.x.x`, `172.16-31.x.x`). For cloud and plugin cameras, gracefully falls back to Camera.UI multiplexed endpoints with proper query parameters (`?video&audio`), guaranteeing that FFmpeg HDS recordings generate complete `moov` initialization segments containing both video and AAC-LC audio tracks.
66
+ - **Auto-Provisioning on Camera Addition (`CameraAutoConfig`):** Added automated configuration synchronization upon camera addition (`onCameraAdded`) and startup (`configureCameras`). Newly added HEVC cameras immediately receive HKSV3 configuration, continuous recording settings, and automatic HomeKit export without manual intervention.
67
+ - **Permanent H.264 & Tapo Isolation:** Kept Tapo and all existing H.264 logic strictly untouched (`src/h264/*` unchanged); future H.264 cameras automatically inherit Tapo's standard H.264 configuration.
68
+ - **FirmwareRevision Update:** Incremented firmware revision to `0.6.3`.
69
+
70
+ ## [0.6.2]
71
+
72
+ - **Third-Party & Plugin Camera RTSP Direct Resolution Fallback:** Added local go2rtc RTSP endpoint fallback (`rtsp://127.0.0.1:2101/${streamName}`) for cameras integrated via third-party device plugins (e.g., Vimtag) that do not expose external ONVIF RTSP URLs or use `cui://` internal protocols. Eliminates FFmpeg `Protocol not found` exit crashes, restoring continuous live audio and HKSV recordings.
73
+ - **Automatic Frame Worker Activation for Plugin Cameras:** Added proactive RPC connection (`camera.${id}.controller.rpc.connect()`) within `CameraUiAdapter` upon camera attachment. Ensures Camera.UI Frame Workers start automatically when plugin cameras initialize with `connected: false`, enabling instant OpenCV and CoreML motion/person detection.
74
+ - **Dynamic Sensor Assignment Lifecycle Synchronization:** Implemented `onSensorsChanged` hook and notification pipeline in `CameraUiAdapter` to dynamically re-bind motion and occupancy sensors when sensors are attached or reassigned in Camera.UI without requiring a full plugin restart.
75
+ - **Robust Motion Event Keying:** Provided timestamped fallback keys (`evt-${type}-${timestamp}`) for un-keyed detection triggers from OpenCV and CoreML trackers, ensuring reliable HomeKit `MotionDetected` assertions and event clearance.
76
+ - **Dynamic FirmwareRevision Alignment:** Updated accessory creation to dynamically bind `FirmwareRevision` to `buildInfo.packageVersion` (`0.6.2`) across both H.264 and HEVC camera accessories.
77
+ - **Permanent H.264 & HEVC Pipeline Isolation:** Strictly preserved the classic H.264 pipeline (Tapo and all future H.264 additions) with zero changes to `src/h264/*`, while extending HEVC HKSV3 enhancements universally to all current and future HEVC cameras.
78
+
79
+ ## [0.6.1]
80
+
81
+ - **Automatic Camera Export & Removal of Manual Button:** Cameras assigned to the HOMEKIT 4K plugin are now automatically exported to Apple Home upon activation alongside other plugins (CoreML, OpenCV), eliminating the need for manual button clicks. Removed the redundant «Exportar esta cámara» button from the UI. Pre-warmed pairing QR generation renders the branded setup QR code and manual PIN immediately when entering the pairing section.
82
+ - **HEVC HKSV3 Audio Clock Synchronization (16 kHz):** Scaled Opus RTP timestamps by $16\text{k} / 48\text{k}$ (320 ticks per 20ms frame) to match HomeKit's negotiated 16 kHz audio sample rate (`sampleRate: 1`), eliminating the 3x timestamp forward surge and completely resolving the cyclic 1-second audio / mute stutter.
83
+ - **Parasitic Microphone Whine & Artifact Elimination:** Implemented a specialized Butterworth 2-pole bandpass filter (`highpass=f=150:poles=2,lowpass=f=3500:poles=2`), FFT adaptive noise reduction (`afftdn=nf=-40`), clean gain boost, and switched Opus encoding to `-application voip -b:a 48k -vbr off`, completely eliminating the 6.28 kHz hardware whistle, background cricket buzz, and metallic CELT ringing across all HEVC live streams and recordings.
84
+ - **Independent Audio Jitter Buffer Operation:** Omitted periodic audio RTCP Sender Reports in HKSV3 Multi-Tier RTP so HomeKit plays live audio continuously without inter-stream clock clashes against video.
85
+ - **Universal Multi-Camera Motion Detection:** Preserved unified event processing across Camera.UI plugins, OpenCV, CoreML, and YOLO with edge-trigger dwell safety timers to guarantee reliable successive HKSV recordings for all cameras.
86
+ - **FirmwareRevision Update:** Bumped accessory firmware revision to `0.6.1` across all H.264 and H.265 camera accessories.
87
+
88
+ ## [0.6.0]
89
+
90
+ - **Live H.264 Audio Engine (Opus + Genuine AAC-ELD):** Resolved silence in Apple Home live streams by implementing dual-engine routing: in-memory zero-latency Opus transcoding via `node-av` with 20ms frame pacing, and real-time AAC-ELD (480 samples/frame) transcoding via FFmpeg `libfdk_aac`.
91
+ - **HomeKit Cache Invalidation:** Bumped accessory `FirmwareRevision` to `0.6.0` to force Apple Home clients to refresh their cached accessory profile and prioritize Opus streaming.
92
+ - **Audio Clock Continuity Calibration:** Synchronized audio timeline continuity clocks with negotiated client sample rates (24kHz / 16kHz / 8kHz).
93
+ - **Embedded Registry & UI Integration:** Updated local package manifests and registry endpoints to expose v0.6.0 and changelog directly within Camera.UI.
94
+
95
+ ## [0.5.9]
96
+
97
+ - **Gapless stream handover on Wi-Fi reconfigure:** Connects the new FFmpeg live pipeline to Go2RTC before terminating the previous pipeline, eliminating RTSP socket teardown collisions (`read tcp: i/o timeout`) and resolving "Sin respuesta" when viewing on local Wi-Fi.
98
+ - **Bitrate-only reconfigure skip:** Dynamically ignores reconfigure requests that only alter bitrate without changing resolution, avoiding unnecessary FFmpeg restarts.
99
+ - **H.264 audio probe caching:** Caches RTSP audio probe results for 1 hour to prevent RTSP stream saturation during frequent motion and HKSV recording events.
100
+ - **Embedded local registry integration:** Serves npm packuments and tarballs via loopback (`127.0.0.1:4873`), enabling seamless Camera.UI version discovery, one-click updates, and full changelog display.
101
+
102
+ ## [0.5.8]
103
+
104
+ - **Hot stream reconfigure:** Dynamic resolution scaling and transition support for local Wi-Fi peer-to-peer HomeKit sessions.
105
+ - **Resilient UDP track sockets:** Independent video/audio socket binding for bidirectional RTP and RTCP packets.
106
+
107
+ ## [0.5.6]
108
+
109
+ - **Dynamic resolution scaling & MTU safety:** MTU-safe packet clamping and dynamic video profile scaling.
110
+ - **Non-blocking audio probe:** Async probe execution with resilient fallback.
111
+
112
+ ## [0.5.5]
113
+
114
+ - **Native 1080p enforcement for Tapo C402:** Fully removed any residual 2K (2304x1296) code assumptions; strictly enforce native 1080p (1920x1080) matching factory sensor specifications.
115
+
116
+ ## [0.5.0]
117
+
118
+ - **HKSV classic H.264 recording:** Normalized H.264 recording pipeline with live AAC-LC 48kHz audio transcoding from PCMA/G.711a.
119
+
120
+ ## [0.4.0]
121
+
122
+ - **HKSV3 preparation:** Integration foundations for HomeKit Secure Video and WebRTC RTP transport.
123
+
124
+ ## [0.3.0]
125
+
126
+ - On-demand source inspection, conservative source selection and video-only plans.
127
+ - Camera.UI source-to-output comparison and session lifecycle model.
128
+
129
+ ## [0.2.0]
130
+
131
+ - SDK camera/sensor observables, idempotent subscriptions and neutral capability model.
132
+ - Pinned local HAP compatibility build.
133
+
134
+ ## [0.1.0]
135
+
136
+ - Phase 1 foundation: independent Camera.UI SDK entry and local bundle.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ HOMEKIT 4K PROPRIETARY SOFTWARE LICENSE
2
+
3
+ Copyright (c) 2026 Chrisalvir. All rights reserved.
4
+
5
+ Permission is granted to download, install, and run an unmodified copy of
6
+ HOMEKIT 4K with Camera.UI for lawful personal or commercial use. This permission
7
+ does not transfer ownership of the software.
8
+
9
+ You may not modify, adapt, translate, or create derivative works from HOMEKIT
10
+ 4K. You may not redistribute, sublicense, republish, or sell copies of the
11
+ software. Any permission beyond downloading, installing, and running an
12
+ unmodified copy requires prior written permission from the copyright holder.
13
+
14
+ The copyright notice and this license must accompany any permitted unmodified
15
+ copy.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ AUTHOR OR COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY
21
+ ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR ITS USE.
package/LICENSE.md ADDED
@@ -0,0 +1,8 @@
1
+ # Licensing status
2
+
3
+ Copyright Chrisalvir. All rights reserved.
4
+
5
+ No public license is granted for the original HOMEKIT 4K implementation during
6
+ Phase 1. package.json declares UNLICENSED. A distribution license must be chosen
7
+ by the author before public release. Third-party dependencies retain their own
8
+ licenses and notices; this file does not change those licenses.
package/README.md CHANGED
@@ -1,3 +1,66 @@
1
- # Temporary Holding Version
1
+ # HOMEKIT 4K — by Chrisalvir
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ ![HOMEKIT 4K — by Chrisalvir](logo.png)
4
+
5
+ HomeKit 4K exports cameras assigned to the plugin in Camera.UI as separate
6
+ Apple Home accessories. Camera.UI remains the source of camera streams,
7
+ capabilities, sensors, and detector configuration.
8
+
9
+ **Version 0.6.14.** Runtime behavior was validated on the developer MacBook
10
+ with Camera.UI 2.3.0 using the previous package, 0.6.12. Version 0.6.14 fixes
11
+ the npm scope to match the owner's npm account and does not change camera runtime
12
+ behavior. Runtime evidence and limits are in
13
+ [`docs/deployment-0.6.12.md`](docs/deployment-0.6.12.md).
14
+
15
+ ## Current behavior
16
+
17
+ - H.264 sources at or below 1920×1080 are sent without video transcoding;
18
+ measured larger H.264 sources use a 1920×1080 output path. Audio is handled
19
+ separately according to HomeKit negotiation.
20
+ - HEVC/H.265 uses its separate live and HKSV3 paths. HEVC recording and live
21
+ implementations are isolated from the H.264 resolution policy.
22
+ - Camera.UI motion and visual detection events feed HomeKit's motion trigger for
23
+ both H.264/HKSV and HEVC/HKSV3 accessories. The bridge forwards observations;
24
+ it does not force-enable CoreML/OpenCV, bypass their zones or thresholds, or
25
+ dictate Apple's final People/Animals/Vehicles classification.
26
+ - HomeKit recording choices and clip classification are controlled by the
27
+ paired Home Hub and the settings in Apple Home. A plugin event or HDS media
28
+ request alone does not prove that Apple saved a clip. In the latest real
29
+ validation, a Tapo vehicle event reached the bridge and caused a Home Hub
30
+ media request; saved vehicle/animal clips were not yet confirmed.
31
+ - Pairing identities and per-camera persistent settings are stored by the
32
+ Camera.UI plugin runtime. Do not delete them when updating the package.
33
+
34
+ ## Requirements and installation
35
+
36
+ The package currently declares Camera.UI >=2.3.0 and Node.js >=22.18.0. The
37
+ development validation used Camera.UI's official local bundle installer. Public
38
+ npm installation is not available yet; use Camera.UI's supported plugin
39
+ installer after a public release is announced.
40
+
41
+ The current package manifest restricts installation to macOS ARM64. That limit
42
+ must be confirmed or removed before promising support for other Camera.UI
43
+ platforms.
44
+
45
+ ## Development
46
+
47
+ ```sh
48
+ pnpm install --frozen-lockfile
49
+ pnpm check
50
+ pnpm test:coverage
51
+ pnpm bundle:camera-ui
52
+ pnpm smoke:bundle
53
+ ```
54
+
55
+ Automated checks and real-host evidence are different: test results do not
56
+ replace playback, recording, or detection confirmation in Apple Home. See the
57
+ validation documents under [`docs/`](docs/).
58
+
59
+ ## Public release status
60
+
61
+ The package uses a proprietary license: users may download, install, and run an
62
+ unmodified copy; modifying or redistributing it is not permitted without the
63
+ author's written permission. Check npm for the first public release and use
64
+ Camera.UI's supported plugin installer when the package becomes available
65
+ there. See
66
+ [`docs/npm-publication-readiness.md`](docs/npm-publication-readiness.md).
@@ -0,0 +1,36 @@
1
+ export interface StoredPtzPosition {
2
+ pan: number;
3
+ tilt: number;
4
+ zoom: number;
5
+ }
6
+ export interface StoredPtzPreset {
7
+ name: string;
8
+ position: StoredPtzPosition;
9
+ savedAt: string;
10
+ includeInPatrol: boolean;
11
+ }
12
+ export type HomeKitVideoMode = 'CLASSIC_H264' | 'HKSV3_LOCAL_HEVC';
13
+ export interface CameraAccessoryConfig {
14
+ exportEnabled: boolean;
15
+ /** True after the one-time first-export default for HEVC/HKSV3 recording audio was applied. */
16
+ recordingAudioDefaultInitialized: boolean;
17
+ sourceId?: string;
18
+ videoMode: HomeKitVideoMode;
19
+ ptzEnabled: boolean;
20
+ patrolEnabled: boolean;
21
+ patrolIntervalSeconds: number;
22
+ presets: Array<StoredPtzPreset | null>;
23
+ defaultPreset?: number;
24
+ tracking: {
25
+ person: boolean;
26
+ animal: boolean;
27
+ vehicle: boolean;
28
+ };
29
+ }
30
+ export declare class AccessoryConfigStore {
31
+ private readonly store;
32
+ constructor(root: string);
33
+ get(cameraId: string): Promise<CameraAccessoryConfig>;
34
+ update(cameraId: string, change: (current: CameraAccessoryConfig) => CameraAccessoryConfig): Promise<CameraAccessoryConfig>;
35
+ exportEnabled(): Promise<string[]>;
36
+ }
@@ -0,0 +1,79 @@
1
+ import { join } from 'node:path';
2
+ import { AtomicJsonStore, record } from "../persistence/AtomicJsonStore.js";
3
+ const initialCamera = () => ({ exportEnabled: false, recordingAudioDefaultInitialized: false,
4
+ videoMode: 'CLASSIC_H264', ptzEnabled: false, patrolEnabled: false, patrolIntervalSeconds: 15,
5
+ presets: [null, null, null, null, null],
6
+ tracking: { person: false, animal: false, vehicle: false } });
7
+ function decode(value) {
8
+ if (!record(value) || value.schemaVersion !== 1 || !record(value.cameras))
9
+ throw new Error('Invalid accessory configuration schema');
10
+ const cameras = Object.create(null);
11
+ for (const [cameraId, raw] of Object.entries(value.cameras)) {
12
+ if (!cameraId || !record(raw) || typeof raw.exportEnabled !== 'boolean' || typeof raw.ptzEnabled !== 'boolean' ||
13
+ !Array.isArray(raw.presets) || raw.presets.length !== 5 || !record(raw.tracking) ||
14
+ typeof raw.tracking.person !== 'boolean' || typeof raw.tracking.animal !== 'boolean' || typeof raw.tracking.vehicle !== 'boolean') {
15
+ throw new Error('Invalid per-camera accessory configuration');
16
+ }
17
+ const presets = raw.presets.map(preset => {
18
+ if (preset === null)
19
+ return null;
20
+ if (!record(preset) || typeof preset.name !== 'string' || !preset.name.trim() || typeof preset.savedAt !== 'string' ||
21
+ !record(preset.position) || typeof preset.position.pan !== 'number' || typeof preset.position.tilt !== 'number' ||
22
+ typeof preset.position.zoom !== 'number' || ![preset.position.pan, preset.position.tilt, preset.position.zoom].every(Number.isFinite)) {
23
+ throw new Error('Invalid PTZ preset');
24
+ }
25
+ const pan = preset.position.pan;
26
+ const tilt = preset.position.tilt;
27
+ const zoom = preset.position.zoom;
28
+ if (pan < -1 || pan > 1 || tilt < -1 || tilt > 1 || zoom < 0 || zoom > 1)
29
+ throw new Error('PTZ position is outside normalized limits');
30
+ return { name: preset.name.trim().slice(0, 48), savedAt: preset.savedAt,
31
+ position: { pan, tilt, zoom }, includeInPatrol: typeof preset.includeInPatrol === 'boolean' ? preset.includeInPatrol : true };
32
+ });
33
+ const defaultPreset = raw.defaultPreset;
34
+ if (defaultPreset !== undefined && (typeof defaultPreset !== 'number' || !Number.isInteger(defaultPreset) || defaultPreset < 0 ||
35
+ defaultPreset >= 5 || presets[defaultPreset] === null)) {
36
+ throw new Error('Invalid default PTZ preset');
37
+ }
38
+ if (!record(raw.tracking) || typeof raw.tracking.person !== 'boolean' || typeof raw.tracking.animal !== 'boolean' ||
39
+ typeof raw.tracking.vehicle !== 'boolean')
40
+ throw new Error('Invalid tracking flags');
41
+ cameras[cameraId] = { exportEnabled: raw.exportEnabled,
42
+ // Older saved camera configs predate the default. Initialize HEVC/HKSV3
43
+ // once after HAP restore, then persist the marker so later user choices stick.
44
+ recordingAudioDefaultInitialized: typeof raw.recordingAudioDefaultInitialized === 'boolean'
45
+ ? raw.recordingAudioDefaultInitialized : false,
46
+ videoMode: raw.videoMode === 'HKSV3_LOCAL_HEVC' ? 'HKSV3_LOCAL_HEVC' : 'CLASSIC_H264', ptzEnabled: raw.ptzEnabled,
47
+ patrolEnabled: typeof raw.patrolEnabled === 'boolean' ? raw.patrolEnabled : false,
48
+ ...(typeof raw.sourceId === 'string' && raw.sourceId ? { sourceId: raw.sourceId } : {}), presets,
49
+ patrolIntervalSeconds: typeof raw.patrolIntervalSeconds === 'number' && Number.isInteger(raw.patrolIntervalSeconds) &&
50
+ raw.patrolIntervalSeconds >= 5 && raw.patrolIntervalSeconds <= 300 ? raw.patrolIntervalSeconds : 15,
51
+ ...(typeof defaultPreset === 'number' ? { defaultPreset } : {}),
52
+ tracking: { person: raw.tracking.person, animal: raw.tracking.animal, vehicle: raw.tracking.vehicle } };
53
+ }
54
+ return { schemaVersion: 1, cameras };
55
+ }
56
+ export class AccessoryConfigStore {
57
+ store;
58
+ constructor(root) {
59
+ this.store = new AtomicJsonStore(join(root, 'accessories', 'config.json'), () => ({ schemaVersion: 1, cameras: {} }), decode);
60
+ }
61
+ async get(cameraId) {
62
+ const value = (await this.store.read()).cameras[cameraId];
63
+ return structuredClone(value ?? initialCamera());
64
+ }
65
+ async update(cameraId, change) {
66
+ if (!cameraId.trim())
67
+ throw new Error('Camera ID required');
68
+ const state = await this.store.update(current => {
69
+ const previous = current.cameras[cameraId] ?? initialCamera();
70
+ const updated = change(structuredClone(previous));
71
+ return { schemaVersion: 1, cameras: { ...current.cameras, [cameraId]: updated } };
72
+ });
73
+ return structuredClone(state.cameras[cameraId]);
74
+ }
75
+ async exportEnabled() {
76
+ const state = await this.store.read();
77
+ return Object.entries(state.cameras).filter(([, config]) => config.exportEnabled).map(([cameraId]) => cameraId);
78
+ }
79
+ }
@@ -0,0 +1,125 @@
1
+ import type { CameraUiAdapter } from '../camera-ui/CameraUiAdapter.ts';
2
+ import type { IdentityStore } from '../identity/IdentityStore.ts';
3
+ import type { NativeVideoEngine } from '../media/NativeVideoEngine.ts';
4
+ import type { Diagnostics } from '../diagnostics/Diagnostics.ts';
5
+ import type { InspectableHapAdapter } from '../hap/HapAdapter.ts';
6
+ import { AccessoryConfigStore, type HomeKitVideoMode } from './AccessoryConfigStore.ts';
7
+ import { type H264AudioRuntime } from '../h264/AudioRuntime.ts';
8
+ export interface AccessoryView {
9
+ cameraId: string;
10
+ name: string;
11
+ published: boolean;
12
+ paired: boolean;
13
+ sourceId?: string;
14
+ videoCodec?: string;
15
+ width?: number;
16
+ height?: number;
17
+ processing: 'UNKNOWN_NOT_VERIFIED';
18
+ audio: 'H264_NORMALIZED_AUDIO_UNVERIFIED' | 'PCMA_8KHZ_ADVERTISED_UNVERIFIED' | 'OPUS_48KHZ_20MS_FROM_PCMA_8KHZ_UNVERIFIED' | 'OPUS_48KHZ_OR_AAC_ELD_24KHZ_20MS_FROM_PCMA_8KHZ_UNVERIFIED';
19
+ entities: Array<{
20
+ id: string;
21
+ type: string;
22
+ name: string;
23
+ capabilities: string[];
24
+ }>;
25
+ ptz?: {
26
+ available: boolean;
27
+ enabled: boolean;
28
+ patrolEnabled: boolean;
29
+ capabilities: string[];
30
+ nativePresets?: string[];
31
+ positions: Array<({
32
+ name: string;
33
+ position: {
34
+ pan: number;
35
+ tilt: number;
36
+ zoom: number;
37
+ };
38
+ includeInPatrol: boolean;
39
+ } | null)>;
40
+ defaultPositionSlot?: number;
41
+ patrolIntervalSeconds: number;
42
+ position?: {
43
+ pan: number;
44
+ tilt: number;
45
+ zoom: number;
46
+ };
47
+ };
48
+ error?: string;
49
+ }
50
+ export interface PairingView {
51
+ setupUri: string;
52
+ manualCode: string;
53
+ paired: false;
54
+ }
55
+ export declare function brandedHomeKitSetupQr(setupUri: string, manualCode?: string, accessoryName?: string): Promise<string>;
56
+ export declare function brandedHomeKitPlaceholderQr(statusBadge: string, lines: string[], footerBadge?: string, accessoryName?: string, variant?: 'info' | 'success' | 'warn'): string;
57
+ export declare function formatHomeKitPin(value: number): string;
58
+ /** Publishes one independent classic HAP camera accessory for an explicitly selected Camera.UI camera. */
59
+ export declare class CameraAccessoryManager {
60
+ private readonly host;
61
+ private readonly hapAdapter;
62
+ private readonly identities;
63
+ private readonly video;
64
+ private readonly diagnostics;
65
+ private readonly storagePath;
66
+ private readonly h264AudioRuntime;
67
+ readonly config: AccessoryConfigStore;
68
+ private readonly live;
69
+ private readonly statuses;
70
+ private readonly serial;
71
+ private closed;
72
+ private readonly patrolJobs;
73
+ private readonly pendingPositionMoves;
74
+ private readonly stoppingPtz;
75
+ private readonly ptzStateListeners;
76
+ constructor(host: CameraUiAdapter, hapAdapter: InspectableHapAdapter, identities: IdentityStore, video: NativeVideoEngine, diagnostics: Diagnostics, storagePath: string, h264AudioRuntime?: () => Promise<H264AudioRuntime>);
77
+ start(): Promise<void>;
78
+ cameraAvailable(cameraId: string): Promise<void>;
79
+ cameraUnavailable(cameraId: string): Promise<void>;
80
+ sensorsChanged(): Promise<void>;
81
+ onPtzPatrolStateChanged(listener: (cameraId: string, enabled: boolean) => void): () => void;
82
+ enable(cameraId: string, sourceId: string, videoMode?: HomeKitVideoMode): Promise<void>;
83
+ disable(cameraId: string): Promise<void>;
84
+ /** Clears this accessory's local HAP pairing records. The Home app may also require removal on the iPhone. */
85
+ unlink(cameraId: string): Promise<void>;
86
+ ptzInfo(cameraId: string): Promise<AccessoryView['ptz']>;
87
+ setPtzEnabled(cameraId: string, enabled: boolean): Promise<void>;
88
+ setPtzPatrolEnabled(cameraId: string, enabled: boolean): Promise<void>;
89
+ savePtzPreset(cameraId: string, slot: number, name: string): Promise<void>;
90
+ setDefaultPtzPreset(cameraId: string, slot: number): Promise<void>;
91
+ setPtzPresetIncludedInPatrol(cameraId: string, slot: number, included: boolean): Promise<void>;
92
+ deletePtzPreset(cameraId: string, slot: number): Promise<void>;
93
+ movePtzRelative(cameraId: string, panDelta: number, tiltDelta: number, zoomDelta: number): Promise<void>;
94
+ jogPtz(cameraId: string, pan: number, tilt: number, zoom: number): Promise<void>;
95
+ stopPtz(cameraId: string): Promise<void>;
96
+ moveToPtzPreset(cameraId: string, slot: number): Promise<void>;
97
+ moveToDefaultPtzPreset(cameraId: string): Promise<void>;
98
+ pairing(cameraId: string): Promise<PairingView | undefined>;
99
+ pairingQr(cameraId: string): Promise<string>;
100
+ snapshot(): Promise<AccessoryView[]>;
101
+ close(): Promise<void>;
102
+ private publish;
103
+ private measuredSecureVideoTiers;
104
+ private updateMotionState;
105
+ private bindMotion;
106
+ private bindCameraEntities;
107
+ private entityView;
108
+ private storedPairingState;
109
+ private rotatePin;
110
+ private unpublish;
111
+ private disposeLive;
112
+ private refreshStatus;
113
+ private findPtz;
114
+ private presetNames;
115
+ private schedulePatrol;
116
+ private advancePatrol;
117
+ private failPatrol;
118
+ private clearPatrol;
119
+ private requirePtz;
120
+ private moveToSavedPosition;
121
+ private stopPtzMovement;
122
+ private validPosition;
123
+ private runtime;
124
+ private queue;
125
+ }