@camstack/addon-pipeline-orchestrator 1.2.32 → 1.2.33

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/dist/_stub.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-BiLBDmU5.mjs";
2
- import { n as t, r as n, t as r } from "./_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Celb3oc6.mjs";
2
+ import { n as t, r as n, t as r } from "./_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-RHxrNfOD.mjs";
3
3
  import { a as i, c as a, i as o, n as s, o as c, r as l, s as u, t as d } from "./_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare__react__loadShare__.js-a8tvh93M.mjs";
4
4
  import { C as f, S as p, _ as m, a as h, b as g, c as _, d as v, f as y, g as b, h as x, i as S, l as C, m as w, n as T, o as E, p as D, r as O, s as k, t as A, u as j, v as M, w as ee, x as N, y as P } from "./_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-C_kzDF6N.mjs";
5
5
  import { n as F, r as I, t as L } from "./_virtual_mf___mfe_internal__addon_pipeline_orchestrator_widgets__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-yD-rMaFX.mjs";
@@ -18,7 +18,7 @@ var e = {
18
18
  },
19
19
  "@camstack/types": {
20
20
  name: "@camstack/types",
21
- version: "1.2.48",
21
+ version: "1.2.49",
22
22
  scope: ["default"],
23
23
  loaded: !1,
24
24
  from: "addon_pipeline_orchestrator_widgets",
@@ -0,0 +1,26 @@
1
+ //#region \0virtual:mf:__mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js
2
+ var e = "__mf_init__virtual:mf:__mfe_internal__addon_pipeline_orchestrator_widgets__mf_v__runtimeInit__mf_v__.js__", t = globalThis[e];
3
+ if (!t) {
4
+ let n, r, i = new Promise((e, t) => {
5
+ n = e, r = t;
6
+ });
7
+ t = globalThis[e] = {
8
+ initPromise: i,
9
+ initResolve: n,
10
+ initReject: r
11
+ };
12
+ }
13
+ var n = t.initPromise, r = "__mf_module_cache__";
14
+ globalThis[r] ||= {
15
+ share: {},
16
+ remote: {}
17
+ }, globalThis[r].share ||= {}, globalThis[r].remote ||= {};
18
+ var i = globalThis[r], a, o, s, c = (e) => {
19
+ e.ACCESSORY_LABEL, e.ALEXA_EGRESS_PROFILE, e.ALL_CAPABILITY_DEFINITIONS, e.APPLE_SA_TO_MACRO, e.AUDIO_ANALYSIS_CAP_NAME, e.AUDIO_BACKEND_CHOICES, e.AUDIO_MACRO_LABELS, e.AUDIO_PRESETS, e.AccessoriesStatusSchema, e.AccessoryKind, e.AddBrokerInputSchema, e.AddonAutoUpdateSchema, e.AddonListItemSchema, e.AddonPageDeclarationSchema, e.AddonPageInfoSchema, e.AdoptionAdoptInputSchema, e.AdoptionAdoptResultSchema, e.AdoptionFilterSchema, e.AdoptionGetCandidateInputSchema, e.AdoptionListCandidatesInputSchema, e.AdoptionListCandidatesOutputSchema, e.AdoptionReleaseInputSchema, e.AdoptionStatusSchema, e.AgentLoadSummarySchema, e.AirQualitySensorStatusSchema, e.AlarmArmModeSchema, e.AlarmPanelStatusSchema, e.AlarmStateSchema, e.AlertSchema, e.AlertSeveritySchema, e.AlertSourceSchema, e.AlertStatusSchema, e.AmbientLightSensorStatusSchema, e.ApiKeyRecordSchema, e.ApiKeySummarySchema, e.ArchiveEntrySchema, e.ArchiveManifestSchema, e.AttachmentMediaTypeSchema, e.AttachmentSchema, e.AudioAnalysisResultSchema, e.AudioAnalysisSettingsSchema, e.AudioChunkInputSchema, e.AudioClassSummarySchema, e.AudioClassificationLabelSchema, e.AudioClassificationResultSchema, e.AudioCodecInfoSchema, e.AudioDecodeSessionConfigSchema, e.AudioEncodeSchema, e.AudioEncodeSessionConfigSchema, e.AudioEncodedChunkSchema, e.AudioEventSchema, e.AudioLevelSchema, e.AudioMetricsHistoryPointSchema, e.AudioMetricsHistorySchema, e.AudioMetricsSnapshotSchema, e.AudioPcmChunkSchema, e.AuthResultSchema, e.AutoUpdateSettingsSchema, e.AutomationControlStatusSchema, e.AvailableIntegrationTypeSchema, e.BACKEND_TO_FORMAT, e.BASE_LIVE_EGRESS_PROFILE, e.BATTERY_DEVICE_PROFILE, e.BacklightModeSchema, e.BackupDestinationInfoSchema, e.BackupEntrySchema, e.BaseAddon, e.BaseDevice, e.BaseDeviceProvider, e.BatteryStatusSchema, e.BinaryStatusSchema, e.BoundingBoxSchema, e.BrightnessStatusSchema, e.BrokerAddInputSchema, e.BrokerAudioClientSchema, e.BrokerClientsSchema, e.BrokerConnectionDetailsSchema, e.BrokerConsumerAttributionSchema, e.BrokerConsumerKindSchema, e.BrokerDecodedClientSchema, e.BrokerEncodedClientSchema, e.BrokerGetStateInputSchema, e.BrokerInfoSchema, e.BrokerProviderInfoSchema, e.BrokerPublishInputSchema, e.BrokerRegistryStatusSchema, e.BrokerRtspClientSchema, e.BrokerStatsSchema, e.BrokerStatusEnum, e.BrokerStatusSchema, e.BrokerSubscribeInputSchema, e.BrokerSubscribeResultSchema, e.BrokerTestConnectionResultSchema, e.BrokerUnsubscribeInputSchema, e.CAMERA_SWITCH_CATALOG, e.CAMERA_SWITCH_ORDER, e.CAM_PROFILE_ORDER, e.CAPABILITY_NAMES, e.CAPABILITY_ROUTER_KEYS, e.CAP_NAMES_WITH_STATUS, e.CAP_NODE_PIN_CONTEXT_KEY, e.CAP_PROVIDER_KIND_MAP, e.COCO_80_LABELS, e.COCO_TO_MACRO, e.CORE_BLOCK_ADDON_PREFIX, e.CamProfileSchema, e.CamStreamDescriptorSchema, e.CamStreamKindSchema, e.CamStreamResolutionSchema, e.CameraAssignmentStatusSchema, e.CameraAudioStatusSchema, e.CameraBrokerProfileSchema, e.CameraBrokerStatusSchema, e.CameraCredentialsSchema, e.CameraCredentialsStatusSchema, e.CameraDecoderShmSchema, e.CameraDecoderStatusSchema, e.CameraDetectionPhaseSchema, e.CameraDetectionProvisioningSchema, e.CameraDetectionProvisioningStateSchema, e.CameraDetectionStatusSchema, e.CameraMetricsSchema, e.CameraMetricsWithDeviceIdSchema, e.CameraMotionStatusSchema, e.CameraRecordingModeSchema, e.CameraRecordingStatusSchema, e.CameraSourceStatusSchema, e.CameraSourceStreamSchema, e.CameraStatusDegradationReasonSchema, e.CameraStatusDegradationSchema, e.CameraStatusSchema, e.CameraStatusStageSchema, e.CameraStreamSchema, e.CameraSwitchAuthoritySchema, e.CameraSwitchGroupSchema, e.CameraSwitchIdSchema, e.CameraSwitchSchema, e.CameraSwitchUnavailableReasonSchema, e.CandidateQueryFilterSchema, e.CapScopeSchema, e.CapabilityBindingsSchema, e.CarbonMonoxideStatusSchema, e.ChargingStatus, e.ClientNetworkStatsSchema, e.ClimateControlStatusSchema, e.ClipPlaybackSchema, e.ClipSchema, e.ClusterAddonNodeDeploymentSchema, e.ClusterAddonStatusEntrySchema, e.CollectionColumnSchema, e.CollectionIndexSchema, e.ColorStatusSchema, e.ConfigEntrySchema, e.ConfigSectionWithValuesSchema, e.ConfigTabDeclarationSchema, e.ConnectivityStatusSchema, e.ConsumableItemSchema, e.ConsumablesStatusSchema, e.ContactStatusSchema, e.ControlKindSchema, e.ControlStatusSchema, e.ConvertArtifactSchema, e.ConvertResultSchema, e.ConvertTargetSchema, e.CoreBlockCompileResultSchema, e.CoreBlockInputSchema, e.CoreBlockPlacementSchema, e.CoreBlockSchema, e.CoreBlockStatusSchema, e.CoverStateSchema, e.CoverStatusSchema, e.CreateApiKeyInputSchema, e.CreateApiKeyResultSchema, e.CreateIntegrationInputSchema, e.CreateScopedTokenInputSchema, e.CreateScopedTokenResultSchema, e.CreateUserInputSchema, e.CustomActionInputSchema, e.CustomModelDescriptorSchema, e.DATAPLANE_SECRET_HEADER, e.DECLARED_DEVICE_SWEEP_LIMIT, e.DECLARED_INTEGRATION_FIXED_KEY, e.DEFAULT_ADDON_PLACEMENT, e.DEFAULT_AUDIO_ANALYZER_CONFIG, e.DEFAULT_DECODER_HWACCEL_CONFIG, e.DEFAULT_DETAIL_CROP_CONVENTION, e.DEFAULT_EVENT_COLOR, e.DEFAULT_FEATURES, e.DEFAULT_NATIVE_LEASE_SETTINGS, e.DEFAULT_RETENTION, e.DEFAULT_SCRUB_THUMBNAIL_PRESET, e.DETAIL_CROP_PADDING_FIELD, e.DETAIL_CROP_PADDING_KEY, e.DETAIL_CROP_SECTION_ID, e.DETAIL_CROP_SQUARE_KEY, e.DETECTION_PIPELINE_CAP_NAME, e.DEVICE_BACKEND_TO_FORMAT, e.DEVICE_CAP_NAMES, e.DEVICE_PROFILES, e.DEVICE_SCOPED_CAPS, e.DEVICE_SETTINGS_CONTRIBUTION_METHODS, e.DEVICE_STATE_READERS, e.DEVICE_STATUS_METHOD, e.DEVICE_TYPE_CONTROL_KIND, e.DEVICE_TYPE_INFO, e.DataStoreEngineInfoSchema, e.DayNightModeSchema, e.DayNightOptionsSchema, e.DayNightSettingsPatchSchema, e.DayNightStatusSchema, e.DeclaredDevices, e.DecodedAudioChunkSchema, e.DecodedFrameSchema, e.DecoderSessionConfigSchema, e.DecoderStatsSchema, e.DeleteIntegrationResultSchema, e.DetailCropConventionSchema, e.DetectionSourceSchema, e.DeviceCodeSeveritySchema, e.DeviceConfig, e.DeviceDiscoveryStatusSchema, e.DeviceExportExposeInputSchema, e.DeviceExportStatusSchema, e.DeviceExportUnexposeInputSchema, e.DeviceFeature, e.DeviceInfoSchema, e.DeviceNetworkStatsSchema, e.DeviceRole, e.DeviceRuntimeState, e.DeviceStatusSchema, e.DeviceType, e.DiscoveredChildDeviceSchema, e.DiscoveredChildStatusSchema, e.DiscoveredDeviceSchema, e.DiscoveredTargetSchema, e.DisposerChain, e.DoorbellPressEventSchema, e.DoorbellStatusSchema, e.EVENTFUL_CAP_NAMES, e.EVENT_KIND_BY_CAP, e.EVENT_PAD_MS, e.EVENT_TAXONOMY, e.EXPRESSION_BUILTINS, e.EXPRESSION_BUILTIN_NAMES, e.EXPRESSION_COMPILE_CACHE_CAPACITY, e.EXPRESSION_IDENTIFIER_RE, e.EXPRESSION_INJECTED_NOW, e.EgressEncodeSchema, e.EgressRateControlSchema, e.EgressTranscodeRequestSchema, e.EgressTranscodeSchema, e.ElementConfigStore, e.EmbeddingInfoSchema, e.EmbeddingResultSchema, e.EncodeProfileSchema, e.EncodedPacketSchema, e.EnrichedWidgetMetadataSchema, e.EnumSensorDateTimeFormatSchema, e.EnumSensorStatusSchema, e.EventCategory, e.EventEmitterStatusSchema, e.EventFireSchema, e.EventItemSchema, e.EventKindCategorySchema, e.EventKindDescriptorSchema, e.EventKindIconSchema, e.EventKindSchema, e.EventKindsForDeviceSchema, e.EventMediaArtifactSchema, e.EventMediaCoverageSchema, e.EventMediaKindSchema, e.EventMediaProductionSchema, e.EventSourceType, e.ExportDownloadSchema, e.ExportOptionsSchema, e.ExportRecordSchema, e.ExportSetupFieldSchema, e.ExportSetupSchema, e.ExportSpeedSchema, e.ExportStateSchema, e.ExportTimelapseSchema, e.ExposedDeviceSchema, e.ExposureModeSchema, e.ExpressionBindingSourceSchema, e.ExpressionEvalError, e.ExpressionFieldBindingSchema, e.ExpressionGlobalBindingSchema, e.ExpressionLiteralBindingSchema, e.ExpressionParseError, e.ExpressionSourceSchema, e.FanControlStatusSchema, e.FanDirectionSchema, e.FeatureManifestSchema, e.FeatureProbeStatusSchema, e.FloodStatusSchema, e.Fmp4BoxSplitter, e.FrameHandleFormatSchema, e.FrameHandleSchema, e.FrameInputSchema, e.GasStatusSchema, e.GetStreamWithCodecInputSchema, e.GlobalMetricsSchema, e.HAP_AUDIO_BASE, e.HAP_AUDIO_BITRATE_KBPS, e.HAP_AUDIO_VBV_KBITS, e.HAP_KEYFRAME_INTERVAL_SEC, e.HF_BASE_URL, e.HF_REPO, e.HWACCEL_OPTIONS, e.HealthStatusSchema, e.HistoryPointSchema, e.HistoryResolutionEnum, e.HumidifierStatusSchema, e.HumiditySensorStatusSchema, e.HvacModeSchema, e.ImageContractSchema, e.ImageContractStateSchema, e.ImageRotateSchema, e.ImageSettingsOptionsSchema, e.ImageSettingsPatchSchema, e.ImageSettingsStatusSchema, e.ImageStatusSchema, e.IngestOwnerSchema, e.InstalledPackageSchema, e.IntegrationLiteSchema, e.IntegrationWithStateSchema, e.IntercomAbilitySchema, e.IntercomStatusSchema, e.KNOWN_CAP_NAMES, e.KeyEventSchema, e.LOG_LEVEL_RANK, e.LabelAttributionSchema, e.LabelDefinitionSchema, e.LabelTierSchema, e.LawnMowerActivitySchema, e.LawnMowerControlStatusSchema, e.LinkedDeviceSchema, e.LinkedDevicesModeSchema, e.LlmDefaultSchema, e.LlmDefaultSelectorSchema, e.LlmErrorCodeSchema, e.LlmGenerateBaseInputSchema, e.LlmGenerateErrSchema, e.LlmGenerateOkSchema, e.LlmGenerateResultSchema, e.LlmImageSchema, e.LlmNodeModelSchema, e.LlmProfileKindDescriptorSchema, e.LlmProfileKindSchema, e.LlmProfileSchema, e.LlmRuntimeCompleteInputSchema, e.LlmRuntimeDiskUsageSchema, e.LlmRuntimeNodeSchema, e.LlmRuntimeStatusSchema, e.LlmUsageRollupSchema, e.LlmUsageSchema, e.LocateSegmentResultSchema, e.LocationStatSchema, e.LockControlStatusSchema, e.LockStateSchema, e.LogEntrySchema, e.LogLevelSchema, e.LogStreamEntrySchema, e.LoginMethodContributionSchema, e.LoginStageEnum, a = e.MACRO_LABELS, e.MAX_EXPRESSION_AST_NODES, e.MAX_EXPRESSION_BINDINGS, e.MAX_EXPRESSION_CALL_ARGS, e.MAX_EXPRESSION_EVAL_STEPS, e.MAX_EXPRESSION_SOURCE_LENGTH, e.METHOD_ACCESS_MAP, e.MODEL_FORMATS, e.MOTION_TRIGGER_FEATURE, e.ManagedModelCatalogEntrySchema, e.ManagedModelRefSchema, e.ManagedRuntimeConfigSchema, e.MaskGridDimsSchema, e.MaskGridShapeSchema, e.MaskLineShapeSchema, e.MaskPointSchema, e.MaskPolygonShapeSchema, e.MaskPolygonVerticesSchema, e.MaskRectShapeSchema, e.MaskShapeKindSchema, e.MaskShapeSchema, e.MediaFileInfoSchema, e.MediaFileSchema, e.MediaPlayerRepeatSchema, e.MediaPlayerStateSchema, e.MediaPlayerStatusSchema, e.MeshPeerSchema, e.MeshStatusSchema, e.MethodAccessSchema, e.ModelCatalogEntrySchema, e.ModelConvertInputSchema, e.ModelConvertMetadataSchema, e.ModelDistributeInputSchema, e.ModelDistributeResultSchema, e.ModelExtraFileSchema, e.ModelFormatEntrySchema, e.ModelFormatsSchema, e.ModelSubstitutionSchema, e.ModelVariantGroupSchema, e.MotionAnalysisResultSchema, e.MotionEventSchema, e.MotionOnMotionChangedDataSchema, e.MotionRegionSchema, e.MotionSourceEnum, e.MotionSourcesSchema, e.MotionStatusSchema, e.MotionTriggerRuntimeStateSchema, e.MotionTriggerStatusSchema, e.MotionZoneOptionsSchema, e.MotionZonePatchSchema, e.MotionZoneRegionSchema, e.MotionZoneStatusSchema, e.MqttBrokerStatusSchema, e.MutationFilterSchema, e.NATIVE_LEASE_ACTIVITY_FIELD, e.NATIVE_LEASE_ACTIVITY_KEY, e.NATIVE_LEASE_ADMISSION_FIELD, e.NATIVE_LEASE_ADMISSION_KEY, e.NATIVE_LEASE_BUDGET_FIELD, e.NATIVE_LEASE_BUDGET_KEY, e.NATIVE_LEASE_SECTION_ID, e.NATIVE_LEASE_TTL_FIELD, e.NATIVE_LEASE_TTL_KEY, e.NC_BASE_CONDITION_KEYS, e.NC_CONDITION_CATALOG, e.NC_HISTORY_LIMIT_DEFAULT, e.NC_HISTORY_LIMIT_MAX, e.NC_MAX_PER_TRACK_IMMEDIATE, e.NC_SNOOZE_MAX_MINUTES, e.NC_TAXONOMY, e.NativeCropBboxSchema, e.NativeCropRefSchema, e.NativeCropResultSchema, e.NativeDetectionSchema, e.NativeLeaseAdmissionSchema, e.NativeLeaseSettingsSchema, e.NativeObjectClassEnum, e.NativeObjectDetectionRuntimeStateSchema, e.NativeObjectDetectionStatusSchema, e.NcAlarmConfigSchema, e.NcAlarmModeCoverageSchema, e.NcAlarmSettingsPatchSchema, e.NcAlarmSettingsSchema, e.NcConditionDescriptorSchema, e.NcConditionsSchema, e.NcCrossingSchema, e.NcDeliverySchema, e.NcDeviceStateConditionSchema, e.NcHistoryEntrySchema, e.NcHistoryFilterSchema, e.NcHistoryRecordKindSchema, e.NcHistoryStatusSchema, e.NcHistorySubjectSchema, e.NcMediaFrameSchema, e.NcMediaPolicySchema, e.NcOccupancyConditionSchema, e.NcPlateMatcherSchema, e.NcRuleActionSchema, e.NcRuleActionSequenceSchema, e.NcRuleActionsSchema, e.NcRuleInputSchema, e.NcRuleNotificationButtonSchema, e.NcRulePatchSchema, e.NcRuleSchema, e.NcRuleTargetSchema, e.NcScheduleSchema, e.NcScheduleWindowSchema, e.NcSnoozeInputSchema, e.NcSnoozeSchema, e.NcSnoozeScopeSchema, e.NcSnoozeSuppressedSchema, e.NcTaxonomyEntrySchema, e.NcTaxonomySchema, e.NcTestResultSchema, e.NcThrottleGranularitySchema, e.NcThrottleSchema, e.NcZoneConditionSchema, e.NetworkAccessStatusSchema, e.NetworkAddressSchema, e.NetworkEndpointSchema, e.NotificationActionIconSchema, e.NotificationActionSchema, e.NotificationFormatSchema, e.NotificationSchema, e.NotifierStatusSchema, e.NumericSensorStatusSchema, e.OPS_LOG_DEFAULT_LIMIT, e.OPS_LOG_RING_DEFAULT_MAX, e.OauthIntegrationDescriptorSchema, e.ObjectEventSchema, e.OpsLogDomainSchema, e.OpsLogEntrySchema, e.OpsLogOpSchema, e.OpsLogQueryInputSchema, e.OpsLogReasonSchema, e.OrchestratorMetricsSchema, e.OsdOverlayKindEnum, e.OsdOverlayPatchSchema, e.OsdOverlaySchema, e.OsdPositionEnum, e.OsdRenderOutcomeEnum, e.OsdRenderResultSchema, e.OsdSlotBindingSchema, e.OsdSlotViewSchema, e.OsdSourceOptionSchema, e.OsdSourceSchema, e.OsdSourceValueTypeEnum, e.OsdStatusSchema, e.PET_FEEDER_MANUAL_FEED_MAX, e.PET_FEEDER_MANUAL_FEED_MIN, e.PIPELINE_FLOW_CAPABILITY_NAMES, e.PIPELINE_OWNER_CAPABILITY_NAMES, e.PRIVACY_MASK_CAP_NAME, e.PROVIDER_KIND_CAP_NAMES, e.PYTHON_SCRIPT, e.PackageUpdateSchema, e.PackageVersionInfoSchema, e.PasskeyLoginMethodSchema, e.PasskeySummarySchema, e.PcmSampleFormatSchema, e.PerScopeBreakdownSchema, e.PetFeederStatusSchema, e.PickStreamPreferencesSchema, e.PickStreamRequirementsSchema, e.PickedCamStreamSchema, e.PipelineAssignmentSchema, e.PipelineDefaultStepSchema, e.PipelineEngineChoiceSchema, e.PipelineRunResultBridge, e.PipelineStepInputSchema, e.PipelineValidationIssueSchema, e.PipelineValidationResultSchema, e.PlaceholderReasonSchema, e.PolygonPointSchema, e.PowerMeterStatusSchema, e.PresenceStatusSchema, e.PressureSensorStatusSchema, e.PrivacyMaskOptionsSchema, e.PrivacyMaskPatchSchema, e.PrivacyMaskRegionSchema, e.PrivacyMaskShapeSchema, e.PrivacyMaskStatusSchema, e.ProfileRtspEntrySchema, e.ProfileSlotSchema, e.ProfileSlotStatusSchema, e.ProviderStatusSchema, e.PtzAutotrackRuntimeStateSchema, e.PtzAutotrackSettingsSchema, e.PtzAutotrackStatusSchema, e.PtzAutotrackTargetOptionSchema, e.PtzMoveCommandSchema, e.PtzOptionsSchema, e.PtzPositionSchema, e.PtzPresetSchema, e.PtzStatusSchema, e.QueryFilterSchema, e.RATE_CONTROL_RELAXED, e.RATE_CONTROL_TIGHT, e.REACHABILITY_FAILURES_TO_OFFLINE, e.REACHABILITY_POLL_INTERVAL_MS, e.REACHABILITY_PROBE_TIMEOUT_MS, e.RECOGNITION_TYPES, e.RESERVED_BINDING_NAMES, e.RUNTIME_DEFAULTS, e.RUNTIME_TO_FORMAT, e.RawStateResultSchema, e.ReadGopBytesResultSchema, e.ReadSegmentBytesResultSchema, e.ReadinessRegistry, e.ReadinessTimeoutError, e.RecentTracksPageSchema, e.RecentTracksQueryInput, e.RecordingAvailabilitySchema, e.RecordingBandModeSchema, e.RecordingBandSchema, e.RecordingBandTriggersSchema, e.RecordingConfigSchema, e.RecordingDaysSchema, e.RecordingDeviceUsageSchema, e.RecordingLocationUsageSchema, e.RecordingManifestSchema, e.RecordingRangeSchema, e.RecordingRetentionSchema, e.RecordingStatusSchema, e.RecordingStorageModeSchema, e.RecordingStorageUsageSchema, e.RecordingTriggersSchema, e.RecordingWeekdaySchema, e.RedirectLoginMethodSchema, e.RelocateFootageInputSchema, e.RelocateJobSchema, e.RelocateJobStateSchema, e.RelocateMediaInputSchema, e.RenderedAsSchema, e.ReportMotionInputSchema, e.RetrainAnnotationDraftSchema, e.RetrainAnnotationKindSchema, e.RetrainAnnotationSchema, e.RetrainAnnotationSourceSchema, e.RetrainAssistResultSchema, e.RetrainAssistSubjectSchema, e.RetrainCopyRefusalSchema, e.RetrainFrameCandidateSchema, e.RetrainFrameListSchema, e.RetrainFrameSchema, e.RetrainFrameSelectionSchema, e.RetrainMacroClassSchema, e.RetrainStatusSchema, e.RetrainTrackSchema, e.RetrainTransitionResultSchema, e.RingBuffer, e.RtpSourceSchema, e.RtspRestreamEntrySchema, e.RunnerCameraConfigSchema, e.RunnerCameraDeviceUIFields, e.RunnerFrameSourceSchema, e.RunnerInferenceDeviceSchema, e.RunnerLocalLoadSchema, e.RunnerLocalMetricsSchema, e.SCOPE_PRESETS, e.SCRUB_THUMBNAIL_PRESETS, e.SCRUB_THUMBNAIL_PRESET_LABELS, e.SCRUB_THUMBNAIL_PRESET_ORDER, e.SENSOR_FEATURES, e.SENSOR_MAP, e.SOURCE_INFO_METADATA_KEY, e.STREAM_PROFILE_META, e.STREAM_QUALITY_LABELS, e.SUB_DETECTION_TYPES, e.SYSTEM_CAP_NAMES, e.SceneCheckSchema, e.SceneConditionSchema, e.SceneMonitorSchema, e.SceneMonitorStateSchema, e.SceneMonitorStatusSchema, e.SceneReferenceSchema, e.ScopedTokenSchema, e.ScopedTokenSummarySchema, e.ScoredObjectEventSchema, e.ScriptRunnerStatusSchema, e.ScrubThumbnailPresetSchema, e.SearchResultSchema, e.SendEmailInputSchema, e.SendEmailResultSchema, e.SendResultSchema, e.SensorEventSchema, e.ServerBootModeSchema, e.ServerPackageStatusSchema, e.ServerRollbackInfoSchema, e.ServerUpdateActionResultSchema, e.ServerUpdateCheckResultSchema, e.ServerUpdateStateSchema, e.SettingsPatchSchema, e.SettingsRecordSchema, e.SettingsSchemaWithValuesSchema, e.SettingsUpdateResultSchema, e.ShmRingStatsSchema, e.SmokeStatusSchema, e.SmtpStatusSchema, e.SnapshotImageSchema, e.SourceInfoSchema, e.SpatialDetectionSchema, e.SsoBridgeClaimsSchema, e.StartEmbeddedInputSchema, e.StationaryObjectSchema, e.StorageAbortUploadInputSchema, e.StorageBeginDownloadInputSchema, e.StorageBeginDownloadResultSchema, e.StorageBeginUploadInputSchema, e.StorageBeginUploadResultSchema, e.StorageEndDownloadInputSchema, e.StorageFinalizeUploadInputSchema, e.StorageLocationDeclarationSchema, e.StorageLocationRefSchema, e.StorageLocationSchema, e.StorageLocationTypeSchema, e.StorageProviderInfoSchema, e.StorageReadChunkInputSchema, e.StorageTestLocationResultSchema, e.StorageWriteChunkInputSchema, e.StreamCodecSchema, e.StreamFormatSchema, e.StreamNetworkStatsSchema, e.StreamParamsOptionsSchema, e.StreamParamsStatusSchema, e.StreamProfileConfigSchema, e.StreamProfileOptionsSchema, e.StreamProfilePatchSchema, e.StreamProfileSchema, e.StreamSourceEntrySchema, e.StreamSourceSchema, e.SubscribeAudioChunksInputSchema, e.SubscribeAudioChunksResultSchema, e.SubscribeFramesInputSchema, e.SubscribeFramesResultSchema, e.SwitchStatusSchema, e.SystemMetricsSchema, e.SystemMirror, e.TAXONOMY_COLORS, e.TIMEZONES, e.TRANSCODE_DOWN_MAX_BITRATE_KBPS, e.TRANSCODE_DOWN_MAX_HEIGHT, e.TamperStatusSchema, e.TankStatusSchema, e.TargetKindCapsSchema, e.TargetKindLevelSchema, e.TargetKindSchema, e.TargetSchema, e.TemperatureSensorStatusSchema, e.TerminalProfileInfoSchema, e.TerminalSessionInfoSchema, e.TestConnectionResultSchema, e.TestResultSchema, e.TimelapseRuleInputSchema, e.TimelapseRulePatchSchema, e.TimelapseRuleSchema, e.TimelapseTemplateSchema, e.ToastSchema, e.TokenScopeSchema, e.TopologyNodeSchema, e.TopologyProcessSchema, e.TopologyServiceSchema, e.TrackCascadeCountsSchema, e.TrackEnvelopeSchema, e.TrackFlagsPatchSchema, e.TrackFlagsSchema, e.TrackProjectionSchema, e.TrackSchema, e.TrackSourceSchema, e.TrackStateSchema, e.TrackZoneFilterSchema, e.TrackedDetectionSchema, e.TrainingExportDeviceTotalsSchema, e.TrainingExportSummarySchema, e.TurnServerSchema, e.UNIT_TABLE, e.UnifiedBrokerInfoSchema, e.UnitConversionError, e.UpdateIntegrationInputSchema, e.UpdateStatusSchema, e.UpdateUserInputSchema, e.UserRecordSchema, e.UserSummarySchema, e.VacuumControlStatusSchema, e.VacuumStateSchema, e.ValveStateSchema, e.ValveStatusSchema, e.VectorDeclareIndexInputSchema, e.VectorDeleteByFilterInputSchema, e.VectorDeleteInputSchema, e.VectorDeleteResultSchema, e.VectorFilterSchema, e.VectorGetInputSchema, e.VectorGetResultSchema, e.VectorItemSchema, e.VectorMatchSchema, e.VectorMetadataSchema, e.VectorMetricSchema, e.VectorQueryInputSchema, e.VectorQueryResultSchema, e.VectorStatsInputSchema, e.VectorStatsResultSchema, e.VectorUpsertInputSchema, e.VectorUpsertResultSchema, e.VibrationStatusSchema, e.VideoEncodeSchema, e.WEBRTC_EGRESS_PROFILE, e.WELL_KNOWN_TABS, e.WELL_KNOWN_TAB_MAP, e.WaterHeaterStatusSchema, e.WeatherStatusSchema, e.WebrtcStreamChoiceSchema, e.WebrtcStreamTargetSchema, e.WhiteBalanceModeSchema, e.WidgetHostEnum, e.WidgetLoginMethodSchema, e.WidgetMetadataSchema, e.WidgetRemoteSchema, e.WidgetSizeEnum, e.YAMNET_TO_MACRO, e.ZoneCrossingDirectionSchema, e.ZoneCrossingSchema, e.ZoneKindEnum, e.ZoneRuleModeEnum, e.ZoneRuleSchema, o = e.ZoneRuleStageEnum, e.ZoneRulesArraySchema, e.ZoneSchema, e.ZoneScopeBreakdownSchema, e.accessoriesCapability, e.accessoryStableId, e.addonPagesCapability, e.addonPagesSourceCapability, e.addonRoutesCapability, e.addonSettingsCapability, e.addonWidgetsCapability, e.addonWidgetsSourceCapability, e.addonsCapability, e.adminUiCapability, e.airQualitySensorCapability, e.alarmPanelCapability, e.alertsCapability, e.ambientLightSensorCapability, e.asBoolean, e.asJsonArray, e.asJsonObject, e.asNumber, e.asString, e.audioAnalysisCapability, e.audioAnalyzerCapability, e.audioCodecCapability, e.audioMetricsCapability, e.audioPlanFromEncodeProfile, e.authProviderCapability, e.autoAssignProfiles, e.automationControlCapability, e.backupCapability, e.bareAddonId, e.batteryCapability, e.bestLocationMatch, e.binaryCapability, e.bindAddonActions, e.brightnessCapability, e.brokerCapability, e.buildAddonRouteProvider, e.buildAudioArgs, e.buildEventKindDescriptor, e.buildFfmpegArgs, e.buildInputArgs, e.buildModelVariantGroups, e.buildNcTaxonomy, e.buildStreamParamsConfigSchema, e.buildVideoArgs, e.buttonCapability, e.cameraCredentialsCapability, e.cameraPipelineConfigCapability, e.cameraStreamsCapability, e.canConvertUnit, e.canonicalEgressPlan, e.carbonMonoxideCapability, e.cellsToRects, e.classifyStream, e.classifyStreams, e.climateControlCapability, e.collectHydratedFieldEntries, e.collectHydratedFieldValues, e.colorCapability, e.colorForKind, e.compileExpression, e.compileExpressionSafe, e.connectivityCapability, e.consumablesCapability, e.contactCapability, e.controlCapability, e.convertUnit, e.coreBlockAddonId, e.coreBlockIdFromAddonId, e.coreBlocksCapability, e.cosineSimilarity, e.coverCapability, e.createDeviceProxy, e.createDurableState, e.createEvent, e.createExpressionScope, e.createHwAccelCache, e.createLazyTrpcSource, e.createMirrorSource, e.createRuntimeStateBridge, e.createSliceHandle, e.createSystemProxy, e.customAction, e.customModelRegistryCapability, e.dataStoreProviderCapability, e.dayNightCapability, e.declarationOwnerNodeId, e.decodeVectorBase64, e.decoderCapability, e.defaultDeviceFor, e.defineCustomActions, e.deriveCameraSwitches, e.deriveDetailCropRect, e.deriveRecordingMode, e.describeModelVariant, e.detectionPipelineCapability, e.deviceAdoptionCapability, e.deviceBackendToFormat, e.deviceCustomAction, e.deviceDiscoveryCapability, e.deviceExportCapability, e.deviceManagerCapability, e.deviceMatchesProfile, e.deviceOpsCapability, e.deviceProviderCapability, e.deviceStateCapability, e.deviceStatusCapability, e.doorbellCapability, e.egressTranscodeSharingKey, e.egressTransportFromRequest, e.embeddingEncoderCapability, e.emitDownForOwnedCaps, e.emitReadiness, e.encodeProfileFromStreamShape, e.encodeVectorBase64, e.enumSensorCapability, e.enumerateInferenceDevices, e.enumerateItemArrayFields, e.enumerateSchemaFields, e.errMsg, e.evaluateAst, e.evaluateExpressionSource, e.evaluateZoneRules, e.event, e.eventEmitterCapability, e.eventsCapability, e.expandCapMethods, e.extractNestedAddonId, e.extractSourceInfoFromMetadata, e.faceGalleryCapability, e.fanControlCapability, e.featureProbeCapability, e.filesystemBrowseCapability, e.findTimezone, e.floodCapability, e.formatForBackend, e.formatForRuntime, e.gasCapability, e.getAudioMacroClassIds, e.getByPath, e.getCapsByProviderKind, e.getTaxonomyEntry, e.hasMotionTrigger, e.hfModelUrl, e.htmlToText, e.humidifierCapability, e.humiditySensorCapability, e.hydrateSchema, e.imageCapability, e.imageSettingsCapability, e.integrationsCapability, e.intercomCapability, e.invocationFromEncodeProfile, e.isAgentOnlyPlacement, e.isArrayOutputSchema, e.isBaseConditionKey, e.isCollectionArrayMethod, e.isDeployableToAgent, e.isDeviceConfigCap, e.isDeviceScopedCap, e.isEvent, e.isNode, e.isObjectInput, e.isSameAddonId, e.isScheduleActive, e.isSoftwareDecode, e.isVoidInput, e.jobKindSchema, e.kebabToCamel, e.knownValues, e.lawnMowerControlCapability, e.lifecycleJobSchema, e.lifecycleJobScopeSchema, e.lifecycleJobStateSchema, e.lifecycleTaskSchema, e.llmCapability, e.llmRuntimeCapability, e.localNetworkCapability, e.locationSimilarity, e.lockControlCapability, e.logBannerArgs, e.logDestinationCapability, e.logLevelAtMost, e.loginMethodCapability, e.looseSchema, e.makeProfileBrokerId, e.makeSourceBrokerId, e.mapAudioLabelToMacro, e.markdownToHtmlLite, e.markdownToText, e.maskUrlCredentials, e.mediaPlayerCapability, e.mergeSourceInfo, e.meshNetworkCapability, e.method, e.metricsProviderCapability, e.modelConvertCapability, e.modelDistributorCapability, e.modelFormatForRuntime, e.motionCapability, e.motionDetectionCapability, e.motionTriggerCapability, e.motionZonesCapability, e.mqttBrokerCapability, e.nativeObjectDetectionCapability, e.networkAccessCapability, e.networkQualityCapability, e.nodePin, e.nodesCapability, e.normalizeAddonInitResult, e.normalizeUnit, e.notificationOutputCapability, e.notificationRulesCapability, e.notifierCapability, e.numericSensorCapability, e.oauthIntegrationCapability, e.objectInputDeclaresAddonId, e.osdCapability, e.osdManagerCapability, e.parseCameraStreamConfig, e.parseExpression, e.parseJsonArray, e.parseJsonObject, e.parseJsonUnknown, e.parseProfileBrokerId, e.parseStreamParamsFormPatch, e.petFeederCapability, e.pickAccessoryControl, e.pickDetailCropConvention, e.pickNativeLeaseOverride, e.pickPreferredRtspEntry, e.pickVideoEncoder, e.pickerForCondition, e.pipelineAnalyticsCapability, e.pipelineExecutorCapability, e.pipelineOrchestratorCapability, e.pipelineRunnerCapability, e.plateGalleryCapability, e.platformProbeCapability, e.powerMeterCapability, e.prepareNotification, e.presenceCapability, e.pressureSensorCapability, e.privacyMaskCapability, e.procedureAuthKey, e.ptzAutotrackCapability, e.ptzCapability, e.pythonScriptForBackend, e.readDetailCropConvention, e.readDeviceStateFrom, e.readNativeLeaseOverride, e.readNodePin, e.readinessKey, e.rebootCapability, e.recordingCapability, e.recordingExportCapability, e.rectsToCells, e.requiresPython, e.resolveAddonExecution, e.resolveAddonGroup, e.resolveAddonPlacement, e.resolveAddonRuntime, e.resolveCapMount, e.resolveDetectionRuntime, e.resolveDeviceControlKind, e.resolveDeviceProfile, e.resolveEgressDecodeHwAccel, e.resolveFormat, s = e.resolveHydratedFieldValue, e.resolveModelFormat, e.resolveMutate, e.resolveRunnerId, e.resolveScrubThumbnailGeometry, e.resolveVariantModelId, e.runInferenceStep, e.runtimeDevices, e.sceneMonitorCapability, e.scopeKey, e.scoreRuntimes, e.scriptRunnerCapability, e.selectAssignedProfileSlots, e.serverManagementCapability, e.setByPath, e.settingsStoreCapability, e.sleep, e.sleepCancellable, e.smokeCapability, e.smtpProviderCapability, e.snapshotCapability, e.ssoBridgeCapability, e.startReachabilityPoll, e.stateVocabularyFor, e.storageCapability, e.storageEvictableCapability, e.storageProviderCapability, e.streamBrokerCapability, e.streamCatalogCapability, e.streamParamsCapability, e.streamPixels, e.streamQualityLabel, e.subKindsOf, e.summarisePrivacyAudio, e.supportedRuntimes, e.switchCapability, e.switchedOffIds, e.synthesizeSourceInfo, e.systemCapability, e.tamperCapability, e.taskLogEntrySchema, e.taskPhaseSchema, e.taskTargetSchema, e.temperatureSensorCapability, e.terminalSessionCapability, e.textToHtml, e.toDeviceSummary, e.toExpressionValue, e.toNodeId, e.toStreamSourceEntry, e.toastCapability, e.tokenize, e.transcodeBody, e.tryConvertUnit, e.turnProviderCapability, e.unitDimension, e.unitsForDimension, e.updateCapability, e.userManagementCapability, e.userPasskeysCapability, e.vacuumControlCapability, e.validateExpressionSource, e.valveCapability, e.vectorDimFromBase64, e.vectorStoreCapability, e.vibrationCapability, e.videoclipsCapability, e.viewerUiCapability, e.waterHeaterCapability, e.weatherCapability, e.webrtcClientHintsSchema, e.webrtcSessionCapability, e.wiringAddonHealthSchema, e.wiringHealthSnapshotSchema, e.wiringNodeHealthSchema, e.wiringProbeKindSchema, e.wiringProbeResultSchema, e.zodEntriesToConfigUI, e.zoneAnalyticsCapability, e.zoneRulesCapability, e.zonesCapability, e.default;
20
+ }, l = i.share["default:@camstack/types"];
21
+ l === void 0 ? n.then(() => {
22
+ if (l = i.share["default:@camstack/types"], l === void 0) throw Error("[Module Federation] Shared module @camstack/types was imported before federation bootstrap finished.");
23
+ c(l);
24
+ }) : c(l);
25
+ //#endregion
26
+ export { a as n, o as r, s as t };
@@ -36,7 +36,7 @@ async function r() {
36
36
  }
37
37
  },
38
38
  "@camstack/types": {
39
- version: "1.2.48",
39
+ version: "1.2.49",
40
40
  scope: "default",
41
41
  shareConfig: {
42
42
  singleton: !0,
package/dist/index.js CHANGED
@@ -17557,6 +17557,23 @@ var CameraRecordingStatusSchema = object({
17557
17557
  active: boolean(),
17558
17558
  storageBytes: number()
17559
17559
  });
17560
+ /** One stage of the fan-out that could NOT be read, and how long it cost. */
17561
+ var CameraStatusDegradationSchema = object({
17562
+ stage: _enum([
17563
+ "source",
17564
+ "broker",
17565
+ "detection",
17566
+ "recording",
17567
+ "switches"
17568
+ ]),
17569
+ reason: _enum([
17570
+ "timeout",
17571
+ "error",
17572
+ "partial"
17573
+ ]),
17574
+ /** Wall-clock ms spent on the stage before it was abandoned. */
17575
+ elapsedMs: number()
17576
+ });
17560
17577
  /**
17561
17578
  * Aggregated per-camera pipeline status — server-composed, single call.
17562
17579
  *
@@ -17587,9 +17604,28 @@ var CameraStatusSchema = object({
17587
17604
  * differently — a quiet camera that looks identical to a dead one is the
17588
17605
  * silence-reads-as-never-happened trap this repo keeps paying for.
17589
17606
  *
17590
- * Empty when nothing is off. Never contains a switch no provider offers.
17607
+ * Empty when nothing is off, and never contains a switch no provider offers
17608
+ * — but an empty list is only a POSITIVE claim when `degraded` does not name
17609
+ * `'switches'`. When it does, the switch set could not be read and nothing
17610
+ * here may be rendered as "the operator turned nothing off": that is the
17611
+ * D62 failure (a camera we could not read painted as broken) in the very
17612
+ * field that exists to prevent it.
17591
17613
  */
17592
17614
  switchedOff: array(CameraSwitchIdSchema).readonly(),
17615
+ /**
17616
+ * Stages of the bounded fan-out that were CUT SHORT — a timeout or a
17617
+ * rejection — and whose block is therefore `null` because we could not
17618
+ * READ it, not because there is nothing there.
17619
+ *
17620
+ * Without this, three different facts arrive as the same `null`: "the stage
17621
+ * timed out", "the stage failed", and "this camera legitimately has no
17622
+ * decoder / no recording". Every surface that draws a conclusion from a null
17623
+ * block (or from an empty `switchedOff`) must consult this first; a stage
17624
+ * named here supports no conclusion at all, only "unknown".
17625
+ *
17626
+ * Empty on a clean read — the overwhelmingly common case.
17627
+ */
17628
+ degraded: array(CameraStatusDegradationSchema).readonly(),
17593
17629
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
17594
17630
  fetchedAt: number()
17595
17631
  });
@@ -32933,6 +32969,7 @@ function composeCameraStatus(input) {
32933
32969
  audio: mapAudio(input.audioResult),
32934
32970
  recording: mapRecording(input.recordingResult),
32935
32971
  switchedOff: input.switchedOff,
32972
+ degraded: input.degraded,
32936
32973
  fetchedAt: input.fetchedAt
32937
32974
  };
32938
32975
  }
@@ -32984,24 +33021,74 @@ var AUDIO_SILENCING_SWITCH_IDS = [
32984
33021
  "broker-audio",
32985
33022
  "audio-analysis"
32986
33023
  ];
33024
+ /**
33025
+ * Sentinel resolved by the per-stage timer. A unique symbol rather than `null`
33026
+ * so the race result can be narrowed WITHOUT a cast — and, more to the point,
33027
+ * so a stage that legitimately resolves `null` is never mistaken for one that
33028
+ * ran out of time.
33029
+ */
33030
+ var STAGE_TIMED_OUT = Symbol("camera-status-stage-timeout");
32987
33031
  var CameraStatusService = class {
32988
33032
  deps;
32989
33033
  constructor(deps) {
32990
33034
  this.deps = deps;
32991
33035
  }
32992
33036
  /**
32993
- * Races a promise against a timeout. Returns `null` on timeout OR rejection.
33037
+ * Record and ANNOUNCE a stage whose value could not be trusted.
33038
+ *
33039
+ * Both halves matter. The entry is what a client reads to tell a `null` that
33040
+ * means "we could not look" from a `null` that means "there is nothing
33041
+ * there"; the `warn` is what makes the next hang findable at all. The line
33042
+ * carries `tags.deviceId` with the numeric id because the question is always
33043
+ * per-camera ("why is 614 worse than 615?") and a line without the tag
33044
+ * cannot be grouped to answer it.
33045
+ */
33046
+ recordDegraded(sink, deviceId, stage, reason, elapsedMs, extraMeta = {}) {
33047
+ sink.entries.push({
33048
+ stage,
33049
+ reason,
33050
+ elapsedMs
33051
+ });
33052
+ this.deps.logger.warn("camera status stage could not be read", {
33053
+ tags: { deviceId },
33054
+ meta: {
33055
+ stage,
33056
+ reason,
33057
+ elapsedMs,
33058
+ ...extraMeta
33059
+ }
33060
+ });
33061
+ }
33062
+ /**
33063
+ * Races a promise against a timeout. Returns `null` on timeout OR rejection —
33064
+ * but the two are no longer the same event: whichever happened is pushed to
33065
+ * `sink` (and logged) under `stage`, so the `null` that reaches the payload
33066
+ * arrives with its cause attached.
33067
+ *
32994
33068
  * Never throws — individual stage failures become `null` in the aggregate.
32995
33069
  *
32996
- * @param p The stage fetch promise.
32997
- * @param ms Timeout in milliseconds.
33070
+ * @param p The stage fetch promise.
33071
+ * @param ms Timeout in milliseconds.
33072
+ * @param stage Which stage this is, as it appears in `CameraStatus.degraded`.
33073
+ * @param deviceId The camera — every line about it carries the tag.
33074
+ * @param sink Per-call collector for stages that could not be read.
32998
33075
  */
32999
- boundedStage(p, ms) {
33076
+ boundedStage(p, ms, stage, deviceId, sink) {
33077
+ const startedAt = Date.now();
33000
33078
  let timer;
33001
33079
  const timeout = new Promise((resolve) => {
33002
- timer = setTimeout(() => resolve(null), ms);
33080
+ timer = setTimeout(() => resolve(STAGE_TIMED_OUT), ms);
33003
33081
  });
33004
- return Promise.race([p, timeout]).catch(() => null).finally(() => {
33082
+ return Promise.race([p, timeout]).then((value) => {
33083
+ if (value === STAGE_TIMED_OUT) {
33084
+ this.recordDegraded(sink, deviceId, stage, "timeout", Date.now() - startedAt, { timeoutMs: ms });
33085
+ return null;
33086
+ }
33087
+ return value;
33088
+ }).catch((err) => {
33089
+ this.recordDegraded(sink, deviceId, stage, "error", Date.now() - startedAt, { error: err instanceof Error ? err.message : String(err) });
33090
+ return null;
33091
+ }).finally(() => {
33005
33092
  if (timer !== void 0) clearTimeout(timer);
33006
33093
  });
33007
33094
  }
@@ -33027,7 +33114,7 @@ var CameraStatusService = class {
33027
33114
  decoder: false,
33028
33115
  audio: audioPinned
33029
33116
  },
33030
- detectionReason: pipelineAssignment !== null ? pipelineAssignment.reason : this.deps.hasCameraConfig(deviceId) ? `pending:${this.deps.getPendingReason(deviceId) ?? "pending"}` : void 0,
33117
+ detectionReason: pipelineAssignment !== null ? pipelineAssignment.reason : this.deps.hasCameraConfig(deviceId) ? `pending:${this.deps.getPendingReason(deviceId) ?? "pending"}` : this.deps.isSessionCamera(deviceId) ? "armed:on-motion" : void 0,
33031
33118
  audioNodeId,
33032
33119
  audioPinned
33033
33120
  };
@@ -33038,7 +33125,7 @@ var CameraStatusService = class {
33038
33125
  * deviceId). `allSlotsFetch` is shared with the broker stage — fetched
33039
33126
  * ONCE by the caller — so this stage never issues its own round-trip.
33040
33127
  */
33041
- buildSourceStage(api, allSlotsFetch, deviceId) {
33128
+ buildSourceStage(api, allSlotsFetch, deviceId, sink) {
33042
33129
  if (!api || !allSlotsFetch) return Promise.resolve(null);
33043
33130
  return this.boundedStage(allSlotsFetch.then((slots) => {
33044
33131
  return { streams: slots.filter((s) => s.deviceId === deviceId).map((s) => ({
@@ -33049,7 +33136,7 @@ var CameraStatusService = class {
33049
33136
  fps: 0,
33050
33137
  kind: s.profile
33051
33138
  })) };
33052
- }), STAGE_TIMEOUT_MS);
33139
+ }), STAGE_TIMEOUT_MS, "source", deviceId, sink);
33053
33140
  }
33054
33141
  /**
33055
33142
  * Broker stage (per-profile slot stats + client counts). Reuses
@@ -33060,7 +33147,7 @@ var CameraStatusService = class {
33060
33147
  * broker's actual decode-session node into `liveDecoder` (T6) — the first
33061
33148
  * slot that reports one wins.
33062
33149
  */
33063
- buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder) {
33150
+ buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder, sink) {
33064
33151
  if (!api || !allSlotsFetch) return Promise.resolve(null);
33065
33152
  return this.boundedStage(allSlotsFetch.then(async (slots) => {
33066
33153
  const deviceSlots = slots.filter((s) => s.deviceId === deviceId);
@@ -33097,7 +33184,7 @@ var CameraStatusService = class {
33097
33184
  return e.brokerId.split("/")[0] === String(deviceId) && e.enabled;
33098
33185
  }) ?? false
33099
33186
  };
33100
- }), STAGE_TIMEOUT_MS);
33187
+ }), STAGE_TIMEOUT_MS, "broker", deviceId, sink);
33101
33188
  }
33102
33189
  /**
33103
33190
  * Decoder stage. decoder cap methods (listActiveSessions/getInfo/getShmStats)
@@ -33136,7 +33223,7 @@ var CameraStatusService = class {
33136
33223
  };
33137
33224
  }
33138
33225
  /** Detection stage (pipeline-executor + runner metrics). */
33139
- buildDetectionStage(api, detectionNodeId, deviceId) {
33226
+ buildDetectionStage(api, detectionNodeId, deviceId, sink) {
33140
33227
  if (!api || !detectionNodeId) return Promise.resolve(null);
33141
33228
  return this.boundedStage(Promise.all([api.pipelineExecutor.getEngineProvisioning.query({ nodeId: detectionNodeId }).catch(() => null), api.pipelineExecutor.getSelectedEngine.query({ nodeId: detectionNodeId }).catch(() => null)]).then(async ([provisioning, engine]) => {
33142
33229
  const metrics = await api.pipelineRunner.getCameraMetrics.query({
@@ -33166,7 +33253,7 @@ var CameraStatusService = class {
33166
33253
  ...provisioning?.error !== void 0 ? { error: provisioning.error } : {}
33167
33254
  }
33168
33255
  };
33169
- }), STAGE_TIMEOUT_MS);
33256
+ }), STAGE_TIMEOUT_MS, "detection", deviceId, sink);
33170
33257
  }
33171
33258
  /**
33172
33259
  * Audio stage. `nodeId` is orchestrator-local (the cached assignment);
@@ -33185,6 +33272,12 @@ var CameraStatusService = class {
33185
33272
  * analyzer with nothing, and reporting `enabled: true` for the other two
33186
33273
  * would reintroduce the exact hardcoded lie the previous paragraph is about
33187
33274
  * — one row further down the group.
33275
+ *
33276
+ * `enabled` is a boolean and cannot say "unknown", so when the switch read
33277
+ * was cut short or partial this block is OPTIMISTIC by construction. That is
33278
+ * survivable only because `CameraStatus.degraded` names `'switches'` in
33279
+ * exactly those cases — a surface drawing "audio is running" from this field
33280
+ * must consult it first.
33188
33281
  */
33189
33282
  buildAudioStage(audioNodeId, switchedOff) {
33190
33283
  if (audioNodeId === null) return null;
@@ -33199,8 +33292,13 @@ var CameraStatusService = class {
33199
33292
  * `{ deviceId }` and returns `RecordingStatus`, typed `unknown` in the
33200
33293
  * generated router (DEVICE_STATUS_METHOD) — narrowed via
33201
33294
  * {@link isRecordingStatus} instead of an unsafe cast.
33295
+ *
33296
+ * There is deliberately NO `.catch(() => null)` on the query any more: it
33297
+ * swallowed the rejection before `boundedStage` could see it, so a recording
33298
+ * source that was refusing every call produced the same anonymous `null` as
33299
+ * a camera that simply records nothing.
33202
33300
  */
33203
- buildRecordingStage(api, deviceId) {
33301
+ buildRecordingStage(api, deviceId, sink) {
33204
33302
  if (!api) return Promise.resolve(null);
33205
33303
  return this.boundedStage(api.recording.getStatus.query({ deviceId }).then((rawStatus) => {
33206
33304
  if (!isRecordingStatus(rawStatus)) return null;
@@ -33209,7 +33307,40 @@ var CameraStatusService = class {
33209
33307
  active: rawStatus.enabled && rawStatus.activeMode !== "off",
33210
33308
  storageBytes: rawStatus.storageBytes
33211
33309
  };
33212
- }).catch(() => null), STAGE_TIMEOUT_MS);
33310
+ }), STAGE_TIMEOUT_MS, "recording", deviceId, sink);
33311
+ }
33312
+ /**
33313
+ * The operator's function switches (D61/D62), bounded like every other stage.
33314
+ *
33315
+ * Three outcomes, and they must not collapse into one:
33316
+ *
33317
+ * - READ — the group came back whole. The derived id list is a total, and an
33318
+ * empty one really does mean the operator turned nothing off.
33319
+ * - PARTIAL — the group came back with at least one switch marked
33320
+ * `source-unreachable`. `CameraSwitchService` bounds each source
33321
+ * individually, so a slow source drops ITS switch and leaves the rest;
33322
+ * the derived list is then a FLOOR. Marked `'partial'`.
33323
+ * - NOT READ — the whole group timed out or rejected. Marked by
33324
+ * `boundedStage` itself.
33325
+ *
33326
+ * In the last two the returned list is `[]`, and `[]` was previously handed
33327
+ * to the payload as the positive claim "the operator has switched nothing
33328
+ * off". Measured on the live hub 2026-08-08: `getCameraStatus(614)` said
33329
+ * `switchedOff: []` at the very moment `getCameraSwitches(614)` reported
33330
+ * `stream-broker` AND `recording` switched off by the operator — the camera
33331
+ * read as BROKEN because it was switched OFF, which is exactly the
33332
+ * inversion D62 exists to forbid. The list stays empty (a guess would put a
33333
+ * permanent "off" badge on a working camera); what changed is that the
33334
+ * emptiness now travels with the reason it is empty.
33335
+ */
33336
+ buildSwitchStage(deviceId, sink) {
33337
+ const startedAt = Date.now();
33338
+ return this.boundedStage(this.deps.cameraSwitchesFor(deviceId), STAGE_TIMEOUT_MS, "switches", deviceId, sink).then((group) => {
33339
+ if (group === null) return [];
33340
+ const unreadable = group.switches.filter((s) => s.unavailableReason === "source-unreachable");
33341
+ if (unreadable.length > 0) this.recordDegraded(sink, deviceId, "switches", "partial", Date.now() - startedAt, { unreadableSwitches: unreadable.map((s) => s.id) });
33342
+ return switchedOffIds(group.switches);
33343
+ });
33213
33344
  }
33214
33345
  /**
33215
33346
  * Server-composed aggregated status for a single camera.
@@ -33217,20 +33348,23 @@ var CameraStatusService = class {
33217
33348
  * Fans out in parallel (bounded, per-stage graceful degradation) to
33218
33349
  * broker / decoder / motion / detection / audio / recording source caps
33219
33350
  * via `ctx.api`. A stage whose source errors or times out becomes `null`
33220
- * in the returned payload — one slow agent never breaks the whole call.
33351
+ * in the returned payload — one slow agent never breaks the whole call
33352
+ * and is NAMED in `degraded`, so a consumer can tell that `null` from the
33353
+ * `null` of a camera that legitimately has no such stage.
33221
33354
  */
33222
33355
  async getCameraStatus(deviceId) {
33223
33356
  const api = this.deps.api();
33357
+ const degradations = { entries: [] };
33224
33358
  const { detectionNodeId, sourceNodeId, pinned, detectionReason, audioNodeId, audioPinned } = this.buildAssignmentContext(deviceId);
33225
33359
  const liveDecoder = { nodeId: null };
33226
33360
  const allSlotsFetch = api ? api.streamBroker.listAllProfileSlots.query(void 0, nodePin(sourceNodeId)) : null;
33227
- const sourceFetch = this.buildSourceStage(api, allSlotsFetch, deviceId);
33228
- const brokerFetch = this.buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder);
33361
+ const sourceFetch = this.buildSourceStage(api, allSlotsFetch, deviceId, degradations);
33362
+ const brokerFetch = this.buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder, degradations);
33229
33363
  const decoderFetch = this.buildDecoderStage(detectionNodeId);
33230
33364
  const motionResult = this.buildMotionStage(deviceId);
33231
- const detectionFetch = this.buildDetectionStage(api, detectionNodeId, deviceId);
33232
- const recordingFetch = this.buildRecordingStage(api, deviceId);
33233
- const switchesFetch = this.boundedStage(this.deps.switchedOffIdsFor(deviceId).catch(() => null), STAGE_TIMEOUT_MS).then((ids) => ids ?? []);
33365
+ const detectionFetch = this.buildDetectionStage(api, detectionNodeId, deviceId, degradations);
33366
+ const recordingFetch = this.buildRecordingStage(api, deviceId, degradations);
33367
+ const switchesFetch = this.buildSwitchStage(deviceId, degradations);
33234
33368
  const [sourceResult, brokerResult, decoderResult, detectionResult, recordingResult, switchedOff] = await Promise.all([
33235
33369
  sourceFetch,
33236
33370
  brokerFetch,
@@ -33263,7 +33397,8 @@ var CameraStatusService = class {
33263
33397
  detectionResult,
33264
33398
  audioResult,
33265
33399
  recordingResult,
33266
- switchedOff
33400
+ switchedOff,
33401
+ degraded: [...degradations.entries]
33267
33402
  });
33268
33403
  }
33269
33404
  /**
@@ -33331,6 +33466,25 @@ function readPrivacyMaskFacts(v) {
33331
33466
  enabled: typeof enabled === "boolean" ? enabled : null
33332
33467
  };
33333
33468
  }
33469
+ /**
33470
+ * How long ONE source of the gather may take before it is treated as
33471
+ * unreachable.
33472
+ *
33473
+ * The gather runs in two sequential stages, so an operator's worst case is
33474
+ * twice this — 2.4s — which has to stay under the 3s `STAGE_TIMEOUT_MS` that
33475
+ * `CameraStatusService` allows the whole switch read. That ordering is the
33476
+ * whole point of the number: if the gather can outlast its caller's budget,
33477
+ * the caller degrades to "nothing switched off" and a camera the operator
33478
+ * DISABLED renders as broken.
33479
+ *
33480
+ * Measured on the live hub, 2026-08-08: seven of the eight sources answered in
33481
+ * 5–15ms on every camera. The eighth, `privacyMask.getStatus`, probes the
33482
+ * camera itself and took 3.1–3.6s on device 614 on every single call (18s
33483
+ * under load) — so a bound generous enough to make the fast sources safe still
33484
+ * has to be willing to drop the slow one, because waiting for it costs the
33485
+ * other six switches.
33486
+ */
33487
+ var SOURCE_TIMEOUT_MS = 1200;
33334
33488
  var CameraSwitchService = class {
33335
33489
  deps;
33336
33490
  constructor(deps) {
@@ -33467,11 +33621,16 @@ var CameraSwitchService = class {
33467
33621
  wrapperAddonIdByCap: /* @__PURE__ */ new Map(),
33468
33622
  recordingConfig: null
33469
33623
  };
33470
- const devicePromise = api.deviceManager.getDevice.query({ deviceId }).then((d) => isDeviceShape(d) ? d : null).catch((err) => {
33624
+ const devicePromise = this.bounded(deviceId, "deviceManager.getDevice", api.deviceManager.getDevice.query({ deviceId }).then((d) => isDeviceShape(d) ? d : null).catch((err) => {
33471
33625
  this.warn(deviceId, "getDevice", err);
33472
33626
  return null;
33473
- });
33474
- const bindingsPromise = api.deviceManager.getBindings.query({ deviceId }).then((b) => {
33627
+ }), null);
33628
+ const unknownBindings = {
33629
+ activeWrapperCapNames: null,
33630
+ providerAddonIdByCap: /* @__PURE__ */ new Map(),
33631
+ allCapNames: null
33632
+ };
33633
+ const bindingsPromise = this.bounded(deviceId, "deviceManager.getBindings", api.deviceManager.getBindings.query({ deviceId }).then((b) => {
33475
33634
  const active = [];
33476
33635
  const all = [];
33477
33636
  const providers = /* @__PURE__ */ new Map();
@@ -33488,24 +33647,20 @@ var CameraSwitchService = class {
33488
33647
  };
33489
33648
  }).catch((err) => {
33490
33649
  this.warn(deviceId, "getBindings", err);
33491
- return {
33492
- activeWrapperCapNames: null,
33493
- providerAddonIdByCap: /* @__PURE__ */ new Map(),
33494
- allCapNames: null
33495
- };
33496
- });
33497
- const recordingPromise = api.recording.getDeviceConfig.query({ deviceId }).then((c) => isRecordingConfig(c) ? c : null).catch((err) => {
33650
+ return unknownBindings;
33651
+ }), unknownBindings);
33652
+ const recordingPromise = this.bounded(deviceId, "recording.getDeviceConfig", api.recording.getDeviceConfig.query({ deviceId }).then((c) => isRecordingConfig(c) ? c : null).catch((err) => {
33498
33653
  this.warn(deviceId, "recording.getDeviceConfig", err);
33499
33654
  return null;
33500
- });
33501
- const mutesPromise = api.notificationRules.listDeviceMutes.query({}).then((r) => r.mutedDeviceIds).catch((err) => {
33655
+ }), null);
33656
+ const mutesPromise = this.bounded(deviceId, "notificationRules.listDeviceMutes", api.notificationRules.listDeviceMutes.query({}).then((r) => r.mutedDeviceIds).catch((err) => {
33502
33657
  this.warn(deviceId, "notificationRules.listDeviceMutes", err);
33503
33658
  return null;
33504
- });
33505
- const brokerAudioPromise = api.streamBroker.getDeviceAudioMute.query({ deviceId }, nodePin(this.deps.assignSource(deviceId))).then((r) => ({ muted: r.muted })).catch((err) => {
33659
+ }), null);
33660
+ const brokerAudioPromise = this.bounded(deviceId, "streamBroker.getDeviceAudioMute", api.streamBroker.getDeviceAudioMute.query({ deviceId }, nodePin(this.deps.assignSource(deviceId))).then((r) => ({ muted: r.muted })).catch((err) => {
33506
33661
  this.warn(deviceId, "streamBroker.getDeviceAudioMute", err);
33507
33662
  return null;
33508
- });
33663
+ }), null);
33509
33664
  const [device, bindings, recordingConfig, mutedDeviceIds, brokerAudio] = await Promise.all([
33510
33665
  devicePromise,
33511
33666
  bindingsPromise,
@@ -33513,10 +33668,10 @@ var CameraSwitchService = class {
33513
33668
  mutesPromise,
33514
33669
  brokerAudioPromise
33515
33670
  ]);
33516
- const [bindable, privacy] = await Promise.all([device === null ? Promise.resolve(null) : api.deviceManager.listBindableCapsForDeviceType.query({ deviceType: device.type }).catch((err) => {
33671
+ const [bindable, privacy] = await Promise.all([device === null ? Promise.resolve(null) : this.bounded(deviceId, "deviceManager.listBindableCapsForDeviceType", api.deviceManager.listBindableCapsForDeviceType.query({ deviceType: device.type }).catch((err) => {
33517
33672
  this.warn(deviceId, "listBindableCapsForDeviceType", err);
33518
33673
  return null;
33519
- }), this.gatherPrivacy(api, deviceId, bindings.allCapNames)]);
33674
+ }), null), this.gatherPrivacy(api, deviceId, bindings.allCapNames)]);
33520
33675
  const wrapperAddonIdByCap = /* @__PURE__ */ new Map();
33521
33676
  for (const entry of bindable ?? []) {
33522
33677
  const first = entry.wrappers[0];
@@ -33572,13 +33727,13 @@ var CameraSwitchService = class {
33572
33727
  enabled: null
33573
33728
  }
33574
33729
  };
33575
- const [options, status] = await Promise.all([api.privacyMask.getOptions.query({ deviceId }).catch((err) => {
33730
+ const [options, status] = await Promise.all([this.bounded(deviceId, "privacyMask.getOptions", api.privacyMask.getOptions.query({ deviceId }).catch((err) => {
33576
33731
  this.warn(deviceId, "privacyMask.getOptions", err);
33577
33732
  return null;
33578
- }), api.privacyMask.getStatus.query({ deviceId }).catch((err) => {
33733
+ }), null), this.bounded(deviceId, "privacyMask.getStatus", api.privacyMask.getStatus.query({ deviceId }).catch((err) => {
33579
33734
  this.warn(deviceId, "privacyMask.getStatus", err);
33580
33735
  return null;
33581
- })]);
33736
+ }), null)]);
33582
33737
  if (options === null) return {
33583
33738
  deviceAudio: null,
33584
33739
  privacyMask: null
@@ -33602,6 +33757,41 @@ var CameraSwitchService = class {
33602
33757
  }
33603
33758
  };
33604
33759
  }
33760
+ /**
33761
+ * Bound ONE source. A source that has not answered within
33762
+ * {@link SOURCE_TIMEOUT_MS} yields `fallback` — the same value its `.catch`
33763
+ * yields — so a slow source and a broken one produce the identical group:
33764
+ * that switch is `available: false`, and every other switch is untouched.
33765
+ *
33766
+ * The bound is per SOURCE rather than around the whole gather on purpose.
33767
+ * One deadline over the fan-out would let the slowest camera probe consume
33768
+ * the budget of the seven sources that already answered, which is precisely
33769
+ * how `getCameraStatus` came to report `switchedOff: []` for a camera whose
33770
+ * `stream-broker` and `recording` switches the operator had turned off.
33771
+ *
33772
+ * @param deviceId The camera — every line about it carries the tag.
33773
+ * @param source The cap method, as named in the warn line.
33774
+ * @param p The source's promise. Already `.catch`-ed; never rejects.
33775
+ * @param fallback What the caller reads when the source did not answer.
33776
+ */
33777
+ bounded(deviceId, source, p, fallback) {
33778
+ let timer;
33779
+ const timeout = new Promise((resolve) => {
33780
+ timer = setTimeout(() => {
33781
+ this.deps.logger.warn("camera switch source TIMED OUT — its switch is not offered", {
33782
+ tags: { deviceId },
33783
+ meta: {
33784
+ source,
33785
+ timeoutMs: SOURCE_TIMEOUT_MS
33786
+ }
33787
+ });
33788
+ resolve(fallback);
33789
+ }, SOURCE_TIMEOUT_MS);
33790
+ });
33791
+ return Promise.race([p, timeout]).finally(() => {
33792
+ if (timer !== void 0) clearTimeout(timer);
33793
+ });
33794
+ }
33605
33795
  warn(deviceId, source, err) {
33606
33796
  this.deps.logger.warn("camera switch source unreachable — its switch is not offered", {
33607
33797
  tags: { deviceId },
@@ -39318,6 +39508,7 @@ async function buildOrchestratorControllers(deps) {
39318
39508
  });
39319
39509
  const cameraStatusService = new CameraStatusService({
39320
39510
  api: () => deps.ctx().api,
39511
+ logger: deps.ctx().logger,
39321
39512
  getAssignment: (deviceId) => ledger.getAssignment(deviceId),
39322
39513
  getAudioAssignment: (deviceId) => audio.getAssignment(deviceId),
39323
39514
  getCameraConfig: (deviceId) => ledger.getConfig(deviceId),
@@ -39325,7 +39516,8 @@ async function buildOrchestratorControllers(deps) {
39325
39516
  getPendingReason: (deviceId) => ledger.getPendingReason(deviceId),
39326
39517
  assignSource: (deviceId) => topology.assignSource(deviceId),
39327
39518
  listAssignedDeviceIds: () => ledger.listAssignedDeviceIds(),
39328
- switchedOffIdsFor: (deviceId) => cameraSwitchService.switchedOffIdsFor(deviceId)
39519
+ isSessionCamera: (deviceId) => deps.isSessionCamera(deviceId),
39520
+ cameraSwitchesFor: (deviceId) => cameraSwitchService.getCameraSwitches(deviceId)
39329
39521
  });
39330
39522
  const reconcile = new ReconcileController({
39331
39523
  api: () => deps.ctx().api ?? null,
package/dist/index.mjs CHANGED
@@ -17529,6 +17529,23 @@ var CameraRecordingStatusSchema = object({
17529
17529
  active: boolean(),
17530
17530
  storageBytes: number()
17531
17531
  });
17532
+ /** One stage of the fan-out that could NOT be read, and how long it cost. */
17533
+ var CameraStatusDegradationSchema = object({
17534
+ stage: _enum([
17535
+ "source",
17536
+ "broker",
17537
+ "detection",
17538
+ "recording",
17539
+ "switches"
17540
+ ]),
17541
+ reason: _enum([
17542
+ "timeout",
17543
+ "error",
17544
+ "partial"
17545
+ ]),
17546
+ /** Wall-clock ms spent on the stage before it was abandoned. */
17547
+ elapsedMs: number()
17548
+ });
17532
17549
  /**
17533
17550
  * Aggregated per-camera pipeline status — server-composed, single call.
17534
17551
  *
@@ -17559,9 +17576,28 @@ var CameraStatusSchema = object({
17559
17576
  * differently — a quiet camera that looks identical to a dead one is the
17560
17577
  * silence-reads-as-never-happened trap this repo keeps paying for.
17561
17578
  *
17562
- * Empty when nothing is off. Never contains a switch no provider offers.
17579
+ * Empty when nothing is off, and never contains a switch no provider offers
17580
+ * — but an empty list is only a POSITIVE claim when `degraded` does not name
17581
+ * `'switches'`. When it does, the switch set could not be read and nothing
17582
+ * here may be rendered as "the operator turned nothing off": that is the
17583
+ * D62 failure (a camera we could not read painted as broken) in the very
17584
+ * field that exists to prevent it.
17563
17585
  */
17564
17586
  switchedOff: array(CameraSwitchIdSchema).readonly(),
17587
+ /**
17588
+ * Stages of the bounded fan-out that were CUT SHORT — a timeout or a
17589
+ * rejection — and whose block is therefore `null` because we could not
17590
+ * READ it, not because there is nothing there.
17591
+ *
17592
+ * Without this, three different facts arrive as the same `null`: "the stage
17593
+ * timed out", "the stage failed", and "this camera legitimately has no
17594
+ * decoder / no recording". Every surface that draws a conclusion from a null
17595
+ * block (or from an empty `switchedOff`) must consult this first; a stage
17596
+ * named here supports no conclusion at all, only "unknown".
17597
+ *
17598
+ * Empty on a clean read — the overwhelmingly common case.
17599
+ */
17600
+ degraded: array(CameraStatusDegradationSchema).readonly(),
17565
17601
  /** Unix timestamp (ms) when this snapshot was composed server-side. */
17566
17602
  fetchedAt: number()
17567
17603
  });
@@ -32905,6 +32941,7 @@ function composeCameraStatus(input) {
32905
32941
  audio: mapAudio(input.audioResult),
32906
32942
  recording: mapRecording(input.recordingResult),
32907
32943
  switchedOff: input.switchedOff,
32944
+ degraded: input.degraded,
32908
32945
  fetchedAt: input.fetchedAt
32909
32946
  };
32910
32947
  }
@@ -32956,24 +32993,74 @@ var AUDIO_SILENCING_SWITCH_IDS = [
32956
32993
  "broker-audio",
32957
32994
  "audio-analysis"
32958
32995
  ];
32996
+ /**
32997
+ * Sentinel resolved by the per-stage timer. A unique symbol rather than `null`
32998
+ * so the race result can be narrowed WITHOUT a cast — and, more to the point,
32999
+ * so a stage that legitimately resolves `null` is never mistaken for one that
33000
+ * ran out of time.
33001
+ */
33002
+ var STAGE_TIMED_OUT = Symbol("camera-status-stage-timeout");
32959
33003
  var CameraStatusService = class {
32960
33004
  deps;
32961
33005
  constructor(deps) {
32962
33006
  this.deps = deps;
32963
33007
  }
32964
33008
  /**
32965
- * Races a promise against a timeout. Returns `null` on timeout OR rejection.
33009
+ * Record and ANNOUNCE a stage whose value could not be trusted.
33010
+ *
33011
+ * Both halves matter. The entry is what a client reads to tell a `null` that
33012
+ * means "we could not look" from a `null` that means "there is nothing
33013
+ * there"; the `warn` is what makes the next hang findable at all. The line
33014
+ * carries `tags.deviceId` with the numeric id because the question is always
33015
+ * per-camera ("why is 614 worse than 615?") and a line without the tag
33016
+ * cannot be grouped to answer it.
33017
+ */
33018
+ recordDegraded(sink, deviceId, stage, reason, elapsedMs, extraMeta = {}) {
33019
+ sink.entries.push({
33020
+ stage,
33021
+ reason,
33022
+ elapsedMs
33023
+ });
33024
+ this.deps.logger.warn("camera status stage could not be read", {
33025
+ tags: { deviceId },
33026
+ meta: {
33027
+ stage,
33028
+ reason,
33029
+ elapsedMs,
33030
+ ...extraMeta
33031
+ }
33032
+ });
33033
+ }
33034
+ /**
33035
+ * Races a promise against a timeout. Returns `null` on timeout OR rejection —
33036
+ * but the two are no longer the same event: whichever happened is pushed to
33037
+ * `sink` (and logged) under `stage`, so the `null` that reaches the payload
33038
+ * arrives with its cause attached.
33039
+ *
32966
33040
  * Never throws — individual stage failures become `null` in the aggregate.
32967
33041
  *
32968
- * @param p The stage fetch promise.
32969
- * @param ms Timeout in milliseconds.
33042
+ * @param p The stage fetch promise.
33043
+ * @param ms Timeout in milliseconds.
33044
+ * @param stage Which stage this is, as it appears in `CameraStatus.degraded`.
33045
+ * @param deviceId The camera — every line about it carries the tag.
33046
+ * @param sink Per-call collector for stages that could not be read.
32970
33047
  */
32971
- boundedStage(p, ms) {
33048
+ boundedStage(p, ms, stage, deviceId, sink) {
33049
+ const startedAt = Date.now();
32972
33050
  let timer;
32973
33051
  const timeout = new Promise((resolve) => {
32974
- timer = setTimeout(() => resolve(null), ms);
33052
+ timer = setTimeout(() => resolve(STAGE_TIMED_OUT), ms);
32975
33053
  });
32976
- return Promise.race([p, timeout]).catch(() => null).finally(() => {
33054
+ return Promise.race([p, timeout]).then((value) => {
33055
+ if (value === STAGE_TIMED_OUT) {
33056
+ this.recordDegraded(sink, deviceId, stage, "timeout", Date.now() - startedAt, { timeoutMs: ms });
33057
+ return null;
33058
+ }
33059
+ return value;
33060
+ }).catch((err) => {
33061
+ this.recordDegraded(sink, deviceId, stage, "error", Date.now() - startedAt, { error: err instanceof Error ? err.message : String(err) });
33062
+ return null;
33063
+ }).finally(() => {
32977
33064
  if (timer !== void 0) clearTimeout(timer);
32978
33065
  });
32979
33066
  }
@@ -32999,7 +33086,7 @@ var CameraStatusService = class {
32999
33086
  decoder: false,
33000
33087
  audio: audioPinned
33001
33088
  },
33002
- detectionReason: pipelineAssignment !== null ? pipelineAssignment.reason : this.deps.hasCameraConfig(deviceId) ? `pending:${this.deps.getPendingReason(deviceId) ?? "pending"}` : void 0,
33089
+ detectionReason: pipelineAssignment !== null ? pipelineAssignment.reason : this.deps.hasCameraConfig(deviceId) ? `pending:${this.deps.getPendingReason(deviceId) ?? "pending"}` : this.deps.isSessionCamera(deviceId) ? "armed:on-motion" : void 0,
33003
33090
  audioNodeId,
33004
33091
  audioPinned
33005
33092
  };
@@ -33010,7 +33097,7 @@ var CameraStatusService = class {
33010
33097
  * deviceId). `allSlotsFetch` is shared with the broker stage — fetched
33011
33098
  * ONCE by the caller — so this stage never issues its own round-trip.
33012
33099
  */
33013
- buildSourceStage(api, allSlotsFetch, deviceId) {
33100
+ buildSourceStage(api, allSlotsFetch, deviceId, sink) {
33014
33101
  if (!api || !allSlotsFetch) return Promise.resolve(null);
33015
33102
  return this.boundedStage(allSlotsFetch.then((slots) => {
33016
33103
  return { streams: slots.filter((s) => s.deviceId === deviceId).map((s) => ({
@@ -33021,7 +33108,7 @@ var CameraStatusService = class {
33021
33108
  fps: 0,
33022
33109
  kind: s.profile
33023
33110
  })) };
33024
- }), STAGE_TIMEOUT_MS);
33111
+ }), STAGE_TIMEOUT_MS, "source", deviceId, sink);
33025
33112
  }
33026
33113
  /**
33027
33114
  * Broker stage (per-profile slot stats + client counts). Reuses
@@ -33032,7 +33119,7 @@ var CameraStatusService = class {
33032
33119
  * broker's actual decode-session node into `liveDecoder` (T6) — the first
33033
33120
  * slot that reports one wins.
33034
33121
  */
33035
- buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder) {
33122
+ buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder, sink) {
33036
33123
  if (!api || !allSlotsFetch) return Promise.resolve(null);
33037
33124
  return this.boundedStage(allSlotsFetch.then(async (slots) => {
33038
33125
  const deviceSlots = slots.filter((s) => s.deviceId === deviceId);
@@ -33069,7 +33156,7 @@ var CameraStatusService = class {
33069
33156
  return e.brokerId.split("/")[0] === String(deviceId) && e.enabled;
33070
33157
  }) ?? false
33071
33158
  };
33072
- }), STAGE_TIMEOUT_MS);
33159
+ }), STAGE_TIMEOUT_MS, "broker", deviceId, sink);
33073
33160
  }
33074
33161
  /**
33075
33162
  * Decoder stage. decoder cap methods (listActiveSessions/getInfo/getShmStats)
@@ -33108,7 +33195,7 @@ var CameraStatusService = class {
33108
33195
  };
33109
33196
  }
33110
33197
  /** Detection stage (pipeline-executor + runner metrics). */
33111
- buildDetectionStage(api, detectionNodeId, deviceId) {
33198
+ buildDetectionStage(api, detectionNodeId, deviceId, sink) {
33112
33199
  if (!api || !detectionNodeId) return Promise.resolve(null);
33113
33200
  return this.boundedStage(Promise.all([api.pipelineExecutor.getEngineProvisioning.query({ nodeId: detectionNodeId }).catch(() => null), api.pipelineExecutor.getSelectedEngine.query({ nodeId: detectionNodeId }).catch(() => null)]).then(async ([provisioning, engine]) => {
33114
33201
  const metrics = await api.pipelineRunner.getCameraMetrics.query({
@@ -33138,7 +33225,7 @@ var CameraStatusService = class {
33138
33225
  ...provisioning?.error !== void 0 ? { error: provisioning.error } : {}
33139
33226
  }
33140
33227
  };
33141
- }), STAGE_TIMEOUT_MS);
33228
+ }), STAGE_TIMEOUT_MS, "detection", deviceId, sink);
33142
33229
  }
33143
33230
  /**
33144
33231
  * Audio stage. `nodeId` is orchestrator-local (the cached assignment);
@@ -33157,6 +33244,12 @@ var CameraStatusService = class {
33157
33244
  * analyzer with nothing, and reporting `enabled: true` for the other two
33158
33245
  * would reintroduce the exact hardcoded lie the previous paragraph is about
33159
33246
  * — one row further down the group.
33247
+ *
33248
+ * `enabled` is a boolean and cannot say "unknown", so when the switch read
33249
+ * was cut short or partial this block is OPTIMISTIC by construction. That is
33250
+ * survivable only because `CameraStatus.degraded` names `'switches'` in
33251
+ * exactly those cases — a surface drawing "audio is running" from this field
33252
+ * must consult it first.
33160
33253
  */
33161
33254
  buildAudioStage(audioNodeId, switchedOff) {
33162
33255
  if (audioNodeId === null) return null;
@@ -33171,8 +33264,13 @@ var CameraStatusService = class {
33171
33264
  * `{ deviceId }` and returns `RecordingStatus`, typed `unknown` in the
33172
33265
  * generated router (DEVICE_STATUS_METHOD) — narrowed via
33173
33266
  * {@link isRecordingStatus} instead of an unsafe cast.
33267
+ *
33268
+ * There is deliberately NO `.catch(() => null)` on the query any more: it
33269
+ * swallowed the rejection before `boundedStage` could see it, so a recording
33270
+ * source that was refusing every call produced the same anonymous `null` as
33271
+ * a camera that simply records nothing.
33174
33272
  */
33175
- buildRecordingStage(api, deviceId) {
33273
+ buildRecordingStage(api, deviceId, sink) {
33176
33274
  if (!api) return Promise.resolve(null);
33177
33275
  return this.boundedStage(api.recording.getStatus.query({ deviceId }).then((rawStatus) => {
33178
33276
  if (!isRecordingStatus(rawStatus)) return null;
@@ -33181,7 +33279,40 @@ var CameraStatusService = class {
33181
33279
  active: rawStatus.enabled && rawStatus.activeMode !== "off",
33182
33280
  storageBytes: rawStatus.storageBytes
33183
33281
  };
33184
- }).catch(() => null), STAGE_TIMEOUT_MS);
33282
+ }), STAGE_TIMEOUT_MS, "recording", deviceId, sink);
33283
+ }
33284
+ /**
33285
+ * The operator's function switches (D61/D62), bounded like every other stage.
33286
+ *
33287
+ * Three outcomes, and they must not collapse into one:
33288
+ *
33289
+ * - READ — the group came back whole. The derived id list is a total, and an
33290
+ * empty one really does mean the operator turned nothing off.
33291
+ * - PARTIAL — the group came back with at least one switch marked
33292
+ * `source-unreachable`. `CameraSwitchService` bounds each source
33293
+ * individually, so a slow source drops ITS switch and leaves the rest;
33294
+ * the derived list is then a FLOOR. Marked `'partial'`.
33295
+ * - NOT READ — the whole group timed out or rejected. Marked by
33296
+ * `boundedStage` itself.
33297
+ *
33298
+ * In the last two the returned list is `[]`, and `[]` was previously handed
33299
+ * to the payload as the positive claim "the operator has switched nothing
33300
+ * off". Measured on the live hub 2026-08-08: `getCameraStatus(614)` said
33301
+ * `switchedOff: []` at the very moment `getCameraSwitches(614)` reported
33302
+ * `stream-broker` AND `recording` switched off by the operator — the camera
33303
+ * read as BROKEN because it was switched OFF, which is exactly the
33304
+ * inversion D62 exists to forbid. The list stays empty (a guess would put a
33305
+ * permanent "off" badge on a working camera); what changed is that the
33306
+ * emptiness now travels with the reason it is empty.
33307
+ */
33308
+ buildSwitchStage(deviceId, sink) {
33309
+ const startedAt = Date.now();
33310
+ return this.boundedStage(this.deps.cameraSwitchesFor(deviceId), STAGE_TIMEOUT_MS, "switches", deviceId, sink).then((group) => {
33311
+ if (group === null) return [];
33312
+ const unreadable = group.switches.filter((s) => s.unavailableReason === "source-unreachable");
33313
+ if (unreadable.length > 0) this.recordDegraded(sink, deviceId, "switches", "partial", Date.now() - startedAt, { unreadableSwitches: unreadable.map((s) => s.id) });
33314
+ return switchedOffIds(group.switches);
33315
+ });
33185
33316
  }
33186
33317
  /**
33187
33318
  * Server-composed aggregated status for a single camera.
@@ -33189,20 +33320,23 @@ var CameraStatusService = class {
33189
33320
  * Fans out in parallel (bounded, per-stage graceful degradation) to
33190
33321
  * broker / decoder / motion / detection / audio / recording source caps
33191
33322
  * via `ctx.api`. A stage whose source errors or times out becomes `null`
33192
- * in the returned payload — one slow agent never breaks the whole call.
33323
+ * in the returned payload — one slow agent never breaks the whole call
33324
+ * and is NAMED in `degraded`, so a consumer can tell that `null` from the
33325
+ * `null` of a camera that legitimately has no such stage.
33193
33326
  */
33194
33327
  async getCameraStatus(deviceId) {
33195
33328
  const api = this.deps.api();
33329
+ const degradations = { entries: [] };
33196
33330
  const { detectionNodeId, sourceNodeId, pinned, detectionReason, audioNodeId, audioPinned } = this.buildAssignmentContext(deviceId);
33197
33331
  const liveDecoder = { nodeId: null };
33198
33332
  const allSlotsFetch = api ? api.streamBroker.listAllProfileSlots.query(void 0, nodePin(sourceNodeId)) : null;
33199
- const sourceFetch = this.buildSourceStage(api, allSlotsFetch, deviceId);
33200
- const brokerFetch = this.buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder);
33333
+ const sourceFetch = this.buildSourceStage(api, allSlotsFetch, deviceId, degradations);
33334
+ const brokerFetch = this.buildBrokerStage(api, allSlotsFetch, deviceId, sourceNodeId, liveDecoder, degradations);
33201
33335
  const decoderFetch = this.buildDecoderStage(detectionNodeId);
33202
33336
  const motionResult = this.buildMotionStage(deviceId);
33203
- const detectionFetch = this.buildDetectionStage(api, detectionNodeId, deviceId);
33204
- const recordingFetch = this.buildRecordingStage(api, deviceId);
33205
- const switchesFetch = this.boundedStage(this.deps.switchedOffIdsFor(deviceId).catch(() => null), STAGE_TIMEOUT_MS).then((ids) => ids ?? []);
33337
+ const detectionFetch = this.buildDetectionStage(api, detectionNodeId, deviceId, degradations);
33338
+ const recordingFetch = this.buildRecordingStage(api, deviceId, degradations);
33339
+ const switchesFetch = this.buildSwitchStage(deviceId, degradations);
33206
33340
  const [sourceResult, brokerResult, decoderResult, detectionResult, recordingResult, switchedOff] = await Promise.all([
33207
33341
  sourceFetch,
33208
33342
  brokerFetch,
@@ -33235,7 +33369,8 @@ var CameraStatusService = class {
33235
33369
  detectionResult,
33236
33370
  audioResult,
33237
33371
  recordingResult,
33238
- switchedOff
33372
+ switchedOff,
33373
+ degraded: [...degradations.entries]
33239
33374
  });
33240
33375
  }
33241
33376
  /**
@@ -33303,6 +33438,25 @@ function readPrivacyMaskFacts(v) {
33303
33438
  enabled: typeof enabled === "boolean" ? enabled : null
33304
33439
  };
33305
33440
  }
33441
+ /**
33442
+ * How long ONE source of the gather may take before it is treated as
33443
+ * unreachable.
33444
+ *
33445
+ * The gather runs in two sequential stages, so an operator's worst case is
33446
+ * twice this — 2.4s — which has to stay under the 3s `STAGE_TIMEOUT_MS` that
33447
+ * `CameraStatusService` allows the whole switch read. That ordering is the
33448
+ * whole point of the number: if the gather can outlast its caller's budget,
33449
+ * the caller degrades to "nothing switched off" and a camera the operator
33450
+ * DISABLED renders as broken.
33451
+ *
33452
+ * Measured on the live hub, 2026-08-08: seven of the eight sources answered in
33453
+ * 5–15ms on every camera. The eighth, `privacyMask.getStatus`, probes the
33454
+ * camera itself and took 3.1–3.6s on device 614 on every single call (18s
33455
+ * under load) — so a bound generous enough to make the fast sources safe still
33456
+ * has to be willing to drop the slow one, because waiting for it costs the
33457
+ * other six switches.
33458
+ */
33459
+ var SOURCE_TIMEOUT_MS = 1200;
33306
33460
  var CameraSwitchService = class {
33307
33461
  deps;
33308
33462
  constructor(deps) {
@@ -33439,11 +33593,16 @@ var CameraSwitchService = class {
33439
33593
  wrapperAddonIdByCap: /* @__PURE__ */ new Map(),
33440
33594
  recordingConfig: null
33441
33595
  };
33442
- const devicePromise = api.deviceManager.getDevice.query({ deviceId }).then((d) => isDeviceShape(d) ? d : null).catch((err) => {
33596
+ const devicePromise = this.bounded(deviceId, "deviceManager.getDevice", api.deviceManager.getDevice.query({ deviceId }).then((d) => isDeviceShape(d) ? d : null).catch((err) => {
33443
33597
  this.warn(deviceId, "getDevice", err);
33444
33598
  return null;
33445
- });
33446
- const bindingsPromise = api.deviceManager.getBindings.query({ deviceId }).then((b) => {
33599
+ }), null);
33600
+ const unknownBindings = {
33601
+ activeWrapperCapNames: null,
33602
+ providerAddonIdByCap: /* @__PURE__ */ new Map(),
33603
+ allCapNames: null
33604
+ };
33605
+ const bindingsPromise = this.bounded(deviceId, "deviceManager.getBindings", api.deviceManager.getBindings.query({ deviceId }).then((b) => {
33447
33606
  const active = [];
33448
33607
  const all = [];
33449
33608
  const providers = /* @__PURE__ */ new Map();
@@ -33460,24 +33619,20 @@ var CameraSwitchService = class {
33460
33619
  };
33461
33620
  }).catch((err) => {
33462
33621
  this.warn(deviceId, "getBindings", err);
33463
- return {
33464
- activeWrapperCapNames: null,
33465
- providerAddonIdByCap: /* @__PURE__ */ new Map(),
33466
- allCapNames: null
33467
- };
33468
- });
33469
- const recordingPromise = api.recording.getDeviceConfig.query({ deviceId }).then((c) => isRecordingConfig(c) ? c : null).catch((err) => {
33622
+ return unknownBindings;
33623
+ }), unknownBindings);
33624
+ const recordingPromise = this.bounded(deviceId, "recording.getDeviceConfig", api.recording.getDeviceConfig.query({ deviceId }).then((c) => isRecordingConfig(c) ? c : null).catch((err) => {
33470
33625
  this.warn(deviceId, "recording.getDeviceConfig", err);
33471
33626
  return null;
33472
- });
33473
- const mutesPromise = api.notificationRules.listDeviceMutes.query({}).then((r) => r.mutedDeviceIds).catch((err) => {
33627
+ }), null);
33628
+ const mutesPromise = this.bounded(deviceId, "notificationRules.listDeviceMutes", api.notificationRules.listDeviceMutes.query({}).then((r) => r.mutedDeviceIds).catch((err) => {
33474
33629
  this.warn(deviceId, "notificationRules.listDeviceMutes", err);
33475
33630
  return null;
33476
- });
33477
- const brokerAudioPromise = api.streamBroker.getDeviceAudioMute.query({ deviceId }, nodePin(this.deps.assignSource(deviceId))).then((r) => ({ muted: r.muted })).catch((err) => {
33631
+ }), null);
33632
+ const brokerAudioPromise = this.bounded(deviceId, "streamBroker.getDeviceAudioMute", api.streamBroker.getDeviceAudioMute.query({ deviceId }, nodePin(this.deps.assignSource(deviceId))).then((r) => ({ muted: r.muted })).catch((err) => {
33478
33633
  this.warn(deviceId, "streamBroker.getDeviceAudioMute", err);
33479
33634
  return null;
33480
- });
33635
+ }), null);
33481
33636
  const [device, bindings, recordingConfig, mutedDeviceIds, brokerAudio] = await Promise.all([
33482
33637
  devicePromise,
33483
33638
  bindingsPromise,
@@ -33485,10 +33640,10 @@ var CameraSwitchService = class {
33485
33640
  mutesPromise,
33486
33641
  brokerAudioPromise
33487
33642
  ]);
33488
- const [bindable, privacy] = await Promise.all([device === null ? Promise.resolve(null) : api.deviceManager.listBindableCapsForDeviceType.query({ deviceType: device.type }).catch((err) => {
33643
+ const [bindable, privacy] = await Promise.all([device === null ? Promise.resolve(null) : this.bounded(deviceId, "deviceManager.listBindableCapsForDeviceType", api.deviceManager.listBindableCapsForDeviceType.query({ deviceType: device.type }).catch((err) => {
33489
33644
  this.warn(deviceId, "listBindableCapsForDeviceType", err);
33490
33645
  return null;
33491
- }), this.gatherPrivacy(api, deviceId, bindings.allCapNames)]);
33646
+ }), null), this.gatherPrivacy(api, deviceId, bindings.allCapNames)]);
33492
33647
  const wrapperAddonIdByCap = /* @__PURE__ */ new Map();
33493
33648
  for (const entry of bindable ?? []) {
33494
33649
  const first = entry.wrappers[0];
@@ -33544,13 +33699,13 @@ var CameraSwitchService = class {
33544
33699
  enabled: null
33545
33700
  }
33546
33701
  };
33547
- const [options, status] = await Promise.all([api.privacyMask.getOptions.query({ deviceId }).catch((err) => {
33702
+ const [options, status] = await Promise.all([this.bounded(deviceId, "privacyMask.getOptions", api.privacyMask.getOptions.query({ deviceId }).catch((err) => {
33548
33703
  this.warn(deviceId, "privacyMask.getOptions", err);
33549
33704
  return null;
33550
- }), api.privacyMask.getStatus.query({ deviceId }).catch((err) => {
33705
+ }), null), this.bounded(deviceId, "privacyMask.getStatus", api.privacyMask.getStatus.query({ deviceId }).catch((err) => {
33551
33706
  this.warn(deviceId, "privacyMask.getStatus", err);
33552
33707
  return null;
33553
- })]);
33708
+ }), null)]);
33554
33709
  if (options === null) return {
33555
33710
  deviceAudio: null,
33556
33711
  privacyMask: null
@@ -33574,6 +33729,41 @@ var CameraSwitchService = class {
33574
33729
  }
33575
33730
  };
33576
33731
  }
33732
+ /**
33733
+ * Bound ONE source. A source that has not answered within
33734
+ * {@link SOURCE_TIMEOUT_MS} yields `fallback` — the same value its `.catch`
33735
+ * yields — so a slow source and a broken one produce the identical group:
33736
+ * that switch is `available: false`, and every other switch is untouched.
33737
+ *
33738
+ * The bound is per SOURCE rather than around the whole gather on purpose.
33739
+ * One deadline over the fan-out would let the slowest camera probe consume
33740
+ * the budget of the seven sources that already answered, which is precisely
33741
+ * how `getCameraStatus` came to report `switchedOff: []` for a camera whose
33742
+ * `stream-broker` and `recording` switches the operator had turned off.
33743
+ *
33744
+ * @param deviceId The camera — every line about it carries the tag.
33745
+ * @param source The cap method, as named in the warn line.
33746
+ * @param p The source's promise. Already `.catch`-ed; never rejects.
33747
+ * @param fallback What the caller reads when the source did not answer.
33748
+ */
33749
+ bounded(deviceId, source, p, fallback) {
33750
+ let timer;
33751
+ const timeout = new Promise((resolve) => {
33752
+ timer = setTimeout(() => {
33753
+ this.deps.logger.warn("camera switch source TIMED OUT — its switch is not offered", {
33754
+ tags: { deviceId },
33755
+ meta: {
33756
+ source,
33757
+ timeoutMs: SOURCE_TIMEOUT_MS
33758
+ }
33759
+ });
33760
+ resolve(fallback);
33761
+ }, SOURCE_TIMEOUT_MS);
33762
+ });
33763
+ return Promise.race([p, timeout]).finally(() => {
33764
+ if (timer !== void 0) clearTimeout(timer);
33765
+ });
33766
+ }
33577
33767
  warn(deviceId, source, err) {
33578
33768
  this.deps.logger.warn("camera switch source unreachable — its switch is not offered", {
33579
33769
  tags: { deviceId },
@@ -39290,6 +39480,7 @@ async function buildOrchestratorControllers(deps) {
39290
39480
  });
39291
39481
  const cameraStatusService = new CameraStatusService({
39292
39482
  api: () => deps.ctx().api,
39483
+ logger: deps.ctx().logger,
39293
39484
  getAssignment: (deviceId) => ledger.getAssignment(deviceId),
39294
39485
  getAudioAssignment: (deviceId) => audio.getAssignment(deviceId),
39295
39486
  getCameraConfig: (deviceId) => ledger.getConfig(deviceId),
@@ -39297,7 +39488,8 @@ async function buildOrchestratorControllers(deps) {
39297
39488
  getPendingReason: (deviceId) => ledger.getPendingReason(deviceId),
39298
39489
  assignSource: (deviceId) => topology.assignSource(deviceId),
39299
39490
  listAssignedDeviceIds: () => ledger.listAssignedDeviceIds(),
39300
- switchedOffIdsFor: (deviceId) => cameraSwitchService.switchedOffIdsFor(deviceId)
39491
+ isSessionCamera: (deviceId) => deps.isSessionCamera(deviceId),
39492
+ cameraSwitchesFor: (deviceId) => cameraSwitchService.getCameraSwitches(deviceId)
39301
39493
  });
39302
39494
  const reconcile = new ReconcileController({
39303
39495
  api: () => deps.ctx().api ?? null,
@@ -30,7 +30,7 @@ async function d(e) {
30
30
  }
31
31
  }
32
32
  async function f() {
33
- return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-DP-xubRv.mjs")).catch((e) => {
33
+ return l ||= d(() => import("./_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_orchestrator_widgets-B9MEuh4w.mjs")).catch((e) => {
34
34
  throw l = void 0, e;
35
35
  }), l;
36
36
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/addon-pipeline-orchestrator",
3
- "version": "1.2.32",
3
+ "version": "1.2.33",
4
4
  "description": "Hub-side camera-to-agent load balancer — tracks runner capacity and dispatches attachCamera calls to the optimal pipeline-runner instance",
5
5
  "keywords": [
6
6
  "camstack",
@@ -1,26 +0,0 @@
1
- //#region \0virtual:mf:__mfe_internal__addon_pipeline_orchestrator_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js
2
- var e = "__mf_init__virtual:mf:__mfe_internal__addon_pipeline_orchestrator_widgets__mf_v__runtimeInit__mf_v__.js__", t = globalThis[e];
3
- if (!t) {
4
- let n, r, i = new Promise((e, t) => {
5
- n = e, r = t;
6
- });
7
- t = globalThis[e] = {
8
- initPromise: i,
9
- initResolve: n,
10
- initReject: r
11
- };
12
- }
13
- var n = t.initPromise, r = "__mf_module_cache__";
14
- globalThis[r] ||= {
15
- share: {},
16
- remote: {}
17
- }, globalThis[r].share ||= {}, globalThis[r].remote ||= {};
18
- var i = globalThis[r], a, o, s, c = (e) => {
19
- e.ACCESSORY_LABEL, e.ALEXA_EGRESS_PROFILE, e.ALL_CAPABILITY_DEFINITIONS, e.APPLE_SA_TO_MACRO, e.AUDIO_ANALYSIS_CAP_NAME, e.AUDIO_BACKEND_CHOICES, e.AUDIO_MACRO_LABELS, e.AUDIO_PRESETS, e.AccessoriesStatusSchema, e.AccessoryKind, e.AddBrokerInputSchema, e.AddonAutoUpdateSchema, e.AddonListItemSchema, e.AddonPageDeclarationSchema, e.AddonPageInfoSchema, e.AdoptionAdoptInputSchema, e.AdoptionAdoptResultSchema, e.AdoptionFilterSchema, e.AdoptionGetCandidateInputSchema, e.AdoptionListCandidatesInputSchema, e.AdoptionListCandidatesOutputSchema, e.AdoptionReleaseInputSchema, e.AdoptionStatusSchema, e.AgentLoadSummarySchema, e.AirQualitySensorStatusSchema, e.AlarmArmModeSchema, e.AlarmPanelStatusSchema, e.AlarmStateSchema, e.AlertSchema, e.AlertSeveritySchema, e.AlertSourceSchema, e.AlertStatusSchema, e.AmbientLightSensorStatusSchema, e.ApiKeyRecordSchema, e.ApiKeySummarySchema, e.ArchiveEntrySchema, e.ArchiveManifestSchema, e.AttachmentMediaTypeSchema, e.AttachmentSchema, e.AudioAnalysisResultSchema, e.AudioAnalysisSettingsSchema, e.AudioChunkInputSchema, e.AudioClassSummarySchema, e.AudioClassificationLabelSchema, e.AudioClassificationResultSchema, e.AudioCodecInfoSchema, e.AudioDecodeSessionConfigSchema, e.AudioEncodeSchema, e.AudioEncodeSessionConfigSchema, e.AudioEncodedChunkSchema, e.AudioEventSchema, e.AudioLevelSchema, e.AudioMetricsHistoryPointSchema, e.AudioMetricsHistorySchema, e.AudioMetricsSnapshotSchema, e.AudioPcmChunkSchema, e.AuthResultSchema, e.AutoUpdateSettingsSchema, e.AutomationControlStatusSchema, e.AvailableIntegrationTypeSchema, e.BACKEND_TO_FORMAT, e.BASE_LIVE_EGRESS_PROFILE, e.BATTERY_DEVICE_PROFILE, e.BacklightModeSchema, e.BackupDestinationInfoSchema, e.BackupEntrySchema, e.BaseAddon, e.BaseDevice, e.BaseDeviceProvider, e.BatteryStatusSchema, e.BinaryStatusSchema, e.BoundingBoxSchema, e.BrightnessStatusSchema, e.BrokerAddInputSchema, e.BrokerAudioClientSchema, e.BrokerClientsSchema, e.BrokerConnectionDetailsSchema, e.BrokerConsumerAttributionSchema, e.BrokerConsumerKindSchema, e.BrokerDecodedClientSchema, e.BrokerEncodedClientSchema, e.BrokerGetStateInputSchema, e.BrokerInfoSchema, e.BrokerProviderInfoSchema, e.BrokerPublishInputSchema, e.BrokerRegistryStatusSchema, e.BrokerRtspClientSchema, e.BrokerStatsSchema, e.BrokerStatusEnum, e.BrokerStatusSchema, e.BrokerSubscribeInputSchema, e.BrokerSubscribeResultSchema, e.BrokerTestConnectionResultSchema, e.BrokerUnsubscribeInputSchema, e.CAMERA_SWITCH_CATALOG, e.CAMERA_SWITCH_ORDER, e.CAM_PROFILE_ORDER, e.CAPABILITY_NAMES, e.CAPABILITY_ROUTER_KEYS, e.CAP_NAMES_WITH_STATUS, e.CAP_NODE_PIN_CONTEXT_KEY, e.CAP_PROVIDER_KIND_MAP, e.COCO_80_LABELS, e.COCO_TO_MACRO, e.CORE_BLOCK_ADDON_PREFIX, e.CamProfileSchema, e.CamStreamDescriptorSchema, e.CamStreamKindSchema, e.CamStreamResolutionSchema, e.CameraAssignmentStatusSchema, e.CameraAudioStatusSchema, e.CameraBrokerProfileSchema, e.CameraBrokerStatusSchema, e.CameraCredentialsSchema, e.CameraCredentialsStatusSchema, e.CameraDecoderShmSchema, e.CameraDecoderStatusSchema, e.CameraDetectionPhaseSchema, e.CameraDetectionProvisioningSchema, e.CameraDetectionProvisioningStateSchema, e.CameraDetectionStatusSchema, e.CameraMetricsSchema, e.CameraMetricsWithDeviceIdSchema, e.CameraMotionStatusSchema, e.CameraRecordingModeSchema, e.CameraRecordingStatusSchema, e.CameraSourceStatusSchema, e.CameraSourceStreamSchema, e.CameraStatusSchema, e.CameraStreamSchema, e.CameraSwitchAuthoritySchema, e.CameraSwitchGroupSchema, e.CameraSwitchIdSchema, e.CameraSwitchSchema, e.CameraSwitchUnavailableReasonSchema, e.CandidateQueryFilterSchema, e.CapScopeSchema, e.CapabilityBindingsSchema, e.CarbonMonoxideStatusSchema, e.ChargingStatus, e.ClientNetworkStatsSchema, e.ClimateControlStatusSchema, e.ClipPlaybackSchema, e.ClipSchema, e.ClusterAddonNodeDeploymentSchema, e.ClusterAddonStatusEntrySchema, e.CollectionColumnSchema, e.CollectionIndexSchema, e.ColorStatusSchema, e.ConfigEntrySchema, e.ConfigSectionWithValuesSchema, e.ConfigTabDeclarationSchema, e.ConnectivityStatusSchema, e.ConsumableItemSchema, e.ConsumablesStatusSchema, e.ContactStatusSchema, e.ControlKindSchema, e.ControlStatusSchema, e.ConvertArtifactSchema, e.ConvertResultSchema, e.ConvertTargetSchema, e.CoreBlockCompileResultSchema, e.CoreBlockInputSchema, e.CoreBlockPlacementSchema, e.CoreBlockSchema, e.CoreBlockStatusSchema, e.CoverStateSchema, e.CoverStatusSchema, e.CreateApiKeyInputSchema, e.CreateApiKeyResultSchema, e.CreateIntegrationInputSchema, e.CreateScopedTokenInputSchema, e.CreateScopedTokenResultSchema, e.CreateUserInputSchema, e.CustomActionInputSchema, e.CustomModelDescriptorSchema, e.DATAPLANE_SECRET_HEADER, e.DECLARED_DEVICE_SWEEP_LIMIT, e.DECLARED_INTEGRATION_FIXED_KEY, e.DEFAULT_ADDON_PLACEMENT, e.DEFAULT_AUDIO_ANALYZER_CONFIG, e.DEFAULT_DECODER_HWACCEL_CONFIG, e.DEFAULT_DETAIL_CROP_CONVENTION, e.DEFAULT_EVENT_COLOR, e.DEFAULT_FEATURES, e.DEFAULT_NATIVE_LEASE_SETTINGS, e.DEFAULT_RETENTION, e.DEFAULT_SCRUB_THUMBNAIL_PRESET, e.DETAIL_CROP_PADDING_FIELD, e.DETAIL_CROP_PADDING_KEY, e.DETAIL_CROP_SECTION_ID, e.DETAIL_CROP_SQUARE_KEY, e.DETECTION_PIPELINE_CAP_NAME, e.DEVICE_BACKEND_TO_FORMAT, e.DEVICE_CAP_NAMES, e.DEVICE_PROFILES, e.DEVICE_SCOPED_CAPS, e.DEVICE_SETTINGS_CONTRIBUTION_METHODS, e.DEVICE_STATE_READERS, e.DEVICE_STATUS_METHOD, e.DEVICE_TYPE_CONTROL_KIND, e.DEVICE_TYPE_INFO, e.DataStoreEngineInfoSchema, e.DayNightModeSchema, e.DayNightOptionsSchema, e.DayNightSettingsPatchSchema, e.DayNightStatusSchema, e.DeclaredDevices, e.DecodedAudioChunkSchema, e.DecodedFrameSchema, e.DecoderSessionConfigSchema, e.DecoderStatsSchema, e.DeleteIntegrationResultSchema, e.DetailCropConventionSchema, e.DetectionSourceSchema, e.DeviceCodeSeveritySchema, e.DeviceConfig, e.DeviceDiscoveryStatusSchema, e.DeviceExportExposeInputSchema, e.DeviceExportStatusSchema, e.DeviceExportUnexposeInputSchema, e.DeviceFeature, e.DeviceInfoSchema, e.DeviceNetworkStatsSchema, e.DeviceRole, e.DeviceRuntimeState, e.DeviceStatusSchema, e.DeviceType, e.DiscoveredChildDeviceSchema, e.DiscoveredChildStatusSchema, e.DiscoveredDeviceSchema, e.DiscoveredTargetSchema, e.DisposerChain, e.DoorbellPressEventSchema, e.DoorbellStatusSchema, e.EVENTFUL_CAP_NAMES, e.EVENT_KIND_BY_CAP, e.EVENT_PAD_MS, e.EVENT_TAXONOMY, e.EXPRESSION_BUILTINS, e.EXPRESSION_BUILTIN_NAMES, e.EXPRESSION_COMPILE_CACHE_CAPACITY, e.EXPRESSION_IDENTIFIER_RE, e.EXPRESSION_INJECTED_NOW, e.EgressEncodeSchema, e.EgressRateControlSchema, e.EgressTranscodeRequestSchema, e.EgressTranscodeSchema, e.ElementConfigStore, e.EmbeddingInfoSchema, e.EmbeddingResultSchema, e.EncodeProfileSchema, e.EncodedPacketSchema, e.EnrichedWidgetMetadataSchema, e.EnumSensorDateTimeFormatSchema, e.EnumSensorStatusSchema, e.EventCategory, e.EventEmitterStatusSchema, e.EventFireSchema, e.EventItemSchema, e.EventKindCategorySchema, e.EventKindDescriptorSchema, e.EventKindIconSchema, e.EventKindSchema, e.EventKindsForDeviceSchema, e.EventMediaArtifactSchema, e.EventMediaCoverageSchema, e.EventMediaKindSchema, e.EventMediaProductionSchema, e.EventSourceType, e.ExportDownloadSchema, e.ExportOptionsSchema, e.ExportRecordSchema, e.ExportSetupFieldSchema, e.ExportSetupSchema, e.ExportSpeedSchema, e.ExportStateSchema, e.ExportTimelapseSchema, e.ExposedDeviceSchema, e.ExposureModeSchema, e.ExpressionBindingSourceSchema, e.ExpressionEvalError, e.ExpressionFieldBindingSchema, e.ExpressionGlobalBindingSchema, e.ExpressionLiteralBindingSchema, e.ExpressionParseError, e.ExpressionSourceSchema, e.FanControlStatusSchema, e.FanDirectionSchema, e.FeatureManifestSchema, e.FeatureProbeStatusSchema, e.FloodStatusSchema, e.Fmp4BoxSplitter, e.FrameHandleFormatSchema, e.FrameHandleSchema, e.FrameInputSchema, e.GasStatusSchema, e.GetStreamWithCodecInputSchema, e.GlobalMetricsSchema, e.HAP_AUDIO_BASE, e.HAP_AUDIO_BITRATE_KBPS, e.HAP_AUDIO_VBV_KBITS, e.HAP_KEYFRAME_INTERVAL_SEC, e.HF_BASE_URL, e.HF_REPO, e.HWACCEL_OPTIONS, e.HealthStatusSchema, e.HistoryPointSchema, e.HistoryResolutionEnum, e.HumidifierStatusSchema, e.HumiditySensorStatusSchema, e.HvacModeSchema, e.ImageContractSchema, e.ImageContractStateSchema, e.ImageRotateSchema, e.ImageSettingsOptionsSchema, e.ImageSettingsPatchSchema, e.ImageSettingsStatusSchema, e.ImageStatusSchema, e.IngestOwnerSchema, e.InstalledPackageSchema, e.IntegrationLiteSchema, e.IntegrationWithStateSchema, e.IntercomAbilitySchema, e.IntercomStatusSchema, e.KNOWN_CAP_NAMES, e.KeyEventSchema, e.LOG_LEVEL_RANK, e.LabelAttributionSchema, e.LabelDefinitionSchema, e.LabelTierSchema, e.LawnMowerActivitySchema, e.LawnMowerControlStatusSchema, e.LinkedDeviceSchema, e.LinkedDevicesModeSchema, e.LlmDefaultSchema, e.LlmDefaultSelectorSchema, e.LlmErrorCodeSchema, e.LlmGenerateBaseInputSchema, e.LlmGenerateErrSchema, e.LlmGenerateOkSchema, e.LlmGenerateResultSchema, e.LlmImageSchema, e.LlmNodeModelSchema, e.LlmProfileKindDescriptorSchema, e.LlmProfileKindSchema, e.LlmProfileSchema, e.LlmRuntimeCompleteInputSchema, e.LlmRuntimeDiskUsageSchema, e.LlmRuntimeNodeSchema, e.LlmRuntimeStatusSchema, e.LlmUsageRollupSchema, e.LlmUsageSchema, e.LocateSegmentResultSchema, e.LocationStatSchema, e.LockControlStatusSchema, e.LockStateSchema, e.LogEntrySchema, e.LogLevelSchema, e.LogStreamEntrySchema, e.LoginMethodContributionSchema, e.LoginStageEnum, a = e.MACRO_LABELS, e.MAX_EXPRESSION_AST_NODES, e.MAX_EXPRESSION_BINDINGS, e.MAX_EXPRESSION_CALL_ARGS, e.MAX_EXPRESSION_EVAL_STEPS, e.MAX_EXPRESSION_SOURCE_LENGTH, e.METHOD_ACCESS_MAP, e.MODEL_FORMATS, e.MOTION_TRIGGER_FEATURE, e.ManagedModelCatalogEntrySchema, e.ManagedModelRefSchema, e.ManagedRuntimeConfigSchema, e.MaskGridDimsSchema, e.MaskGridShapeSchema, e.MaskLineShapeSchema, e.MaskPointSchema, e.MaskPolygonShapeSchema, e.MaskPolygonVerticesSchema, e.MaskRectShapeSchema, e.MaskShapeKindSchema, e.MaskShapeSchema, e.MediaFileInfoSchema, e.MediaFileSchema, e.MediaPlayerRepeatSchema, e.MediaPlayerStateSchema, e.MediaPlayerStatusSchema, e.MeshPeerSchema, e.MeshStatusSchema, e.MethodAccessSchema, e.ModelCatalogEntrySchema, e.ModelConvertInputSchema, e.ModelConvertMetadataSchema, e.ModelDistributeInputSchema, e.ModelDistributeResultSchema, e.ModelExtraFileSchema, e.ModelFormatEntrySchema, e.ModelFormatsSchema, e.ModelSubstitutionSchema, e.ModelVariantGroupSchema, e.MotionAnalysisResultSchema, e.MotionEventSchema, e.MotionOnMotionChangedDataSchema, e.MotionRegionSchema, e.MotionSourceEnum, e.MotionSourcesSchema, e.MotionStatusSchema, e.MotionTriggerRuntimeStateSchema, e.MotionTriggerStatusSchema, e.MotionZoneOptionsSchema, e.MotionZonePatchSchema, e.MotionZoneRegionSchema, e.MotionZoneStatusSchema, e.MqttBrokerStatusSchema, e.MutationFilterSchema, e.NATIVE_LEASE_ACTIVITY_FIELD, e.NATIVE_LEASE_ACTIVITY_KEY, e.NATIVE_LEASE_ADMISSION_FIELD, e.NATIVE_LEASE_ADMISSION_KEY, e.NATIVE_LEASE_BUDGET_FIELD, e.NATIVE_LEASE_BUDGET_KEY, e.NATIVE_LEASE_SECTION_ID, e.NATIVE_LEASE_TTL_FIELD, e.NATIVE_LEASE_TTL_KEY, e.NC_BASE_CONDITION_KEYS, e.NC_CONDITION_CATALOG, e.NC_HISTORY_LIMIT_DEFAULT, e.NC_HISTORY_LIMIT_MAX, e.NC_MAX_PER_TRACK_IMMEDIATE, e.NC_SNOOZE_MAX_MINUTES, e.NC_TAXONOMY, e.NativeCropBboxSchema, e.NativeCropRefSchema, e.NativeCropResultSchema, e.NativeDetectionSchema, e.NativeLeaseAdmissionSchema, e.NativeLeaseSettingsSchema, e.NativeObjectClassEnum, e.NativeObjectDetectionRuntimeStateSchema, e.NativeObjectDetectionStatusSchema, e.NcAlarmConfigSchema, e.NcAlarmModeCoverageSchema, e.NcAlarmSettingsPatchSchema, e.NcAlarmSettingsSchema, e.NcConditionDescriptorSchema, e.NcConditionsSchema, e.NcCrossingSchema, e.NcDeliverySchema, e.NcDeviceStateConditionSchema, e.NcHistoryEntrySchema, e.NcHistoryFilterSchema, e.NcHistoryRecordKindSchema, e.NcHistoryStatusSchema, e.NcHistorySubjectSchema, e.NcMediaFrameSchema, e.NcMediaPolicySchema, e.NcOccupancyConditionSchema, e.NcPlateMatcherSchema, e.NcRuleActionSchema, e.NcRuleActionSequenceSchema, e.NcRuleActionsSchema, e.NcRuleInputSchema, e.NcRuleNotificationButtonSchema, e.NcRulePatchSchema, e.NcRuleSchema, e.NcRuleTargetSchema, e.NcScheduleSchema, e.NcScheduleWindowSchema, e.NcSnoozeInputSchema, e.NcSnoozeSchema, e.NcSnoozeScopeSchema, e.NcSnoozeSuppressedSchema, e.NcTaxonomyEntrySchema, e.NcTaxonomySchema, e.NcTestResultSchema, e.NcThrottleGranularitySchema, e.NcThrottleSchema, e.NcZoneConditionSchema, e.NetworkAccessStatusSchema, e.NetworkAddressSchema, e.NetworkEndpointSchema, e.NotificationActionIconSchema, e.NotificationActionSchema, e.NotificationFormatSchema, e.NotificationSchema, e.NotifierStatusSchema, e.NumericSensorStatusSchema, e.OPS_LOG_DEFAULT_LIMIT, e.OPS_LOG_RING_DEFAULT_MAX, e.OauthIntegrationDescriptorSchema, e.ObjectEventSchema, e.OpsLogDomainSchema, e.OpsLogEntrySchema, e.OpsLogOpSchema, e.OpsLogQueryInputSchema, e.OpsLogReasonSchema, e.OrchestratorMetricsSchema, e.OsdOverlayKindEnum, e.OsdOverlayPatchSchema, e.OsdOverlaySchema, e.OsdPositionEnum, e.OsdRenderOutcomeEnum, e.OsdRenderResultSchema, e.OsdSlotBindingSchema, e.OsdSlotViewSchema, e.OsdSourceOptionSchema, e.OsdSourceSchema, e.OsdSourceValueTypeEnum, e.OsdStatusSchema, e.PET_FEEDER_MANUAL_FEED_MAX, e.PET_FEEDER_MANUAL_FEED_MIN, e.PIPELINE_FLOW_CAPABILITY_NAMES, e.PIPELINE_OWNER_CAPABILITY_NAMES, e.PRIVACY_MASK_CAP_NAME, e.PROVIDER_KIND_CAP_NAMES, e.PYTHON_SCRIPT, e.PackageUpdateSchema, e.PackageVersionInfoSchema, e.PasskeyLoginMethodSchema, e.PasskeySummarySchema, e.PcmSampleFormatSchema, e.PerScopeBreakdownSchema, e.PetFeederStatusSchema, e.PickStreamPreferencesSchema, e.PickStreamRequirementsSchema, e.PickedCamStreamSchema, e.PipelineAssignmentSchema, e.PipelineDefaultStepSchema, e.PipelineEngineChoiceSchema, e.PipelineRunResultBridge, e.PipelineStepInputSchema, e.PipelineValidationIssueSchema, e.PipelineValidationResultSchema, e.PlaceholderReasonSchema, e.PolygonPointSchema, e.PowerMeterStatusSchema, e.PresenceStatusSchema, e.PressureSensorStatusSchema, e.PrivacyMaskOptionsSchema, e.PrivacyMaskPatchSchema, e.PrivacyMaskRegionSchema, e.PrivacyMaskShapeSchema, e.PrivacyMaskStatusSchema, e.ProfileRtspEntrySchema, e.ProfileSlotSchema, e.ProfileSlotStatusSchema, e.ProviderStatusSchema, e.PtzAutotrackRuntimeStateSchema, e.PtzAutotrackSettingsSchema, e.PtzAutotrackStatusSchema, e.PtzAutotrackTargetOptionSchema, e.PtzMoveCommandSchema, e.PtzOptionsSchema, e.PtzPositionSchema, e.PtzPresetSchema, e.PtzStatusSchema, e.QueryFilterSchema, e.RATE_CONTROL_RELAXED, e.RATE_CONTROL_TIGHT, e.REACHABILITY_FAILURES_TO_OFFLINE, e.REACHABILITY_POLL_INTERVAL_MS, e.REACHABILITY_PROBE_TIMEOUT_MS, e.RECOGNITION_TYPES, e.RESERVED_BINDING_NAMES, e.RUNTIME_DEFAULTS, e.RUNTIME_TO_FORMAT, e.RawStateResultSchema, e.ReadGopBytesResultSchema, e.ReadSegmentBytesResultSchema, e.ReadinessRegistry, e.ReadinessTimeoutError, e.RecentTracksPageSchema, e.RecentTracksQueryInput, e.RecordingAvailabilitySchema, e.RecordingBandModeSchema, e.RecordingBandSchema, e.RecordingBandTriggersSchema, e.RecordingConfigSchema, e.RecordingDaysSchema, e.RecordingDeviceUsageSchema, e.RecordingLocationUsageSchema, e.RecordingManifestSchema, e.RecordingRangeSchema, e.RecordingRetentionSchema, e.RecordingStatusSchema, e.RecordingStorageModeSchema, e.RecordingStorageUsageSchema, e.RecordingTriggersSchema, e.RecordingWeekdaySchema, e.RedirectLoginMethodSchema, e.RelocateFootageInputSchema, e.RelocateJobSchema, e.RelocateJobStateSchema, e.RelocateMediaInputSchema, e.RenderedAsSchema, e.ReportMotionInputSchema, e.RetrainAnnotationDraftSchema, e.RetrainAnnotationKindSchema, e.RetrainAnnotationSchema, e.RetrainAnnotationSourceSchema, e.RetrainAssistResultSchema, e.RetrainAssistSubjectSchema, e.RetrainCopyRefusalSchema, e.RetrainFrameCandidateSchema, e.RetrainFrameListSchema, e.RetrainFrameSchema, e.RetrainFrameSelectionSchema, e.RetrainMacroClassSchema, e.RetrainStatusSchema, e.RetrainTrackSchema, e.RetrainTransitionResultSchema, e.RingBuffer, e.RtpSourceSchema, e.RtspRestreamEntrySchema, e.RunnerCameraConfigSchema, e.RunnerCameraDeviceUIFields, e.RunnerFrameSourceSchema, e.RunnerInferenceDeviceSchema, e.RunnerLocalLoadSchema, e.RunnerLocalMetricsSchema, e.SCOPE_PRESETS, e.SCRUB_THUMBNAIL_PRESETS, e.SCRUB_THUMBNAIL_PRESET_LABELS, e.SCRUB_THUMBNAIL_PRESET_ORDER, e.SENSOR_FEATURES, e.SENSOR_MAP, e.SOURCE_INFO_METADATA_KEY, e.STREAM_PROFILE_META, e.STREAM_QUALITY_LABELS, e.SUB_DETECTION_TYPES, e.SYSTEM_CAP_NAMES, e.SceneCheckSchema, e.SceneConditionSchema, e.SceneMonitorSchema, e.SceneMonitorStateSchema, e.SceneMonitorStatusSchema, e.SceneReferenceSchema, e.ScopedTokenSchema, e.ScopedTokenSummarySchema, e.ScoredObjectEventSchema, e.ScriptRunnerStatusSchema, e.ScrubThumbnailPresetSchema, e.SearchResultSchema, e.SendEmailInputSchema, e.SendEmailResultSchema, e.SendResultSchema, e.SensorEventSchema, e.ServerBootModeSchema, e.ServerPackageStatusSchema, e.ServerRollbackInfoSchema, e.ServerUpdateActionResultSchema, e.ServerUpdateCheckResultSchema, e.ServerUpdateStateSchema, e.SettingsPatchSchema, e.SettingsRecordSchema, e.SettingsSchemaWithValuesSchema, e.SettingsUpdateResultSchema, e.ShmRingStatsSchema, e.SmokeStatusSchema, e.SmtpStatusSchema, e.SnapshotImageSchema, e.SourceInfoSchema, e.SpatialDetectionSchema, e.SsoBridgeClaimsSchema, e.StartEmbeddedInputSchema, e.StationaryObjectSchema, e.StorageAbortUploadInputSchema, e.StorageBeginDownloadInputSchema, e.StorageBeginDownloadResultSchema, e.StorageBeginUploadInputSchema, e.StorageBeginUploadResultSchema, e.StorageEndDownloadInputSchema, e.StorageFinalizeUploadInputSchema, e.StorageLocationDeclarationSchema, e.StorageLocationRefSchema, e.StorageLocationSchema, e.StorageLocationTypeSchema, e.StorageProviderInfoSchema, e.StorageReadChunkInputSchema, e.StorageTestLocationResultSchema, e.StorageWriteChunkInputSchema, e.StreamCodecSchema, e.StreamFormatSchema, e.StreamNetworkStatsSchema, e.StreamParamsOptionsSchema, e.StreamParamsStatusSchema, e.StreamProfileConfigSchema, e.StreamProfileOptionsSchema, e.StreamProfilePatchSchema, e.StreamProfileSchema, e.StreamSourceEntrySchema, e.StreamSourceSchema, e.SubscribeAudioChunksInputSchema, e.SubscribeAudioChunksResultSchema, e.SubscribeFramesInputSchema, e.SubscribeFramesResultSchema, e.SwitchStatusSchema, e.SystemMetricsSchema, e.SystemMirror, e.TAXONOMY_COLORS, e.TIMEZONES, e.TRANSCODE_DOWN_MAX_BITRATE_KBPS, e.TRANSCODE_DOWN_MAX_HEIGHT, e.TamperStatusSchema, e.TankStatusSchema, e.TargetKindCapsSchema, e.TargetKindLevelSchema, e.TargetKindSchema, e.TargetSchema, e.TemperatureSensorStatusSchema, e.TerminalProfileInfoSchema, e.TerminalSessionInfoSchema, e.TestConnectionResultSchema, e.TestResultSchema, e.TimelapseRuleInputSchema, e.TimelapseRulePatchSchema, e.TimelapseRuleSchema, e.TimelapseTemplateSchema, e.ToastSchema, e.TokenScopeSchema, e.TopologyNodeSchema, e.TopologyProcessSchema, e.TopologyServiceSchema, e.TrackCascadeCountsSchema, e.TrackEnvelopeSchema, e.TrackFlagsPatchSchema, e.TrackFlagsSchema, e.TrackProjectionSchema, e.TrackSchema, e.TrackSourceSchema, e.TrackStateSchema, e.TrackZoneFilterSchema, e.TrackedDetectionSchema, e.TrainingExportDeviceTotalsSchema, e.TrainingExportSummarySchema, e.TurnServerSchema, e.UNIT_TABLE, e.UnifiedBrokerInfoSchema, e.UnitConversionError, e.UpdateIntegrationInputSchema, e.UpdateStatusSchema, e.UpdateUserInputSchema, e.UserRecordSchema, e.UserSummarySchema, e.VacuumControlStatusSchema, e.VacuumStateSchema, e.ValveStateSchema, e.ValveStatusSchema, e.VectorDeclareIndexInputSchema, e.VectorDeleteByFilterInputSchema, e.VectorDeleteInputSchema, e.VectorDeleteResultSchema, e.VectorFilterSchema, e.VectorGetInputSchema, e.VectorGetResultSchema, e.VectorItemSchema, e.VectorMatchSchema, e.VectorMetadataSchema, e.VectorMetricSchema, e.VectorQueryInputSchema, e.VectorQueryResultSchema, e.VectorStatsInputSchema, e.VectorStatsResultSchema, e.VectorUpsertInputSchema, e.VectorUpsertResultSchema, e.VibrationStatusSchema, e.VideoEncodeSchema, e.WEBRTC_EGRESS_PROFILE, e.WELL_KNOWN_TABS, e.WELL_KNOWN_TAB_MAP, e.WaterHeaterStatusSchema, e.WeatherStatusSchema, e.WebrtcStreamChoiceSchema, e.WebrtcStreamTargetSchema, e.WhiteBalanceModeSchema, e.WidgetHostEnum, e.WidgetLoginMethodSchema, e.WidgetMetadataSchema, e.WidgetRemoteSchema, e.WidgetSizeEnum, e.YAMNET_TO_MACRO, e.ZoneCrossingDirectionSchema, e.ZoneCrossingSchema, e.ZoneKindEnum, e.ZoneRuleModeEnum, e.ZoneRuleSchema, o = e.ZoneRuleStageEnum, e.ZoneRulesArraySchema, e.ZoneSchema, e.ZoneScopeBreakdownSchema, e.accessoriesCapability, e.accessoryStableId, e.addonPagesCapability, e.addonPagesSourceCapability, e.addonRoutesCapability, e.addonSettingsCapability, e.addonWidgetsCapability, e.addonWidgetsSourceCapability, e.addonsCapability, e.adminUiCapability, e.airQualitySensorCapability, e.alarmPanelCapability, e.alertsCapability, e.ambientLightSensorCapability, e.asBoolean, e.asJsonArray, e.asJsonObject, e.asNumber, e.asString, e.audioAnalysisCapability, e.audioAnalyzerCapability, e.audioCodecCapability, e.audioMetricsCapability, e.audioPlanFromEncodeProfile, e.authProviderCapability, e.autoAssignProfiles, e.automationControlCapability, e.backupCapability, e.bareAddonId, e.batteryCapability, e.bestLocationMatch, e.binaryCapability, e.bindAddonActions, e.brightnessCapability, e.brokerCapability, e.buildAddonRouteProvider, e.buildAudioArgs, e.buildEventKindDescriptor, e.buildFfmpegArgs, e.buildInputArgs, e.buildModelVariantGroups, e.buildNcTaxonomy, e.buildStreamParamsConfigSchema, e.buildVideoArgs, e.buttonCapability, e.cameraCredentialsCapability, e.cameraPipelineConfigCapability, e.cameraStreamsCapability, e.canConvertUnit, e.canonicalEgressPlan, e.carbonMonoxideCapability, e.cellsToRects, e.classifyStream, e.classifyStreams, e.climateControlCapability, e.collectHydratedFieldEntries, e.collectHydratedFieldValues, e.colorCapability, e.colorForKind, e.compileExpression, e.compileExpressionSafe, e.connectivityCapability, e.consumablesCapability, e.contactCapability, e.controlCapability, e.convertUnit, e.coreBlockAddonId, e.coreBlockIdFromAddonId, e.coreBlocksCapability, e.cosineSimilarity, e.coverCapability, e.createDeviceProxy, e.createDurableState, e.createEvent, e.createExpressionScope, e.createHwAccelCache, e.createLazyTrpcSource, e.createMirrorSource, e.createRuntimeStateBridge, e.createSliceHandle, e.createSystemProxy, e.customAction, e.customModelRegistryCapability, e.dataStoreProviderCapability, e.dayNightCapability, e.declarationOwnerNodeId, e.decodeVectorBase64, e.decoderCapability, e.defaultDeviceFor, e.defineCustomActions, e.deriveCameraSwitches, e.deriveDetailCropRect, e.deriveRecordingMode, e.describeModelVariant, e.detectionPipelineCapability, e.deviceAdoptionCapability, e.deviceBackendToFormat, e.deviceCustomAction, e.deviceDiscoveryCapability, e.deviceExportCapability, e.deviceManagerCapability, e.deviceMatchesProfile, e.deviceOpsCapability, e.deviceProviderCapability, e.deviceStateCapability, e.deviceStatusCapability, e.doorbellCapability, e.egressTranscodeSharingKey, e.egressTransportFromRequest, e.embeddingEncoderCapability, e.emitDownForOwnedCaps, e.emitReadiness, e.encodeProfileFromStreamShape, e.encodeVectorBase64, e.enumSensorCapability, e.enumerateInferenceDevices, e.enumerateItemArrayFields, e.enumerateSchemaFields, e.errMsg, e.evaluateAst, e.evaluateExpressionSource, e.evaluateZoneRules, e.event, e.eventEmitterCapability, e.eventsCapability, e.expandCapMethods, e.extractNestedAddonId, e.extractSourceInfoFromMetadata, e.faceGalleryCapability, e.fanControlCapability, e.featureProbeCapability, e.filesystemBrowseCapability, e.findTimezone, e.floodCapability, e.formatForBackend, e.formatForRuntime, e.gasCapability, e.getAudioMacroClassIds, e.getByPath, e.getCapsByProviderKind, e.getTaxonomyEntry, e.hasMotionTrigger, e.hfModelUrl, e.htmlToText, e.humidifierCapability, e.humiditySensorCapability, e.hydrateSchema, e.imageCapability, e.imageSettingsCapability, e.integrationsCapability, e.intercomCapability, e.invocationFromEncodeProfile, e.isAgentOnlyPlacement, e.isArrayOutputSchema, e.isBaseConditionKey, e.isCollectionArrayMethod, e.isDeployableToAgent, e.isDeviceConfigCap, e.isDeviceScopedCap, e.isEvent, e.isNode, e.isObjectInput, e.isSameAddonId, e.isScheduleActive, e.isSoftwareDecode, e.isVoidInput, e.jobKindSchema, e.kebabToCamel, e.knownValues, e.lawnMowerControlCapability, e.lifecycleJobSchema, e.lifecycleJobScopeSchema, e.lifecycleJobStateSchema, e.lifecycleTaskSchema, e.llmCapability, e.llmRuntimeCapability, e.localNetworkCapability, e.locationSimilarity, e.lockControlCapability, e.logBannerArgs, e.logDestinationCapability, e.logLevelAtMost, e.loginMethodCapability, e.looseSchema, e.makeProfileBrokerId, e.makeSourceBrokerId, e.mapAudioLabelToMacro, e.markdownToHtmlLite, e.markdownToText, e.maskUrlCredentials, e.mediaPlayerCapability, e.mergeSourceInfo, e.meshNetworkCapability, e.method, e.metricsProviderCapability, e.modelConvertCapability, e.modelDistributorCapability, e.modelFormatForRuntime, e.motionCapability, e.motionDetectionCapability, e.motionTriggerCapability, e.motionZonesCapability, e.mqttBrokerCapability, e.nativeObjectDetectionCapability, e.networkAccessCapability, e.networkQualityCapability, e.nodePin, e.nodesCapability, e.normalizeAddonInitResult, e.normalizeUnit, e.notificationOutputCapability, e.notificationRulesCapability, e.notifierCapability, e.numericSensorCapability, e.oauthIntegrationCapability, e.objectInputDeclaresAddonId, e.osdCapability, e.osdManagerCapability, e.parseCameraStreamConfig, e.parseExpression, e.parseJsonArray, e.parseJsonObject, e.parseJsonUnknown, e.parseProfileBrokerId, e.parseStreamParamsFormPatch, e.petFeederCapability, e.pickAccessoryControl, e.pickDetailCropConvention, e.pickNativeLeaseOverride, e.pickPreferredRtspEntry, e.pickVideoEncoder, e.pickerForCondition, e.pipelineAnalyticsCapability, e.pipelineExecutorCapability, e.pipelineOrchestratorCapability, e.pipelineRunnerCapability, e.plateGalleryCapability, e.platformProbeCapability, e.powerMeterCapability, e.prepareNotification, e.presenceCapability, e.pressureSensorCapability, e.privacyMaskCapability, e.procedureAuthKey, e.ptzAutotrackCapability, e.ptzCapability, e.pythonScriptForBackend, e.readDetailCropConvention, e.readDeviceStateFrom, e.readNativeLeaseOverride, e.readNodePin, e.readinessKey, e.rebootCapability, e.recordingCapability, e.recordingExportCapability, e.rectsToCells, e.requiresPython, e.resolveAddonExecution, e.resolveAddonGroup, e.resolveAddonPlacement, e.resolveAddonRuntime, e.resolveCapMount, e.resolveDetectionRuntime, e.resolveDeviceControlKind, e.resolveDeviceProfile, e.resolveEgressDecodeHwAccel, e.resolveFormat, s = e.resolveHydratedFieldValue, e.resolveModelFormat, e.resolveMutate, e.resolveRunnerId, e.resolveScrubThumbnailGeometry, e.resolveVariantModelId, e.runInferenceStep, e.runtimeDevices, e.sceneMonitorCapability, e.scopeKey, e.scoreRuntimes, e.scriptRunnerCapability, e.selectAssignedProfileSlots, e.serverManagementCapability, e.setByPath, e.settingsStoreCapability, e.sleep, e.sleepCancellable, e.smokeCapability, e.smtpProviderCapability, e.snapshotCapability, e.ssoBridgeCapability, e.startReachabilityPoll, e.stateVocabularyFor, e.storageCapability, e.storageEvictableCapability, e.storageProviderCapability, e.streamBrokerCapability, e.streamCatalogCapability, e.streamParamsCapability, e.streamPixels, e.streamQualityLabel, e.subKindsOf, e.summarisePrivacyAudio, e.supportedRuntimes, e.switchCapability, e.switchedOffIds, e.synthesizeSourceInfo, e.systemCapability, e.tamperCapability, e.taskLogEntrySchema, e.taskPhaseSchema, e.taskTargetSchema, e.temperatureSensorCapability, e.terminalSessionCapability, e.textToHtml, e.toDeviceSummary, e.toExpressionValue, e.toNodeId, e.toStreamSourceEntry, e.toastCapability, e.tokenize, e.transcodeBody, e.tryConvertUnit, e.turnProviderCapability, e.unitDimension, e.unitsForDimension, e.updateCapability, e.userManagementCapability, e.userPasskeysCapability, e.vacuumControlCapability, e.validateExpressionSource, e.valveCapability, e.vectorDimFromBase64, e.vectorStoreCapability, e.vibrationCapability, e.videoclipsCapability, e.viewerUiCapability, e.waterHeaterCapability, e.weatherCapability, e.webrtcClientHintsSchema, e.webrtcSessionCapability, e.wiringAddonHealthSchema, e.wiringHealthSnapshotSchema, e.wiringNodeHealthSchema, e.wiringProbeKindSchema, e.wiringProbeResultSchema, e.zodEntriesToConfigUI, e.zoneAnalyticsCapability, e.zoneRulesCapability, e.zonesCapability, e.default;
20
- }, l = i.share["default:@camstack/types"];
21
- l === void 0 ? n.then(() => {
22
- if (l = i.share["default:@camstack/types"], l === void 0) throw Error("[Module Federation] Shared module @camstack/types was imported before federation bootstrap finished.");
23
- c(l);
24
- }) : c(l);
25
- //#endregion
26
- export { a as n, o as r, s as t };