@camstack/addon-pipeline 1.2.78 → 1.2.79
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/{addon-utils-C-XbUkiG.js → addon-utils-BZQxAJ1G.js} +1 -1
- package/dist/audio-analyzer/index.js +2 -2
- package/dist/audio-analyzer/index.mjs +1 -1
- package/dist/detection-pipeline/index.js +4 -4
- package/dist/detection-pipeline/index.mjs +2 -2
- package/dist/{dist-BdVCXl5n.js → dist-BUIpqu3E.js} +51 -2
- package/dist/{dist-CsP_DikG.mjs → dist-BfTf6doa.mjs} +51 -2
- package/dist/{event-loop-stall-monitor-BOu8lGee.js → event-loop-stall-monitor-CGLQP0by.js} +1 -1
- package/dist/{event-loop-stall-monitor-C3cvE_Xk.mjs → event-loop-stall-monitor-CmrHj0i9.mjs} +1 -1
- package/dist/{lazy-sharp-1LkmyWqV.js → lazy-sharp-BZVhL9Lw.js} +1 -1
- package/dist/motion-wasm/index.js +2 -2
- package/dist/motion-wasm/index.mjs +1 -1
- package/dist/pipeline-runner/index.js +4 -4
- package/dist/pipeline-runner/index.mjs +3 -3
- package/dist/recorder/index.js +2 -2
- package/dist/recorder/index.mjs +1 -1
- package/dist/session-decode/decode-worker-child.js +2 -2
- package/dist/session-decode/decode-worker-child.mjs +1 -1
- package/dist/stream-broker/_stub.js +2 -2
- package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-DUi-lR4R.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-BohtrVou.mjs} +2 -2
- package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-1QMyGZMB.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-y8ehJPoY.mjs} +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Dxr14lIu.mjs +26 -0
- package/dist/stream-broker/{hostInit-DEtsjgBO.mjs → hostInit-pDANS0x0.mjs} +2 -2
- package/dist/stream-broker/index.js +252 -30
- package/dist/stream-broker/index.mjs +252 -30
- package/dist/stream-broker/remoteEntry.js +1 -1
- package/dist/{worker-protocol-B4fPjmXk.js → worker-protocol-BaLcYcOo.js} +1 -1
- package/dist/{worker-protocol-BRwzX3f_.mjs → worker-protocol-BdOv9Ujl.mjs} +1 -1
- package/package.json +1 -1
- package/dist/stream-broker/_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Dg08SxUW.mjs +0 -26
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//#region \0virtual:mf:__mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js
|
|
2
|
+
var e = "__mf_init__virtual:mf:__mfe_internal__addon_stream_broker_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, l, u, d, f, p, m, h, g, _, v = (e) => {
|
|
19
|
+
e.AddonGlobalSettingsForm, e.AgentStepEditor, e.AlarmHeroCard, e.AlarmPanelInlineControl, e.AppShell, e.ArcKnob, e.AudioClassificationList, e.AudioLevelWaveform, e.AudioWaveform, e.AutomationHeroCard, e.AutomationInlineControl, e.AutotrackSection, e.BTN_COMPACT, e.BTN_COMPACT_DANGER, e.BTN_COMPACT_PRIMARY, e.BTN_COMPACT_WARNING, e.Badge, e.BatteryBadge, e.BottomSheet, e.Breadcrumb, e.BrightnessPanel, e.Button, e.ButtonControl, e.ButtonHeroCard, e.CARD_MODE_MIN_COLUMNS, e.CENTER, e.CHIP_ACTIVE, e.CHIP_BASE, e.CHIP_INACTIVE, e.CLASS_COLORS, e.COLUMN_BREAKPOINT_CLASS, e.COLUMN_PRIORITY, e.COMMIT_DEDUPE_TOLERANCE_MS, e.COMMIT_DEDUPE_WINDOW_MS, e.CONTROL_CAP_NAMES, e.CONTROL_FILLS, e.Camera, e.CameraStreamPlayer, e.Card, e.Checkbox, e.ChildSectionAccordion, e.ClimatePanel, e.CodeBlock, e.CollapsibleCard, e.ConfigFormBuilder, e.ConfigFormField, e.ConfigSchemaField, e.ConfirmActionButton, e.ConfirmDialogProvider, e.ConsumablesPanel, e.ContainerChildrenProvider, e.ContainerPrimaryHero, e.ControlColumn, e.ControlHeroCard, e.ControlInlineControl, e.ControlPanel, e.CopyButton, e.CoverHeroCard, e.CoverInlineControl, e.CoverPanel, e.CustomFieldRenderersProvider, e.DEFAULT_COLOR, e.DEVICE_COLUMNS, e.DEVICE_LIST_PAGE_SIZE_KEY, e.DEVICE_LIST_PAGE_SIZE_OPTIONS, e.DEVICE_ROLE_META, e.DEVICE_TYPE_CONTROL, e.DEVICE_TYPE_META, e.DISPLAY_ICON_REGISTRY, e.DataTable, e.DetectionCanvas, e.DetectionOverlay, e.DetectionResultTree, e.DevShell, e.DeviceActivityPanel, e.DeviceBatchToolbar, e.DeviceCard, e.DeviceContextProvider, e.DeviceExportPanel, e.DeviceGrid, e.DeviceItem, e.DeviceList, e.DeviceMultiSelectField, e.DeviceSelectField, e.DeviceSelectorPicker, e.DeviceStepMatrix, e.Dialog, e.DialogBody, e.DialogContent, e.DialogDescription, e.DialogFooter, e.DialogHeader, e.DialogTitle, e.DialogTrigger, e.DiscoveryPanel, e.DoorbellRecentPanel, e.Dropdown, e.DropdownContent, e.DropdownItem, e.DropdownTrigger, e.DummyHeroCard, e.DummyInline, e.EVENT_KIND_ICONS, e.EmptyState, e.ErrorBox, e.EventKindGlyph, e.EventStream, e.EyeOff, e.FILL, e.FanHeroCard, e.FanInlineControl, e.FanPanel, e.FilterBar, e.FloatingEventStream, e.FloatingLogStream, e.FloatingPanel, e.FormField, e.GRID_GAP, e.GRID_PAIRED, e.GRID_QUICK_STATS, e.GripTrack, e.GroupedModelSelector, e.HOST_WIDGETS, e.HlsVideo, e.HoverZoomImage, e.HumidifierHeroCard, e.HumidifierInlineControl, e.INPUT_COMPACT, e.IconAction, e.IconButton, e.ImageHeroCard, e.ImageInlineControl, e.ImageOff, e.ImageSelector, e.InferenceConfigSelector, e.Input, e.KebabMenu, e.KeyValueList, e.LIST_ROW, e.Label, e.LawnMowerHeroCard, e.LawnMowerInlineControl, e.LightHeroCard, e.LightInlineControl, e.LockHeroCard, e.LockInlineControl, e.LockPanel, e.LogStream, e.LoginForm, e.MODE_COLOR, e.MaskShapeCanvas, e.MediaPlayerHeroCard, e.MediaPlayerInlineControl, e.MediaPlayerPanel, e.Mic, e.MobileDrawer, e.ModelPicker, e.MotionZonesSettings, e.NodeMultiSelectField, e.NodePicker, e.NodeSelectField, e.OfflineBadge, e.PHASE_CONFIG, e.PRIORITY, e.PTZOverlay, e.PageHeader, e.PhaseIcon, e.PipelineBuilder, e.PipelineRuntimeSelector, e.PipelineStep, e.PipelineTreeMatrix, e.PlayerOverlaysProvider, e.Popover, e.PopoverContent, e.PopoverRowAction, e.PopoverTrigger, e.PrimaryChildPicker, e.PrivacyMaskSettings, e.ProviderBadge, e.PtzPanel, e.QrCode, e.RECONNECT_POLICY, e.RECORDED_PLAYBACK_MODES, e.RIGHT, e.ROI_AREA_WARN_FRACTION, e.ROLE_DESCRIPTOR, e.RadialGauge, e.RecordedPlaybackProvider, e.RecordingPanel, e.ResponseLog, e.RotateCcw, e.SCENE_CAPTURE_VARIANTS, e.SCENE_CAPTURE_VARIANTS$1, e.SECTION_BODY, e.SECTION_CARD, e.SECTION_HEADER, e.SETTING_ROW, e.SETTING_ROW_LABEL, e.SETTING_ROW_STACK_BREAKPOINT, e.SETTING_ROW_VALUE, e.SETTING_ROW_VALUE_TEXT, e.SPLIT_PANEL_OUTER, e.SPLIT_PANEL_SIDE, e.STACK_GAP, e.STATE_COLOR, e.SceneMonitorEditor, e.ScopePicker, e.ScriptHeroCard, e.ScriptInlineControl, e.ScrollArea, e.Select, e.SemanticBadge, e.SensorHeroCard, e.SensorInlineControl, e.SensorValueAtom, e.Separator, e.SettingRow, e.Sidebar, e.SidebarItem, e.Skeleton, e.SlideOverPanel, e.SlideToggle, e.SnapshotButton, e.Square, e.StatCard, e.StateValuesStream, e.StatusBadge, e.StepTimings, e.StepTreeMaster, e.Stepper, e.StreamBrokerSelector, e.StreamPanel, e.Switch, e.SwitchHeroCard, e.SwitchInlineControl, e.SwitchPanel, e.SystemProvider, e.TABLE_SCROLL_MAX_H, e.TEXT_FIELD_LABEL, e.TEXT_HINT, e.TEXT_METRIC, e.TEXT_SECTION_LABEL, e.TEXT_VALUE, e.TIMEZONES, e.Tabs, e.TabsContent, e.TabsList, e.TabsTrigger, e.TapToggle, e.ThemeProvider, e.ThermostatHeroCard, e.ThermostatInlineControl, e.TimezoneSelector, e.Tooltip, e.TooltipContent, e.TooltipTrigger, e.Trash2, e.VacuumHeroCard, e.VacuumInlineControl, e.ValueReadout, e.ValveHeroCard, e.ValveInlineControl, e.VersionBadge, e.VodPlaybackProvider, e.WaterHeaterHeroCard, e.WaterHeaterInlineControl, e.WeatherHeroCard, e.WeatherInlineControl, e.WidgetMetricCard, e.WidgetPanel, e.WidgetRegistryProvider, e.WidgetSlot, e.ZoneEditingProvider, e.agentColumnKey, e.allDeviceTypeFilterOptions, e.badgeFor, e.badgeFor$1, e.buildStepTreeFromSchema, e.childEntityId, e.childListName, e.cn, e.columnsForContext, e.containerChildToRef, e.countableDevices, e.coverHighlight, e.coverageLine, e.coverageLine$1, e.createLucideIcon, e.createSharedContext, e.createTheme, e.cursorFractionFor, e.darkColors, e.defaultTheme, e.deriveDeviceKind, e.describeDeviceSelector, e.deviceMatchesFilter, e.deviceOptionLabel, e.deviceRoleMeta, e.deviceRoleMetaOf, e.deviceTypeLabel, e.deviceTypeMeta, e.deviceTypeMetaOf, e.devicesToOptions, e.ensureMfHostInit, e.eventKindLabel, e.filterDeviceOptions, e.findTimezone, e.formatControlDateTime, e.formatLastSeen, e.formatNumeric, e.fuzzyMatch, e.getClassColor, e.getPhaseVisual, e.groupAgentColumns, e.groupChildrenByLayout, e.hardwareLabel, e.humanDuration, e.humidifierTint, e.initialScrubState, e.isAbsentProvider, e.isAbsentProvider$1, e.isFieldVisible, e.lawnMowerActivityMeta, e.lightColors, e.loadRemoteBundle, e.makeScrubBridge, e.metadataEntries, e.metadataString, e.mirror, e.mountAddonPage, e.nextReconnectAction, e.nextSort, e.normalizeForSearch, e.overrideEntityIdFromLink, e.parseRecordedServerMessage, e.providerIcons, e.resolveContainerPrimary, e.resolveControlAlign, e.resolveDeviceControl, e.resolveDisplayIcon, e.resolveEffectiveDefaultModel, e.resolveEffectiveStepModel, e.resolveEventKindIcon, e.resolvePrimaryChild, e.resolveSensorDisplay, e.resolveStepDefaultModel, e.resolveTableLayout, e.roiTooLarge, e.roiTooLarge$1, e.scrubReducer, e.selectedDeviceOptions, e.serializeRecordedCommand, e.shouldCommit, e.shouldEmit, e.shouldUseSingleNode, e.sortRows, e.statusIcons, e.statusLine, e.statusLine$1, e.stepHasModelForFormat, e.stepModelOptions, e.stripParentNamePrefix, e.tabForSelector, e.tankAlert, e.themeToCss, e.trpc, e.useAccessoriesGetStatus, e.useAccessoriesSetChildHidden, e.useAddonPagesListPages, e.useAddonSettingsGetDeviceSettings, e.useAddonSettingsGetGlobalSettings, e.useAddonSettingsUpdateDeviceSettings, e.useAddonSettingsUpdateGlobalSettings, e.useAddonWidgetsListWidgets, e.useAddonsApplyAutoUpdateToAll, e.useAddonsCancelJob, e.useAddonsCustom, e.useAddonsForceRefresh, e.useAddonsGetAddonAutoUpdate, e.useAddonsGetAutoUpdateSettings, e.useAddonsGetJob, e.useAddonsGetLastRestart, e.useAddonsGetLogs, e.useAddonsGetVersions, e.useAddonsInstallFromWorkspace, e.useAddonsInstallPackage, e.useAddonsIsWorkspaceAvailable, e.useAddonsList, e.useAddonsListCapabilityProviders, e.useAddonsListFrameworkPackages, e.useAddonsListJobs, e.useAddonsListPackages, e.useAddonsListUpdates, e.useAddonsListWorkspacePackages, e.useAddonsOnAddonLogs, e.useAddonsReloadPackages, e.useAddonsRestartAddon, e.useAddonsRestartServer, e.useAddonsRetryLoad, e.useAddonsRollbackPackage, e.useAddonsSearchAvailable, e.useAddonsSetAddonAutoUpdate, e.useAddonsSetAutoUpdateSettings, e.useAddonsSetCapabilityProviderEnabled, e.useAddonsStartJob, e.useAddonsUninstallPackage, e.useAddonsUpdatePackage, e.useAirQualitySensorGetStatus, e.useAlarmPanelArm, e.useAlarmPanelDisarm, e.useAlarmPanelGetStatus, e.useAlarmPanelTrigger, e.useAlertsDismiss, e.useAlertsEmit, e.useAlertsGetUnreadCount, e.useAlertsList, e.useAlertsMarkAllRead, e.useAlertsMarkRead, e.useAlertsUpdate, e.useAllWidgets, e.useAmbientLightSensorGetStatus, e.useAudioAnalysisApplyDeviceSettingsPatch, e.useAudioAnalysisGetDeviceLiveContribution, e.useAudioAnalysisGetDeviceSettingsContribution, e.useAudioAnalysisResolveDeviceSettings, e.useAudioAnalyzerAnalyseChunk, e.useAudioAnalyzerClassify, e.useAudioAnalyzerDispose, e.useAudioAnalyzerIsReady, e.useAudioAnalyzerReprobeAudioEngine, e.useAudioCodecCanHandle, e.useAudioCodecCloseSession, e.useAudioCodecCreateDecodeSession, e.useAudioCodecCreateEncodeSession, e.useAudioCodecFlushEncode, e.useAudioCodecListActiveSessions, e.useAudioCodecListSupportedCodecs, e.useAudioCodecPullEncoded, e.useAudioCodecPullPcm, e.useAudioCodecPushEncodedFrame, e.useAudioCodecPushPcm, e.useAudioMetricsGetCurrentSnapshot, e.useAudioMetricsGetHistory, e.useAutomationControlDisable, e.useAutomationControlEnable, e.useAutomationControlGetStatus, e.useAutomationControlTrigger, e.useBackupDelete, e.useBackupDeleteSchedule, e.useBackupGetEntries, e.useBackupList, e.useBackupListArchives, e.useBackupListDestinations, e.useBackupListLocations, e.useBackupListSchedules, e.useBackupPreviewSchedule, e.useBackupRestore, e.useBackupTrigger, e.useBackupUpsertDestinationPolicy, e.useBackupUpsertSchedule, e.useBatteryGetStatus, e.useBatteryWakeForStream, e.useBinaryGetStatus, e.useBrightnessGetStatus, e.useBrightnessSetBrightness, e.useBrokerAdd, e.useBrokerGet, e.useBrokerGetBrokerConfig, e.useBrokerGetSettings, e.useBrokerGetSettingsSchema, e.useBrokerGetState, e.useBrokerGetStatus, e.useBrokerList, e.useBrokerListProviders, e.useBrokerPublish, e.useBrokerRemove, e.useBrokerSetSettings, e.useBrokerSubscribe, e.useBrokerTestConnection, e.useBrokerTestSettings, e.useBrokerUnsubscribe, e.useButtonPress, e.useCameraCredentialsGetCredentials, e.useCameraCredentialsGetStatus, e.useCameraPipelineConfigApplyDeviceSettingsPatch, e.useCameraPipelineConfigGetDeviceLiveContribution, e.useCameraPipelineConfigGetDeviceSettingsContribution, e.useCameraStreamsGetBrokerStreams, e.useCameraStreamsGetCameraStreams, e.useCameraStreamsGetProfileRtspEntries, e.useCameraStreamsGetRtspEntries, e.useCameraStreamsPickStream, e.useCarbonMonoxideGetStatus, e.useClimateControlGetStatus, e.useClimateControlSetFanMode, e.useClimateControlSetMode, e.useClimateControlSetPreset, e.useClimateControlSetSwingHorizontal, e.useClimateControlSetSwingVertical, e.useClimateControlSetTarget, e.useClimateControlSetTargetHumidity, e.useClimateControlSetTargetRange, e.useClusterNodes, e.useColorGetStatus, e.useColorSetColor, e.useConfirm, e.useConnectionTestDescribeTest, e.useConnectionTestTestSettings, e.useConnectivityGetStatus, e.useConsumablesGetStatus, e.useConsumablesReset, e.useContactGetStatus, e.useContainerChildren, e.useControlGetStatus, e.useControlSetValue, e.useCoreBlocksCompile, e.useCoreBlocksCreate, e.useCoreBlocksDelete, e.useCoreBlocksGet, e.useCoreBlocksGetTypeDefs, e.useCoreBlocksList, e.useCoreBlocksRestart, e.useCoreBlocksSetEnabled, e.useCoreBlocksUpdate, e.useCoverClose, e.useCoverGetStatus, e.useCoverOpen, e.useCoverSetPosition, e.useCoverSetTiltPosition, e.useCoverStop, e.useCustomFieldRenderer, e.useDayNightGetOptions, e.useDayNightGetStatus, e.useDayNightSetSettings, e.useDebouncedString, e.useDecoderCreateSession, e.useDecoderDestroySession, e.useDecoderGetFrame, e.useDecoderGetInfo, e.useDecoderGetShmStats, e.useDecoderGetStats, e.useDecoderListActiveSessions, e.useDecoderOpenStream, e.useDecoderPullFrames, e.useDecoderPullHandles, e.useDecoderPushPacket, e.useDecoderReprobeHwaccel, e.useDecoderSupportsCodec, e.useDecoderUpdateConfig, e.useDetectionPipelineApplyDeviceSettingsPatch, e.useDetectionPipelineGetDeviceLiveContribution, e.useDetectionPipelineGetDeviceSettingsContribution, e.useDevShell, e.useDevice, e.useDeviceAdoptionAdopt, e.useDeviceAdoptionGetCandidate, e.useDeviceAdoptionGetStatus, e.useDeviceAdoptionListCandidateFilters, e.useDeviceAdoptionListCandidates, e.useDeviceAdoptionRefresh, e.useDeviceAdoptionRelease, e.useDeviceAdoptionResync, e.useDeviceAutotrack, e.useDeviceBattery, e.useDeviceCapSlice, e.useDeviceCapability, e.useDeviceDetections, e.useDeviceDiscoveryAdoptDevice, e.useDeviceDiscoveryGetStatus, e.useDeviceDiscoveryListDiscovered, e.useDeviceDiscoveryRefreshDiscovery, e.useDeviceDiscoveryReleaseDevice, e.useDeviceExportApplyDeviceSettingsPatch, e.useDeviceExportExposeDevice, e.useDeviceExportGetDeviceLiveContribution, e.useDeviceExportGetDeviceSettingsContribution, e.useDeviceExportGetStatus, e.useDeviceExportListExposedDevices, e.useDeviceExportListSupportedDeviceKinds, e.useDeviceExportUnexposeDevice, e.useDeviceId, e.useDeviceListPageSize, e.useDeviceManagerAddLocation, e.useDeviceManagerAdoptDevice, e.useDeviceManagerAdoptionAdopt, e.useDeviceManagerAdoptionCancelJob, e.useDeviceManagerAdoptionListCandidateFilters, e.useDeviceManagerAdoptionListCandidates, e.useDeviceManagerAdoptionListJobs, e.useDeviceManagerAdoptionRefresh, e.useDeviceManagerAdoptionRelease, e.useDeviceManagerAdoptionResync, e.useDeviceManagerAdoptionStartJob, e.useDeviceManagerAllocateDeviceId, e.useDeviceManagerApplyDeviceSettingsPatch, e.useDeviceManagerApplyInitialMeta, e.useDeviceManagerCreateDevice, e.useDeviceManagerDisable, e.useDeviceManagerDiscoverAllProviders, e.useDeviceManagerDiscoverDevices, e.useDeviceManagerDiscoverProvider, e.useDeviceManagerDiscoveryProviders, e.useDeviceManagerEnable, e.useDeviceManagerGetAllBindings, e.useDeviceManagerGetBindings, e.useDeviceManagerGetChildren, e.useDeviceManagerGetConfigSchema, e.useDeviceManagerGetCreationSchema, e.useDeviceManagerGetDevice, e.useDeviceManagerGetDeviceAggregate, e.useDeviceManagerGetDeviceLiveContribution, e.useDeviceManagerGetDeviceLiveInfoAggregate, e.useDeviceManagerGetDeviceSettingsAggregate, e.useDeviceManagerGetDeviceSettingsContribution, e.useDeviceManagerGetDeviceStatusAggregate, e.useDeviceManagerGetDeviceStatusAggregateBatch, e.useDeviceManagerGetLinkedDevices, e.useDeviceManagerGetRoleDisplayDefaults, e.useDeviceManagerGetSettingsSchema, e.useDeviceManagerGetStreamProfileMap, e.useDeviceManagerGetStreamSources, e.useDeviceManagerGetWireableFields, e.useDeviceManagerListAll, e.useDeviceManagerListBindableCapsForDeviceType, e.useDeviceManagerListLocations, e.useDeviceManagerListPersistedByAddon, e.useDeviceManagerListWrappersForCap, e.useDeviceManagerLoadConfig, e.useDeviceManagerLoadMeta, e.useDeviceManagerLoadRuntimeState, e.useDeviceManagerPersistConfig, e.useDeviceManagerProbeStreams, e.useDeviceManagerProviderCreationType, e.useDeviceManagerProviderDiscoveryParamsSchema, e.useDeviceManagerRegisterDevice, e.useDeviceManagerRemove, e.useDeviceManagerRemoveByIntegration, e.useDeviceManagerRemoveDevice, e.useDeviceManagerRemoveLocation, e.useDeviceManagerRunDeviceAction, e.useDeviceManagerSetChildLayout, e.useDeviceManagerSetDisabled, e.useDeviceManagerSetDisplay, e.useDeviceManagerSetIntegrationId, e.useDeviceManagerSetLinkDeviceId, e.useDeviceManagerSetLocation, e.useDeviceManagerSetMetadata, e.useDeviceManagerSetName, e.useDeviceManagerSetPrimaryChildEntityId, e.useDeviceManagerSetRole, e.useDeviceManagerSetRoleDisplayDefaults, e.useDeviceManagerSetStreamProfileMap, e.useDeviceManagerSetType, e.useDeviceManagerSetWrapperActive, e.useDeviceManagerTestCreationField, e.useDeviceManagerTestField, e.useDeviceManagerUpdateConfig, a = e.useDeviceManagerUpdateDeviceField, e.useDeviceManagerUpdateDeviceFieldsBatch, e.useDeviceOpsGetConfigEntries, e.useDeviceOpsGetRawState, e.useDeviceOpsGetSettingsSchema, e.useDeviceOpsGetStreamSources, e.useDeviceOpsRemoveDevice, e.useDeviceOpsRunAction, e.useDeviceOpsSetConfig, e.useDeviceProviderAdoptDiscoveredDevice, e.useDeviceProviderCreateDevice, e.useDeviceProviderDiscoverDevices, e.useDeviceProviderGetChildCreationSchema, e.useDeviceProviderGetDevices, e.useDeviceProviderGetDiscoveryParamsSchema, e.useDeviceProviderGetManualCreationType, e.useDeviceProviderGetStatus, e.useDeviceProviderStart, e.useDeviceProviderStop, e.useDeviceProviderSupportsDiscovery, e.useDeviceProviderSupportsManualCreation, e.useDeviceProviderTestCreationField, o = e.useDeviceProxy, e.useDeviceProxy$1, e.useDeviceSnapshot, e.useDeviceSnapshotImage, e.useDeviceSnapshotImage$1, e.useDeviceState, e.useDeviceStateGetAllSnapshots, e.useDeviceStateGetCapSlice, e.useDeviceStateGetSnapshot, e.useDeviceStateSetCapSlice, e.useDeviceStateSlice, e.useDeviceStateSlice$1, e.useDeviceStatusGetStatus, e.useDeviceWebrtc, e.useDevices, e.useDoorbellApplyDeviceSettingsPatch, e.useDoorbellEvents, e.useDoorbellGetDeviceLiveContribution, e.useDoorbellGetDeviceSettingsContribution, e.useDoorbellGetStatus, e.useEnumSensorGetStatus, e.useEventEmitterGetStatus, s = e.useEventInvalidation, c = e.useEventStreamLatest, e.useEventStreamMap, e.useEventsGetEventClipUrl, e.useEventsGetEventThumbnail, e.useEventsGetEvents, e.useFaceGalleryAssignFace, e.useFaceGalleryAssignFaces, e.useFaceGalleryCreateIdentity, e.useFaceGalleryDeleteFace, e.useFaceGalleryDeleteIdentity, e.useFaceGalleryGetFaceByTrack, e.useFaceGalleryGetFaceMedia, e.useFaceGalleryListIdentities, e.useFaceGalleryListIdentitySamples, e.useFaceGalleryListRecentFaces, e.useFaceGalleryRemoveSample, e.useFaceGalleryRenameIdentity, e.useFaceGallerySuggestFaceClusters, e.useFaceGalleryUnassignFace, e.useFaceGalleryUnassignFaces, e.useFanControlGetStatus, e.useFanControlSetDirection, e.useFanControlSetOscillating, e.useFanControlSetPercentage, e.useFanControlSetPreset, e.useFeatureProbeGetStatus, e.useFloodGetStatus, e.useGasGetStatus, e.useHumidifierGetStatus, e.useHumidifierSetMode, e.useHumidifierSetOn, e.useHumidifierSetTargetHumidity, e.useHumiditySensorGetStatus, e.useImageGetStatus, e.useImageSettingsGetOptions, e.useImageSettingsGetStatus, e.useImageSettingsSetSettings, e.useIntegrationsCreate, e.useIntegrationsDelete, e.useIntegrationsGet, e.useIntegrationsGetAvailableTypes, e.useIntegrationsGetByAddonId, e.useIntegrationsGetSettings, e.useIntegrationsList, e.useIntegrationsSetSettings, e.useIntegrationsTestConnection, e.useIntegrationsUpdate, e.useIntercomEndTalkSession, e.useIntercomGetStatus, e.useIntercomHandleAnswer, e.useIntercomPushTalkAudio, e.useIntercomStartSession, e.useIntercomStartTalkSession, e.useIntercomStopSession, e.useIsMidWidth, e.useIsMobile, e.useLawnMowerControlDock, e.useLawnMowerControlGetStatus, e.useLawnMowerControlPause, e.useLawnMowerControlStartMowing, e.useLiveBuffer, e.useLiveEvent, e.useLlmCancel, e.useLlmDeleteModel, e.useLlmDeleteProfile, e.useLlmGenerate, e.useLlmGenerateVision, e.useLlmGetDefaults, e.useLlmGetRuntimeStatus, e.useLlmGetUsage, e.useLlmInstallModel, e.useLlmListModelCatalog, e.useLlmListModels, e.useLlmListNodeModels, e.useLlmListProfileKinds, e.useLlmListProfiles, e.useLlmListRuntimeNodes, e.useLlmSetDefault, e.useLlmStartRuntime, e.useLlmStopRuntime, e.useLlmTestProfile, e.useLlmUpsertProfile, e.useLocalNetworkGetAllowedAddresses, e.useLocalNetworkGetConnectionEndpoints, e.useLocalNetworkGetNotificationEndpoint, e.useLocalNetworkGetPreferred, e.useLocalNetworkList, e.useLocalNetworkResetAllowlistToBestMatch, e.useLocalNetworkSetAllowedAddresses, e.useLocalNetworkSetNotificationEndpoint, e.useLockControlGetStatus, e.useLockControlLock, e.useLockControlOpen, e.useLockControlUnlock, e.useMediaPlayerGetStatus, e.useMediaPlayerNext, e.useMediaPlayerPause, e.useMediaPlayerPlay, e.useMediaPlayerPlayMedia, e.useMediaPlayerPrevious, e.useMediaPlayerSeek, e.useMediaPlayerSelectSource, e.useMediaPlayerSetMute, e.useMediaPlayerSetRepeat, e.useMediaPlayerSetShuffle, e.useMediaPlayerSetVolume, e.useMediaPlayerStop, e.useMeshNetworkGetStatus, e.useMeshNetworkJoin, e.useMeshNetworkLeave, e.useMeshNetworkListPeers, e.useMeshNetworkLogout, e.useMeshNetworkStartLogin, e.useMeshNetworkTestConnection, e.useMetricsProviderCollectSnapshot, e.useMetricsProviderDumpHeapSnapshot, e.useMetricsProviderGetAddonStats, e.useMetricsProviderGetCached, e.useMetricsProviderGetCpuTemperature, e.useMetricsProviderGetCurrent, e.useMetricsProviderGetDiskSpace, e.useMetricsProviderGetGpuInfo, e.useMetricsProviderGetProcessStats, e.useMetricsProviderKillProcess, e.useMetricsProviderListAddonInstances, e.useMetricsProviderListNodeProcesses, e.useMotionDetectionAnalyze, e.useMotionDetectionApplyDeviceSettingsPatch, e.useMotionDetectionGetDeviceLiveContribution, e.useMotionDetectionGetDeviceSettingsContribution, e.useMotionDetectionRemoveCamera, e.useMotionDetectionReset, e.useMotionGetStatus, e.useMotionIsDetected, e.useMotionTriggerGetStatus, e.useMotionTriggerSetMotionTrigger, e.useMotionZonesGetOptions, e.useMotionZonesGetStatus, e.useMotionZonesSetZone, e.useMqttBrokerAddBroker, e.useMqttBrokerGetBrokerConfig, e.useMqttBrokerGetStatus, e.useMqttBrokerListBrokers, e.useMqttBrokerRemoveBroker, e.useMqttBrokerStartEmbeddedBroker, e.useMqttBrokerStopEmbeddedBroker, e.useMqttBrokerTestConnection, e.useNativeObjectDetectionGetStatus, e.useNativeObjectDetectionSetEnabled, e.useNetworkAccessGetEndpoint, e.useNetworkAccessGetStatus, e.useNetworkAccessListEndpoints, e.useNetworkAccessStart, e.useNetworkAccessStop, e.useNetworkQualityGetAllStats, e.useNetworkQualityGetDeviceStats, e.useNetworkQualityReportClientStats, e.useNodesClusterAddonStatus, e.useNodesDeployAddon, e.useNodesExecuteQuery, e.useNodesGetCapUsageGraph, e.useNodesGetNodeAddons, e.useNodesRenameNode, e.useNodesRestartAddon, e.useNodesRestartNode, e.useNodesRestartProcess, e.useNodesSetProcessLogLevel, e.useNodesShutdownNode, e.useNodesTopology, e.useNodesUndeployAddon, e.useNotificationOutputDeleteTarget, e.useNotificationOutputDiscoverTargets, e.useNotificationOutputListTargetKinds, e.useNotificationOutputListTargets, e.useNotificationOutputSend, e.useNotificationOutputSetTargetEnabled, e.useNotificationOutputTestTarget, e.useNotificationOutputUpsertTarget, e.useNotificationRulesCancelSnooze, e.useNotificationRulesCreateRule, e.useNotificationRulesCreateSnooze, e.useNotificationRulesDeleteRule, e.useNotificationRulesGetAlarmConfig, e.useNotificationRulesGetConditionCatalog, e.useNotificationRulesGetHistory, e.useNotificationRulesGetRule, e.useNotificationRulesListDeviceMutes, e.useNotificationRulesListRules, e.useNotificationRulesListSnoozes, e.useNotificationRulesSetAlarmConfig, e.useNotificationRulesSetDeviceMuted, e.useNotificationRulesSetRuleEnabled, e.useNotificationRulesTestRule, e.useNotificationRulesUpdateRule, e.useNotifierCancel, e.useNotifierGetStatus, e.useNotifierSend, e.useNumericSensorGetStatus, e.useOptimisticSlice, e.useOptionalSystem, e.useOptionalWidgetRegistry, e.useOsdGetStatus, e.useOsdManagerClearSlotBinding, e.useOsdManagerCopyDeviceConfiguration, e.useOsdManagerGetConditionSupport, e.useOsdManagerGetDeviceOsd, e.useOsdManagerGetSourceCatalog, e.useOsdManagerPreviewSlot, e.useOsdManagerRenderDevice, e.useOsdManagerSetSlotBinding, e.useOsdSetOverlay, e.usePTZ, e.usePetFeederCallPet, e.usePetFeederCancelFeed, e.usePetFeederFeed, e.usePetFeederGetStatus, e.usePetFeederMarkFoodReplenished, e.usePetFeederPlaySound, e.usePetFeederResetDesiccant, e.usePetFeederSetChildLock, e.usePetFeederSetFeedSound, e.usePetFeederSetIndicatorLight, e.usePetFeederSetVolume, e.usePipelineAnalyticsApplyDeviceSettingsPatch, e.usePipelineAnalyticsCancelStorageMigrationMove, e.usePipelineAnalyticsClearTracks, e.usePipelineAnalyticsCompleteRetrainTrack, e.usePipelineAnalyticsDeleteDeviceEvents, e.usePipelineAnalyticsDeleteTracks, e.usePipelineAnalyticsDeselectRetrainFrame, e.usePipelineAnalyticsGetActiveTracks, e.usePipelineAnalyticsGetAudioEvents, e.usePipelineAnalyticsGetDeviceLiveContribution, e.usePipelineAnalyticsGetDeviceSettingsContribution, e.usePipelineAnalyticsGetEventDensity, e.usePipelineAnalyticsGetEventMedia, e.usePipelineAnalyticsGetEventStoreFootprint, e.usePipelineAnalyticsGetKeyEvents, e.usePipelineAnalyticsGetMotionEvents, e.usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, e.usePipelineAnalyticsGetObjectEvents, e.usePipelineAnalyticsGetRetrainExportUrl, e.usePipelineAnalyticsGetRetrainFrameImage, e.usePipelineAnalyticsGetSensorEvents, e.usePipelineAnalyticsGetStorageMigrationMoveStatus, e.usePipelineAnalyticsGetTrack, e.usePipelineAnalyticsGetTrackMedia, e.usePipelineAnalyticsGetTrainingExportSummary, e.usePipelineAnalyticsGetTrainingExportUrl, e.usePipelineAnalyticsListEventKinds, e.usePipelineAnalyticsListEventKindsBatch, e.usePipelineAnalyticsListOpsLog, e.usePipelineAnalyticsListRecentTracks, e.usePipelineAnalyticsListRetrainAnnotations, e.usePipelineAnalyticsListRetrainFrames, e.usePipelineAnalyticsListRetrainStaging, e.usePipelineAnalyticsListTrackMedia, e.usePipelineAnalyticsListTracks, e.usePipelineAnalyticsPauseForStorageMigration, e.usePipelineAnalyticsProposeRetrainAnnotations, e.usePipelineAnalyticsPruneEvents, e.usePipelineAnalyticsPruneEventsBefore, e.usePipelineAnalyticsPruneTracksBefore, e.usePipelineAnalyticsRebuildObjectEmbeddings, e.usePipelineAnalyticsRefreshStorageLocationsForMigration, e.usePipelineAnalyticsRestageRetrainTrack, e.usePipelineAnalyticsResumeForStorageMigration, e.usePipelineAnalyticsSaveRetrainAnnotations, e.usePipelineAnalyticsSearchObjectEvents, e.usePipelineAnalyticsSelectRetrainFrames, e.usePipelineAnalyticsSetTrackFlags, e.usePipelineAnalyticsStartStorageMigrationMove, e.usePipelineAnalyticsWipeAllAnalytics, e.usePipelineAnalyticsWipeObjectEmbeddings, e.usePipelineExecutorCacheFrameInPool, e.usePipelineExecutorClearDeviceOverrides, e.usePipelineExecutorDeleteModel, e.usePipelineExecutorDeleteTemplate, e.usePipelineExecutorDownloadModel, e.usePipelineExecutorGetAddonModels, e.usePipelineExecutorGetAudioCapabilities, e.usePipelineExecutorGetAvailableEngines, e.usePipelineExecutorGetCapabilities, e.usePipelineExecutorGetDefaultSteps, e.usePipelineExecutorGetDetectionConfigSchema, e.usePipelineExecutorGetEffectiveTuning, e.usePipelineExecutorGetEngineProvisioning, e.usePipelineExecutorGetGlobalPipelineConfig, e.usePipelineExecutorGetGlobalSteps, e.usePipelineExecutorGetOrchestratorConfigSchema, e.usePipelineExecutorGetReferenceAudio, e.usePipelineExecutorGetReferenceAudioFiles, e.usePipelineExecutorGetReferenceImage, e.usePipelineExecutorGetSchema, e.usePipelineExecutorGetSelectedEngine, e.usePipelineExecutorGetVideoPipelineSteps, e.usePipelineExecutorInferCached, e.usePipelineExecutorKillEngine, e.usePipelineExecutorListLoadedEngines, e.usePipelineExecutorListReferenceImages, e.usePipelineExecutorListTemplates, e.usePipelineExecutorRunAudioTest, e.usePipelineExecutorRunPipeline, e.usePipelineExecutorRunPipelineBatch, e.usePipelineExecutorSaveTemplate, e.usePipelineExecutorSetVideoPipelineSteps, e.usePipelineExecutorSpinEngine, e.usePipelineExecutorUncacheFrame, e.usePipelineExecutorUpdateTemplate, e.usePipelineExecutorValidatePipeline, e.usePipelineOrchestratorApplyDeviceSettingsPatch, e.usePipelineOrchestratorAssignAudio, e.usePipelineOrchestratorAssignPipeline, e.usePipelineOrchestratorDeleteTemplate, e.usePipelineOrchestratorGetAgentLoad, e.usePipelineOrchestratorGetAgentSettings, e.usePipelineOrchestratorGetAudioAssignment, e.usePipelineOrchestratorGetAudioAssignments, e.usePipelineOrchestratorGetAudioNodeLoad, e.usePipelineOrchestratorGetCameraMetrics, e.usePipelineOrchestratorGetCameraSettings, l = e.usePipelineOrchestratorGetCameraStatus, e.usePipelineOrchestratorGetCameraStatuses, e.usePipelineOrchestratorGetCameraStepOverrides, e.usePipelineOrchestratorGetCameraSwitches, e.usePipelineOrchestratorGetCapabilityBindings, e.usePipelineOrchestratorGetDeviceLiveContribution, e.usePipelineOrchestratorGetDeviceSettingsContribution, e.usePipelineOrchestratorGetGlobalMetrics, e.usePipelineOrchestratorGetIngestOwner, e.usePipelineOrchestratorGetNodeInferenceDevices, e.usePipelineOrchestratorGetPipelineAssignment, e.usePipelineOrchestratorGetPipelineAssignments, e.usePipelineOrchestratorGetPipelineDevicePin, e.usePipelineOrchestratorListAgentSettings, e.usePipelineOrchestratorListTemplates, e.usePipelineOrchestratorPauseForStorageMigration, e.usePipelineOrchestratorRebalance, e.usePipelineOrchestratorRemoveAgentSettings, e.usePipelineOrchestratorResetNodePipelineDefaults, e.usePipelineOrchestratorResolvePipeline, e.usePipelineOrchestratorResumeForStorageMigration, e.usePipelineOrchestratorSaveTemplate, e.usePipelineOrchestratorSetAgentCapabilities, e.usePipelineOrchestratorSetAgentDetectWeight, e.usePipelineOrchestratorSetAgentInferenceDevices, e.usePipelineOrchestratorSetAgentMaxCameras, e.usePipelineOrchestratorSetAgentReachableHost, e.usePipelineOrchestratorSetCameraPipelineForAgent, e.usePipelineOrchestratorSetCameraStepOverride, e.usePipelineOrchestratorSetCameraStepToggle, e.usePipelineOrchestratorSetCameraSwitch, e.usePipelineOrchestratorSetCapabilityBinding, e.usePipelineOrchestratorSetPipelineDevicePin, e.usePipelineOrchestratorUnassignAudio, e.usePipelineOrchestratorUnassignPipeline, e.usePipelineOrchestratorUpdateTemplate, e.usePipelineRunnerAttachCamera, e.usePipelineRunnerDetachCamera, e.usePipelineRunnerGetAllCameraMetrics, e.usePipelineRunnerGetCameraMetrics, e.usePipelineRunnerGetLocalCameras, e.usePipelineRunnerGetLocalLoad, e.usePipelineRunnerGetLocalMetrics, e.usePipelineRunnerGetNativeCrop, e.usePipelineRunnerReportMotion, e.usePipelineRunnerRunDetailSubtree, e.usePipelineRunnerRunStatelessStep, e.usePlateGalleryAssignPlate, e.usePlateGalleryAssignPlates, e.usePlateGalleryCorrectPlateText, e.usePlateGalleryCreateVehicle, e.usePlateGalleryDeletePlate, e.usePlateGalleryDeleteVehicle, e.usePlateGalleryGetPlateByTrack, e.usePlateGalleryGetPlateMedia, e.usePlateGalleryListPlates, e.usePlateGalleryListVehicleSamples, e.usePlateGalleryListVehicles, e.usePlateGalleryRemoveVehicleSample, e.usePlateGalleryRenameVehicle, e.usePlateGallerySearchPlates, e.usePlateGallerySuggestPlateClusters, e.usePlateGalleryUnassignPlate, e.usePlateGalleryUnassignPlates, e.usePlayerOverlayLayer, e.usePlayerOverlayLayers, e.usePlayerToolbarButton, e.usePlayerToolbarButtons, e.usePowerMeterGetStatus, e.usePresenceGetStatus, e.usePressureSensorGetStatus, e.usePrivacyMaskGetOptions, e.usePrivacyMaskGetStatus, e.usePrivacyMaskSetAudioEnabled, e.usePrivacyMaskSetMask, e.usePtzAutotrackGetSettings, e.usePtzAutotrackGetStatus, e.usePtzAutotrackSetEnabled, e.usePtzAutotrackSetSettings, e.usePtzContinuousMove, e.usePtzDeletePreset, e.usePtzGetOptions, e.usePtzGetPosition, e.usePtzGetPresets, e.usePtzGetStatus, e.usePtzGoHome, e.usePtzGoToPreset, e.usePtzMove, e.usePtzSavePreset, e.usePtzSetAutofocus, e.usePtzStop, e.useRebootReboot, e.useRecordedPlayback, e.useRecordingApplyDeviceSettingsPatch, e.useRecordingCancelRelocateJob, e.useRecordingCancelStorageMigrationMove, e.useRecordingDeleteFootprint, e.useRecordingExportCancelExport, e.useRecordingExportCreateExport, e.useRecordingExportDeleteExport, e.useRecordingExportGetDownloadUrl, e.useRecordingExportGetExport, e.useRecordingExportListExports, e.useRecordingExportReadExportBytes, e.useRecordingGetAvailability, e.useRecordingGetDaysWithRecordings, e.useRecordingGetDeviceConfig, e.useRecordingGetDeviceLiveContribution, e.useRecordingGetDeviceSettingsContribution, e.useRecordingGetPlaybackManifest, e.useRecordingGetStatus, e.useRecordingGetStorageMigrationMoveStatus, e.useRecordingGetStorageUsage, e.useRecordingListOpsLog, e.useRecordingListRelocateJobs, e.useRecordingLocateSegment, e.useRecordingPauseForStorageMigration, e.useRecordingPlanStorageRebalance, e.useRecordingPruneFootage, e.useRecordingReadGopBytes, e.useRecordingReadSegmentBytes, e.useRecordingRefreshStorageLocationsForMigration, e.useRecordingRelocateFootage, e.useRecordingRenderClip, e.useRecordingRenderGif, e.useRecordingRescanStorage, e.useRecordingResumeForStorageMigration, e.useRecordingSetDeviceConfig, e.useRecordingStartStorageMigrationMove, e.useRecordingStartStorageRebalance, e.useRemoteComponent, e.useSceneMonitorCaptureReference, e.useSceneMonitorCreateScene, e.useSceneMonitorDeleteReference, e.useSceneMonitorDeleteScene, e.useSceneMonitorGetStatus, e.useSceneMonitorListScenes, e.useSceneMonitorRecheckNow, e.useSceneMonitorResetScene, e.useSceneMonitorUpdateScene, e.useScriptRunnerGetStatus, e.useScriptRunnerRun, e.useScriptRunnerStop, e.useScrubController, e.useServerManagementApplyServerUpdate, e.useServerManagementCheckServerUpdate, e.useServerManagementGetServerPackageStatus, e.useServerManagementRestartServer, e.useServerManagementRollbackServerUpdate, e.useSettingsStoreCount, e.useSettingsStoreDeclareCollection, e.useSettingsStoreDelete, e.useSettingsStoreDeleteWhere, e.useSettingsStoreGet, e.useSettingsStoreHistogram, e.useSettingsStoreInsert, e.useSettingsStoreIsEmpty, e.useSettingsStoreQuery, e.useSettingsStoreSet, e.useSettingsStoreUpdate, e.useSettingsStoreUpdateWhere, e.useSmokeGetStatus, e.useSnapshotApplyDeviceSettingsPatch, e.useSnapshotGetDeviceLiveContribution, e.useSnapshotGetDeviceSettingsContribution, e.useSnapshotGetSnapshot, e.useSnapshotGetSnapshotLinks, e.useSnapshotGetSnapshotOverview, e.useSnapshotGetStatus, e.useSnapshotInvalidateCache, e.useStorageAbortUpload, e.useStorageBeginDownload, e.useStorageBeginUpload, e.useStorageDelete, e.useStorageDeleteLocation, e.useStorageEndDownload, e.useStorageExists, e.useStorageFinalizeUpload, e.useStorageGetAvailableSpace, e.useStorageGetDefaultLocation, e.useStorageList, e.useStorageListLocationDeclarations, e.useStorageListLocations, e.useStorageListProviders, e.useStorageMigrationCancel, e.useStorageMigrationPlan, e.useStorageMigrationStart, e.useStorageMigrationStatus, e.useStorageRead, e.useStorageReadChunk, e.useStorageResolve, e.useStorageTestConfig, e.useStorageTestLocation, e.useStorageUpsertLocation, e.useStorageWrite, e.useStorageWriteChunk, e.useStreamBrokerAcquireEgressTranscode, u = e.useStreamBrokerApplyDeviceSettingsPatch, e.useStreamBrokerAssignProfile, e.useStreamBrokerFetchEventMedia, e.useStreamBrokerGetAllRtspEntries, e.useStreamBrokerGetBrokerStats, d = e.useStreamBrokerGetDeviceAudioMute, e.useStreamBrokerGetDeviceLiveContribution, f = e.useStreamBrokerGetDeviceSettingsContribution, e.useStreamBrokerGetPreBufferInfo, e.useStreamBrokerGetRtspEntry, e.useStreamBrokerGetRtspPort, e.useStreamBrokerGetStreamUrl, e.useStreamBrokerGetStreamWithCodec, e.useStreamBrokerIsRtspEnabled, p = e.useStreamBrokerKillClient, e.useStreamBrokerListAllCameraStreams, m = e.useStreamBrokerListAllProfileSlots, h = e.useStreamBrokerListClients, e.useStreamBrokerProbeStream, e.useStreamBrokerProduceEventMedia, e.useStreamBrokerPublishCameraStream, e.useStreamBrokerPullAudioChunks, e.useStreamBrokerPullFrameHandles, e.useStreamBrokerRegenerateRtspToken, e.useStreamBrokerReleaseEgressTranscode, e.useStreamBrokerReleaseStreamWithCodec, e.useStreamBrokerRenderPreBufferClip, e.useStreamBrokerRestartProfile, e.useStreamBrokerRetractCameraStream, g = e.useStreamBrokerSetDeviceAudioMute, e.useStreamBrokerSetPreBufferDuration, e.useStreamBrokerSetRtspEnabled, e.useStreamBrokerSubscribeAudioChunks, e.useStreamBrokerSubscribeFrames, e.useStreamBrokerUnassignProfile, e.useStreamBrokerUnsubscribeAudioChunks, e.useStreamBrokerUnsubscribeFrames, e.useStreamCatalogGetCatalog, e.useStreamParamsGetConfigSchema, e.useStreamParamsGetOptions, e.useStreamParamsGetStatus, e.useStreamParamsSetProfile, e.useSwitchGetStatus, e.useSwitchSetState, _ = e.useSystem, e.useSystem$1, e.useSystemDetectSiteLocation, e.useSystemFeatureFlags, e.useSystemForceRetentionCleanup, e.useSystemGetRetentionConfig, e.useSystemGetSiteLocation, e.useSystemHealth, e.useSystemInfo, e.useSystemMutation, e.useSystemNetworkAddresses, e.useSystemQuery, e.useSystemSetRetentionConfig, e.useSystemSetSiteLocation, e.useTamperGetStatus, e.useTemperatureSensorGetStatus, e.useTerminalSessionAdoptLegacyMonitor, e.useTerminalSessionClose, e.useTerminalSessionCreateInstance, e.useTerminalSessionDeleteInstance, e.useTerminalSessionListInstances, e.useTerminalSessionListLegacyCameras, e.useTerminalSessionListProfiles, e.useTerminalSessionListSessions, e.useTerminalSessionOpenSession, e.useTerminalSessionPullOutput, e.useTerminalSessionResize, e.useTerminalSessionSetInstanceEnabled, e.useTerminalSessionWriteInput, e.useThemeMode, e.useToastOnToast, e.useTurnProviderGetTurnServers, e.useUpdateGetStatus, e.useUpdateInstallUpdate, e.useUserManagementConfirmTotp, e.useUserManagementCreateApiKey, e.useUserManagementCreateScopedToken, e.useUserManagementCreateUser, e.useUserManagementDeleteUser, e.useUserManagementDisableTotp, e.useUserManagementGetTotpStatus, e.useUserManagementListApiKeys, e.useUserManagementListOauthSessions, e.useUserManagementListScopedTokens, e.useUserManagementListUsers, e.useUserManagementOauthExchangeCode, e.useUserManagementOauthIssueCode, e.useUserManagementOauthRefresh, e.useUserManagementOauthVerifyAccessToken, e.useUserManagementResetPassword, e.useUserManagementRevokeApiKey, e.useUserManagementRevokeOauthSession, e.useUserManagementRevokeScopedToken, e.useUserManagementSetUserScopes, e.useUserManagementSetupTotp, e.useUserManagementUpdateUser, e.useUserManagementValidateApiKey, e.useUserManagementValidateCredentials, e.useUserManagementValidateScopedToken, e.useUserManagementVerifyTotp, e.useVacuumControlGetStatus, e.useVacuumControlLocate, e.useVacuumControlPause, e.useVacuumControlReturnToBase, e.useVacuumControlSetFanSpeed, e.useVacuumControlStart, e.useVacuumControlStop, e.useValveClose, e.useValveGetStatus, e.useValveOpen, e.useValveSetPosition, e.useValveStop, e.useVibrationGetStatus, e.useVideoclipsGetClipPlayback, e.useVideoclipsListClips, e.useVodPlayback, e.useWaterHeaterGetStatus, e.useWaterHeaterSetAway, e.useWaterHeaterSetOperationMode, e.useWaterHeaterSetTargetTemp, e.useWeatherGetStatus, e.useWebrtcSessionAddIceCandidate, e.useWebrtcSessionCloseSession, e.useWebrtcSessionCreateSession, e.useWebrtcSessionGetIceCandidates, e.useWebrtcSessionGetSessionState, e.useWebrtcSessionHandleAnswer, e.useWebrtcSessionHandleOffer, e.useWebrtcSessionHasAdaptiveBitrate, e.useWebrtcSessionListStreams, e.useWidget, e.useWidgetMetadata, e.useWidgetRegistry, e.useZoneAnalyticsGetCameraHistory, e.useZoneAnalyticsGetCurrentSnapshot, e.useZoneAnalyticsGetUnzonedHistory, e.useZoneAnalyticsGetZoneHistory, e.useZoneEditing, e.useZoneRulesListRules, e.useZoneRulesSetRules, e.useZonesAddZone, e.useZonesListZones, e.useZonesRemoveZone, e.useZonesUpdateZone, e.vacuumStateMeta, e.validateScopes, e.valveStateMeta, e.variantLabel, e.variantLabel$1, e.waterHeaterPhase, e.waterHeaterTint, e.weatherConditionMeta, e.weatherTint, e.default;
|
|
20
|
+
}, y = i.share["default:@camstack/ui-library"];
|
|
21
|
+
y === void 0 ? n.then(() => {
|
|
22
|
+
if (y = i.share["default:@camstack/ui-library"], y === void 0) throw Error("[Module Federation] Shared module @camstack/ui-library was imported before federation bootstrap finished.");
|
|
23
|
+
v(y);
|
|
24
|
+
}) : v(y);
|
|
25
|
+
//#endregion
|
|
26
|
+
export { p as a, g as c, o as d, s as f, f as i, _ as l, u as n, m as o, c as p, d as r, h as s, l as t, a as u };
|
|
@@ -36,7 +36,7 @@ async function r() {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"@camstack/types": {
|
|
39
|
-
version: "1.2.
|
|
39
|
+
version: "1.2.75",
|
|
40
40
|
scope: "default",
|
|
41
41
|
shareConfig: {
|
|
42
42
|
singleton: !0,
|
|
@@ -81,7 +81,7 @@ async function r() {
|
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"@camstack/ui-library": {
|
|
84
|
-
version: "1.2.
|
|
84
|
+
version: "1.2.52",
|
|
85
85
|
scope: "default",
|
|
86
86
|
shareConfig: {
|
|
87
87
|
singleton: !0,
|
|
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
|
|
|
2
2
|
__esModule: { value: true },
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
|
-
const require_dist = require("../dist-
|
|
5
|
+
const require_dist = require("../dist-BUIpqu3E.js");
|
|
6
6
|
const require_remote_restream = require("../remote-restream-BYbAsgUf.js");
|
|
7
7
|
let node_crypto = require("node:crypto");
|
|
8
8
|
node_crypto = require_dist.__toESM(node_crypto, 1);
|
|
@@ -22539,7 +22539,8 @@ var MonotonicClock = class {
|
|
|
22539
22539
|
this.rate = rate;
|
|
22540
22540
|
}
|
|
22541
22541
|
};
|
|
22542
|
-
var SCRUB_FRAGMENT_CACHE_MAX_BYTES =
|
|
22542
|
+
var SCRUB_FRAGMENT_CACHE_MAX_BYTES = 24 * 1024 * 1024;
|
|
22543
|
+
var SCRUB_FRAGMENT_CACHE_OTHER_MAX_BYTES = 2 * 1024 * 1024;
|
|
22543
22544
|
/** Demuxed bytes an entry holds — what the byte bound actually counts. */
|
|
22544
22545
|
function fragmentBytes(frag) {
|
|
22545
22546
|
let total = 0;
|
|
@@ -22548,10 +22549,21 @@ function fragmentBytes(frag) {
|
|
|
22548
22549
|
}
|
|
22549
22550
|
var ScrubFragmentCache = class {
|
|
22550
22551
|
maxBytes;
|
|
22552
|
+
otherMaxBytes;
|
|
22551
22553
|
map = /* @__PURE__ */ new Map();
|
|
22552
|
-
|
|
22553
|
-
|
|
22554
|
+
/**
|
|
22555
|
+
* Bytes held PER PROFILE. Budgets are per profile and so is eviction: a
|
|
22556
|
+
* `high` entry must never be able to evict the `low` segments the drag is
|
|
22557
|
+
* running on, and the reverse would be just as wrong.
|
|
22558
|
+
*/
|
|
22559
|
+
bytesByProfile = /* @__PURE__ */ new Map();
|
|
22560
|
+
constructor(maxBytes = SCRUB_FRAGMENT_CACHE_MAX_BYTES, otherMaxBytes = SCRUB_FRAGMENT_CACHE_OTHER_MAX_BYTES) {
|
|
22554
22561
|
this.maxBytes = maxBytes;
|
|
22562
|
+
this.otherMaxBytes = otherMaxBytes;
|
|
22563
|
+
}
|
|
22564
|
+
/** The byte budget for a profile — the scrub profile gets the real one. */
|
|
22565
|
+
budgetFor(profile) {
|
|
22566
|
+
return profile === "low" ? this.maxBytes : this.otherMaxBytes;
|
|
22555
22567
|
}
|
|
22556
22568
|
key(profile, startMs) {
|
|
22557
22569
|
return `${profile}|${startMs}`;
|
|
@@ -22582,25 +22594,44 @@ var ScrubFragmentCache = class {
|
|
|
22582
22594
|
}
|
|
22583
22595
|
return null;
|
|
22584
22596
|
}
|
|
22585
|
-
/** Insert (or refresh) a fragment, evicting
|
|
22597
|
+
/** Insert (or refresh) a fragment, evicting that PROFILE's oldest past its bound. */
|
|
22586
22598
|
put(profile, frag) {
|
|
22587
22599
|
const k = this.key(profile, frag.startMs);
|
|
22588
22600
|
const held = this.map.get(k);
|
|
22589
|
-
|
|
22601
|
+
let bytes = this.bytesByProfile.get(profile) ?? 0;
|
|
22602
|
+
if (held) bytes -= fragmentBytes(held);
|
|
22590
22603
|
this.map.delete(k);
|
|
22591
22604
|
this.map.set(k, frag);
|
|
22592
|
-
|
|
22593
|
-
|
|
22594
|
-
|
|
22605
|
+
bytes += fragmentBytes(frag);
|
|
22606
|
+
this.bytesByProfile.set(profile, bytes);
|
|
22607
|
+
const budget = this.budgetFor(profile);
|
|
22608
|
+
const prefix = `${profile}|`;
|
|
22609
|
+
while ((this.bytesByProfile.get(profile) ?? 0) > budget && this.entriesFor(profile) > 4) {
|
|
22610
|
+
const oldest = this.oldestKeyWithPrefix(prefix);
|
|
22595
22611
|
if (oldest === void 0) break;
|
|
22596
22612
|
const evicted = this.map.get(oldest);
|
|
22597
22613
|
this.map.delete(oldest);
|
|
22598
|
-
if (evicted) this.
|
|
22614
|
+
if (evicted) this.bytesByProfile.set(profile, (this.bytesByProfile.get(profile) ?? 0) - fragmentBytes(evicted));
|
|
22599
22615
|
}
|
|
22600
22616
|
}
|
|
22601
|
-
|
|
22617
|
+
oldestKeyWithPrefix(prefix) {
|
|
22618
|
+
for (const k of this.map.keys()) if (k.startsWith(prefix)) return k;
|
|
22619
|
+
}
|
|
22620
|
+
entriesFor(profile) {
|
|
22621
|
+
const prefix = `${profile}|`;
|
|
22622
|
+
let n = 0;
|
|
22623
|
+
for (const k of this.map.keys()) if (k.startsWith(prefix)) n += 1;
|
|
22624
|
+
return n;
|
|
22625
|
+
}
|
|
22626
|
+
/** Demuxed bytes currently held across every profile. */
|
|
22602
22627
|
get byteSize() {
|
|
22603
|
-
|
|
22628
|
+
let total = 0;
|
|
22629
|
+
for (const bytes of this.bytesByProfile.values()) total += bytes;
|
|
22630
|
+
return total;
|
|
22631
|
+
}
|
|
22632
|
+
/** Demuxed bytes held for one profile — the number its MB bound governs. */
|
|
22633
|
+
byteSizeFor(profile) {
|
|
22634
|
+
return this.bytesByProfile.get(profile) ?? 0;
|
|
22604
22635
|
}
|
|
22605
22636
|
get size() {
|
|
22606
22637
|
return this.map.size;
|
|
@@ -22670,6 +22701,7 @@ var ScrubDragStats = class {
|
|
|
22670
22701
|
prefetchReads = 0;
|
|
22671
22702
|
prefetchBytes = 0;
|
|
22672
22703
|
prefetchHits = 0;
|
|
22704
|
+
prefetchSuppressed = 0;
|
|
22673
22705
|
ackTimeouts = 0;
|
|
22674
22706
|
failures = 0;
|
|
22675
22707
|
firstPushMs = null;
|
|
@@ -22722,6 +22754,10 @@ var ScrubDragStats = class {
|
|
|
22722
22754
|
this.prefetchReads += 1;
|
|
22723
22755
|
this.prefetchBytes += bytes;
|
|
22724
22756
|
}
|
|
22757
|
+
/** Speculation declined: the disk is already the constraint. */
|
|
22758
|
+
recordPrefetchSuppressed() {
|
|
22759
|
+
this.prefetchSuppressed += 1;
|
|
22760
|
+
}
|
|
22725
22761
|
/** A tick served by a fragment speculation had already landed. */
|
|
22726
22762
|
recordPrefetchHit() {
|
|
22727
22763
|
this.prefetchHits += 1;
|
|
@@ -22782,6 +22818,7 @@ var ScrubDragStats = class {
|
|
|
22782
22818
|
prefetchReads: this.prefetchReads,
|
|
22783
22819
|
prefetchBytes: this.prefetchBytes,
|
|
22784
22820
|
prefetchHits: this.prefetchHits,
|
|
22821
|
+
prefetchSuppressed: this.prefetchSuppressed,
|
|
22785
22822
|
ackTimeouts: this.ackTimeouts,
|
|
22786
22823
|
failures: this.failures,
|
|
22787
22824
|
creditEndedAt: this.creditEndedAt,
|
|
@@ -22895,6 +22932,55 @@ var SCRUB_PREFETCH_DIR_THRESHOLD = 2;
|
|
|
22895
22932
|
*/
|
|
22896
22933
|
var SCRUB_PREFETCH_MAX_INFLIGHT = 2;
|
|
22897
22934
|
/**
|
|
22935
|
+
* The profile whose scrub read unit is the WHOLE SEGMENT.
|
|
22936
|
+
*
|
|
22937
|
+
* Every drag is pinned to `low` by the client, and a `low` segment is ~230 KB
|
|
22938
|
+
* for 10 s of timeline. Reading it whole is ONE sequential read; the GOP
|
|
22939
|
+
* byte-range it replaces was three random seeks (a 2 KB tail probe for the
|
|
22940
|
+
* `mfra` index, the `ftyp`+`moov` head, then the fragment) for ~135 KB of those
|
|
22941
|
+
* ~230 KB — and it bought nothing reusable, because the next tick inside the
|
|
22942
|
+
* same segment paid all three again. On a spindle that is also absorbing every
|
|
22943
|
+
* camera's writes, seeks are the cost and bytes are nearly free.
|
|
22944
|
+
*
|
|
22945
|
+
* The win is not the single read, it is what the read leaves behind: ten
|
|
22946
|
+
* seconds of demuxed access units. A drag inside one segment then costs zero
|
|
22947
|
+
* I/O and zero demux — which is the regime the operator spends most of a
|
|
22948
|
+
* careful gesture in.
|
|
22949
|
+
*/
|
|
22950
|
+
var SCRUB_WHOLE_SEGMENT_PROFILE = "low";
|
|
22951
|
+
/**
|
|
22952
|
+
* Safety ceiling on the whole-segment read. `low` is ~230 KB per 10 s, so this
|
|
22953
|
+
* is ~6× headroom for a camera whose substream is unusually fat — but a
|
|
22954
|
+
* segment past it (a mis-pinned `high` at ~5 MB) falls back to the GOP range,
|
|
22955
|
+
* because reading 5 MB to push one keyframe is the trade this change exists to
|
|
22956
|
+
* avoid, in the other direction.
|
|
22957
|
+
*/
|
|
22958
|
+
var SCRUB_WHOLE_SEGMENT_MAX_BYTES = 15e5;
|
|
22959
|
+
/**
|
|
22960
|
+
* How far the entry warm-up reaches, backward and forward from the playhead the
|
|
22961
|
+
* drag starts on.
|
|
22962
|
+
*
|
|
22963
|
+
* Asymmetric because the gesture is: a drag that begins at the live edge — or
|
|
22964
|
+
* at a notification's moment — is looking for what ALREADY happened. 90 s back
|
|
22965
|
+
* against 30 s forward is 12 segments ≈ 2.8 MB at `low`, read sequentially in
|
|
22966
|
+
* the background while the operator is still deciding where to drag.
|
|
22967
|
+
*/
|
|
22968
|
+
var SCRUB_WARM_BACK_MS = 9e4;
|
|
22969
|
+
var SCRUB_WARM_FWD_MS = 3e4;
|
|
22970
|
+
/** Hard bound on warm reads, whatever the spans above resolve to. */
|
|
22971
|
+
var SCRUB_WARM_MAX_SEGMENTS = 14;
|
|
22972
|
+
/**
|
|
22973
|
+
* Median recent read time at or above which the feeder STOPS speculating.
|
|
22974
|
+
*
|
|
22975
|
+
* Speculation is a bet that spare I/O exists. When reads are this slow there is
|
|
22976
|
+
* no spare I/O — the array is saturated — and a prefetch is not free work, it
|
|
22977
|
+
* is another random seek queued ahead of the read the operator is waiting on.
|
|
22978
|
+
* The field regime that forced this: 54 prefetch reads for 9 hits with the disk
|
|
22979
|
+
* at 98% busy. Suppression is counted (`prefetchSuppressed`) so the decision is
|
|
22980
|
+
* visible, and it lifts by itself as soon as reads come back.
|
|
22981
|
+
*/
|
|
22982
|
+
var SCRUB_SLOW_READ_MS = 600;
|
|
22983
|
+
/**
|
|
22898
22984
|
* Max forward TARGET delta (ms of timeline, between consecutive drag targets)
|
|
22899
22985
|
* that SWEEPS predicted frames instead of jumping. A steady forward drag is
|
|
22900
22986
|
* playback with a moving target: once a keyframe decoded, the predicted frames
|
|
@@ -23132,6 +23218,10 @@ var RecordedFeeder = class {
|
|
|
23132
23218
|
* that is the bottleneck and the census would look calm.
|
|
23133
23219
|
*/
|
|
23134
23220
|
scrubPrefetched = /* @__PURE__ */ new Set();
|
|
23221
|
+
/** Recent read durations — the evidence speculation is suspended on. */
|
|
23222
|
+
scrubReadMsWindow = [];
|
|
23223
|
+
/** Warm-up runs once per drag, from the playhead the finger went down on. */
|
|
23224
|
+
scrubWarmStarted = false;
|
|
23135
23225
|
constructor(deps) {
|
|
23136
23226
|
this.deps = deps;
|
|
23137
23227
|
this.audioClock = new MonotonicClock(deps.audioClockRateHz ?? 8e3);
|
|
@@ -23439,6 +23529,88 @@ var RecordedFeeder = class {
|
|
|
23439
23529
|
this.scrubTimer = null;
|
|
23440
23530
|
}
|
|
23441
23531
|
this.stopPositionReports();
|
|
23532
|
+
this.scrubWarmStarted = false;
|
|
23533
|
+
this.scrubReadMsWindow = [];
|
|
23534
|
+
if (this.cursorMs > 0 && this.deps.profile === SCRUB_WHOLE_SEGMENT_PROFILE) this.startScrubWarm(this.cursorMs, this.scrubToken);
|
|
23535
|
+
}
|
|
23536
|
+
/**
|
|
23537
|
+
* Warm the window the drag is about to move through: {@link SCRUB_WARM_BACK_MS}
|
|
23538
|
+
* back and {@link SCRUB_WARM_FWD_MS} forward from the entry playhead, one
|
|
23539
|
+
* segment at a time, backward first.
|
|
23540
|
+
*
|
|
23541
|
+
* Once per drag, always in the background, and never on the tick's path — a
|
|
23542
|
+
* tick that arrives against a cold cache pays its own read exactly as before.
|
|
23543
|
+
* It walks segment to segment through `locate` rather than assuming a segment
|
|
23544
|
+
* length, so a recorder configured with a different `segmentSeconds` warms the
|
|
23545
|
+
* same SPAN rather than the same count.
|
|
23546
|
+
*/
|
|
23547
|
+
startScrubWarm(centreMs, gen) {
|
|
23548
|
+
if (this.scrubWarmStarted) return;
|
|
23549
|
+
this.scrubWarmStarted = true;
|
|
23550
|
+
this.warmScrubWindow(centreMs, gen);
|
|
23551
|
+
}
|
|
23552
|
+
async warmScrubWindow(centreMs, gen) {
|
|
23553
|
+
const spent = await this.warmScrubDirection(centreMs, -1, SCRUB_WARM_BACK_MS, 0, gen);
|
|
23554
|
+
await this.warmScrubDirection(centreMs, 1, SCRUB_WARM_FWD_MS, spent, gen);
|
|
23555
|
+
}
|
|
23556
|
+
/**
|
|
23557
|
+
* Walk `dir` from `fromMs` until `spanMs` of timeline is warm (or the shared
|
|
23558
|
+
* bound is hit), reading each segment that is not already cached. Returns the
|
|
23559
|
+
* running total of segments read, so the two directions share one budget.
|
|
23560
|
+
*/
|
|
23561
|
+
async warmScrubDirection(fromMs, dir, spanMs, spent, gen) {
|
|
23562
|
+
let read = spent;
|
|
23563
|
+
let probeMs = fromMs;
|
|
23564
|
+
for (let i = 0; i < SCRUB_WARM_MAX_SEGMENTS; i++) {
|
|
23565
|
+
if (this.disposed || !this.scrubbing || gen !== this.scrubToken) return read;
|
|
23566
|
+
if (read >= SCRUB_WARM_MAX_SEGMENTS) return read;
|
|
23567
|
+
if (Math.abs(probeMs - fromMs) > spanMs) return read;
|
|
23568
|
+
if (this.scrubReadsAreSlow()) {
|
|
23569
|
+
this.scrubStats?.recordPrefetchSuppressed();
|
|
23570
|
+
return read;
|
|
23571
|
+
}
|
|
23572
|
+
const seg = await this.warmOneScrubSegment(probeMs, gen);
|
|
23573
|
+
if (seg === null) return read;
|
|
23574
|
+
if (seg.fetched) read += 1;
|
|
23575
|
+
probeMs = dir === -1 ? seg.startMs - 1 : seg.startMs + seg.durMs + 1;
|
|
23576
|
+
if (probeMs < 0) return read;
|
|
23577
|
+
}
|
|
23578
|
+
return read;
|
|
23579
|
+
}
|
|
23580
|
+
/**
|
|
23581
|
+
* One warm step: locate the segment covering `probeMs` and, unless it is
|
|
23582
|
+
* already cached, read and demux it into the cache. Returns the segment's span
|
|
23583
|
+
* so the walk can step to its neighbour, or null when the walk must stop (a
|
|
23584
|
+
* gap, a failure, or teardown).
|
|
23585
|
+
*/
|
|
23586
|
+
async warmOneScrubSegment(probeMs, gen) {
|
|
23587
|
+
try {
|
|
23588
|
+
const warm = this.scrubCache.covering(this.deps.profile, probeMs);
|
|
23589
|
+
if (warm) return {
|
|
23590
|
+
startMs: warm.startMs,
|
|
23591
|
+
durMs: warm.durMs,
|
|
23592
|
+
fetched: false
|
|
23593
|
+
};
|
|
23594
|
+
const loc = await this.withTimeout(this.deps.locate({
|
|
23595
|
+
deviceId: this.deps.deviceId,
|
|
23596
|
+
profile: this.deps.profile,
|
|
23597
|
+
epochMs: probeMs
|
|
23598
|
+
}));
|
|
23599
|
+
if (this.disposed || !this.scrubbing || gen !== this.scrubToken) return null;
|
|
23600
|
+
if (loc.kind !== "segment") return null;
|
|
23601
|
+
const load = await this.loadScrubFragment(loc, probeMs);
|
|
23602
|
+
if (load !== null) this.scrubStats?.recordPrefetchRead(load.readBytes);
|
|
23603
|
+
if (this.disposed || !this.scrubbing || gen !== this.scrubToken || load === null) return null;
|
|
23604
|
+
this.scrubCache.put(this.deps.profile, load.seg);
|
|
23605
|
+
this.scrubPrefetched.add(load.seg.startMs);
|
|
23606
|
+
return {
|
|
23607
|
+
startMs: load.seg.startMs,
|
|
23608
|
+
durMs: load.seg.durMs,
|
|
23609
|
+
fetched: true
|
|
23610
|
+
};
|
|
23611
|
+
} catch {
|
|
23612
|
+
return null;
|
|
23613
|
+
}
|
|
23442
23614
|
}
|
|
23443
23615
|
/**
|
|
23444
23616
|
* EXPERIMENTAL feeder-scrub: register a drag target. Records the newest target
|
|
@@ -23702,7 +23874,7 @@ var RecordedFeeder = class {
|
|
|
23702
23874
|
firstIdx = this.pickScrubIndex(seg, effTarget, true);
|
|
23703
23875
|
const kf = seg.aus[firstIdx];
|
|
23704
23876
|
aus = kf === void 0 ? [] : [kf];
|
|
23705
|
-
if (prevTarget !== null && kf !== void 0) jumpTravel = this.collectWarmTravelStills(prevTarget, effTarget, seg.startMs);
|
|
23877
|
+
if (prevTarget !== null && kf !== void 0) jumpTravel = this.collectWarmTravelStills(prevTarget, effTarget, seg.startMs, firstIdx);
|
|
23706
23878
|
}
|
|
23707
23879
|
const lastAu = aus[aus.length - 1];
|
|
23708
23880
|
if (lastAu === void 0) {
|
|
@@ -23808,15 +23980,19 @@ var RecordedFeeder = class {
|
|
|
23808
23980
|
return idx;
|
|
23809
23981
|
}
|
|
23810
23982
|
/**
|
|
23811
|
-
* Load the scrub
|
|
23812
|
-
*
|
|
23813
|
-
*
|
|
23814
|
-
*
|
|
23983
|
+
* Load the scrub unit covering `effTarget`.
|
|
23984
|
+
*
|
|
23985
|
+
* For the scrub profile that unit is the WHOLE SEGMENT — one sequential read
|
|
23986
|
+
* of ~230 KB that leaves ten seconds of demuxed access units behind, so every
|
|
23987
|
+
* later tick landing in it costs nothing at all. Everything else keeps the
|
|
23988
|
+
* GOP byte-range (D31): a `high` segment is ~5 MB and reading it to push one
|
|
23989
|
+
* keyframe would be this same trade made backwards.
|
|
23990
|
+
*
|
|
23815
23991
|
* Null when superseded mid-flight. Video-only: scrub never plays audio.
|
|
23816
23992
|
*/
|
|
23817
23993
|
async loadScrubFragment(loc, effTarget) {
|
|
23818
23994
|
const readGop = this.deps.readGop;
|
|
23819
|
-
if (readGop) {
|
|
23995
|
+
if (readGop && !this.readsWholeSegment(loc)) {
|
|
23820
23996
|
const token = this.seekToken;
|
|
23821
23997
|
const readStartMs = performance.now();
|
|
23822
23998
|
const gop = await this.withTimeout(readGop({
|
|
@@ -23830,6 +24006,7 @@ var RecordedFeeder = class {
|
|
|
23830
24006
|
if (this.disposed || token !== this.seekToken) return null;
|
|
23831
24007
|
const aus = await this.withTimeout(this.deps.demux(gop.bytes));
|
|
23832
24008
|
if (this.disposed || token !== this.seekToken) return null;
|
|
24009
|
+
this.noteScrubReadMs(readEndMs - readStartMs);
|
|
23833
24010
|
return {
|
|
23834
24011
|
seg: {
|
|
23835
24012
|
startMs: gop.gopStartMs,
|
|
@@ -23842,22 +24019,60 @@ var RecordedFeeder = class {
|
|
|
23842
24019
|
wholeSegmentRead: false
|
|
23843
24020
|
};
|
|
23844
24021
|
}
|
|
23845
|
-
const
|
|
23846
|
-
const
|
|
23847
|
-
|
|
24022
|
+
const token = this.seekToken;
|
|
24023
|
+
const readStartMs = performance.now();
|
|
24024
|
+
const bytes = await this.withTimeout(this.deps.readBytes({
|
|
24025
|
+
deviceId: this.deps.deviceId,
|
|
24026
|
+
profile: this.deps.profile,
|
|
24027
|
+
startMs: loc.startMs
|
|
24028
|
+
}));
|
|
24029
|
+
const readEndMs = performance.now();
|
|
24030
|
+
if (this.disposed || token !== this.seekToken) return null;
|
|
24031
|
+
const aus = await this.withTimeout(this.deps.demux(bytes));
|
|
24032
|
+
if (this.disposed || token !== this.seekToken) return null;
|
|
24033
|
+
this.noteScrubReadMs(readEndMs - readStartMs);
|
|
23848
24034
|
return {
|
|
23849
24035
|
seg: {
|
|
23850
24036
|
startMs: loc.startMs,
|
|
23851
24037
|
durMs: loc.durMs,
|
|
23852
|
-
aus
|
|
24038
|
+
aus
|
|
23853
24039
|
},
|
|
23854
|
-
readMs:
|
|
23855
|
-
readBytes:
|
|
23856
|
-
demuxMs:
|
|
24040
|
+
readMs: readEndMs - readStartMs,
|
|
24041
|
+
readBytes: bytes.length,
|
|
24042
|
+
demuxMs: performance.now() - readEndMs,
|
|
23857
24043
|
wholeSegmentRead: true
|
|
23858
24044
|
};
|
|
23859
24045
|
}
|
|
23860
24046
|
/**
|
|
24047
|
+
* Whether this located segment is read WHOLE. The scrub profile is, up to a
|
|
24048
|
+
* safety ceiling on the byte size — see {@link SCRUB_WHOLE_SEGMENT_PROFILE}.
|
|
24049
|
+
* A `locate` that does not report a size is trusted for the scrub profile,
|
|
24050
|
+
* where the shape is known and small.
|
|
24051
|
+
*/
|
|
24052
|
+
readsWholeSegment(loc) {
|
|
24053
|
+
if (this.deps.profile !== SCRUB_WHOLE_SEGMENT_PROFILE) return false;
|
|
24054
|
+
return loc.bytes === void 0 || loc.bytes <= SCRUB_WHOLE_SEGMENT_MAX_BYTES;
|
|
24055
|
+
}
|
|
24056
|
+
/**
|
|
24057
|
+
* Fold one read into the recent-read window that governs speculation. The
|
|
24058
|
+
* window is short on purpose: suppression must track what the disk is doing
|
|
24059
|
+
* NOW, and lift as soon as it recovers.
|
|
24060
|
+
*/
|
|
24061
|
+
noteScrubReadMs(readMs) {
|
|
24062
|
+
this.scrubReadMsWindow = [...this.scrubReadMsWindow, readMs].slice(-5);
|
|
24063
|
+
}
|
|
24064
|
+
/**
|
|
24065
|
+
* Is the disk the problem right now? Median of the recent reads against
|
|
24066
|
+
* {@link SCRUB_SLOW_READ_MS}. Median and not mean because one slow read is
|
|
24067
|
+
* noise and the decision must not swing on it; and never before a few
|
|
24068
|
+
* samples, or a cold first read would suppress the whole drag.
|
|
24069
|
+
*/
|
|
24070
|
+
scrubReadsAreSlow() {
|
|
24071
|
+
if (this.scrubReadMsWindow.length < 3) return false;
|
|
24072
|
+
const sorted = this.scrubReadMsWindow.toSorted((a, b) => a - b);
|
|
24073
|
+
return (sorted[Math.floor(sorted.length / 2)] ?? 0) >= (this.deps.slowReadMs ?? SCRUB_SLOW_READ_MS);
|
|
24074
|
+
}
|
|
24075
|
+
/**
|
|
23861
24076
|
* A single slow `locate` gets its own line, throttled per drag. Reserved for
|
|
23862
24077
|
* the pathological case on purpose: D68 moved this RPC off the warm path, so
|
|
23863
24078
|
* a slow one still landing there is the finding — and if it is NOT rare, the
|
|
@@ -23989,18 +24204,21 @@ var RecordedFeeder = class {
|
|
|
23989
24204
|
* deduped by fragment, excluding the fragments that cover the endpoints
|
|
23990
24205
|
* (one is on screen, the other is the jump's own push).
|
|
23991
24206
|
*/
|
|
23992
|
-
collectWarmTravelStills(fromMs, toMs, excludeFragStartMs) {
|
|
24207
|
+
collectWarmTravelStills(fromMs, toMs, excludeFragStartMs, excludeKfIdx) {
|
|
23993
24208
|
const stills = [];
|
|
23994
|
-
const seen = new Set(
|
|
24209
|
+
const seen = /* @__PURE__ */ new Set();
|
|
23995
24210
|
const samples = SCRUB_JUMP_TRAVEL_MAX_STILLS;
|
|
23996
24211
|
for (let i = 1; i <= samples; i++) {
|
|
23997
24212
|
const tMs = Math.round(fromMs + (toMs - fromMs) * i / 4);
|
|
23998
24213
|
const seg = this.scrubCache.covering(this.deps.profile, tMs);
|
|
23999
|
-
if (!seg ||
|
|
24214
|
+
if (!seg || fragmentCovers(seg, fromMs)) continue;
|
|
24000
24215
|
const kfIdx = this.pickScrubIndex(seg, tMs, true);
|
|
24001
24216
|
const au = seg.aus[kfIdx];
|
|
24002
24217
|
if (au === void 0 || !au.keyframe) continue;
|
|
24003
|
-
|
|
24218
|
+
if (seg.startMs === excludeFragStartMs && kfIdx === excludeKfIdx) continue;
|
|
24219
|
+
const key = `${seg.startMs}|${kfIdx}`;
|
|
24220
|
+
if (seen.has(key)) continue;
|
|
24221
|
+
seen.add(key);
|
|
24004
24222
|
stills.push({
|
|
24005
24223
|
seg,
|
|
24006
24224
|
au,
|
|
@@ -24030,6 +24248,10 @@ var RecordedFeeder = class {
|
|
|
24030
24248
|
}
|
|
24031
24249
|
this.scrubDirRun = Math.sign(this.scrubDirRun) === dir ? this.scrubDirRun + dir : dir;
|
|
24032
24250
|
if (Math.abs(this.scrubDirRun) < SCRUB_PREFETCH_DIR_THRESHOLD) return;
|
|
24251
|
+
if (this.scrubReadsAreSlow()) {
|
|
24252
|
+
this.scrubStats?.recordPrefetchSuppressed();
|
|
24253
|
+
return;
|
|
24254
|
+
}
|
|
24033
24255
|
const aheadMs = Math.max(Math.abs(stepMs), seg.durMs + 1);
|
|
24034
24256
|
const horizons = Math.abs(stepMs) > seg.durMs ? SCRUB_PREFETCH_MAX_INFLIGHT : 1;
|
|
24035
24257
|
for (let horizon = 1; horizon <= horizons; horizon++) {
|
|
@@ -24068,8 +24290,8 @@ var RecordedFeeder = class {
|
|
|
24068
24290
|
if (this.disposed || !this.scrubbing || gen !== this.scrubToken) return;
|
|
24069
24291
|
if (loc.kind !== "segment") return;
|
|
24070
24292
|
const load = await this.loadScrubFragment(loc, probeMs);
|
|
24293
|
+
if (load !== null) this.scrubStats?.recordPrefetchRead(load.readBytes);
|
|
24071
24294
|
if (this.disposed || !this.scrubbing || gen !== this.scrubToken || load === null) return;
|
|
24072
|
-
this.scrubStats?.recordPrefetchRead(load.readBytes);
|
|
24073
24295
|
this.scrubCache.put(this.deps.profile, load.seg);
|
|
24074
24296
|
this.scrubPrefetched.add(load.seg.startMs);
|
|
24075
24297
|
} catch {} finally {
|