@chrisalvir1/camera-ui-homekit-4k 0.6.14 → 0.6.17
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.
- package/CHANGELOG.md +49 -4
- package/LICENSE.md +19 -6
- package/README.md +20 -20
- package/bundle.zip +0 -0
- package/package.json +25 -44
- package/LICENSE +0 -21
- package/dist/accessories/AccessoryConfigStore.d.ts +0 -36
- package/dist/accessories/AccessoryConfigStore.js +0 -79
- package/dist/accessories/CameraAccessoryManager.d.ts +0 -125
- package/dist/accessories/CameraAccessoryManager.js +0 -1501
- package/dist/accessories/DetectionMotion.d.ts +0 -20
- package/dist/accessories/DetectionMotion.js +0 -38
- package/dist/accessories/HapCameraAccessory.d.ts +0 -99
- package/dist/accessories/HapCameraAccessory.js +0 -366
- package/dist/accessories/RecordingAudioDefaults.d.ts +0 -12
- package/dist/accessories/RecordingAudioDefaults.js +0 -11
- package/dist/admin/AdminController.d.ts +0 -96
- package/dist/admin/AdminController.js +0 -494
- package/dist/admin/AdminModels.d.ts +0 -124
- package/dist/admin/AdminModels.js +0 -1
- package/dist/audio/AacConfiguration.d.ts +0 -7
- package/dist/audio/AacConfiguration.js +0 -23
- package/dist/audio/AacEldRtpTranscoder.d.ts +0 -22
- package/dist/audio/AacEldRtpTranscoder.js +0 -118
- package/dist/audio/AacRtpPacket.d.ts +0 -2
- package/dist/audio/AacRtpPacket.js +0 -23
- package/dist/audio/AudioCapabilityResolver.d.ts +0 -6
- package/dist/audio/AudioCapabilityResolver.js +0 -27
- package/dist/audio/AudioClockVerifier.d.ts +0 -4
- package/dist/audio/AudioClockVerifier.js +0 -45
- package/dist/audio/AudioFixtureProvenance.d.ts +0 -8
- package/dist/audio/AudioFixtureProvenance.js +0 -23
- package/dist/audio/AudioRecordingInspector.d.ts +0 -22
- package/dist/audio/AudioRecordingInspector.js +0 -189
- package/dist/audio/AudioRecordingMuxer.d.ts +0 -1
- package/dist/audio/AudioRecordingMuxer.js +0 -41
- package/dist/audio/AudioRtpInspector.d.ts +0 -40
- package/dist/audio/AudioRtpInspector.js +0 -66
- package/dist/audio/AudioSessionEvidence.d.ts +0 -86
- package/dist/audio/AudioSessionEvidence.js +0 -29
- package/dist/audio/AudioSignalVerifier.d.ts +0 -13
- package/dist/audio/AudioSignalVerifier.js +0 -47
- package/dist/audio/AudioSourceInspector.d.ts +0 -6
- package/dist/audio/AudioSourceInspector.js +0 -29
- package/dist/audio/AudioTranscodePlan.d.ts +0 -2
- package/dist/audio/AudioTranscodePlan.js +0 -8
- package/dist/audio/AudioTypes.d.ts +0 -81
- package/dist/audio/AudioTypes.js +0 -1
- package/dist/audio/G711.d.ts +0 -4
- package/dist/audio/G711.js +0 -18
- package/dist/audio/IsoBmff.d.ts +0 -15
- package/dist/audio/IsoBmff.js +0 -33
- package/dist/audio/NativeAudioEngine.d.ts +0 -48
- package/dist/audio/NativeAudioEngine.js +0 -55
- package/dist/audio/OpusPacket.d.ts +0 -6
- package/dist/audio/OpusPacket.js +0 -15
- package/dist/audio/RtpAudioPacket.d.ts +0 -9
- package/dist/audio/RtpAudioPacket.js +0 -16
- package/dist/audio/SyntheticOpusOgg.d.ts +0 -2
- package/dist/audio/SyntheticOpusOgg.js +0 -40
- package/dist/camera-ui/CameraUiAdapter.d.ts +0 -227
- package/dist/camera-ui/CameraUiAdapter.js +0 -693
- package/dist/camera-ui/CameraUiAudioAdapter.d.ts +0 -13
- package/dist/camera-ui/CameraUiAudioAdapter.js +0 -258
- package/dist/camera-ui/RuntimeMetadata.d.ts +0 -9
- package/dist/camera-ui/RuntimeMetadata.js +0 -31
- package/dist/camera-ui/adminSchema.d.ts +0 -4
- package/dist/camera-ui/adminSchema.js +0 -69
- package/dist/camera-ui/cameraSettingsSchema.d.ts +0 -4
- package/dist/camera-ui/cameraSettingsSchema.js +0 -77
- package/dist/capabilities/CapabilityResolver.d.ts +0 -21
- package/dist/capabilities/CapabilityResolver.js +0 -12
- package/dist/config/FeatureFlagStore.d.ts +0 -16
- package/dist/config/FeatureFlagStore.js +0 -43
- package/dist/diagnostics/DiagnosticBundleExporter.d.ts +0 -23
- package/dist/diagnostics/DiagnosticBundleExporter.js +0 -57
- package/dist/diagnostics/DiagnosticModeStore.d.ts +0 -20
- package/dist/diagnostics/DiagnosticModeStore.js +0 -53
- package/dist/diagnostics/Diagnostics.d.ts +0 -18
- package/dist/diagnostics/Diagnostics.js +0 -44
- package/dist/diagnostics/RateLimitedLogger.d.ts +0 -24
- package/dist/diagnostics/RateLimitedLogger.js +0 -55
- package/dist/diagnostics/SecretRedactor.d.ts +0 -4
- package/dist/diagnostics/SecretRedactor.js +0 -55
- package/dist/diagnostics/StructuredLogger.d.ts +0 -12
- package/dist/diagnostics/StructuredLogger.js +0 -23
- package/dist/errors/errors.d.ts +0 -28
- package/dist/errors/errors.js +0 -25
- package/dist/generated/build-info.d.ts +0 -12
- package/dist/generated/build-info.js +0 -227
- package/dist/h264/AudioRuntime.d.ts +0 -21
- package/dist/h264/AudioRuntime.js +0 -130
- package/dist/h264/H264CameraStreamDelegate.d.ts +0 -46
- package/dist/h264/H264CameraStreamDelegate.js +0 -419
- package/dist/h264/H264RecordingSession.d.ts +0 -50
- package/dist/h264/H264RecordingSession.js +0 -247
- package/dist/h264/LiveRtpSession.d.ts +0 -59
- package/dist/h264/LiveRtpSession.js +0 -230
- package/dist/h264/NetworkEndpoint.d.ts +0 -6
- package/dist/h264/NetworkEndpoint.js +0 -49
- package/dist/h264/RtpContinuity.d.ts +0 -12
- package/dist/h264/RtpContinuity.js +0 -31
- package/dist/h264/VideoProcessing.d.ts +0 -13
- package/dist/h264/VideoProcessing.js +0 -21
- package/dist/hap/HapAdapter.d.ts +0 -29
- package/dist/hap/HapAdapter.js +0 -73
- package/dist/hap/SrtpContext.d.ts +0 -34
- package/dist/hap/SrtpContext.js +0 -184
- package/dist/hksv3/ConcurrentTierProbe.d.ts +0 -29
- package/dist/hksv3/ConcurrentTierProbe.js +0 -82
- package/dist/hksv3/Fmp4TierMeasurement.d.ts +0 -4
- package/dist/hksv3/Fmp4TierMeasurement.js +0 -17
- package/dist/hksv3/H264RtpTranscoder.d.ts +0 -21
- package/dist/hksv3/H264RtpTranscoder.js +0 -154
- package/dist/hksv3/HapWebRtcDelegate.d.ts +0 -79
- package/dist/hksv3/HapWebRtcDelegate.js +0 -92
- package/dist/hksv3/LocalRtpDelegate.d.ts +0 -68
- package/dist/hksv3/LocalRtpDelegate.js +0 -699
- package/dist/hksv3/LocalRtpProtocol.d.ts +0 -89
- package/dist/hksv3/LocalRtpProtocol.js +0 -239
- package/dist/hksv3/OpusRtpTranscoder.d.ts +0 -39
- package/dist/hksv3/OpusRtpTranscoder.js +0 -227
- package/dist/hksv3/SFrame.d.ts +0 -71
- package/dist/hksv3/SFrame.js +0 -326
- package/dist/hksv3/SFrameRtp.d.ts +0 -38
- package/dist/hksv3/SFrameRtp.js +0 -137
- package/dist/hksv3/VideoTierResolver.d.ts +0 -49
- package/dist/hksv3/VideoTierResolver.js +0 -86
- package/dist/hksv3/WebRtcSecureVideoSession.d.ts +0 -94
- package/dist/hksv3/WebRtcSecureVideoSession.js +0 -493
- package/dist/identity/IdentityStore.d.ts +0 -16
- package/dist/identity/IdentityStore.js +0 -46
- package/dist/index.d.ts +0 -46
- package/dist/index.js +0 -206
- package/dist/media/AccessUnitDigest.d.ts +0 -10
- package/dist/media/AccessUnitDigest.js +0 -59
- package/dist/media/AccessUnitMatcher.d.ts +0 -43
- package/dist/media/AccessUnitMatcher.js +0 -80
- package/dist/media/AudioPolicy.d.ts +0 -7
- package/dist/media/AudioPolicy.js +0 -19
- package/dist/media/CameraMediaProfile.d.ts +0 -13
- package/dist/media/CameraMediaProfile.js +0 -25
- package/dist/media/FixtureProvenance.d.ts +0 -79
- package/dist/media/FixtureProvenance.js +0 -100
- package/dist/media/Fmp4Inspector.d.ts +0 -27
- package/dist/media/Fmp4Inspector.js +0 -253
- package/dist/media/H264RtpAssembler.d.ts +0 -43
- package/dist/media/H264RtpAssembler.js +0 -184
- package/dist/media/HevcRtpAssembler.d.ts +0 -49
- package/dist/media/HevcRtpAssembler.js +0 -203
- package/dist/media/MediaPolicy.d.ts +0 -12
- package/dist/media/MediaPolicy.js +0 -13
- package/dist/media/NativePassthroughVerifier.d.ts +0 -20
- package/dist/media/NativePassthroughVerifier.js +0 -53
- package/dist/media/NativeVideoEngine.d.ts +0 -38
- package/dist/media/NativeVideoEngine.js +0 -93
- package/dist/media/Phase3Evidence.d.ts +0 -36
- package/dist/media/Phase3Evidence.js +0 -170
- package/dist/media/SourceBitstreamExtractor.d.ts +0 -27
- package/dist/media/SourceBitstreamExtractor.js +0 -302
- package/dist/media/SourceInspector.d.ts +0 -15
- package/dist/media/SourceInspector.js +0 -224
- package/dist/media/SourceSelector.d.ts +0 -13
- package/dist/media/SourceSelector.js +0 -31
- package/dist/media/VideoCapabilityResolver.d.ts +0 -5
- package/dist/media/VideoCapabilityResolver.js +0 -10
- package/dist/media/VideoEvidenceCollector.d.ts +0 -12
- package/dist/media/VideoEvidenceCollector.js +0 -34
- package/dist/media/VideoPolicy.d.ts +0 -8
- package/dist/media/VideoPolicy.js +0 -43
- package/dist/media/VideoSessionManager.d.ts +0 -16
- package/dist/media/VideoSessionManager.js +0 -61
- package/dist/mqtt/MqttEntityMapper.d.ts +0 -23
- package/dist/mqtt/MqttEntityMapper.js +0 -120
- package/dist/mqtt/MqttPtzBridge.d.ts +0 -51
- package/dist/mqtt/MqttPtzBridge.js +0 -349
- package/dist/mqtt/MqttSettingsStore.d.ts +0 -18
- package/dist/mqtt/MqttSettingsStore.js +0 -56
- package/dist/pairing/PairingPresenter.d.ts +0 -7
- package/dist/pairing/PairingPresenter.js +0 -6
- package/dist/persistence/AtomicJsonStore.d.ts +0 -12
- package/dist/persistence/AtomicJsonStore.js +0 -62
- package/dist/recording/AudioOnlyFmp4Session.d.ts +0 -46
- package/dist/recording/AudioOnlyFmp4Session.js +0 -276
- package/dist/recording/CameraUiHdsRecordingDelegate.d.ts +0 -47
- package/dist/recording/CameraUiHdsRecordingDelegate.js +0 -334
- package/dist/recording/HevcOpusCmafDelegate.d.ts +0 -34
- package/dist/recording/HevcOpusCmafDelegate.js +0 -267
- package/dist/recording/RecordingAdapter.d.ts +0 -8
- package/dist/recording/RecordingAdapter.js +0 -4
- package/dist/recording/RecordingTiming.d.ts +0 -4
- package/dist/recording/RecordingTiming.js +0 -107
- package/dist/services/ServiceMapper.d.ts +0 -11
- package/dist/services/ServiceMapper.js +0 -9
- package/dist/sessions/LiveSessionManager.d.ts +0 -2
- package/dist/sessions/LiveSessionManager.js +0 -2
- package/dist/sessions/SessionContext.d.ts +0 -1
- package/dist/sessions/SessionContext.js +0 -1
- package/dist/sessions/SessionId.d.ts +0 -1
- package/dist/sessions/SessionId.js +0 -2
- package/dist/sessions/SessionManager.d.ts +0 -24
- package/dist/sessions/SessionManager.js +0 -60
- package/dist/sessions/resilience.d.ts +0 -3
- package/dist/sessions/resilience.js +0 -29
- package/dist/types/diagnostics.d.ts +0 -21
- package/dist/types/diagnostics.js +0 -1
- package/dist/types/media.d.ts +0 -163
- package/dist/types/media.js +0 -9
- package/dist/types/sessions.d.ts +0 -11
- package/dist/types/sessions.js +0 -1
- package/dist/version/LocalRegistryServer.d.ts +0 -12
- package/dist/version/LocalRegistryServer.js +0 -165
- package/dist/version/VersionManager.d.ts +0 -12
- package/dist/version/VersionManager.js +0 -15
- package/docs/CONFIRMED_CHANGES_AND_VERSIONING.md +0 -527
- package/docs/HKSV3_HEVC_CHANGES.md +0 -25
- package/docs/architecture.md +0 -192
- package/docs/atomic-rule-hevc-hksv3.md +0 -74
- package/docs/audio-fixtures-manifest.json +0 -105
- package/docs/bidirectional-audio.md +0 -19
- package/docs/capability-audit-plan.md +0 -53
- package/docs/deployment-0.6.12.md +0 -56
- package/docs/detection-bridge-policy.md +0 -120
- package/docs/development.md +0 -181
- package/docs/diagnostics.md +0 -87
- package/docs/file-tree.txt +0 -83
- package/docs/fixture-determinism.json +0 -30
- package/docs/fixtures-manifest.json +0 -525
- package/docs/h264-audio-normalization.md +0 -97
- package/docs/h264-wifi-validation.md +0 -68
- package/docs/hksv3-ios27-audit-plan.md +0 -133
- package/docs/hksv3-ios27-checkpoint.md +0 -328
- package/docs/hksv3-phase-1-audit.md +0 -76
- package/docs/hksv3-readiness-audit-2026-10-16.md +0 -54
- package/docs/home-assistant-mqtt.md +0 -103
- package/docs/live-hevc-preserved-settings.md +0 -11
- package/docs/npm-publication-readiness.md +0 -55
- package/docs/phase-1-validation.md +0 -108
- package/docs/phase-2-validation.md +0 -222
- package/docs/phase-3-evidence-history.json +0 -854
- package/docs/phase-3-evidence.json +0 -2877
- package/docs/phase-3-validation.md +0 -345
- package/docs/phase-4-checkpoint.md +0 -96
- package/docs/phase-4-harness.json +0 -1499
- package/docs/phase-4-runtime-evidence.json +0 -904
- package/docs/phase-4-validation.md +0 -217
- package/docs/security.md +0 -124
- package/docs/tapo-c402-current-checkpoint.md +0 -168
- package/vendor/hap-nodejs/LICENSE +0 -176
- package/vendor/hap-nodejs/PATCH.md +0 -37
- package/vendor/hap-nodejs/README.md +0 -86
- package/vendor/hap-nodejs/dist/accessories/AirConditioner_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/AirConditioner_accessory.js +0 -128
- package/vendor/hap-nodejs/dist/accessories/AppleTVRemote_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/AppleTVRemote_accessory.js +0 -159
- package/vendor/hap-nodejs/dist/accessories/Camera_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/Camera_accessory.js +0 -545
- package/vendor/hap-nodejs/dist/accessories/Fan_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/Fan_accessory.js +0 -74
- package/vendor/hap-nodejs/dist/accessories/GarageDoorOpener_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/GarageDoorOpener_accessory.js +0 -78
- package/vendor/hap-nodejs/dist/accessories/Light-AdaptiveLighting_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/Light-AdaptiveLighting_accessory.js +0 -106
- package/vendor/hap-nodejs/dist/accessories/Light_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/Light_accessory.js +0 -145
- package/vendor/hap-nodejs/dist/accessories/Lock_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/Lock_accessory.js +0 -76
- package/vendor/hap-nodejs/dist/accessories/MotionSensor_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/MotionSensor_accessory.js +0 -45
- package/vendor/hap-nodejs/dist/accessories/Outlet_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/Outlet_accessory.js +0 -79
- package/vendor/hap-nodejs/dist/accessories/SmartSpeaker_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/SmartSpeaker_accessory.js +0 -44
- package/vendor/hap-nodejs/dist/accessories/Sprinkler_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/Sprinkler_accessory.js +0 -128
- package/vendor/hap-nodejs/dist/accessories/TV_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/TV_accessory.js +0 -101
- package/vendor/hap-nodejs/dist/accessories/TemperatureSensor_accessory.d.ts +0 -2
- package/vendor/hap-nodejs/dist/accessories/TemperatureSensor_accessory.js +0 -44
- package/vendor/hap-nodejs/dist/accessories/Wi-FiRouter_accessory.d.ts +0 -3
- package/vendor/hap-nodejs/dist/accessories/Wi-FiRouter_accessory.js +0 -17
- package/vendor/hap-nodejs/dist/accessories/Wi-FiSatellite_accessory.d.ts +0 -3
- package/vendor/hap-nodejs/dist/accessories/Wi-FiSatellite_accessory.js +0 -19
- package/vendor/hap-nodejs/dist/accessories/gstreamer-audioProducer.d.ts +0 -25
- package/vendor/hap-nodejs/dist/accessories/gstreamer-audioProducer.js +0 -145
- package/vendor/hap-nodejs/dist/accessories/types.d.ts +0 -78
- package/vendor/hap-nodejs/dist/accessories/types.js +0 -88
- package/vendor/hap-nodejs/dist/index.d.ts +0 -50
- package/vendor/hap-nodejs/dist/index.js +0 -54
- package/vendor/hap-nodejs/dist/internal-types.d.ts +0 -76
- package/vendor/hap-nodejs/dist/internal-types.js +0 -80
- package/vendor/hap-nodejs/dist/lib/Accessory.d.ts +0 -521
- package/vendor/hap-nodejs/dist/lib/Accessory.js +0 -1762
- package/vendor/hap-nodejs/dist/lib/Advertiser.d.ts +0 -190
- package/vendor/hap-nodejs/dist/lib/Advertiser.js +0 -592
- package/vendor/hap-nodejs/dist/lib/Bridge.d.ts +0 -12
- package/vendor/hap-nodejs/dist/lib/Bridge.js +0 -19
- package/vendor/hap-nodejs/dist/lib/Characteristic.d.ts +0 -1768
- package/vendor/hap-nodejs/dist/lib/Characteristic.js +0 -2532
- package/vendor/hap-nodejs/dist/lib/HAPServer.d.ts +0 -299
- package/vendor/hap-nodejs/dist/lib/HAPServer.js +0 -968
- package/vendor/hap-nodejs/dist/lib/Service.d.ts +0 -598
- package/vendor/hap-nodejs/dist/lib/Service.js +0 -797
- package/vendor/hap-nodejs/dist/lib/camera/CMAFIngest.d.ts +0 -102
- package/vendor/hap-nodejs/dist/lib/camera/CMAFIngest.js +0 -317
- package/vendor/hap-nodejs/dist/lib/camera/HDSSnapshotTransport.d.ts +0 -38
- package/vendor/hap-nodejs/dist/lib/camera/HDSSnapshotTransport.js +0 -174
- package/vendor/hap-nodejs/dist/lib/camera/RTPProxy.d.ts +0 -59
- package/vendor/hap-nodejs/dist/lib/camera/RTPProxy.js +0 -267
- package/vendor/hap-nodejs/dist/lib/camera/RTPStreamManagement.d.ts +0 -379
- package/vendor/hap-nodejs/dist/lib/camera/RTPStreamManagement.js +0 -1021
- package/vendor/hap-nodejs/dist/lib/camera/RecordingManagement.d.ts +0 -325
- package/vendor/hap-nodejs/dist/lib/camera/RecordingManagement.js +0 -800
- package/vendor/hap-nodejs/dist/lib/camera/SecureVideoCredentials.d.ts +0 -20
- package/vendor/hap-nodejs/dist/lib/camera/SecureVideoCredentials.js +0 -48
- package/vendor/hap-nodejs/dist/lib/camera/SecureVideoTypes.d.ts +0 -618
- package/vendor/hap-nodejs/dist/lib/camera/SecureVideoTypes.js +0 -911
- package/vendor/hap-nodejs/dist/lib/camera/index.d.ts +0 -8
- package/vendor/hap-nodejs/dist/lib/camera/index.js +0 -11
- package/vendor/hap-nodejs/dist/lib/controller/AdaptiveLightingController.d.ts +0 -452
- package/vendor/hap-nodejs/dist/lib/controller/AdaptiveLightingController.js +0 -868
- package/vendor/hap-nodejs/dist/lib/controller/CameraController.d.ts +0 -410
- package/vendor/hap-nodejs/dist/lib/controller/CameraController.js +0 -658
- package/vendor/hap-nodejs/dist/lib/controller/Controller.d.ts +0 -197
- package/vendor/hap-nodejs/dist/lib/controller/Controller.js +0 -32
- package/vendor/hap-nodejs/dist/lib/controller/DoorbellController.d.ts +0 -59
- package/vendor/hap-nodejs/dist/lib/controller/DoorbellController.js +0 -102
- package/vendor/hap-nodejs/dist/lib/controller/RemoteController.d.ts +0 -434
- package/vendor/hap-nodejs/dist/lib/controller/RemoteController.js +0 -1178
- package/vendor/hap-nodejs/dist/lib/controller/SecureVideoController.d.ts +0 -380
- package/vendor/hap-nodejs/dist/lib/controller/SecureVideoController.js +0 -947
- package/vendor/hap-nodejs/dist/lib/controller/index.d.ts +0 -7
- package/vendor/hap-nodejs/dist/lib/controller/index.js +0 -10
- package/vendor/hap-nodejs/dist/lib/datastream/DataStreamManagement.d.ts +0 -73
- package/vendor/hap-nodejs/dist/lib/datastream/DataStreamManagement.js +0 -205
- package/vendor/hap-nodejs/dist/lib/datastream/DataStreamParser.d.ts +0 -186
- package/vendor/hap-nodejs/dist/lib/datastream/DataStreamParser.js +0 -880
- package/vendor/hap-nodejs/dist/lib/datastream/DataStreamServer.d.ts +0 -351
- package/vendor/hap-nodejs/dist/lib/datastream/DataStreamServer.js +0 -878
- package/vendor/hap-nodejs/dist/lib/datastream/index.d.ts +0 -4
- package/vendor/hap-nodejs/dist/lib/datastream/index.js +0 -7
- package/vendor/hap-nodejs/dist/lib/definitions/CharacteristicDefinitions.d.ts +0 -2245
- package/vendor/hap-nodejs/dist/lib/definitions/CharacteristicDefinitions.js +0 -4957
- package/vendor/hap-nodejs/dist/lib/definitions/ServiceDefinitions.d.ts +0 -584
- package/vendor/hap-nodejs/dist/lib/definitions/ServiceDefinitions.js +0 -1518
- package/vendor/hap-nodejs/dist/lib/definitions/generate-definitions.d.ts +0 -34
- package/vendor/hap-nodejs/dist/lib/definitions/generate-definitions.js +0 -624
- package/vendor/hap-nodejs/dist/lib/definitions/generator-configuration.d.ts +0 -22
- package/vendor/hap-nodejs/dist/lib/definitions/generator-configuration.js +0 -734
- package/vendor/hap-nodejs/dist/lib/definitions/index.d.ts +0 -3
- package/vendor/hap-nodejs/dist/lib/definitions/index.js +0 -6
- package/vendor/hap-nodejs/dist/lib/gen/HomeKit.d.ts +0 -8
- package/vendor/hap-nodejs/dist/lib/gen/HomeKit.js +0 -9
- package/vendor/hap-nodejs/dist/lib/model/AccessoryInfo.d.ts +0 -91
- package/vendor/hap-nodejs/dist/lib/model/AccessoryInfo.js +0 -311
- package/vendor/hap-nodejs/dist/lib/model/ControllerStorage.d.ts +0 -46
- package/vendor/hap-nodejs/dist/lib/model/ControllerStorage.js +0 -277
- package/vendor/hap-nodejs/dist/lib/model/HAPFileStorage.d.ts +0 -75
- package/vendor/hap-nodejs/dist/lib/model/HAPFileStorage.js +0 -190
- package/vendor/hap-nodejs/dist/lib/model/HAPStorage.d.ts +0 -26
- package/vendor/hap-nodejs/dist/lib/model/HAPStorage.js +0 -79
- package/vendor/hap-nodejs/dist/lib/model/IdentifierCache.d.ts +0 -33
- package/vendor/hap-nodejs/dist/lib/model/IdentifierCache.js +0 -114
- package/vendor/hap-nodejs/dist/lib/tv/AccessControlManagement.d.ts +0 -83
- package/vendor/hap-nodejs/dist/lib/tv/AccessControlManagement.js +0 -127
- package/vendor/hap-nodejs/dist/lib/util/checkName.d.ts +0 -8
- package/vendor/hap-nodejs/dist/lib/util/checkName.js +0 -28
- package/vendor/hap-nodejs/dist/lib/util/clone.d.ts +0 -7
- package/vendor/hap-nodejs/dist/lib/util/clone.js +0 -22
- package/vendor/hap-nodejs/dist/lib/util/color-utils.d.ts +0 -18
- package/vendor/hap-nodejs/dist/lib/util/color-utils.js +0 -442
- package/vendor/hap-nodejs/dist/lib/util/eventedhttp.d.ts +0 -251
- package/vendor/hap-nodejs/dist/lib/util/eventedhttp.js +0 -714
- package/vendor/hap-nodejs/dist/lib/util/hapCrypto.d.ts +0 -50
- package/vendor/hap-nodejs/dist/lib/util/hapCrypto.js +0 -185
- package/vendor/hap-nodejs/dist/lib/util/hapStatusError.d.ts +0 -16
- package/vendor/hap-nodejs/dist/lib/util/hapStatusError.js +0 -29
- package/vendor/hap-nodejs/dist/lib/util/net-utils.d.ts +0 -21
- package/vendor/hap-nodejs/dist/lib/util/net-utils.js +0 -79
- package/vendor/hap-nodejs/dist/lib/util/once.d.ts +0 -7
- package/vendor/hap-nodejs/dist/lib/util/once.js +0 -22
- package/vendor/hap-nodejs/dist/lib/util/promise-utils.d.ts +0 -14
- package/vendor/hap-nodejs/dist/lib/util/promise-utils.js +0 -29
- package/vendor/hap-nodejs/dist/lib/util/request-util.d.ts +0 -36
- package/vendor/hap-nodejs/dist/lib/util/request-util.js +0 -108
- package/vendor/hap-nodejs/dist/lib/util/time.d.ts +0 -9
- package/vendor/hap-nodejs/dist/lib/util/time.js +0 -23
- package/vendor/hap-nodejs/dist/lib/util/tlv.d.ts +0 -90
- package/vendor/hap-nodejs/dist/lib/util/tlv.js +0 -318
- package/vendor/hap-nodejs/dist/lib/util/uuid.d.ts +0 -23
- package/vendor/hap-nodejs/dist/lib/util/uuid.js +0 -78
- package/vendor/hap-nodejs/dist/types.d.ts +0 -276
- package/vendor/hap-nodejs/dist/types.js +0 -11
- package/vendor/hap-nodejs/package.json +0 -93
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,47 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.17] — LAN-aware HomeKit advertisement
|
|
4
|
+
|
|
5
|
+
- Bind HomeKit/mDNS publication to detected private IPv4 interfaces, so
|
|
6
|
+
accessories resolve to the Camera.UI host's LAN address instead of loopback.
|
|
7
|
+
Interface names are selected dynamically to follow Wi-Fi/Ethernet address
|
|
8
|
+
changes; when no private IPv4 interface exists, HAP keeps its default
|
|
9
|
+
interface selection. This changes discovery/advertisement only; video, audio,
|
|
10
|
+
HKSV/HKSV3, detection, and pairing data are untouched.
|
|
11
|
+
- Validate LAN binding with unit coverage, runtime mDNS resolution, build,
|
|
12
|
+
typecheck, lint, tests, and Camera.UI bundle smoke checks.
|
|
13
|
+
|
|
14
|
+
## [0.6.16] — Shared codec profiles for newly assigned cameras
|
|
15
|
+
|
|
16
|
+
- Removed the embedded loopback npm registry from plugin startup. Public installs
|
|
17
|
+
leave each user's npm configuration untouched and use Camera.UI/npm's normal
|
|
18
|
+
package update path.
|
|
19
|
+
|
|
20
|
+
- Apply codec-specific shared defaults to newly assigned cameras that have a
|
|
21
|
+
usable source: H.264 selects HKSV and HEVC selects HKSV3. A camera explicitly
|
|
22
|
+
stopped by its user is not auto-published again. Recording audio is enabled
|
|
23
|
+
once per codec after HAP restores state; later Home settings are preserved.
|
|
24
|
+
- Keep H.264 and HEVC media paths isolated. Codec and dimensions are re-probed
|
|
25
|
+
on reconnect; failed source detection leaves the accessory unpublished and
|
|
26
|
+
can be retried from that camera's settings. Camera.UI still owns OpenCV/CoreML
|
|
27
|
+
installation and sensor assignment; this plugin forwards assigned sensors.
|
|
28
|
+
|
|
29
|
+
## [0.6.15] — Camera.UI platform install targets
|
|
30
|
+
|
|
31
|
+
- Declare macOS, Windows, and Linux on x64 and ARM64 as npm install targets,
|
|
32
|
+
matching Camera.UI's supported server platforms. Runtime testing remains
|
|
33
|
+
verified on macOS ARM64 only; the other targets require host-specific checks.
|
|
34
|
+
- Keep the official logo in the published bundle and assert the install target
|
|
35
|
+
matrix and package version in the bundle smoke test.
|
|
36
|
+
- Publish the Camera.UI-generated `bundle/` artifact rather than the source
|
|
37
|
+
repository root. This removes source-only runtime dependencies from the npm
|
|
38
|
+
install path and ships the `cameraui` metadata, `bundle.zip`, and logo that
|
|
39
|
+
Camera.UI consumes.
|
|
40
|
+
- Embed the pinned HAP runtime and its complete production dependency tree in
|
|
41
|
+
`bundle.zip`. Camera.UI therefore performs no dependency download after
|
|
42
|
+
extracting the npm package, avoiding installation failures caused by a
|
|
43
|
+
user-owned npm cache with incorrect permissions.
|
|
44
|
+
|
|
3
45
|
## [0.6.14] — npm account scope correction
|
|
4
46
|
|
|
5
47
|
- Rename the public package from `@chrisalvir/camera-ui-homekit-4k` to
|
|
@@ -36,6 +78,7 @@
|
|
|
36
78
|
|
|
37
79
|
- 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
80
|
- 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.
|
|
81
|
+
- Camera.UI sensor/plugin assignments remain host-owned. The plugin forwards events from sensors already assigned to a camera; it cannot install OpenCV/CoreML or assign their sensors on the user's behalf.
|
|
39
82
|
- HEVC/HKSV3 recording audio receives its persistent one-time first-export default after HAP restores state. Later HomeKit audio choices are retained.
|
|
40
83
|
- HEVC video/audio transport, its recording implementation and pairing identities are preserved. A worker reload briefly interrupts every accessory served by that worker.
|
|
41
84
|
|
|
@@ -60,11 +103,13 @@
|
|
|
60
103
|
|
|
61
104
|
## [0.6.3]
|
|
62
105
|
|
|
63
|
-
|
|
106
|
+
> Correction: the automatic detector assignment and automatic export described
|
|
107
|
+
> here were not implemented in 0.6.3. Version 0.6.16 adds automatic HomeKit
|
|
108
|
+
> export for assigned cameras with a usable, confirmed source, but detector
|
|
109
|
+
> plugins and their sensor assignments remain controlled by Camera.UI.
|
|
110
|
+
|
|
64
111
|
- **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
112
|
- **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
113
|
- **FirmwareRevision Update:** Incremented firmware revision to `0.6.3`.
|
|
69
114
|
|
|
70
115
|
## [0.6.2]
|
|
@@ -78,7 +123,7 @@
|
|
|
78
123
|
|
|
79
124
|
## [0.6.1]
|
|
80
125
|
|
|
81
|
-
|
|
126
|
+
> Correction: this release does not automatically assign cameras to detector plugins or export every camera to Apple Home. Camera.UI owns sensor assignments, and export is done from the per-camera HomeKit settings.
|
|
82
127
|
- **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
128
|
- **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
129
|
- **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.
|
package/LICENSE.md
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
HOMEKIT 4K PROPRIETARY SOFTWARE LICENSE
|
|
2
2
|
|
|
3
|
-
Copyright Chrisalvir. All rights reserved.
|
|
3
|
+
Copyright (c) 2026 Chrisalvir. All rights reserved.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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/README.md
CHANGED
|
@@ -6,11 +6,15 @@ HomeKit 4K exports cameras assigned to the plugin in Camera.UI as separate
|
|
|
6
6
|
Apple Home accessories. Camera.UI remains the source of camera streams,
|
|
7
7
|
capabilities, sensors, and detector configuration.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
When Camera.UI assigns a camera to this plugin, the plugin probes its available
|
|
10
|
+
source and publishes it automatically once it can confirm H.264 or HEVC. A user
|
|
11
|
+
can stop a camera's export in that camera's settings; this choice persists and
|
|
12
|
+
prevents automatic republication. An unavailable/unknown source is retried a
|
|
13
|
+
few times; selecting a different source in that camera's settings retries it.
|
|
14
|
+
|
|
15
|
+
**Release 0.6.17** adds LAN-aware HomeKit/mDNS advertisement. Runtime behavior
|
|
16
|
+
was validated on the developer MacBook with Camera.UI 2.3.0; see the changelog
|
|
17
|
+
for the scope of each release and its validation evidence.
|
|
14
18
|
|
|
15
19
|
## Current behavior
|
|
16
20
|
|
|
@@ -33,14 +37,12 @@ behavior. Runtime evidence and limits are in
|
|
|
33
37
|
|
|
34
38
|
## Requirements and installation
|
|
35
39
|
|
|
36
|
-
The package
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
must be confirmed or removed before promising support for other Camera.UI
|
|
43
|
-
platforms.
|
|
40
|
+
The package declares Camera.UI >=2.3.0 and Node.js >=22.18.0. Starting with
|
|
41
|
+
0.6.15, npm allows installation on macOS, Windows, and Linux on x64 or ARM64.
|
|
42
|
+
The runtime has only been exercised on macOS ARM64; Windows, Linux, and macOS
|
|
43
|
+
Intel still need real-host validation before they can be called verified.
|
|
44
|
+
In Camera.UI's plugin store, search for the shorter text `camera-ui-homekit-4k`
|
|
45
|
+
and select the scoped package `@chrisalvir1/camera-ui-homekit-4k`.
|
|
44
46
|
|
|
45
47
|
## Development
|
|
46
48
|
|
|
@@ -54,13 +56,11 @@ pnpm smoke:bundle
|
|
|
54
56
|
|
|
55
57
|
Automated checks and real-host evidence are different: test results do not
|
|
56
58
|
replace playback, recording, or detection confirmation in Apple Home. See the
|
|
57
|
-
|
|
59
|
+
[public codec-profile notes](https://github.com/Chrisalvir1/homekit-4k/blob/main/docs/HKSV3_HEVC_CHANGES.md).
|
|
58
60
|
|
|
59
61
|
## Public release status
|
|
60
62
|
|
|
61
|
-
The package
|
|
62
|
-
unmodified copy; modifying or redistributing it is not
|
|
63
|
-
author's written permission.
|
|
64
|
-
Camera.UI's supported plugin installer
|
|
65
|
-
there. See
|
|
66
|
-
[`docs/npm-publication-readiness.md`](docs/npm-publication-readiness.md).
|
|
63
|
+
The package is public on npm under a proprietary license: users may download,
|
|
64
|
+
install, and run an unmodified copy; modifying or redistributing it is not
|
|
65
|
+
permitted without the author's written permission. Version 0.6.17 is the current release.
|
|
66
|
+
Use Camera.UI's supported plugin installer to install the latest public release.
|
package/bundle.zip
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chrisalvir1/camera-ui-homekit-4k",
|
|
3
3
|
"displayName": "HOMEKIT 4K — by Chrisalvir",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.17",
|
|
5
5
|
"description": "Exports Camera.UI cameras to Apple Home with H.264/HKSV and HEVC/HKSV3 streaming paths.",
|
|
6
6
|
"homepage": "https://github.com/Chrisalvir1/homekit-4k",
|
|
7
7
|
"repository": {
|
|
@@ -12,63 +12,31 @@
|
|
|
12
12
|
"url": "https://github.com/Chrisalvir1/homekit-4k/issues"
|
|
13
13
|
},
|
|
14
14
|
"author": "Chrisalvir",
|
|
15
|
-
"license": "SEE LICENSE IN LICENSE",
|
|
15
|
+
"license": "SEE LICENSE IN LICENSE.md",
|
|
16
16
|
"publishConfig": {
|
|
17
17
|
"access": "public",
|
|
18
18
|
"registry": "https://registry.npmjs.org/"
|
|
19
19
|
},
|
|
20
|
-
"type": "
|
|
20
|
+
"type": "commonjs",
|
|
21
21
|
"main": "./dist/index.js",
|
|
22
22
|
"types": "./dist/index.d.ts",
|
|
23
23
|
"files": [
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"vendor/hap-nodejs/dist/**/*.d.ts",
|
|
28
|
-
"vendor/hap-nodejs/package.json",
|
|
29
|
-
"vendor/hap-nodejs/LICENSE",
|
|
30
|
-
"vendor/hap-nodejs/PATCH.md",
|
|
31
|
-
"vendor/hap-nodejs/README.md",
|
|
32
|
-
"docs",
|
|
33
|
-
"LICENSE",
|
|
34
|
-
"logo.png",
|
|
35
|
-
"README.md",
|
|
36
|
-
"CHANGELOG.md"
|
|
24
|
+
"bundle.zip",
|
|
25
|
+
"CHANGELOG.md",
|
|
26
|
+
"logo.png"
|
|
37
27
|
],
|
|
38
28
|
"engines": {
|
|
39
29
|
"node": ">=22.18.0",
|
|
40
30
|
"camera.ui": ">=2.3.0"
|
|
41
31
|
},
|
|
42
32
|
"os": [
|
|
43
|
-
"darwin"
|
|
33
|
+
"darwin",
|
|
34
|
+
"linux",
|
|
35
|
+
"win32"
|
|
44
36
|
],
|
|
45
37
|
"cpu": [
|
|
46
|
-
"arm64"
|
|
47
|
-
|
|
48
|
-
"dependencies": {
|
|
49
|
-
"@camera.ui/sdk": "1.4.1",
|
|
50
|
-
"@homebridge/hap-nodejs": "file:vendor/hap-nodejs",
|
|
51
|
-
"@noble/ciphers": "2.4.0",
|
|
52
|
-
"fflate": "0.8.3",
|
|
53
|
-
"mqtt": "5.16.0",
|
|
54
|
-
"qrcode": "1.5.4",
|
|
55
|
-
"werift": "0.23.0"
|
|
56
|
-
},
|
|
57
|
-
"devDependencies": {
|
|
58
|
-
"@camera.ui/cli": "0.0.116",
|
|
59
|
-
"@types/node": "24.10.0",
|
|
60
|
-
"@types/qrcode": "1.5.6",
|
|
61
|
-
"eslint": "10.11.0",
|
|
62
|
-
"typescript": "5.9.3",
|
|
63
|
-
"typescript-eslint": "8.71.0"
|
|
64
|
-
},
|
|
65
|
-
"homekit4k": {
|
|
66
|
-
"releaseChannel": "stable"
|
|
67
|
-
},
|
|
68
|
-
"keywords": [
|
|
69
|
-
"camera-ui-plugin",
|
|
70
|
-
"camera-ui",
|
|
71
|
-
"homekit"
|
|
38
|
+
"arm64",
|
|
39
|
+
"x64"
|
|
72
40
|
],
|
|
73
41
|
"scripts": {
|
|
74
42
|
"build": "node scripts/build-vendored-hap.mjs && node scripts/build.mjs",
|
|
@@ -84,6 +52,19 @@
|
|
|
84
52
|
"smoke:bundle": "node scripts/smoke-bundle.mjs",
|
|
85
53
|
"examples": "pnpm build && node scripts/examples.mjs",
|
|
86
54
|
"bundle:camera-ui": "pnpm build && cui bundle && node scripts/finalize-camera-ui-bundle.mjs",
|
|
55
|
+
"publish:camera-ui": "pnpm bundle:camera-ui && npm publish ./bundle --access public --registry=https://registry.npmjs.org/",
|
|
87
56
|
"test:audio": "pnpm build && node scripts/audio-lab/test-audio.mjs"
|
|
57
|
+
},
|
|
58
|
+
"homekit4k": {
|
|
59
|
+
"releaseChannel": "stable"
|
|
60
|
+
},
|
|
61
|
+
"packageManager": "pnpm@11.25.0",
|
|
62
|
+
"keywords": [
|
|
63
|
+
"camera-ui-plugin",
|
|
64
|
+
"camera-ui",
|
|
65
|
+
"homekit"
|
|
66
|
+
],
|
|
67
|
+
"cameraui": {
|
|
68
|
+
"protocolLevel": 2
|
|
88
69
|
}
|
|
89
|
-
}
|
|
70
|
+
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
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.
|
|
@@ -1,36 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,125 +0,0 @@
|
|
|
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
|
-
}
|