@camstack/addon-admin-ui 1.2.152 → 1.2.153

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/dist/assets/{AddLocationWizard-CRSMsK9p.js → AddLocationWizard-POU-h4lC.js} +1 -1
  2. package/dist/assets/{AddonCollectionPage-Cvpydgls.js → AddonCollectionPage-_c7aqfTY.js} +1 -1
  3. package/dist/assets/{Addons-BfHTJdu9.js → Addons-B1JQF4gb.js} +1 -1
  4. package/dist/assets/{AdminTabs-C8fYCzUp.js → AdminTabs-CpTKjy3v.js} +1 -1
  5. package/dist/assets/{AiProfiles-DP4XbxUn.js → AiProfiles-DZ9Ow0HR.js} +1 -1
  6. package/dist/assets/{BrokerForm-CSIOM0Q9.js → BrokerForm-ClNFIGW2.js} +1 -1
  7. package/dist/assets/{Build-LV-4tjzd.js → Build-Dla0OrwG.js} +1 -1
  8. package/dist/assets/{Capabilities-DPDAS0F9.js → Capabilities-M7k-RZWl.js} +1 -1
  9. package/dist/assets/{CapabilityBadges-Ne3fsTPo.js → CapabilityBadges-CBc1Ca4t.js} +1 -1
  10. package/dist/assets/{Cluster-_oYtW6DA.js → Cluster-C_dTsHIY.js} +1 -1
  11. package/dist/assets/{Data-BtisI6aU.js → Data-DrADfMZC.js} +1 -1
  12. package/dist/assets/{DetectionIntelligence-CkddQvcD.js → DetectionIntelligence-QnPJgItV.js} +1 -1
  13. package/dist/assets/{DeviceAggregateSection-DQQ3we6r.js → DeviceAggregateSection-r-vVpuVq.js} +1 -1
  14. package/dist/assets/{DeviceDetail-W0aLcU9f.js → DeviceDetail-CodUJS1P.js} +1 -1
  15. package/dist/assets/{Devices-DuqE2S99.js → Devices-BXh61CPy.js} +1 -1
  16. package/dist/assets/{EmbedPlayerPage-Vetle0eq.js → EmbedPlayerPage-BcO3cVi5.js} +1 -1
  17. package/dist/assets/{Events-BrMgdc2c.js → Events-jBSvPW0i.js} +1 -1
  18. package/dist/assets/{FormBuilder-DZAD7rsy.js → FormBuilder-KnE-MHOY.js} +1 -1
  19. package/dist/assets/{Identity-ByY0AcqN.js → Identity-BfukWwzn.js} +1 -1
  20. package/dist/assets/{IntegrationDetail-CZCnR1qq.js → IntegrationDetail-DKYyTNAX.js} +1 -1
  21. package/dist/assets/{Integrations-DdTsI5Ro.js → Integrations-BDtG7b0i.js} +1 -1
  22. package/dist/assets/{Integrations-CH7r6Rna.js → Integrations-YJYVfqN6.js} +1 -1
  23. package/dist/assets/{Locations-BTfQ9DXU.js → Locations-nmHSshK6.js} +1 -1
  24. package/dist/assets/{Logs-C3LihNTL.js → Logs-DsBOOcf1.js} +1 -1
  25. package/dist/assets/{MotionZonesSettings-cYzPB2HU.js → MotionZonesSettings-D2UavUBf.js} +1 -1
  26. package/dist/assets/{MyAccess-8609SF9m.js → MyAccess-lt7fhuDE.js} +1 -1
  27. package/dist/assets/{Network-f6kHY_5t.js → Network-DL8OmVoI.js} +1 -1
  28. package/dist/assets/{NodeAddonsSettingsPanel-CxcrZcXQ.js → NodeAddonsSettingsPanel-BGiMbeFK.js} +1 -1
  29. package/dist/assets/{NodeInferenceDevices-CQHXi0JA.js → NodeInferenceDevices-kXy3hl6a.js} +1 -1
  30. package/dist/assets/{Notifications-BI6I75Ep.js → Notifications-DIk8CGG-.js} +1 -1
  31. package/dist/assets/{Pipeline-BZcuPoPD.js → Pipeline-CVyZTH5E.js} +1 -1
  32. package/dist/assets/{Plates-DENjhZyd.js → Plates-XWUvNHoY.js} +1 -1
  33. package/dist/assets/{PrivacyMaskSettings-BEgxFW6t.js → PrivacyMaskSettings-GBuB9bMT.js} +1 -1
  34. package/dist/assets/{ProviderIcon-XR91l--m.js → ProviderIcon-CNI4drnz.js} +1 -1
  35. package/dist/assets/{Recordings-Cv1htCoz.js → Recordings-D50YdeX2.js} +1 -1
  36. package/dist/assets/{ScanNetworkModal-D5saxFAm.js → ScanNetworkModal-DSQYVB5-.js} +1 -1
  37. package/dist/assets/{SceneMonitorEditor-L4YkkW7x.js → SceneMonitorEditor-CliKadd2.js} +1 -1
  38. package/dist/assets/{Scenes-Be-FJRmb.js → Scenes-D_2WuJmD.js} +1 -1
  39. package/dist/assets/{Settings-Cmw6FXk4.js → Settings-CRM_OepW.js} +1 -1
  40. package/dist/assets/{Showroom-B2qPnvyR.js → Showroom-D4PTTERP.js} +1 -1
  41. package/dist/assets/{StorageLocationsPanel-MknZ7IHh.js → StorageLocationsPanel-DnZ-Tb-M.js} +1 -1
  42. package/dist/assets/{Terminal-CsMWo1fT.js → Terminal-BCcYOV7X.js} +1 -1
  43. package/dist/assets/{_virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-DInKaMJ1.js → _virtual_mf-localSharedImportMap___mfe_internal__admin_ui_host-H4A6egtU.js} +1 -1
  44. package/dist/assets/{bell-off-CmttlQXo.js → bell-off-_uCfwsq_.js} +1 -1
  45. package/dist/assets/{bell-ring-DOJ_zaJV.js → bell-ring-M-bbfQBU.js} +1 -1
  46. package/dist/assets/{boxes-BojwLWqP.js → boxes-DD7B6vWr.js} +1 -1
  47. package/dist/assets/circle-check-big-JbEuda-K.js +1 -0
  48. package/dist/assets/circle-dot-BiSKsHqx.js +1 -0
  49. package/dist/assets/circle-slash-BFJ5arnl.js +1 -0
  50. package/dist/assets/{circle-x-wZc8rg_f.js → circle-x-CsGhZWZ1.js} +1 -1
  51. package/dist/assets/clock-CP-wdltQ.js +1 -0
  52. package/dist/assets/{copy-3HXArcO0.js → copy-BIhozMgo.js} +1 -1
  53. package/dist/assets/{debounced-invalidate-6vIgVJmX.js → debounced-invalidate-DGDmoLua.js} +1 -1
  54. package/dist/assets/{dist-CjmKzQHq.js → dist-BBNkFRmf.js} +1 -1
  55. package/dist/assets/{dist-CbUtPKh7.js → dist-S_GbEBCn.js} +1 -1
  56. package/dist/assets/{download-DXqx7-8w.js → download-BDzIO8OY.js} +1 -1
  57. package/dist/assets/{face-bbox-DFou7csi.js → face-bbox-CGA0mg9Y.js} +1 -1
  58. package/dist/assets/{flame-eamTVW8N.js → flame-BYOYZC1n.js} +1 -1
  59. package/dist/assets/{hard-drive-7Y2Mg0GE.js → hard-drive-90CWkv-h.js} +1 -1
  60. package/dist/assets/{hard-drive-download-BP4ESn9-.js → hard-drive-download-Om-EHrji.js} +1 -1
  61. package/dist/assets/{hostInit-BVouzqij.js → hostInit-ArnQd5Ro.js} +1 -1
  62. package/dist/assets/{index-BnFm_Imc.js → index-DpyYghK5.js} +3 -3
  63. package/dist/assets/{key-round-DufzqLg-.js → key-round-DCbMTVqq.js} +1 -1
  64. package/dist/assets/{layers-Byjsc3yg.js → layers-CyQMm87X.js} +1 -1
  65. package/dist/assets/{mf-entry-bootstrap-0-7a2fbc17.js → mf-entry-bootstrap-0-b5a58a12.js} +2 -2
  66. package/dist/assets/{pencil-ChcKS9qp.js → pencil-QF3La2Sl.js} +1 -1
  67. package/dist/assets/play-D8PRXtJj.js +1 -0
  68. package/dist/assets/{player-overlays-CkGjHNDd.js → player-overlays-C7P-BYK6.js} +1 -1
  69. package/dist/assets/plus-DCgFS8Qr.js +1 -0
  70. package/dist/assets/power-CLys8a7n.js +1 -0
  71. package/dist/assets/{radio-CiQlJZot.js → radio-Dx7yXPbe.js} +1 -1
  72. package/dist/assets/{refresh-cw-3OpAwqdC.js → refresh-cw-C39zORZV.js} +1 -1
  73. package/dist/assets/remoteEntry-CUCr4zXw.js +1 -0
  74. package/dist/assets/rotate-ccw-D64HdccI.js +1 -0
  75. package/dist/assets/rotate-cw-CLXt3-FP.js +1 -0
  76. package/dist/assets/{send-3XacUFua.js → send-CVOYFzeZ.js} +1 -1
  77. package/dist/assets/{server-DgTF3xCo.js → server-DQLgZ7bE.js} +1 -1
  78. package/dist/assets/{shield-S-fgWPwd.js → shield-AayD-Dai.js} +1 -1
  79. package/dist/assets/{shield-alert-TESCMM1U.js → shield-alert-B9Y8lmS2.js} +1 -1
  80. package/dist/assets/square-CTn6q5rG.js +1 -0
  81. package/dist/assets/{square-check-big-bLYnUb2_.js → square-check-big-CL2u5bS3.js} +1 -1
  82. package/dist/assets/{src-DBCz_Wul.js → src-D4J0MlT1.js} +3 -3
  83. package/dist/assets/{src-snbHLEEO.js → src-DVkz1MkU.js} +1 -1
  84. package/dist/assets/{undo-2-CGA8VTns.js → undo-2-B_3P5GNw.js} +1 -1
  85. package/dist/assets/{use-scenes-feed-DslCcTRx.js → use-scenes-feed-CtEQ_eXD.js} +1 -1
  86. package/dist/assets/useEventInvalidation-DmM7qYZh.js +1 -0
  87. package/dist/assets/{useNodeUrlSelection-DKpFEH0I.js → useNodeUrlSelection-S-4TmE9o.js} +1 -1
  88. package/dist/assets/user-round-CqtpH11x.js +1 -0
  89. package/dist/assets/{video-Du_T1Juf.js → video-BeD7NTRZ.js} +1 -1
  90. package/dist/assets/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-CD6cm9GI.js → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__admin_ui_host__remoteEntry-_hash_-BzqZKccv.js} +2 -2
  91. package/dist/assets/{wifi-DFeftdlE.js → wifi-BgJhCz5w.js} +1 -1
  92. package/dist/assets/{zap-qfpb65Ko.js → zap-D7GDVAk6.js} +1 -1
  93. package/dist/index.html +5 -5
  94. package/dist/server/addon.js +7 -1
  95. package/package.json +1 -1
  96. package/dist/assets/circle-check-big-CYqYb18l.js +0 -1
  97. package/dist/assets/circle-dot-DrKitvFX.js +0 -1
  98. package/dist/assets/circle-slash-B-geGlOr.js +0 -1
  99. package/dist/assets/clock-DYGPpHoA.js +0 -1
  100. package/dist/assets/play-DBZIwx8l.js +0 -1
  101. package/dist/assets/plus-BsofUp-H.js +0 -1
  102. package/dist/assets/power-DcQdan7Q.js +0 -1
  103. package/dist/assets/remoteEntry-Dt9hV0IH.js +0 -1
  104. package/dist/assets/rotate-ccw-3CkYaWob.js +0 -1
  105. package/dist/assets/rotate-cw-C_E5zarw.js +0 -1
  106. package/dist/assets/square-BaJ4GXIK.js +0 -1
  107. package/dist/assets/useEventInvalidation-83aCjx1L.js +0 -1
  108. package/dist/assets/user-round-B8d-cExM.js +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/__vite-browser-external-B6qJ4svC.js","assets/rolldown-runtime-Cyuzqnbw.js"])))=>i.map(i=>d[i]);
2
- import{a as e,r as t}from"./rolldown-runtime-Cyuzqnbw.js";import{t as n}from"./vite-preload-helper-zJ_50EbN.js";import{A as r,C as i,D as a,E as o,F as s,M as c,N as l,O as u,P as d,S as f,T as ee,_ as p,a as te,b as ne,c as re,d as ie,f as m,g as ae,h,i as oe,j as g,k as se,l as ce,m as le,n as ue,o as de,p as _,r as fe,s as pe,t as me,u as he,v,w as y,x as b,y as x}from"./__vite-browser-external-B6qJ4svC.js";var ge=function(e){return e.SystemBoot=`system.boot`,e.SystemAddonsReady=`system.addons-ready`,e.SystemRestarting=`system.restarting`,e.SystemRestartCompleted=`system.restart-completed`,e.SystemTlsCertChanged=`system.tls-cert-changed`,e.UpdateAvailable=`update.available`,e.SystemReadyState=`system.ready-state`,e.AddonStarted=`addon.started`,e.AddonStopped=`addon.stopped`,e.AddonRestarted=`addon.restarted`,e.AddonUpdated=`addon.updated`,e.AddonInstalled=`addon.installed`,e.AddonUninstalled=`addon.uninstalled`,e.AddonCrashed=`addon.crashed`,e.AddonRunnerFailed=`addon.runner-failed`,e.AddonError=`addon.error`,e.AddonPageReady=`addon.page-ready`,e.AddonWidgetReady=`addon.widget-ready`,e.AddonLoadFailed=`addon.load-failed`,e.AddonLoadRecovered=`addon.load-recovered`,e.AddonRetryScheduled=`addon.retry-scheduled`,e.SystemLivenessFailed=`system.liveness-failed`,e.SystemLivenessRecovered=`system.liveness-recovered`,e.AddonRetryAttempting=`addon.retry-attempting`,e.DeviceRegistered=`device.registered`,e.DeviceUnregistered=`device.unregistered`,e.DeviceEnabled=`device.enabled`,e.DeviceDisabled=`device.disabled`,e.DeviceSettingsUpdated=`device.settings-updated`,e.DeviceBindingsChanged=`device.bindings-changed`,e.DeviceMetaChanged=`device.meta-changed`,e.DeviceSourceInfoChanged=`device.source-info-changed`,e.DeviceStreamsRegistered=`device.streams-registered`,e.DeviceProvisioned=`device.provisioned`,e.DeviceReady=`device.ready`,e.IntegrationEnabled=`integration.enabled`,e.IntegrationDisabled=`integration.disabled`,e.IntegrationDeleted=`integration.deleted`,e.BrokerStatusChanged=`broker.status-changed`,e.BrokerMessage=`broker.message`,e.ProviderStarted=`provider.started`,e.ProviderStopped=`provider.stopped`,e.ProcessCrashed=`process.crashed`,e.ProcessRestartScheduled=`process.restart_scheduled`,e.ProcessRestarted=`process.restarted`,e.RecordingStarted=`recording.started`,e.RecordingStopped=`recording.stopped`,e.RecordingError=`recording.error`,e.RecordingHealthDegraded=`recording.health.degraded`,e.RecordingStorageCritical=`recording.storage.critical`,e.RecordingSegmentWritten=`recording.segment.written`,e.RecordingPolicyFallback=`recording.policy.fallback`,e.RecordingRetentionCompleted=`recording.retention.completed`,e.RecordingExportProgress=`recording.export.progress`,e.RecordingExportCompleted=`recording.export.completed`,e.RecordingExportFailed=`recording.export.failed`,e.DetectionEvent=`detection.event`,e.SessionTrackNew=`session.track.new`,e.SessionTrackExpired=`session.track.expired`,e.BenchmarkProgress=`benchmark.progress`,e.PlatformProbePhase=`platform-probe.phase`,e.PipelineProgress=`pipeline.progress`,e.PipelineTrace=`pipeline.trace`,e.PipelineInferenceResult=`pipeline.inference-result`,e.PipelineCameraAssigned=`pipeline.camera-assigned`,e.PipelineCameraUnassigned=`pipeline.camera-unassigned`,e.PipelineNodeInferenceUnavailable=`pipeline.node-inference-unavailable`,e.PipelineDetectionBlind=`pipeline.detection-blind`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineIngestOwnerChanged=`pipeline.ingest-owner-changed`,e.PipelineRunnerLoadSnapshot=`pipeline.runner-load-snapshot`,e.PipelineCameraMetricsSnapshot=`pipeline.camera-metrics-snapshot`,e.StreamBrokerMetricsSnapshot=`stream-broker.metrics-snapshot`,e.StreamBrokerOnCamStreamDemand=`stream-broker.onCamStreamDemand`,e.StreamBrokerOnCamStreamIdle=`stream-broker.onCamStreamIdle`,e.StreamBrokerOnRequestStreamSourceRefresh=`stream-broker.onRequestStreamSourceRefresh`,e.StreamParamsChanged=`stream-params.changed`,e.DeviceStateChanged=`device.state-changed`,e.ZoneAnalyticsOccupancyChanged=`zone-analytics.occupancy-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.NetworkLinkOnStatusChanged=`network-link.onStatusChanged`,e.BatteryOnWakeStarted=`battery.onWakeStarted`,e.DoorbellOnPressed=`doorbell.onPressed`,e.EventEmitted=`event-emitter.event`,e.PipelineEngineMetricsSnapshot=`pipeline.engine-metrics-snapshot`,e.PipelineEngineProvisioning=`pipeline.engine-provisioning`,e.ClusterTopologySnapshot=`cluster.topology-snapshot`,e.MetricsNodeResourcesSnapshot=`metrics.node-resources-snapshot`,e.MetricsNodeProcessesSnapshot=`metrics.node-processes-snapshot`,e.CapabilityBindingChanged=`capability.binding-changed`,e.ModelDownloadProgress=`model.download.progress`,e.AgentRegistered=`agent.registered`,e.AgentUnregistered=`agent.unregistered`,e.AgentOnline=`agent.online`,e.AgentOffline=`agent.offline`,e.WorkerOnline=`worker.online`,e.WorkerOffline=`worker.offline`,e.AgentTaskDispatched=`agent.task.dispatched`,e.AgentTaskAssigned=`agent.task.assigned`,e.AgentTrpcConnected=`agent.trpc.connected`,e.AgentWsConnected=`agent.ws.connected`,e.AgentWsDisconnected=`agent.ws.disconnected`,e.AgentBackupActivated=`agent.backup.activated`,e.OrchestrationSettingsUpdated=`orchestration.settings-updated`,e.PipelineAgentHwaccelChanged=`pipeline.agent-hwaccel-changed`,e.MotionAnalysis=`detection.motion-analysis`,e.MotionZonesRaw=`detection.motion-zones-raw`,e.MotionOnMotionChanged=`motion.on-motion-changed`,e.DetectionResult=`detection.result`,e.DetectionRaw=`detection.raw`,e.DetectionCameraNative=`detection.camera-native`,e.PipelineAudioInferenceResult=`pipeline.audio-inference-result`,e.DetectionPhaseTransition=`detection.phase-transition`,e.ProviderMotion=`provider.motion`,e.ProviderDetection=`provider.detection`,e.EnrichmentEmbeddingStored=`enrichment.embedding.stored`,e.EnrichmentSceneStateChanged=`enrichment.scene.state-changed`,e.EnrichmentActivitySummary=`enrichment.activity.summary`,e.PipelineAnalyticsTrackLifecycle=`pipeline-analytics.track-lifecycle`,e.PipelineAnalyticsTrackStarted=`pipeline-analytics.track-started`,e.PipelineAnalyticsTrackEnded=`pipeline-analytics.track-ended`,e.PipelineAnalyticsDetectionEvent=`pipeline-analytics.detection-event`,e.PipelineAnalyticsFrameTracked=`pipeline-analytics.frame-tracked`,e.PipelineAnalyticsStationaryChanged=`pipeline-analytics.stationary-changed`,e.PipelineAnalyticsPackageDelivered=`pipeline-analytics.package-delivered`,e.PipelineAnalyticsPackagePickedUp=`pipeline-analytics.package-picked-up`,e.PipelineAnalyticsFaceGalleryChanged=`pipeline-analytics.face-gallery-changed`,e.PipelineAnalyticsPlateGalleryChanged=`pipeline-analytics.plate-gallery-changed`,e.FrigateLiveEvent=`frigate.live-event`,e.CameraStreamsProfileSlotsChanged=`camera-streams.onProfileSlotsChanged`,e.StreamOnline=`stream.online`,e.StreamOffline=`stream.offline`,e.NetworkTunnelStarted=`network.tunnel.started`,e.NetworkTunnelStopped=`network.tunnel.stopped`,e.LocalNetworkChanged=`network.local.changed`,e.MeshNetworkChanged=`network.mesh.changed`,e.BackupCompleted=`backup.completed`,e.BackupRestored=`backup.restored`,e.NotificationDispatched=`notification.dispatched`,e.NotificationFailed=`notification.failed`,e.DeviceUpdated=`device.updated`,e.DeviceOnline=`device.online`,e.DeviceOffline=`device.offline`,e.DeviceAwake=`device.awake`,e.DeviceSleeping=`device.sleeping`,e.RetentionCleanup=`retention.cleanup`,e.AddonsBulkUpdateProgress=`addons.bulk-update-progress`,e.AddonsJobProgress=`addons.job-progress`,e.AddonsJobLog=`addons.job-log`,e.AccessoriesChildVisibilityChanged=`accessories.onChildVisibilityChanged`,e.AccessoriesChanged=`accessories.onAccessoriesChanged`,e.ModelConvertProgress=`model-convert.progress`,e}({}),_e=[{id:`overview`,label:`Overview`,icon:`layout-dashboard`,order:-10},{id:`general`,label:`General`,icon:`settings`,order:0},{id:`image`,label:`Image`,icon:`image`,order:5},{id:`light`,label:`Light`,icon:`lightbulb`,order:7},{id:`motion`,label:`Motion`,icon:`activity`,order:10},{id:`audio`,label:`Audio`,icon:`mic`,order:12},{id:`alarms`,label:`Alarms`,icon:`bell-ring`,order:13},{id:`snapshot`,label:`Snapshot`,icon:`camera`,order:15},{id:`osd`,label:`OSD`,icon:`type`,order:18},{id:`stream-broker`,label:`Stream Broker`,icon:`radio`,order:20},{id:`streaming`,label:`Streaming`,icon:`video`,order:35},{id:`ptz`,label:`PTZ`,icon:`move`,order:40},{id:`consumables`,label:`Consumables`,icon:`recycle`,order:44},{id:`pipeline`,label:`Detection Pipeline`,icon:`cpu`,order:39},{id:`detection-pipeline`,label:`Detection pipeline`,icon:`cpu`,order:39},{id:`zones`,label:`Detection`,icon:`shapes`,order:38},{id:`analytics`,label:`Analytics`,icon:`activity`,order:37},{id:`live-stats`,label:`Live Stats`,icon:`activity`,order:39},{id:`recording`,label:`Recording`,icon:`circle-dot`,order:40},{id:`engine`,label:`Inference Engine`,icon:`zap`,order:41},{id:`scheduler`,label:`Scheduler`,icon:`list-checks`,order:42},{id:`decoder`,label:`Decoder`,icon:`film`,order:43},{id:`notifications`,label:`Notifications`,icon:`bell`,order:50},{id:`network`,label:`Network`,icon:`globe`,order:60},{id:`storage`,label:`Storage`,icon:`hard-drive`,order:70},{id:`advanced`,label:`Advanced`,icon:`wrench`,order:100}],ve=Object.fromEntries(_e.map(e=>[e.id,e]));function ye(e){return e.type===`separator`||e.type===`info`||e.type===`qr-code`||e.type===`button`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`}function be(e){let t=new Map;if(typeof e!=`object`||!e)return t;let n=e.sections;if(!Array.isArray(n))return t;for(let e of n)typeof e==`object`&&e&&xe(e.fields,t);return t}function xe(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){xe(n.fields,t);continue}if(e===`sub-tabs`){let e=n.tabs;if(Array.isArray(e))for(let n of e)typeof n==`object`&&n&&xe(n.fields,t);continue}let r=n.key;typeof r!=`string`||r.length===0||`value`in n&&t.set(r,{value:n.value,default:n.default})}}function Se(e){let t=new Map;for(let[n,r]of be(e))t.set(n,r.value??r.default);return t}function Ce(e,t){let n=be(e).get(t);return n===void 0?void 0:n.value??n.default}function we(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Te(e,t))}))}}function Te(e,t){if(ye(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Te(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Te(e,t))}));return{...e,tabs:n}}let n=e.key,r=Object.prototype.hasOwnProperty.call(t,n)?t[n]:void 0,i=e.default;if(e.multiple){let t=Array.isArray(r)?r:r==null?[]:[r],n=e.multiple.itemDefault===void 0?i===void 0?Ee(e)===`string`?``:null:i:e.multiple.itemDefault,a=Math.max(e.multiple.min,t.length),o=[];for(let e=0;e<a;e++)o.push(e<t.length?t[e]:n);return{...e,value:o}}let a=r===void 0?i===void 0?null:i:r,o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ee(e){switch(e.type){case`text`:case`textarea`:case`password`:case`color`:case`probe`:case`timezone`:case`datetime`:return`string`;case`number`:case`slider`:return`number`;case`boolean`:return`boolean`;default:return`other`}}function De(e,t){return e.category===t}function Oe(e,t,n){return{id:typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2),timestamp:new Date,source:t,category:e,data:n}}function ke(e,t){let n=t.ts??Date.now();e.emit(Oe(`system.ready-state`,{type:`capability`,id:t.capName,nodeId:t.sourceNodeId},{capName:t.capName,scope:t.scope,state:t.state,generation:t.generation,sourceNodeId:t.sourceNodeId,ts:n}))}function Ae(e){let t=async()=>{let t=(await e.read())[e.key];if(t===void 0)return e.fallback;let n=e.schema.safeParse(t);return n.success?n.data:(e.onParseError?.(e.key,n.error),e.fallback)},n=async t=>{let n=e.schema.parse(t);await e.write({[e.key]:n})};return{get:t,set:n,update:async e=>{await n(e(await t()))}}}function je(e){if(e==null||e===``)return`hub`;let t=e.indexOf(`/`);if(t<0)return e;let n=e.slice(0,t);return n===``?`hub`:n}function Me(e,t){return`${e}@${je(t)}`}function Ne(e,t,n){return e[Me(t,n)]}function Pe(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?Me(i,n):i]=a;return r}function Fe(e,t,n){let r={};for(let[n,i]of Object.entries(e))n.includes(`@`)||t.has(n)||(r[n]=i);for(let i of t){let t=Ne(e,i,n);t!==void 0&&(r[i]=t)}return r}var Ie=class{_ctx=null;_config;_readinessGeneration=typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];settingsStoreReady=!1;defaults;constructor(e){this.defaults=e,this._config={...e}}get autoEmitReadiness(){return!0}get ctx(){if(!this._ctx)throw Error(`${this.constructor.name}: ctx accessed before initialize()`);return this._ctx}get ctxIfReady(){return this._ctx}get config(){return this._config}async initialize(e){this._ctx=e,await this.resolveConfig();let t=await this.onInitialize();this.emitLifecycle(ge.AddonStarted);let n=ze(t),r=n&&`providers`in n&&n.providers?n.providers:[];return this._registeredCapNames=r.map(e=>e.capability.name),n}postBrokerStart(){this.autoEmitReadiness&&this._registeredCapNames.length>0&&this.emitReadinessForProviders(`ready`)}async onHubReachable(){}async shutdown(){this.emitLifecycle(ge.AddonStopped),this.autoEmitReadiness&&this.emitReadinessForProviders(`down`),await this.onShutdown();for(let e of this._subscriptions)e();this._subscriptions=[],this._ctx=null}async onShutdown(){}async onConfigChanged(){}field(e){return e}schema(e){return e}globalSettingsSchema(e){return null}deviceSettingsSchema(){return null}integrationSettingSections(){return[]}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return we(r,e?{...i,...e}:i)}async getIntegrationSettings(e){let t=this.integrationSettingSections();if(t.length===0)return null;let n=this.globalSettingsSchema();if(!n)throw Error(`${this.constructor.name}: integrationSettingSections() names [${t.join(`, `)}] but globalSettingsSchema() returns null.`);let r=new Map(n.sections.map(e=>[e.id,e])),i=[];for(let e of t){let t=r.get(e);if(!t)throw Error(`${this.constructor.name}: integrationSettingSections() names unknown section "${e}". Known sections: [${[...r.keys()].join(`, `)}].`);let n=Le(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return we({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=je(e??this._ctx?.kernel?.localNodeId);return r.size>0?Fe(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=je(this._ctx?.kernel?.localNodeId),i=je(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Pe(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(ge.AddonUpdated,{level:`global`}),this.maybeAutoRestart(e,this.globalSettingsSchema()))}_perNodeKeysCache=new Map;perNodeKeys(e){let t=e??``,n=this._perNodeKeysCache.get(t);if(n)return n;let r=this.globalSettingsSchema(e),i=new Set(r?r.sections.flatMap(e=>Re(e.fields)):[]);return this._perNodeKeysCache.set(t,i),i}maybeAutoRestart(e,t){if(!t)return;let n=new Set;for(let e of t.sections)for(let t of e.fields)t.type===`separator`||t.type===`info`||t.requiresRestart&&n.add(t.key);if(n.size===0||!Object.keys(e).some(e=>n.has(e)))return;let r=this._ctx;if(!r)return;let i=r.id;setImmediate(()=>{r.api.addons?.restartAddon?.mutate({addonId:i}).then(()=>{r.logger.info(`addon auto-restart triggered by restart-required setting change`,{meta:{changedFields:Object.keys(e).filter(e=>n.has(e))}})}).catch(e=>{r.logger.error(`addon auto-restart failed`,{meta:{error:e instanceof Error?e.message:String(e)}})})})}async getDeviceSettings(e){let t=this.deviceSettingsSchema();return t?we(t,await this._ctx?.settings?.readDeviceStore(e)??{}):{sections:[]}}async updateDeviceSettings(e,t){await this._ctx?.settings?.writeDeviceStore(e,t)}_subscriptions=[];watchCapability(e,t){let n=new Set(Array.isArray(e)?e:[e]);this.subscribe({category:`system.ready-state`},e=>{let r=e.data;if(typeof r.capName!=`string`||!n.has(r.capName)||r.scope?.type!==`node`)return;let i=r.scope.nodeId;if(typeof i!=`string`||i.length===0)return;let a=r.capName;r.state===`down`?t.onDown?.(i,a):r.state===`ready`&&t.onReady?.(i,a)})}subscribe(e,t){let n=this.ctx.eventBus.subscribe(e,t);this._subscriptions.push(n)}emitLifecycle(e,t){try{let n=this._ctx;if(!n)return;n.eventBus.emit({id:`${n.id}-${Date.now()}`,timestamp:new Date,source:{type:`addon`,id:n.id,nodeId:n.kernel.localNodeId??`hub`},category:e,data:{addonId:n.id,...t}})}catch{}}emitReadinessForProviders(e){let t=this._ctx;if(!t||this._registeredCapNames.length===0)return;let n=t.kernel?.localNodeId??`hub`,r=n.includes(`/`)?n.split(`/`)[0]:n;for(let n of this._registeredCapNames)try{ke(t.eventBus,{capName:n,scope:{type:`node`,nodeId:r},state:e,generation:this._readinessGeneration,sourceNodeId:r})}catch{}}async resolveModelsDir(){let{join:t}=await n(async()=>{let{join:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{join:t}},__vite__mapDeps([0,1])),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{promises:t}},__vite__mapDeps([0,1])),i=t(this.ctx.nodeDataDir,`models`);return await r.mkdir(i,{recursive:!0}),i}get capabilities(){return this.ctx.capabilities??null}async resolveConfig(){let e=await this.readAddonStoreWithRetry(),t=this.perNodeKeys(),n=je(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Ne(e,i,n):e[i];if(a!=null){let e=typeof this.defaults[i];typeof a===e&&(r[i]=a)}}this._config=r}state(e,t,n){return Ae({key:e,schema:t,fallback:n,read:()=>this.readAddonStoreWithRetry(),write:async e=>{await this._ctx?.settings?.writeAddonStore(e)},onParseError:(e,t)=>this._ctx?.logger?.warn?.(`durable-state: stored "${e}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,key:e,error:String(t)}})})}deviceState(e,t,n,r){return Ae({key:t,schema:n,fallback:r,read:async()=>await this._ctx?.settings?.readDeviceStore(e)??{},write:async t=>{await this._ctx?.settings?.writeDeviceStore(e,t)},onParseError:(t,n)=>this._ctx?.logger?.warn?.(`durable-state: stored device ${e} "${t}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,deviceId:e,key:t,error:String(n)}})})}async readAddonStoreWithRetry(){let e=this._ctx?.settings;if(!e)return{};let t=[150,350,600,900],n;for(let r=0;r<=t.length;r++)try{let t=await e.readAddonStore()??{};return this.settingsStoreReady=!0,t}catch(e){n=e;let i=e instanceof Error?e.message:String(e);if(!(i.includes(`SqliteSettingsBackend not initialized`)||i.includes(`provider not available`)))throw e;if(r===t.length)break;await new Promise(e=>setTimeout(e,t[r]))}return this.settingsStoreReady=!1,this._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function Le(e){let t=[];for(let n of e){if(n.type===`group`){let e=Le(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:Le(e.fields)})).filter(e=>e.fields.length>0);e.length>0&&t.push({...n,tabs:e});continue}`perNode`in n&&n.perNode===!0||t.push(n)}return t}function Re(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...Re(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...Re(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function ze(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function Be(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=Ve(t,e.method,e.path);if(!n)return{status:404,headers:{},redirectUrl:null,body:{error:`No route matches ${e.method} ${e.path}`}};let r={status:200,headers:{},redirectUrl:null},i=Ue(r),a={params:{...e.params,...n.params},query:e.query,body:e.body,headers:e.headers,...e.user?{user:e.user}:{},...e.scopedToken===void 0?{}:{scopedToken:e.scopedToken}};return await n.route.handler(a,i),r}}}function Ve(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=He(t.path,n);if(e!==null)return{route:t,params:e}}return null}function He(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean);if(n.length!==r.length)return null;let i={};for(let e=0;e<n.length;e++){let t=n[e],a=r[e];if(t.startsWith(`:`))i[t.slice(1)]=a;else if(t!==a)return null}return i}function Ue(e){let t={status(n){return e.status=n,t},code(n){return e.status=n,t},send(t){e.body=t},redirect(t){e.redirectUrl=t,e.status===200&&(e.status=302)},header(n,r){return e.headers[n.toLowerCase()]=r,t},type(n){return e.contentType=n,t}};return t}var We=class{disposers=[];disposed=!1;onError;constructor(e={}){this.onError=e.onError??((e,t)=>{console.error(`[DisposerChain] disposer #${t} threw`,e)})}add(e){if(this.disposed){try{let t=e();t&&typeof t.then==`function`&&t.catch(e=>this.onError(e,-1))}catch(e){this.onError(e,-1)}return()=>void 0}return this.disposers.push(e),()=>{let t=this.disposers.indexOf(e);t>=0&&this.disposers.splice(t,1)}}get isDisposed(){return this.disposed}get size(){return this.disposers.length}async dispose(){if(this.disposed)return;this.disposed=!0;let e=this.disposers.slice().toReversed();this.disposers=[];for(let t=0;t<e.length;t++){let n=e[t];try{let e=n();e&&typeof e.then==`function`&&await e}catch(n){this.onError(n,e.length-1-t)}}}},Ge=a({codec:m([`h264`,`h265`,`copy`]),profile:m([`baseline`,`main`,`high`]).optional(),level:g().optional(),width:o().int().positive().optional(),height:o().int().positive().optional(),fps:o().positive().optional(),bitrateKbps:o().int().positive().optional(),gopFrames:o().int().positive().optional(),bf:o().int().min(0).optional(),preset:m([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:m([`zerolatency`,`film`,`animation`]).optional()}),Ke=l([y(`passthrough`),a({codec:m([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:o().int().positive().optional(),sampleRateHz:o().int().positive().optional(),channels:l([y(1),y(2)]).optional()})]),qe=a({video:Ge,audio:Ke,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function Je(e){let t=e.codec?.toLowerCase().replace(/[.\s-]/g,``),n={codec:t===`h265`||t===`hevc`?`h265`:`h264`,...e.resolution?.width===void 0?{}:{width:e.resolution.width},...e.resolution?.height===void 0?{}:{height:e.resolution.height},...e.fps===void 0?{}:{fps:e.fps}};if(!(n.width===void 0&&n.height===void 0&&n.fps===void 0))return{video:n,audio:`passthrough`}}var Ye={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},Xe={aac:{kind:`encode`,codec:`aac`,bitrateKbps:128,sampleRateHz:48e3,channels:1},opus:{kind:`encode`,codec:`opus`,bitrateKbps:64,sampleRateHz:48e3,channels:1},pcmu:{kind:`encode`,codec:`pcmu`,sampleRateHz:8e3,channels:1}};function Ze(e){return[`-hide_banner`,`-loglevel`,e]}function Qe(e){return!e||e===`none`||e===`copy`}function $e(e,t){let n=[];if(Qe(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);return e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),n.push(`-i`,e.url),n}function et(e,t){return!e||t.some(e=>e===`-vf`)?[]:e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`]}function tt(e){let t=e.bitrateKbps;if(t===void 0)return[];let n=e.rateControl??{kind:`cap`,vbvSeconds:2},r=Math.max(1,Math.round(t*n.vbvSeconds));return[...n.kind===`cbr`?[`-b:v`,`${t}k`]:[],`-maxrate`,`${t}k`,`-bufsize`,`${r}k`]}function nt(e,t){if(e.kind===`copy`)return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]];let n=[...et(e.scale,t),`-c:v`,e.encoder];return e.preset!==void 0&&n.push(`-preset`,e.preset),e.tune!==void 0&&n.push(`-tune`,e.tune),e.profile!==void 0&&n.push(`-profile:v`,e.profile),e.level!==void 0&&n.push(`-level`,e.level),e.pixelFormat!==void 0&&n.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&n.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&n.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&n.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&n.push(`-bf`,String(e.bf)),n.push(...tt(e)),e.bitstreamFilter!==void 0&&n.push(`-bsf:v`,e.bitstreamFilter),n}function rt(e){if(e.kind===`none`)return[`-an`];if(e.kind===`copy`)return[`-c:a`,`copy`];let t=[];return e.filter!==void 0&&t.push(`-af`,e.filter),t.push(`-c:a`,Ye[e.codec]),e.application!==void 0&&t.push(`-application`,e.application),e.frameDurationMs!==void 0&&t.push(`-frame_duration`,String(e.frameDurationMs)),e.globalHeader===!0&&t.push(`-flags`,`+global_header`),e.sampleRateHz!==void 0&&t.push(`-ar`,String(e.sampleRateHz)),e.bitrateKbps!==void 0&&t.push(`-b:a`,`${e.bitrateKbps}k`),e.vbvBufferKbits!==void 0&&t.push(`-bufsize`,`${e.vbvBufferKbits}k`),e.channels!==void 0&&t.push(`-ac`,String(e.channels)),t}function it(e){let t=[];return e.payloadType!==void 0&&t.push(`-payload_type`,String(e.payloadType)),e.ssrc!==void 0&&t.push(`-ssrc`,String(e.ssrc)),e.sdpFile!==void 0&&t.push(`-sdp_file`,e.sdpFile),t.push(`-f`,`rtp`,e.url),t}function at(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var ot=`+frag_keyframe+empty_moov+default_base_moof`;function st(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?lt(e):[`-f`,e.container,`pipe:1`]}var ct=.9;function lt(e){return[`-movflags`,ot,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*ct*1e3))),`-f`,`mp4`,`pipe:1`]}function ut(e){return[`-map`,`0:a:0?`,...rt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:Xe[e.codec]),...it({url:e.rtpUrl,sdpFile:e.sdpFile})]}function dt(e){let t=[...Ze(e.logLevel),...$e(e.input,e.decodeHwAccel)],n=e.threadCount>0?[`-threads`,String(e.threadCount)]:[];if(e.sink.kind===`rtp-outputs`){let r=e.sink.video?[`-an`,`-map`,`0:v:0`,...nt(e.video,e.outputArgs),...n,...e.outputArgs,...it(e.sink.video)]:[],i=e.sink.audio?[`-vn`,`-map`,`0:a:0?`,...rt(e.audio),...it(e.sink.audio)]:[];return[...t,...r,...i]}let r=at(e.sink)?[`-an`]:rt(e.audio),i=st(e.sink);return[...t,...nt(e.video,e.outputArgs),...n,...r,...e.outputArgs,...i,...e.audioSidecar?ut(e.audioSidecar):[]]}var ft={videotoolbox:{h264:`h264_videotoolbox`,h265:`hevc_videotoolbox`},vaapi:{h264:`h264_vaapi`,h265:`hevc_vaapi`},qsv:{h264:`h264_qsv`,h265:`hevc_qsv`},cuda:{h264:`h264_nvenc`,h265:`hevc_nvenc`},nvdec:{h264:`h264_nvenc`,h265:`hevc_nvenc`},amf:{h264:`h264_amf`,h265:`hevc_amf`}};function pt(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Qe(t)||t===`auto`)return r;let i=ft[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function mt(e){return e===`passthrough`?{kind:`none`}:e.codec===`copy`?{kind:`copy`}:{kind:`encode`,codec:e.codec,...e.bitrateKbps===void 0?{}:{bitrateKbps:e.bitrateKbps},...e.sampleRateHz===void 0?{}:{sampleRateHz:e.sampleRateHz},...e.channels===void 0?{}:{channels:e.channels}}}function ht(e){let t=e.profile.video,n=t.codec===`copy`||e.forceReencode!==!0&&t.codec===e.sourceCodec,r=t.width!==void 0&&t.height!==void 0?{mode:`fit`,width:t.width,height:t.height}:null,i=t.codec===`h265`?`h265`:`h264`,a=n?{kind:`copy`,...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}}:{kind:`encode`,encoder:pt(i,e.decodeHwAccel,e.hardwareEncoders===!0),scale:r,...t.preset===void 0?{}:{preset:t.preset},...t.tune===void 0?{}:{tune:t.tune},...t.profile===void 0?{}:{profile:t.profile},...t.level===void 0?{}:{level:t.level},...e.pixelFormat===void 0?{}:{pixelFormat:e.pixelFormat},...t.fps===void 0?{}:{fps:t.fps},...t.gopFrames===void 0?{}:{gopFrames:t.gopFrames},...e.forceKeyFramesSeconds===void 0?{}:{forceKeyFramesSeconds:e.forceKeyFramesSeconds},...t.bf===void 0?{}:{bf:t.bf},...t.bitrateKbps===void 0?{}:{bitrateKbps:t.bitrateKbps},...e.rateControl===void 0?{}:{rateControl:e.rateControl},...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}};return{logLevel:e.logLevel??`error`,decodeHwAccel:e.decodeHwAccel,input:{url:e.sourceUrl,rtspTransport:`tcp`,fflags:[`+discardcorrupt`],...e.profile.inputArgs?.length?{extraArgs:e.profile.inputArgs}:{}},video:a,audio:mt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var gt={video:{codec:`h264`,profile:`baseline`,level:`3.1`,width:1280,height:720,fps:25,bitrateKbps:2500,gopFrames:25,bf:0,preset:`veryfast`,tune:`zerolatency`},audio:`passthrough`},_t={...gt,video:{...gt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},vt={...gt,audio:{codec:`opus`}},yt={kind:`cbr`,vbvSeconds:1},bt={kind:`cap`,vbvSeconds:2},xt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},St=16*1024*1024,Ct=8,wt=16,Tt=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??St}get fault(){return this.faultReason}get pendingBytes(){return this.buffer.length-this.unitStart}get discardedInterstitialTypes(){return[...this.interstitial]}push(e){return this.faultReason!==null||e.length===0?[]:(this.append(e),this.pendingBytes>this.maxUnitBytes?this.fail(`a single fMP4 unit exceeded ${this.maxUnitBytes} bytes — this stream is not fragmented`):this.drainBoxes())}append(e){if(this.buffer.length===0){this.buffer=e.slice();return}let t=new Uint8Array(this.buffer.length+e.length);t.set(this.buffer,0),t.set(e,this.buffer.length),this.buffer=t}drainBoxes(){let e=[];for(;;){let t=this.readHeader();if(this.faultReason!==null)return e;if(t===null||this.cursor+t.totalBytes>this.buffer.length)break;let n=this.cursor,r=n+t.totalBytes;this.cursor=r;let i=this.consumeBox(t.type,n,r);if(this.faultReason!==null)return e;i!==null&&e.push(i)}return this.compact(),e}consumeBox(e,t,n){if(this.state===`init`){if(e!==`moof`)return null;if(t===this.unitStart)return this.fail(`a moof arrived before any initialisation box — there is no ftyp/moov to send`),null;let n=this.emit(`init`,this.unitStart,t);return this.unitStart=t,this.state=`fragment`,n}if(this.state===`idle`)return e===`moof`?(this.unitStart=t,this.state=`fragment`,null):(this.interstitial.add(e),this.unitStart=n,null);if(e!==`mdat`)return null;let r=this.emit(`fragment`,this.unitStart,n);return this.unitStart=n,this.state=`idle`,r}readHeader(){let e=this.buffer.length-this.cursor;if(e<Ct)return null;let t=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),n=t.getUint32(this.cursor),r=String.fromCharCode(this.buffer[this.cursor+4]??0,this.buffer[this.cursor+5]??0,this.buffer[this.cursor+6]??0,this.buffer[this.cursor+7]??0);if(n===0)return this.fail(`box "${r}" declares size 0 (to EOF) — an unbounded box cannot be fragmented`),null;if(n===1){if(e<wt)return null;let n=t.getBigUint64(this.cursor+Ct);return n>BigInt(this.maxUnitBytes)?(this.fail(`box "${r}" declares ${n} bytes, over the ${this.maxUnitBytes} byte bound`),null):{type:r,totalBytes:Number(n)}}return n<Ct?(this.fail(`box "${r}" declares an impossible size of ${n} bytes`),null):{type:r,totalBytes:n}}emit(e,t,n){let r=this.nextSequence;return this.nextSequence+=1,{kind:e,data:this.buffer.slice(t,n),sequence:r}}compact(){this.unitStart!==0&&(this.buffer=this.buffer.slice(this.unitStart),this.cursor-=this.unitStart,this.unitStart=0)}fail(e){return this.faultReason=e,this.buffer=new Uint8Array,this.unitStart=0,this.cursor=0,[]}};function Et(e){let t=e.now??(()=>Date.now()),n=null,r=-1/0;return{read(){return t()-r<e.ttlMs?n:void 0},write(e){n=e,r=t()}}}function Dt(e){return!e||e===`none`||e===`copy`}async function Ot(e){let t=e.override;if(t!=null&&t!==``)return Dt(t)?null:t;let n=e.cache?.read();if(n!==void 0)return n;let r;try{r=await e.readDecoderBackend()}catch(t){let n=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unreadable`,kernelPreferred:n,error:t instanceof Error?t.message:String(t)}),e.cache?.write(null),null}if(r===``){let t=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unprobed`,kernelPreferred:t}),e.cache?.write(null),null}let i=Dt(r)?null:r;return e.cache?.write(i),i}var kt=me();function At(e){let t=JSON.stringify(e,jt);return(0,kt.createHash)(`sha256`).update(t??``).digest(`hex`)}function jt(e,t){if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t,n={};for(let t of Object.keys(e).toSorted())n[t]=e[t];return n}return t}function Mt(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var Nt=`\0unset`;function Pt(e){return{codec:e.codec,profile:e.profile??Nt,level:e.level??Nt,width:e.width??-1,height:e.height??-1,fps:e.fps??-1,bitrateKbps:e.bitrateKbps??-1,gopFrames:e.gopFrames??-1,bf:e.bf??-1,preset:e.preset??Nt,tune:e.tune??Nt}}function Ft(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function It(e,t=Mt(e)){return{deviceId:e.deviceId,source:e.source.kind===`profile`?`profile:${e.source.profile}`:`cam-stream:${e.source.camStreamId}`,transport:t.transport,fragmentMs:t.fragmentMs??-1,video:Pt(e.encode.video),audio:Ft(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??Nt,pixelFormat:e.pixelFormat??Nt,decodeHwAccel:e.decodeHwAccel??Nt}}function Lt(e,t=Mt(e)){return`egress:${At(It(e,t))}`}var Rt=m([`singleton`,`device`,`widget`]),zt=a({capName:g(),kind:Rt,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),Bt=a({addonId:g(),caps:p(zt).readonly(),widgets:p(zt).readonly()}),Vt=a({nodeId:g(),addons:p(Bt).readonly()}),Ht=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(Vt).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),Ut=`hub-only`;function Wt(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function Gt(e){let t=Wt(e).placement;return t===`any-node`||t===`agent-only`}function Kt(e){return Wt(e).placement===`agent-only`}function qt(e){return Wt(e).group}function Jt(e,t){return e.execution?.group??t}function Yt(e){return Wt(e).placement}function Xt(e){return e.execution?.isolate===!0}var Zt=`x-camstack-dataplane-secret`,Qt=[`grid-view`,`events-view`],$t=m([`running`,`done`,`failed`,`cancelled`]),en=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),tn=a({childNativeId:g(),outcome:en,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),nn=a({jobId:g(),addonId:g(),integrationId:g(),state:$t,total:o().int().nonnegative(),processed:o().int().nonnegative(),adopted:o().int().nonnegative(),alreadyAdopted:o().int().nonnegative(),failed:o().int().nonnegative(),accessoriesCreated:o().int().nonnegative(),currentChildNativeId:g().nullable(),results:p(tn).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),rn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},an=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`]),on=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`],sn=b(`kind`,[a({kind:y(`device-disabled`)}),a({kind:y(`wrapper-binding`),capName:g()}),a({kind:y(`recording-config`)}),a({kind:y(`notification-mute`)}),a({kind:y(`camera-audio`),capName:g()}),a({kind:y(`camera-mask`),capName:g()}),a({kind:y(`broker-audio-mute`)})]),cn=m([`no-provider`,`source-unreachable`,`not-configured`,`device-disabled`]),ln=a({id:an,label:g(),costWhenOff:g(),available:v(),unavailableReason:cn.optional(),enabled:v(),authority:sn}),un=a({deviceId:o().int(),switches:p(ln).readonly(),fetchedAt:o()}),dn=`detection-pipeline`,fn=`audio-analysis`,pn=`privacy-mask`,mn={"stream-broker":{id:`stream-broker`,label:`Camera`,costWhenOff:`Off: the whole camera stops. No live view, no recording, no detection and no notifications — its streams are released and nothing dials it again until you turn it back on.`,authority:{kind:`device-disabled`},countsAsSwitchedOff:!0},"object-detection":{id:`object-detection`,label:`Object detection & tracking`,costWhenOff:`Off: nothing is detected or tracked on this camera, so it produces no events — and with no events there are no object notifications and no event-triggered recording. Live view and continuous recording are unaffected.`,authority:{kind:`wrapper-binding`,capName:dn},countsAsSwitchedOff:!0},"privacy-mask":{id:`privacy-mask`,label:`Privacy mask`,costWhenOff:`On: the zones you drew on this camera are blacked out by the camera itself — live view, playback, exports and detection all see the black boxes, and nothing behind them was ever recorded. Off: the camera captures the whole frame, and your zones are kept for when you turn it back on.`,authority:{kind:`camera-mask`,capName:pn},countsAsSwitchedOff:!1},"device-audio":{id:`device-audio`,label:`Camera microphone`,costWhenOff:`Off: the camera captures no sound at all. Live view and recordings become silent video, and audio detection and classification have nothing left to analyse — turning them back on will not recover it. The picture, motion and object detection are unaffected, and two-way talk still works. Applies at the camera, so every consumer sees the same silence.`,authority:{kind:`camera-audio`,capName:pn},countsAsSwitchedOff:!0},"broker-audio":{id:`broker-audio`,label:`Audio distribution`,costWhenOff:`Off: this server distributes no sound for this camera — live view is silent and everything recorded while it is off is silent FOREVER, even after you turn it back on. Audio detection and classification also have nothing to analyse. The camera keeps capturing sound, so nothing about the camera changes and turning this back on is instant, with no interruption to the picture.`,authority:{kind:`broker-audio-mute`},countsAsSwitchedOff:!0},"audio-analysis":{id:`audio-analysis`,label:`Audio detection & classification`,costWhenOff:`Off: no audio is decoded or classified for this camera. Tracks carry no audio labels and no audio-triggered rule can fire. Audio recorded alongside video is unaffected.`,authority:{kind:`wrapper-binding`,capName:fn},countsAsSwitchedOff:!0},recording:{id:`recording`,label:`Recording`,costWhenOff:`Off: nothing new is written to disk. Footage already recorded stays, but retention keeps deleting it — so this camera’s history shrinks and is not replaced. Your recording schedule is kept and resumes when you turn it back on.`,authority:{kind:`recording-config`},countsAsSwitchedOff:!0},notifications:{id:`notifications`,label:`Notifications`,costWhenOff:`Off: this camera never notifies anyone, on any rule, with no expiry. Detection, events and recording carry on exactly as before — you simply stop being told about them.`,authority:{kind:`notification-mute`},countsAsSwitchedOff:!0}};function hn(e,t){switch(e.authority.kind){case`device-disabled`:return{available:!0,enabled:!t.deviceDisabled};case`wrapper-binding`:{let n=e.authority.capName;return t.bindableCapNames===null||t.activeWrapperCapNames===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:t.bindableCapNames.includes(n)?{available:!0,enabled:t.activeWrapperCapNames.includes(n)}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`recording-config`:return t.recordingEnabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:t.recordingEnabled};case`notification-mute`:return t.notificationsMuted===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!t.notificationsMuted};case`camera-audio`:{let e=t.deviceAudio;return e===null?{available:!1,enabled:!0,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.enabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`camera-mask`:{let e=t.privacyMask;return e===null?{available:!1,enabled:!1,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!1,enabled:!1,unavailableReason:`not-configured`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function gn(e){return on.map(t=>{let n=mn[t],r=hn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},enabled:r.enabled,authority:n.authority}})}function _n(e){return e.filter(e=>mn[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function vn(e){let t=[],n=[];for(let r of on){let i=mn[r];if(!i.countsAsSwitchedOff)continue;let a=hn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var yn=`__camstack_redacted__`;function bn(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function xn(e){let t=new Set;for(let n of wn(e))for(let e of Tn(n))En(e,t);return t}function Sn(e){for(let t of wn(e))if(Tn(t).length>0)return!0;return!1}function Cn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wn(e){if(!Cn(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function Tn(e){if(!Cn(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function En(e,t){if(!Cn(e))return;let n=e.type,r=e.key;if((n===`password`||e.secret===!0)&&typeof r==`string`&&r.length>0&&t.add(r),n===`group`){for(let n of Tn(e))En(n,t);return}if(n===`sub-tabs`){let n=e.tabs;if(!Array.isArray(n))return;for(let e of n)for(let n of Tn(e))En(n,t)}}var Dn={high:`High`,mid:`Mid`,low:`Low`};function On(e){return Dn[e]??e.charAt(0).toUpperCase()+e.slice(1)}function kn(e){return(e.width??0)*(e.height??0)}function An(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:kn(e.metadata??{})})).toSorted((e,t)=>t.px-e.px),n=Array.from({length:e.length});for(let e=0;e<t.length;e++){let{s:r,i}=t[e],a;a=e===0?`high`:e===t.length-1?`low`:`mid`,n[i]={...r,quality:a}}return n}function jn(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function Mn(e){let t=e.protocols.find(e=>e.type===`rtsp`&&e.url)??e.protocols.find(e=>e.url),n=t?.type,r=n===`rtsp`?`rtsp`:n===`http`||n===`flv`?`http-mjpeg`:`custom`;return{id:e.id,label:e.label??e.id,protocol:r,url:t?.url,profileHint:e.quality}}function S(e){return typeof e==`string`}function Nn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pn(e){return S(e)&&e.trim()?{url:e}:Nn(e)&&S(e.url)&&e.url.trim()?{url:e.url,label:S(e.label)?e.label:void 0}:null}function Fn(e){let t=S(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Pn(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=S(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:S(e.main_stream_name)?e.main_stream_name:void 0});let i=S(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:S(e.sub_stream_name)?e.sub_stream_name:void 0});let a=S(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:S(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function In(e){if(e.length===0)return{};let t=An(e),n={},r=t.find(e=>e.quality===`high`),i=t.find(e=>e.quality===`mid`),a=t.find(e=>e.quality===`low`);r&&(n.high=r.id),i&&(n.mid=i.id),a&&(n.low=a.id);let o=r??i??a??t[0];return o&&(n.high||=o.id,n.mid||=o.id,n.low||=o.id),n}var Ln={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},Rn={debug:0,info:1,warn:2,error:3};function zn(e,t){return Rn[e]<=Rn[t]}var Bn=m([`info`,`warn`,`error`]),Vn=a({name:g().min(3).regex(/^[a-z0-9-]+(\.[a-z0-9-]+)+$/,`a channel name is dotted lower-kebab, e.g. area.thing`),description:g().min(1),defaultLevel:Bn,perDevice:v()}),Hn=a({channel:g().min(1),armedUntilMs:o(),deviceIds:p(o().int()).readonly().nullable()}),Un=class{descriptor;on=!1;devices=null;level;closesAtMs=0;constructor(e){this.descriptor=e,this.level=e.defaultLevel}get armedUntilMs(){return this.on?this.closesAtMs:0}wants(e){return this.on?this.devices===null||this.devices.has(e):!1}log(e,t,n){if(!this.on)return;let r={...n.tags,logChannel:this.descriptor.name},i={...n,tags:r};this.level===`error`?e.error(t,i):this.level===`warn`?e.warn(t,i):e.info(t,i)}arm(e){let t=e.deviceIds;this.devices=t===null||t.length===0?null:new Set(t),this.closesAtMs=e.armedUntilMs,this.on=!0}disarm(){this.on=!1,this.devices=null,this.closesAtMs=0}},Wn=class{gates=new Map;declare(e){let t=Vn.parse(e);if(this.gates.get(t.name)!==void 0)throw Error(`log channel "${t.name}" is already declared in this process — two declarations of one name is a programming error, not a merge`);let n=new Un(t);return this.gates.set(t.name,n),n}list(){return[...this.gates.values()].map(e=>e.descriptor).sort((e,t)=>e.name.localeCompare(t.name))}gate(e){return this.gates.get(e)}apply(e,t){let n=new Map,r=[];for(let i of e)if(!(i.armedUntilMs<=t)){if(!this.gates.has(i.channel)){r.push(i.channel);continue}n.set(i.channel,i)}for(let[e,t]of this.gates){let r=n.get(e);r===void 0?t.disarm():t.arm(r)}return r}tick(e){let t=[];for(let[n,r]of this.gates)r.on&&r.armedUntilMs<=e&&(r.disarm(),t.push(n));return t}armed(){let e=[];for(let[t,n]of this.gates)n.on&&e.push({channel:t,armedUntilMs:n.armedUntilMs,deviceIds:null});return e}},Gn=null;function Kn(){return Gn??=new Wn,Gn}function qn(e){return Kn().declare(e)}function Jn(){Gn=null}var Yn=5e3;function Xn(e,t={}){let n=Kn(),r=t.now??Date.now,i=t.tickMs??5e3,a=setInterval(()=>{let t=n.tick(r());for(let n of t)e.info(`log channel window closed`,{tags:{logChannel:n},meta:{channel:n}})},i);return a.unref?.(),{list:()=>n.list(),apply:t=>{let i=n.apply(t.windows,r()),a=n.armed();return e.info(`log channels applied`,{meta:{armed:a.map(e=>e.channel),unknown:i,declared:n.list().length}}),{armed:a.length,unknown:i}},stop:()=>{clearInterval(a)}}}var Zn=m([`recording`,`events`]),Qn=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),$n=m([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),er=a({id:g(),at:o(),domain:Zn,op:Qn,reason:$n,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),tr=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),C=m([`high`,`mid`,`low`]),nr=[`high`,`mid`,`low`],rr=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),ir=a({width:o().int().positive(),height:o().int().positive()}),ar=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:rr,url:g().optional(),codec:g().optional(),resolution:ir.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),metadata:r(g(),d()).optional()}),or=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),sr=a({deviceId:o().int().nonnegative(),profile:C,brokerId:g(),sourceCamStreamId:g().nullable(),status:or,resolution:ir.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function cr(e,t){return`${e}/${t}`}function lr(e,t){return`${e}/${t}`}function ur(e){let t=e.indexOf(`/`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);if(!/^\d+$/.test(n))return null;let i=C.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function dr(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>nr.indexOf(e.profile)-nr.indexOf(t.profile)),r=new Set,i=[];for(let e of n){let t=e.sourceCamStreamId;t!==null&&(r.has(t)||(r.add(t),i.push(e)))}return i}var fr=a({id:g(),label:g(),protocol:m([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:g().optional(),resolution:a({width:o(),height:o()}).readonly().optional(),fps:o().optional(),bitrate:o().optional(),codec:g().optional(),profileHint:C.optional()}),pr=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),mr=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),hr=a({data:_(Uint8Array),width:o(),height:o(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:o()}),w=a({shmId:g(),slot:o().int().nonnegative(),seq:o().int().nonnegative(),width:o().int().positive(),height:o().int().positive(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:o(),byteLength:o().int().nonnegative(),nodeId:g(),slotCount:o().int().positive()}),gr=m([`rgb`,`bgr`,`yuv420`,`gray`]),_r=a({brokerId:g(),format:gr,maxFps:o().positive().optional(),tag:g().optional()}),vr=a({subscriptionId:g(),maxFps:o().nonnegative()}),yr=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o()}),br=a({brokerId:g(),tag:g().optional()}),xr=a({subscriptionId:g()}),Sr=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),Cr=a({status:Sr,inputFps:o(),decodeFps:o(),encodedSubscribers:o(),decodedSubscribers:o(),uptimeMs:o(),bitrateKbps:o(),idrIntervalMs:o(),codec:g().optional(),totalBytes:o(),packetCount:o(),rtspClients:o(),pipeClients:o(),preBufferSec:o(),preBufferMs:o(),preBufferPackets:o(),decoderNodeId:g().nullable(),audio:a({codec:g(),sampleRate:o(),channels:o(),supported:v()}).nullable().optional(),audioMuted:v().optional(),audioMutedDropped:o().optional()}),wr=a({profile:C,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:ir.optional()}),Tr=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),Er=[`person`,`vehicle`,`animal`,`package`],Dr=[`person`,`vehicle`,`animal`];function Or(e){return Dr.some(t=>t===e)}var kr=a({mapping:r(g(),m(Er)),preserveOriginal:v()}),Ar={preMs:5e3,postMs:1e4},jr=o().int().min(0).max(6),Mr=/^([01]\d|2[0-3]):[0-5]\d$/,Nr=m([`off`,`events`,`continuous`]),Pr=m(Dr),Fr=e=>new Set(e).size===e.length,Ir=a({motion:v().optional(),audioThresholdDbfs:o().optional(),objectClasses:p(Pr).min(1).refine(Fr,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:p(o().int().positive()).min(1).max(16).refine(Fr,{message:`sensorDeviceIds must not repeat a device`}).optional()}),Lr=m([`continuous`,`events`]),Rr=Ir,zr=a({days:p(jr),start:g().regex(Mr),end:g().regex(Mr),mode:Lr,triggers:Rr.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),Br={preBufferSec:15,postBufferSec:30},Vr=Br.postBufferSec*1e3,Hr=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),Ur=a({enabled:v(),mode:Nr.optional(),profiles:p(C).optional(),segmentSeconds:o().int().positive().optional(),bands:p(zr).default([]),retention:Hr.optional()}).strict();function Wr(e){return!e.enabled||e.bands.length===0?`off`:e.bands.some(e=>e.mode===`continuous`)?`continuous`:`events`}var Gr=[`high`,`low`];function Kr(e,t){if(t!==void 0&&t.length>0){let n=e.filter(e=>t.includes(e));return n.length>0?n:[...e]}let n=e.filter(e=>Gr.includes(e));return n.length>0?n:[...e]}var qr=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Jr=a({jobId:g(),state:qr,fromLocationId:g(),toLocationId:g(),deviceId:o().nullable(),entities:p(g()),filesMoved:o().int(),bytesMoved:o().int(),filesTotal:o().int().nullable(),rowsReconciled:o().int().nonnegative().optional(),rowsForgotten:o().int().nonnegative().optional(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Yr=m([`recordings`,`recordingsLow`]),Xr=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Yr.optional(),deviceId:o().int().optional(),profiles:p(g()).optional(),throttleMbps:o().min(1).max(1e3).optional(),sinceMs:o().int().optional()}),T=a({leaseId:g().min(1)}),Zr=Xr.extend({leaseId:g().min(1)}),Qr=m([`move`,`seal`,`gallery`]),$r=a({toLocationId:g(),fromLocationId:g().optional(),throttleMbps:o().min(1).max(1e3).optional(),mode:Qr.optional()}),ei=a({present:v(),rows:o().int().nonnegative().nullable()}),ti=a({media:ei,retrainFrames:ei,anyPresent:v(),total:o().int().nonnegative().nullable()}).nullable(),ni=$r.extend({leaseId:g().min(1)}),ri=m([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),ii=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),ai=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).optional(),oi=m([`blocking`,`nonBlocking`]),si=a({destinations:ii,sources:ai,throttleMbps:o().min(1).max(1e3).optional(),mode:oi.optional()}),ci=m([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),li=m([`pipeline`,`recorder`,`analytics`]),ui=a({filesMoved:o().int().nonnegative(),filesTotal:o().int().nonnegative().nullable(),bytesMoved:o().int().nonnegative(),rowsReconciled:o().int().nonnegative().optional(),startedAt:o(),observedAt:o()}),di=a({storageClass:ri,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional(),moverJobId:g().nullable(),state:qr.nullable(),error:g().nullable(),progress:ui.nullable()}),fi=a({jobId:g(),phase:ci,mode:oi,destinations:ii,sources:ai,throttleMbps:o(),moves:p(di),pauseLeaseId:g().nullable(),pausedParticipants:p(li),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),pi=m([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),mi=a({code:pi,storageClass:ri,message:g()}),hi=a({destinations:ii,sources:ai,mode:oi,moves:p(a({storageClass:ri,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional()})),findings:p(mi)}),gi=m([`footage`,`media`]),_i=a({lane:gi,job:Jr,migrationJobId:g().nullable(),observedAt:o()}),vi=a({storageClass:ri,fromLocationId:g(),toLocationId:g(),items:o().int().nonnegative().nullable(),bytes:o().int().nonnegative().nullable()}),yi=a({classes:p(ri).min(1),throttleMbps:o().min(1).max(1e3).optional()}),bi=a({fromLocationId:g().min(1),footageClass:Yr.optional()}),xi=a({segments:o().int().nonnegative(),bytes:o().int().nonnegative()}).nullable(),Si=a({locationId:g().min(1),apply:v().optional(),deviceId:o().int().positive().optional(),profiles:p(g().min(1)).optional()}),Ci=m([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),wi=m([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),Ti=a({"live-tail":o().int().nonnegative(),"listing-error":o().int().nonnegative(),"path-mismatch":o().int().nonnegative(),"durable-refused":o().int().nonnegative()}),Ei=a({deviceId:o().int(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),orphanFiles:o().int().nonnegative()}),Di=a({locationId:g(),applied:v(),refused:Ci.nullable(),archiveSegments:o().int().nonnegative().nullable(),archiveBytes:o().int().nonnegative().nullable(),hoursClaimed:o().int().nonnegative(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),listings:o().int().nonnegative(),segmentsClaimed:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),ghostHoursWhole:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),forgottenBytes:o().int().nonnegative(),orphanFiles:o().int().nonnegative(),orphanSample:p(g()).readonly(),hoursSkipped:o().int().nonnegative(),skippedByReason:Ti,bounded:v(),byDevice:p(Ei).readonly()}),Oi=a({rows:o().int().nonnegative()}).nullable(),ki=a({toLocationId:g().min(1),fromLocationId:g().optional(),mode:Qr.optional()}),Ai=m([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),ji=a({includeDebugMedia:v().optional()}),Mi=a({jobId:g(),phase:Ai,includeDebugMedia:v(),orphansReclaimed:o().int().nonnegative(),orphanBytesReclaimed:o().int().nonnegative(),debugMediaReclaimed:o().int().nonnegative(),debugMediaBytesReclaimed:o().int().nonnegative(),ghostsForgotten:o().int().nonnegative(),ghostBytesForgotten:o().int().nonnegative(),detail:g().nullable(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Ni=a({jobId:g().optional()}),Pi=[`face`,`plate`],Fi=[`face`,`plate`,`clip`,`custom`],Ii=g().regex(/^[a-z][a-zA-Z0-9-]*$/),E=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:g(),displayName:g().min(1),providerId:g().min(1),config:r(g(),d()),nodeId:g().optional(),isDefault:v().default(!1),isSystem:v().default(!1),enabled:v().optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),createdAt:o(),updatedAt:o()}),D=l([Ii,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),Li=m([`local-path`,`cap-mediated`]),Ri=`local-path`,zi=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:g().min(1,{message:`displayName must not be empty`}),description:g().optional(),cardinality:m([`single`,`multi`]),access:Li.optional(),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),Bi=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Vi=a({codec:g(),maxFps:o().default(0),outputFormat:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:o().default(1),width:o().optional(),height:o().optional(),deviceId:o().int().nonnegative().optional(),tag:g().optional(),frameSink:m([`callback`,`shm`]).default(`callback`),debug:v().optional()}),Hi={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},Ui={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Wi=[{id:`UTC`,label:`UTC (UTC+0)`,region:`Universal`,stdOffsetMinutes:0,dst:null},{id:`Europe/London`,label:`Europe/London (UTC+0 / BST)`,region:`Europe`,stdOffsetMinutes:0,dst:Hi},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Istanbul`,label:`Europe/Istanbul (UTC+3)`,region:`Europe`,stdOffsetMinutes:180,dst:null},{id:`America/New_York`,label:`America/New York (UTC−5 / EDT)`,region:`Americas`,stdOffsetMinutes:-300,dst:Ui},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:Ui},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:Ui},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:Ui},{id:`America/Sao_Paulo`,label:`America/Sao Paulo (UTC−3)`,region:`Americas`,stdOffsetMinutes:-180,dst:null},{id:`Asia/Dubai`,label:`Asia/Dubai (UTC+4)`,region:`Asia`,stdOffsetMinutes:240,dst:null},{id:`Asia/Kolkata`,label:`Asia/Kolkata (UTC+5:30)`,region:`Asia`,stdOffsetMinutes:330,dst:null},{id:`Asia/Singapore`,label:`Asia/Singapore (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Shanghai`,label:`Asia/Shanghai (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Tokyo`,label:`Asia/Tokyo (UTC+9)`,region:`Asia`,stdOffsetMinutes:540,dst:null},{id:`Australia/Sydney`,label:`Australia/Sydney (UTC+10 / AEDT)`,region:`Oceania`,stdOffsetMinutes:600,dst:{offsetHours:1,startMonth:10,startWeekIndex:1,startWeekday:`Sunday`,startHour:2,endMonth:4,endWeekIndex:1,endWeekday:`Sunday`,endHour:3}}];function Gi(e){return Wi.find(t=>t.id===e)}var Ki=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Ji(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function qi(e,t){return`${e}|${Ji(t)}`}function Ji(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function Yi(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function Xi(e,t){return e.type===t.type?e.type===`global`||t.type===`global`?!0:e.type===`node`&&t.type===`node`?e.nodeId===t.nodeId:e.type===`device`&&t.type===`device`?e.deviceId===t.deviceId:!1:!1}var Zi=class{bus;sourceNodeId;logger;now;generation;verboseDeviceScopeLogs;snapshot=new Map;subscriptions=new Set;unsubscribeBus;unsubscribeAgentOffline;constructor(e){if(this.bus=e.eventBus,this.sourceNodeId=e.sourceNodeId,this.logger=e.logger,this.now=e.now??(()=>Date.now()),this.generation=e.generation??Qi(),this.verboseDeviceScopeLogs=e.verboseDeviceScopeLogs??!1,this.unsubscribeBus=this.bus.subscribe({category:`system.ready-state`},e=>this.ingest(e.data)),this.unsubscribeAgentOffline=this.bus.subscribe({category:`agent.offline`},e=>this.synthesizeDownForNode(e.data.agentId)),typeof this.bus.getRecent==`function`)try{let e=this.bus.getRecent({category:`system.ready-state`});for(let t of e)this.ingest(t.data)}catch{}}close(){this.unsubscribeBus(),this.unsubscribeAgentOffline(),this.subscriptions.clear()}get(e,t){return this.snapshot.get(qi(e,t))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(e){let t=this.now(),n=0;for(let r of e){let e=qi(r.capName,r.scope),i=this.snapshot.get(e)??null,a,o;if(i!==null){if(this.isLocallyAuthoritative(i))continue;let e=i.generation===r.generation;if(e&&Yi(r.state)<=Yi(i.state))continue;a=!e&&r.state===`ready`?i.epoch+1:i.epoch,o=Math.max(0,t-i.lastChange)}else a=1,o=0;let s={capName:r.capName,scope:r.scope,state:r.state,generation:r.generation,epoch:a,lastChange:t,sourceNodeId:r.sourceNodeId};this.snapshot.set(e,s),n++,this.logPerRecord(r.scope,`readiness: ${r.capName} (${Ji(r.scope)}) → ${r.state} (hydrated${i===null?``:` update`}, gen=${r.generation.slice(0,6)})`);let c={capName:r.capName,scope:r.scope,state:r.state,epoch:a,generation:r.generation,sourceNodeId:`hydrated`,ts:t,durationInPrevState:o};for(let e of this.subscriptions)if(e.capName===r.capName&&Xi(e.scope,r.scope))try{e.handler(c)}catch(e){this.logger?.warn(`readiness hydrate handler threw for ${r.capName}: ${e.message??String(e)}`)}}return n}logPerRecord(e,t){if(this.logger){if(e.type===`device`){if(!this.verboseDeviceScopeLogs)return;this.logger.debug(t,{tags:{deviceId:e.deviceId}});return}this.logger.debug(t)}}isLocallyAuthoritative(e){return e.scope.type===`node`?e.scope.nodeId===this.sourceNodeId:e.sourceNodeId===this.sourceNodeId}getAll(){return new Map(this.snapshot)}emitReady(e,t){this.emitTransition(e,t,`ready`)}emitStarting(e,t){this.emitTransition(e,t,`starting`)}emitDown(e,t){this.emitTransition(e,t,`down`)}awaitReady(e,t,n={}){let r=n.timeoutMs??1/0,i=this.now();return this.get(e,t)?.state===`ready`?Promise.resolve():n.signal?.aborted?Promise.reject(n.signal.reason??Error(`aborted`)):new Promise((a,o)=>{let s=!1,c=this.onReadyState(e,t,e=>{e.state===`ready`&&(s||(s=!0,f(),a()))}),l=Number.isFinite(r)?setTimeout(()=>{s||(s=!0,f(),o(new Ki(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Ji(t)}) after ${this.now()-i}ms`)},3e4);typeof u.unref==`function`&&u.unref();let d=()=>{s||(s=!0,f(),o(n.signal?.reason??Error(`aborted`)))};n.signal?.addEventListener(`abort`,d,{once:!0});function f(){c(),l!==null&&clearTimeout(l),clearInterval(u),n.signal?.removeEventListener(`abort`,d)}})}onReadyState(e,t,n){let r={capName:e,scope:t,handler:n};this.subscriptions.add(r);let i=this.get(e,t);return i!==null&&queueMicrotask(()=>{this.subscriptions.has(r)&&n({capName:e,scope:t,state:i.state,epoch:i.epoch,generation:i.generation,sourceNodeId:this.sourceNodeId,ts:i.lastChange,durationInPrevState:0})}),()=>{this.subscriptions.delete(r)}}emitTransition(e,t,n){let r=this.now();this.bus.emit(Oe(`system.ready-state`,{type:`capability`,id:e,nodeId:this.sourceNodeId},{capName:e,scope:t,state:n,generation:this.generation,sourceNodeId:this.sourceNodeId,ts:r}))}ingest(e){if(typeof e?.capName!=`string`||e.state!==`ready`&&e.state!==`starting`&&e.state!==`down`||typeof e.generation!=`string`||e.scope?.type!==`global`&&e.scope?.type!==`node`&&e.scope?.type!==`device`)return;let t=qi(e.capName,e.scope),n=this.snapshot.get(t)??null,r=this.now(),i;if(i=n===null?+(e.state===`ready`):n.generation!==e.generation&&e.state===`ready`?n.epoch+1:n.epoch,n!==null&&n.generation===e.generation&&n.state===e.state)return;let a=n===null?0:Math.max(0,r-n.lastChange),o={capName:e.capName,scope:e.scope,state:e.state,generation:e.generation,epoch:i,lastChange:r,sourceNodeId:e.sourceNodeId};this.snapshot.set(t,o);let s={capName:e.capName,scope:e.scope,state:e.state,epoch:i,generation:e.generation,sourceNodeId:e.sourceNodeId,ts:e.ts,durationInPrevState:a};this.logPerRecord(e.scope,`readiness: ${e.capName} (${Ji(e.scope)}) → ${e.state} epoch=${i} gen=${e.generation.slice(0,6)} (prev ${a}ms)`);for(let t of this.subscriptions)if(t.capName===e.capName&&Xi(t.scope,e.scope))try{t.handler(s)}catch(t){this.logger?.warn(`readiness handler threw for ${e.capName}: ${t.message??String(t)}`)}}synthesizeDownForNode(e){let t=this.now();for(let[n,r]of this.snapshot){if(r.state===`down`||!(r.scope.type===`node`&&r.scope.nodeId===e||r.scope.type===`device`&&r.sourceNodeId===e))continue;let i=Math.max(0,t-r.lastChange),a={...r,state:`down`,lastChange:t};this.snapshot.set(n,a);let o={capName:r.capName,scope:r.scope,state:`down`,epoch:r.epoch,generation:r.generation,sourceNodeId:this.sourceNodeId,ts:t,durationInPrevState:i};this.logPerRecord(r.scope,`readiness: ${r.capName} (${Ji(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Xi(e.scope,r.scope))try{e.handler(o)}catch(e){this.logger?.warn(`readiness handler threw during agent.offline demux for ${r.capName}: ${e.message??String(e)}`)}}}};function Qi(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function $i(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function ea(e,t,n,r={}){if(e.length===0)return null;let i=`${n}/`,a=e=>({brokerId:e.brokerId,profileId:e.brokerId.startsWith(i)?e.brokerId.slice(i.length):e.brokerId,url:e.url,mutedUrl:e.mutedUrl,enabled:e.enabled,...e.codec===void 0?{}:{codec:e.codec},...e.resolution===void 0?{}:{resolution:e.resolution}});if(t!==`auto`){let n=e.find(e=>e.enabled&&e.url.length>0&&(e.profile===t||e.brokerId===`${i}${t}`));if(n)return a(n)}let o=e.filter(e=>e.enabled&&e.url.length>0);if(o.length===0)return null;let s=r.targetResolution;if(s){let e=o.filter(e=>e.resolution!==void 0);if(e.length>0){let t=ta(e,s);if(t)return a(t)}}return a(o[0])}function ta(e,t){let n=t.width*t.height,r,i;for(let t of e){if(t.resolution===void 0)continue;let e=t.resolution.width*t.resolution.height;e>=n?(!r||e<r.pixels)&&(r={entry:t,pixels:e}):(!i||e>i.pixels)&&(i={entry:t,pixels:e})}return r?.entry??i?.entry}var na=`__unattributed__`,ra=`__root__`;function ia(e){return e.addonId===null?e.classification===`root`?{key:ra,kind:`root`}:{key:na,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function aa(e){return Math.round(e*10)/10}function oa(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=ia(t),i=n.get(e)??{kind:r,main:0,gc:0,lifetime:0,memory:0,count:0,splitKnown:!0},a=t.cpuMainPercent!==null&&t.cpuGcPercent!==null;n.set(e,{kind:i.kind,main:i.main+(t.cpuMainPercent??0),gc:i.gc+(t.cpuGcPercent??0),lifetime:i.lifetime+t.cpuPercent,memory:i.memory+t.memoryRssBytes,count:i.count+1,splitKnown:i.splitKnown&&a})}return[...n.entries()].map(([e,n])=>{let r=n.splitKnown?aa(n.main):null,i=n.splitKnown?aa(n.gc):null,a=aa(n.lifetime);return{key:e,kind:n.kind,point:{atMs:t,samples:1,cpuMainPercent:r,cpuMainPercentMin:r,cpuGcPercent:i,cpuGcPercentMin:i,cpuLifetimePercent:a,cpuLifetimePercentMin:a,memoryRssBytes:n.memory,memoryRssBytesMin:n.memory,processCount:n.count,processCountMin:n.count}}})}function sa(e,t){return e===null||t===null?null:e<t?e:t}function ca(e,t){return e===null||t===null?null:e>t?e:t}function la(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:ca(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:sa(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:ca(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:sa(e.cpuGcPercentMin,t.cpuGcPercentMin),cpuLifetimePercent:Math.max(e.cpuLifetimePercent,t.cpuLifetimePercent),cpuLifetimePercentMin:Math.min(e.cpuLifetimePercentMin,t.cpuLifetimePercentMin),memoryRssBytes:Math.max(e.memoryRssBytes,t.memoryRssBytes),memoryRssBytesMin:Math.min(e.memoryRssBytesMin,t.memoryRssBytesMin),processCount:Math.max(e.processCount,t.processCount),processCountMin:Math.min(e.processCountMin,t.processCountMin)}}function ua(e,t,n){if(n<=0||t<=0||e<=0)return Math.max(t,1);let r=e/n;return r<=t?t:Math.ceil(r/t)*t}function da(e,t,n){if(t<=0||e.length===0)return e;let r=new Map;for(let i of e){let e=n+Math.floor((i.atMs-n)/t)*t,a=r.get(e);r.set(e,a===void 0?{...i,atMs:e}:la(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var fa=1024,pa=`other`;function ma(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var ha=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=fa,t=16){this.maxKeys=e,this.maxReasons=t}get keysRefused(){return this.refused}get size(){return this.counters.size}note(e,t){if(!Number.isInteger(e.deviceId)||e.deviceId<=0)return;let n=ma(e.deviceId,e.family,e.variant),r=this.counters.get(n);if(r===void 0){if(this.counters.size>=this.maxKeys){this.refused+=1;return}r={deviceId:e.deviceId,family:e.family,variant:e.variant,sinceMs:t,attempts:0,succeeded:0,reasons:new Map},this.counters.set(n,r)}if(r.attempts+=1,e.reason===void 0){r.succeeded+=1;return}let i=r.reasons.has(e.reason)||r.reasons.size<this.maxReasons?e.reason:pa;r.reasons.set(i,(r.reasons.get(i)??0)+1)}snapshot(e){let t=[];for(let n of this.counters.values())t.push({deviceId:n.deviceId,family:n.family,...n.variant===void 0?{}:{variant:n.variant},sinceMs:n.sinceMs,atMs:e,attempts:n.attempts,succeeded:n.succeeded,reasons:[...n.reasons.entries()].map(([e,t])=>({reason:e,count:t})).toSorted((e,t)=>t.count-e.count)});return t}clear(){this.counters.clear()}};function ga(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var _a=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],va={yolo26:`YOLO26`,yolov9:`YOLOv9`};function ya(e){return va[e]??e.toUpperCase()}var ba=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function xa(e,t){let n=ya(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(ba,``).trim();return r.length>0?r:t}function Sa(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function Ca(e){return _a.filter(t=>e.formats[t]!==void 0)}function wa(e){let t=_a.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var Ta=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Ea=[`fp32`,`int8`];function Da(e){let t=new Map;for(let n of e){if(n.legacy===!0||n.group===void 0)continue;let{family:e,tier:r}=n.group,i=t.get(e)??new Map,a=i.get(r)??[];a.push(n),i.set(r,a),t.set(e,i)}let n=[];for(let[e,r]of t){let t=[];for(let[n,i]of r){let r=i.map(e=>{let t=e.group?.precision??`fp32`,n=e.group?.optimization??`standard`;return{modelId:e.id,precision:t,optimization:n,resolution:e.group?.resolution,label:Sa(t,n),formats:Ca(e),sizeMB:wa(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Ea.indexOf(e.precision)-Ea.indexOf(t.precision):e.optimization===`fast`?1:-1:(t.resolution??1/0)-(e.resolution??1/0)),a=r.find(e=>e.precision===`fp32`&&e.optimization===`standard`)??r[0];if(a===void 0)continue;let o=i.find(e=>e.id===a.modelId);t.push({tier:n,label:o?xa(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=Ta.indexOf(e.tier),r=Ta.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1}),n.push({family:e,label:ya(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Oa(e,t){let n=t.precision??`fp32`,r=t.optimization??`standard`,i=e.filter(e=>e.group!==void 0&&e.group.family===t.family&&e.group.tier===t.tier&&(e.group.precision??`fp32`)===n&&(e.group.optimization??`standard`)===r);return t.resolution===void 0?i.toSorted((e,t)=>(t.group?.resolution??1/0)-(e.group?.resolution??1/0))[0]?.id??null:i.find(e=>e.group?.resolution===t.resolution)?.id??null}function ka(e,t){let n=e.find(e=>e.id===t);return n?.group===void 0?null:{family:n.group.family,tier:n.group.tier,precision:n.group.precision??`fp32`,optimization:n.group.optimization??`standard`,resolution:n.group.resolution}}var Aa=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],ja=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),Ma=a({url:g(),filename:g(),sizeMB:o()}),Na=a({onnx:ja.optional(),coreml:ja.optional(),openvino:ja.optional(),tflite:ja.optional(),pt:ja.optional(),gguf:ja.optional()}),Pa=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),Fa=[`camstack`,`frigate`,`scrypted`,`custom`],Ia=m(Fa);function La(e){if(e.provider!==void 0)return e.provider;let t=`${e.id} ${e.description??``}`;return/scrypted/i.test(t)?`scrypted`:/frigate/i.test(t)?`frigate`:`custom`}var Ra=a({id:g(),name:g(),description:g(),formats:Na,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(Tr).readonly(),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),outputProbabilities:v().optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),postprocessor:x().optional(),faceAlignment:v().optional(),extraFiles:p(Ma).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:Pa.optional(),provider:Ia.optional(),classMap:kr.optional()}),za=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),Ba=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(Tr).readonly(),inputSize:a({width:o(),height:o()}),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),outputFormat:m([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:v().optional(),classMap:kr.optional()}),Va=a({format:m(Aa),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),Ha=a({entry:Ra,artifacts:p(Va).readonly()});function Ua(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function Wa(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function Ga(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Ka(e){let t=e.kind;if(t===void 0)return{kind:`session`};if(t!==`sso-bridge`)return{kind:`not-a-credential`,reason:`bridge token kind=${String(t)}`};let n=e.provider;return n===`oauth-access`?{kind:`integration`,provider:`oauth-access`}:{kind:`not-a-credential`,reason:`bridge token provider=${String(n)}`}}function qa(e){let{principal:t}=e;if(t.kind===`not-a-credential`)return{allowed:!1,reason:t.reason};if(t.kind===`session`)return{allowed:!0};let n=Ua(e.method);return Ga(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var O=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},k=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function A(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new k(`${t}: argument ${n+1} must be a finite number`);return e}function Ja(e,t,n){if(typeof e!=`string`)throw new k(`${t}: argument ${n+1} must be a string`);return e}function j(e,t){if(!Number.isFinite(e))throw new k(`${t}: produced a non-finite result`);return e}function Ya(e,t){return e.map((e,n)=>A(e,t,n))}var Xa=1/0,Za={min:{minArgs:1,maxArgs:Xa,apply:e=>j(Math.min(...Ya(e,`min`)),`min`)},max:{minArgs:1,maxArgs:Xa,apply:e=>j(Math.max(...Ya(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>j(Math.abs(A(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>j(Math.floor(A(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>j(Math.ceil(A(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>j(Math.sqrt(A(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=A(e[0],`round`,0),n=e.length>1?Math.trunc(A(e[1],`round`,1)):0;if(n<0||n>100)throw new k(`round: digits must be between 0 and 100`);let r=10**n;return j(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`pow`,0)**A(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=A(e[0],`clamp`,0),n=A(e[1],`clamp`,1),r=A(e[2],`clamp`,2);if(n>r)throw new k(`clamp: lower bound is greater than upper bound`);return j(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:Xa,apply:e=>{let t=Ya(e,`avg`);return j(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:Xa,apply:e=>j(Ya(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:Xa,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`age`,0)-A(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=A(e[0],`convert`,0),r=Ja(e[1],`convert`,1).trim(),i=Ja(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new k(`convert: cannot convert '${r}' to '${i}'`);return j(e,`convert`)}if(r===i)return n;throw new k(`convert: unit conversion table not installed`)}}},Qa=Object.freeze(Object.assign(Object.create(null),Za)),$a=new Set(Object.keys(Za)),eo=2048,to=4096,no=/^[A-Za-z_][A-Za-z0-9_]*$/,ro=new Set([`now`,`true`,`false`,`null`]),io=new Set([`true`,`false`,`null`]);function ao(e){return e>=`0`&&e<=`9`}function oo(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function so(e){return oo(e)||ao(e)}function co(e){return e===` `||e===` `||e===`
2
+ import{a as e,r as t}from"./rolldown-runtime-Cyuzqnbw.js";import{t as n}from"./vite-preload-helper-zJ_50EbN.js";import{A as r,C as i,D as a,E as o,F as s,M as c,N as l,O as u,P as d,S as f,T as ee,_ as p,a as te,b as ne,c as re,d as ie,f as m,g as ae,h,i as oe,j as g,k as se,l as ce,m as le,n as ue,o as de,p as _,r as fe,s as pe,t as me,u as he,v,w as y,x as b,y as x}from"./__vite-browser-external-B6qJ4svC.js";var ge=function(e){return e.SystemBoot=`system.boot`,e.SystemAddonsReady=`system.addons-ready`,e.SystemRestarting=`system.restarting`,e.SystemRestartCompleted=`system.restart-completed`,e.SystemTlsCertChanged=`system.tls-cert-changed`,e.UpdateAvailable=`update.available`,e.SystemReadyState=`system.ready-state`,e.AddonStarted=`addon.started`,e.AddonStopped=`addon.stopped`,e.AddonRestarted=`addon.restarted`,e.AddonUpdated=`addon.updated`,e.AddonInstalled=`addon.installed`,e.AddonUninstalled=`addon.uninstalled`,e.AddonCrashed=`addon.crashed`,e.AddonRunnerFailed=`addon.runner-failed`,e.AddonError=`addon.error`,e.AddonPageReady=`addon.page-ready`,e.AddonWidgetReady=`addon.widget-ready`,e.AddonLoadFailed=`addon.load-failed`,e.AddonLoadRecovered=`addon.load-recovered`,e.AddonRetryScheduled=`addon.retry-scheduled`,e.SystemLivenessFailed=`system.liveness-failed`,e.SystemLivenessRecovered=`system.liveness-recovered`,e.AddonRetryAttempting=`addon.retry-attempting`,e.DeviceRegistered=`device.registered`,e.DeviceUnregistered=`device.unregistered`,e.DeviceEnabled=`device.enabled`,e.DeviceDisabled=`device.disabled`,e.DeviceSettingsUpdated=`device.settings-updated`,e.DeviceBindingsChanged=`device.bindings-changed`,e.DeviceMetaChanged=`device.meta-changed`,e.DeviceSourceInfoChanged=`device.source-info-changed`,e.DeviceStreamsRegistered=`device.streams-registered`,e.DeviceProvisioned=`device.provisioned`,e.DeviceReady=`device.ready`,e.IntegrationEnabled=`integration.enabled`,e.IntegrationDisabled=`integration.disabled`,e.IntegrationDeleted=`integration.deleted`,e.BrokerStatusChanged=`broker.status-changed`,e.BrokerMessage=`broker.message`,e.ProviderStarted=`provider.started`,e.ProviderStopped=`provider.stopped`,e.ProcessCrashed=`process.crashed`,e.ProcessRestartScheduled=`process.restart_scheduled`,e.ProcessRestarted=`process.restarted`,e.RecordingStarted=`recording.started`,e.RecordingStopped=`recording.stopped`,e.RecordingError=`recording.error`,e.RecordingHealthDegraded=`recording.health.degraded`,e.RecordingStorageCritical=`recording.storage.critical`,e.RecordingSegmentWritten=`recording.segment.written`,e.RecordingPolicyFallback=`recording.policy.fallback`,e.RecordingRetentionCompleted=`recording.retention.completed`,e.RecordingExportProgress=`recording.export.progress`,e.RecordingExportCompleted=`recording.export.completed`,e.RecordingExportFailed=`recording.export.failed`,e.DetectionEvent=`detection.event`,e.SessionTrackNew=`session.track.new`,e.SessionTrackExpired=`session.track.expired`,e.BenchmarkProgress=`benchmark.progress`,e.PlatformProbePhase=`platform-probe.phase`,e.PipelineProgress=`pipeline.progress`,e.PipelineTrace=`pipeline.trace`,e.PipelineInferenceResult=`pipeline.inference-result`,e.PipelineCameraAssigned=`pipeline.camera-assigned`,e.PipelineCameraUnassigned=`pipeline.camera-unassigned`,e.PipelineNodeInferenceUnavailable=`pipeline.node-inference-unavailable`,e.PipelineDetectionBlind=`pipeline.detection-blind`,e.PipelineCameraUpdated=`pipeline.camera-updated`,e.PipelineIngestOwnerChanged=`pipeline.ingest-owner-changed`,e.PipelineRunnerLoadSnapshot=`pipeline.runner-load-snapshot`,e.PipelineCameraMetricsSnapshot=`pipeline.camera-metrics-snapshot`,e.StreamBrokerMetricsSnapshot=`stream-broker.metrics-snapshot`,e.StreamBrokerOnCamStreamDemand=`stream-broker.onCamStreamDemand`,e.StreamBrokerOnCamStreamIdle=`stream-broker.onCamStreamIdle`,e.StreamBrokerOnRequestStreamSourceRefresh=`stream-broker.onRequestStreamSourceRefresh`,e.StreamParamsChanged=`stream-params.changed`,e.DeviceStateChanged=`device.state-changed`,e.ZoneAnalyticsOccupancyChanged=`zone-analytics.occupancy-changed`,e.BatteryOnStatusChanged=`battery.onStatusChanged`,e.NetworkLinkOnStatusChanged=`network-link.onStatusChanged`,e.BatteryOnWakeStarted=`battery.onWakeStarted`,e.DoorbellOnPressed=`doorbell.onPressed`,e.EventEmitted=`event-emitter.event`,e.PipelineEngineMetricsSnapshot=`pipeline.engine-metrics-snapshot`,e.PipelineEngineProvisioning=`pipeline.engine-provisioning`,e.ClusterTopologySnapshot=`cluster.topology-snapshot`,e.MetricsNodeResourcesSnapshot=`metrics.node-resources-snapshot`,e.MetricsNodeProcessesSnapshot=`metrics.node-processes-snapshot`,e.CapabilityBindingChanged=`capability.binding-changed`,e.ModelDownloadProgress=`model.download.progress`,e.AgentRegistered=`agent.registered`,e.AgentUnregistered=`agent.unregistered`,e.AgentOnline=`agent.online`,e.AgentOffline=`agent.offline`,e.WorkerOnline=`worker.online`,e.WorkerOffline=`worker.offline`,e.AgentTaskDispatched=`agent.task.dispatched`,e.AgentTaskAssigned=`agent.task.assigned`,e.AgentTrpcConnected=`agent.trpc.connected`,e.AgentWsConnected=`agent.ws.connected`,e.AgentWsDisconnected=`agent.ws.disconnected`,e.AgentBackupActivated=`agent.backup.activated`,e.OrchestrationSettingsUpdated=`orchestration.settings-updated`,e.PipelineAgentHwaccelChanged=`pipeline.agent-hwaccel-changed`,e.MotionAnalysis=`detection.motion-analysis`,e.MotionZonesRaw=`detection.motion-zones-raw`,e.MotionOnMotionChanged=`motion.on-motion-changed`,e.DetectionResult=`detection.result`,e.DetectionRaw=`detection.raw`,e.DetectionCameraNative=`detection.camera-native`,e.PipelineAudioInferenceResult=`pipeline.audio-inference-result`,e.DetectionPhaseTransition=`detection.phase-transition`,e.ProviderMotion=`provider.motion`,e.ProviderDetection=`provider.detection`,e.EnrichmentEmbeddingStored=`enrichment.embedding.stored`,e.EnrichmentSceneStateChanged=`enrichment.scene.state-changed`,e.EnrichmentActivitySummary=`enrichment.activity.summary`,e.PipelineAnalyticsTrackLifecycle=`pipeline-analytics.track-lifecycle`,e.PipelineAnalyticsTrackStarted=`pipeline-analytics.track-started`,e.PipelineAnalyticsTrackEnded=`pipeline-analytics.track-ended`,e.PipelineAnalyticsDetectionEvent=`pipeline-analytics.detection-event`,e.PipelineAnalyticsFrameTracked=`pipeline-analytics.frame-tracked`,e.PipelineAnalyticsStationaryChanged=`pipeline-analytics.stationary-changed`,e.PipelineAnalyticsPackageDelivered=`pipeline-analytics.package-delivered`,e.PipelineAnalyticsPackagePickedUp=`pipeline-analytics.package-picked-up`,e.PipelineAnalyticsFaceGalleryChanged=`pipeline-analytics.face-gallery-changed`,e.PipelineAnalyticsPlateGalleryChanged=`pipeline-analytics.plate-gallery-changed`,e.FrigateLiveEvent=`frigate.live-event`,e.CameraStreamsProfileSlotsChanged=`camera-streams.onProfileSlotsChanged`,e.StreamOnline=`stream.online`,e.StreamOffline=`stream.offline`,e.NetworkTunnelStarted=`network.tunnel.started`,e.NetworkTunnelStopped=`network.tunnel.stopped`,e.LocalNetworkChanged=`network.local.changed`,e.MeshNetworkChanged=`network.mesh.changed`,e.BackupCompleted=`backup.completed`,e.BackupRestored=`backup.restored`,e.NotificationDispatched=`notification.dispatched`,e.NotificationFailed=`notification.failed`,e.DeviceUpdated=`device.updated`,e.DeviceOnline=`device.online`,e.DeviceOffline=`device.offline`,e.DeviceAwake=`device.awake`,e.DeviceSleeping=`device.sleeping`,e.RetentionCleanup=`retention.cleanup`,e.AddonsBulkUpdateProgress=`addons.bulk-update-progress`,e.AddonsJobProgress=`addons.job-progress`,e.AddonsJobLog=`addons.job-log`,e.AccessoriesChildVisibilityChanged=`accessories.onChildVisibilityChanged`,e.AccessoriesChanged=`accessories.onAccessoriesChanged`,e.ModelConvertProgress=`model-convert.progress`,e}({}),_e=[{id:`overview`,label:`Overview`,icon:`layout-dashboard`,order:-10},{id:`general`,label:`General`,icon:`settings`,order:0},{id:`image`,label:`Image`,icon:`image`,order:5},{id:`light`,label:`Light`,icon:`lightbulb`,order:7},{id:`motion`,label:`Motion`,icon:`activity`,order:10},{id:`audio`,label:`Audio`,icon:`mic`,order:12},{id:`alarms`,label:`Alarms`,icon:`bell-ring`,order:13},{id:`snapshot`,label:`Snapshot`,icon:`camera`,order:15},{id:`osd`,label:`OSD`,icon:`type`,order:18},{id:`stream-broker`,label:`Stream Broker`,icon:`radio`,order:20},{id:`streaming`,label:`Streaming`,icon:`video`,order:35},{id:`ptz`,label:`PTZ`,icon:`move`,order:40},{id:`navigation`,label:`Navigation`,icon:`compass`,order:41},{id:`consumables`,label:`Consumables`,icon:`recycle`,order:44},{id:`pipeline`,label:`Detection Pipeline`,icon:`cpu`,order:39},{id:`detection-pipeline`,label:`Detection pipeline`,icon:`cpu`,order:39},{id:`zones`,label:`Detection`,icon:`shapes`,order:38},{id:`analytics`,label:`Analytics`,icon:`activity`,order:37},{id:`live-stats`,label:`Live Stats`,icon:`activity`,order:39},{id:`recording`,label:`Recording`,icon:`circle-dot`,order:40},{id:`engine`,label:`Inference Engine`,icon:`zap`,order:41},{id:`scheduler`,label:`Scheduler`,icon:`list-checks`,order:42},{id:`decoder`,label:`Decoder`,icon:`film`,order:43},{id:`notifications`,label:`Notifications`,icon:`bell`,order:50},{id:`network`,label:`Network`,icon:`globe`,order:60},{id:`storage`,label:`Storage`,icon:`hard-drive`,order:70},{id:`advanced`,label:`Advanced`,icon:`wrench`,order:100}],ve=Object.fromEntries(_e.map(e=>[e.id,e]));function ye(e){return e.type===`separator`||e.type===`info`||e.type===`qr-code`||e.type===`button`||e.type===`object-array`||e.type===`widget`||e.type===`addon-action-button`||e.type===`device-action-button`}function be(e){let t=new Map;if(typeof e!=`object`||!e)return t;let n=e.sections;if(!Array.isArray(n))return t;for(let e of n)typeof e==`object`&&e&&xe(e.fields,t);return t}function xe(e,t){if(Array.isArray(e))for(let n of e){if(typeof n!=`object`||!n)continue;let e=n.type;if(e===`group`){xe(n.fields,t);continue}if(e===`sub-tabs`){let e=n.tabs;if(Array.isArray(e))for(let n of e)typeof n==`object`&&n&&xe(n.fields,t);continue}let r=n.key;typeof r!=`string`||r.length===0||`value`in n&&t.set(r,{value:n.value,default:n.default})}}function Se(e){let t=new Map;for(let[n,r]of be(e))t.set(n,r.value??r.default);return t}function Ce(e,t){let n=be(e).get(t);return n===void 0?void 0:n.value??n.default}function we(e,t){return{...e.tabs?{tabs:[...e.tabs]}:{},sections:e.sections.map(e=>({...e,fields:e.fields.map(e=>Te(e,t))}))}}function Te(e,t){if(ye(e))return e;if(e.type===`group`){let n=e.fields.map(e=>Te(e,t));return{...e,fields:n}}if(e.type===`sub-tabs`){let n=e.tabs.map(e=>({...e,fields:e.fields.map(e=>Te(e,t))}));return{...e,tabs:n}}let n=e.key,r=Object.prototype.hasOwnProperty.call(t,n)?t[n]:void 0,i=e.default;if(e.multiple){let t=Array.isArray(r)?r:r==null?[]:[r],n=e.multiple.itemDefault===void 0?i===void 0?Ee(e)===`string`?``:null:i:e.multiple.itemDefault,a=Math.max(e.multiple.min,t.length),o=[];for(let e=0;e<a;e++)o.push(e<t.length?t[e]:n);return{...e,value:o}}let a=r===void 0?i===void 0?null:i:r,o=e.type===`textarea`&&e.isJson&&typeof a==`object`&&a?JSON.stringify(a,null,2):a;return{...e,value:o}}function Ee(e){switch(e.type){case`text`:case`textarea`:case`password`:case`color`:case`probe`:case`timezone`:case`datetime`:return`string`;case`number`:case`slider`:return`number`;case`boolean`:return`boolean`;default:return`other`}}function De(e,t){return e.category===t}function Oe(e,t,n){return{id:typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2),timestamp:new Date,source:t,category:e,data:n}}function ke(e,t){let n=t.ts??Date.now();e.emit(Oe(`system.ready-state`,{type:`capability`,id:t.capName,nodeId:t.sourceNodeId},{capName:t.capName,scope:t.scope,state:t.state,generation:t.generation,sourceNodeId:t.sourceNodeId,ts:n}))}function Ae(e){let t=async()=>{let t=(await e.read())[e.key];if(t===void 0)return e.fallback;let n=e.schema.safeParse(t);return n.success?n.data:(e.onParseError?.(e.key,n.error),e.fallback)},n=async t=>{let n=e.schema.parse(t);await e.write({[e.key]:n})};return{get:t,set:n,update:async e=>{await n(e(await t()))}}}function je(e){if(e==null||e===``)return`hub`;let t=e.indexOf(`/`);if(t<0)return e;let n=e.slice(0,t);return n===``?`hub`:n}function Me(e,t){return`${e}@${je(t)}`}function Ne(e,t,n){return e[Me(t,n)]}function Pe(e,t,n){let r={};for(let[i,a]of Object.entries(e))r[t.has(i)?Me(i,n):i]=a;return r}function Fe(e,t,n){let r={};for(let[n,i]of Object.entries(e))n.includes(`@`)||t.has(n)||(r[n]=i);for(let i of t){let t=Ne(e,i,n);t!==void 0&&(r[i]=t)}return r}var Ie=class{_ctx=null;_config;_readinessGeneration=typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14);_registeredCapNames=[];settingsStoreReady=!1;defaults;constructor(e){this.defaults=e,this._config={...e}}get autoEmitReadiness(){return!0}get ctx(){if(!this._ctx)throw Error(`${this.constructor.name}: ctx accessed before initialize()`);return this._ctx}get ctxIfReady(){return this._ctx}get config(){return this._config}async initialize(e){this._ctx=e,await this.resolveConfig();let t=await this.onInitialize();this.emitLifecycle(ge.AddonStarted);let n=ze(t),r=n&&`providers`in n&&n.providers?n.providers:[];return this._registeredCapNames=r.map(e=>e.capability.name),n}postBrokerStart(){this.autoEmitReadiness&&this._registeredCapNames.length>0&&this.emitReadinessForProviders(`ready`)}async onHubReachable(){}async shutdown(){this.emitLifecycle(ge.AddonStopped),this.autoEmitReadiness&&this.emitReadinessForProviders(`down`),await this.onShutdown();for(let e of this._subscriptions)e();this._subscriptions=[],this._ctx=null}async onShutdown(){}async onConfigChanged(){}field(e){return e}schema(e){return e}globalSettingsSchema(e){return null}deviceSettingsSchema(){return null}integrationSettingSections(){return[]}async getGlobalSettings(e,t,n){let r=this.globalSettingsSchema(t);if(!r)return{sections:[]};let i=await this.resolveGlobalStore(n,t);return we(r,e?{...i,...e}:i)}async getIntegrationSettings(e){let t=this.integrationSettingSections();if(t.length===0)return null;let n=this.globalSettingsSchema();if(!n)throw Error(`${this.constructor.name}: integrationSettingSections() names [${t.join(`, `)}] but globalSettingsSchema() returns null.`);let r=new Map(n.sections.map(e=>[e.id,e])),i=[];for(let e of t){let t=r.get(e);if(!t)throw Error(`${this.constructor.name}: integrationSettingSections() names unknown section "${e}". Known sections: [${[...r.keys()].join(`, `)}].`);let n=Le(t.fields);n.length!==0&&i.push({...t,fields:n})}if(i.length===0)return null;let a=await this.resolveGlobalStore(e);return we({...n,sections:i},a)}async resolveGlobalStore(e,t){let n=await this._ctx?.settings?.readAddonStore()??{},r=this.perNodeKeys(t),i=je(e??this._ctx?.kernel?.localNodeId);return r.size>0?Fe(n,r,i):n}async updateGlobalSettings(e,t){let n=this.perNodeKeys(),r=je(this._ctx?.kernel?.localNodeId),i=je(t??this._ctx?.kernel?.localNodeId),a=e,o=n.size>0?Pe(a,n,i):a;await this._ctx?.settings?.writeAddonStore(o),i===r&&(await this.resolveConfig(),await this.onConfigChanged(),this.emitLifecycle(ge.AddonUpdated,{level:`global`}),this.maybeAutoRestart(e,this.globalSettingsSchema()))}_perNodeKeysCache=new Map;perNodeKeys(e){let t=e??``,n=this._perNodeKeysCache.get(t);if(n)return n;let r=this.globalSettingsSchema(e),i=new Set(r?r.sections.flatMap(e=>Re(e.fields)):[]);return this._perNodeKeysCache.set(t,i),i}maybeAutoRestart(e,t){if(!t)return;let n=new Set;for(let e of t.sections)for(let t of e.fields)t.type===`separator`||t.type===`info`||t.requiresRestart&&n.add(t.key);if(n.size===0||!Object.keys(e).some(e=>n.has(e)))return;let r=this._ctx;if(!r)return;let i=r.id;setImmediate(()=>{r.api.addons?.restartAddon?.mutate({addonId:i}).then(()=>{r.logger.info(`addon auto-restart triggered by restart-required setting change`,{meta:{changedFields:Object.keys(e).filter(e=>n.has(e))}})}).catch(e=>{r.logger.error(`addon auto-restart failed`,{meta:{error:e instanceof Error?e.message:String(e)}})})})}async getDeviceSettings(e){let t=this.deviceSettingsSchema();return t?we(t,await this._ctx?.settings?.readDeviceStore(e)??{}):{sections:[]}}async updateDeviceSettings(e,t){await this._ctx?.settings?.writeDeviceStore(e,t)}_subscriptions=[];watchCapability(e,t){let n=new Set(Array.isArray(e)?e:[e]);this.subscribe({category:`system.ready-state`},e=>{let r=e.data;if(typeof r.capName!=`string`||!n.has(r.capName)||r.scope?.type!==`node`)return;let i=r.scope.nodeId;if(typeof i!=`string`||i.length===0)return;let a=r.capName;r.state===`down`?t.onDown?.(i,a):r.state===`ready`&&t.onReady?.(i,a)})}subscribe(e,t){let n=this.ctx.eventBus.subscribe(e,t);this._subscriptions.push(n)}emitLifecycle(e,t){try{let n=this._ctx;if(!n)return;n.eventBus.emit({id:`${n.id}-${Date.now()}`,timestamp:new Date,source:{type:`addon`,id:n.id,nodeId:n.kernel.localNodeId??`hub`},category:e,data:{addonId:n.id,...t}})}catch{}}emitReadinessForProviders(e){let t=this._ctx;if(!t||this._registeredCapNames.length===0)return;let n=t.kernel?.localNodeId??`hub`,r=n.includes(`/`)?n.split(`/`)[0]:n;for(let n of this._registeredCapNames)try{ke(t.eventBus,{capName:n,scope:{type:`node`,nodeId:r},state:e,generation:this._readinessGeneration,sourceNodeId:r})}catch{}}async resolveModelsDir(){let{join:t}=await n(async()=>{let{join:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{join:t}},__vite__mapDeps([0,1])),{promises:r}=await n(async()=>{let{promises:t}=await import(`./__vite-browser-external-B6qJ4svC.js`).then(t=>e(t.t()));return{promises:t}},__vite__mapDeps([0,1])),i=t(this.ctx.nodeDataDir,`models`);return await r.mkdir(i,{recursive:!0}),i}get capabilities(){return this.ctx.capabilities??null}async resolveConfig(){let e=await this.readAddonStoreWithRetry(),t=this.perNodeKeys(),n=je(this._ctx?.kernel?.localNodeId),r={...this.defaults};for(let i of Object.keys(this.defaults)){let a=t.has(i)?Ne(e,i,n):e[i];if(a!=null){let e=typeof this.defaults[i];typeof a===e&&(r[i]=a)}}this._config=r}state(e,t,n){return Ae({key:e,schema:t,fallback:n,read:()=>this.readAddonStoreWithRetry(),write:async e=>{await this._ctx?.settings?.writeAddonStore(e)},onParseError:(e,t)=>this._ctx?.logger?.warn?.(`durable-state: stored "${e}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,key:e,error:String(t)}})})}deviceState(e,t,n,r){return Ae({key:t,schema:n,fallback:r,read:async()=>await this._ctx?.settings?.readDeviceStore(e)??{},write:async t=>{await this._ctx?.settings?.writeDeviceStore(e,t)},onParseError:(t,n)=>this._ctx?.logger?.warn?.(`durable-state: stored device ${e} "${t}" failed validation — using fallback`,{meta:{addonId:this._ctx?.id,deviceId:e,key:t,error:String(n)}})})}async readAddonStoreWithRetry(){let e=this._ctx?.settings;if(!e)return{};let t=[150,350,600,900],n;for(let r=0;r<=t.length;r++)try{let t=await e.readAddonStore()??{};return this.settingsStoreReady=!0,t}catch(e){n=e;let i=e instanceof Error?e.message:String(e);if(!(i.includes(`SqliteSettingsBackend not initialized`)||i.includes(`provider not available`)))throw e;if(r===t.length)break;await new Promise(e=>setTimeout(e,t[r]))}return this.settingsStoreReady=!1,this._ctx?.logger?.warn?.(`readAddonStore: settings-store unavailable after retries — using defaults`,{meta:{error:n instanceof Error?n.message:String(n)}}),{}}};function Le(e){let t=[];for(let n of e){if(n.type===`group`){let e=Le(n.fields);e.length>0&&t.push({...n,fields:e});continue}if(n.type===`sub-tabs`){let e=n.tabs.map(e=>({...e,fields:Le(e.fields)})).filter(e=>e.fields.length>0);e.length>0&&t.push({...n,tabs:e});continue}`perNode`in n&&n.perNode===!0||t.push(n)}return t}function Re(e){let t=[];for(let n of e){if(n.type===`group`){t.push(...Re(n.fields));continue}if(n.type===`sub-tabs`){for(let e of n.tabs)t.push(...Re(e.fields));continue}`perNode`in n&&n.perNode===!0&&t.push(n.key)}return t}function ze(e){if(e!=null)return Array.isArray(e)?{providers:e}:e}function Be(e,t){return{id:e,getRoutes:()=>t,invoke:async e=>{let n=Ve(t,e.method,e.path);if(!n)return{status:404,headers:{},redirectUrl:null,body:{error:`No route matches ${e.method} ${e.path}`}};let r={status:200,headers:{},redirectUrl:null},i=Ue(r),a={params:{...e.params,...n.params},query:e.query,body:e.body,headers:e.headers,...e.user?{user:e.user}:{},...e.scopedToken===void 0?{}:{scopedToken:e.scopedToken}};return await n.route.handler(a,i),r}}}function Ve(e,t,n){let r=t.toUpperCase();for(let t of e){if(t.method!==r)continue;let e=He(t.path,n);if(e!==null)return{route:t,params:e}}return null}function He(e,t){let n=e.split(`/`).filter(Boolean),r=t.split(`/`).filter(Boolean);if(n.length!==r.length)return null;let i={};for(let e=0;e<n.length;e++){let t=n[e],a=r[e];if(t.startsWith(`:`))i[t.slice(1)]=a;else if(t!==a)return null}return i}function Ue(e){let t={status(n){return e.status=n,t},code(n){return e.status=n,t},send(t){e.body=t},redirect(t){e.redirectUrl=t,e.status===200&&(e.status=302)},header(n,r){return e.headers[n.toLowerCase()]=r,t},type(n){return e.contentType=n,t}};return t}var We=class{disposers=[];disposed=!1;onError;constructor(e={}){this.onError=e.onError??((e,t)=>{console.error(`[DisposerChain] disposer #${t} threw`,e)})}add(e){if(this.disposed){try{let t=e();t&&typeof t.then==`function`&&t.catch(e=>this.onError(e,-1))}catch(e){this.onError(e,-1)}return()=>void 0}return this.disposers.push(e),()=>{let t=this.disposers.indexOf(e);t>=0&&this.disposers.splice(t,1)}}get isDisposed(){return this.disposed}get size(){return this.disposers.length}async dispose(){if(this.disposed)return;this.disposed=!0;let e=this.disposers.slice().toReversed();this.disposers=[];for(let t=0;t<e.length;t++){let n=e[t];try{let e=n();e&&typeof e.then==`function`&&await e}catch(n){this.onError(n,e.length-1-t)}}}},Ge=a({codec:m([`h264`,`h265`,`copy`]),profile:m([`baseline`,`main`,`high`]).optional(),level:g().optional(),width:o().int().positive().optional(),height:o().int().positive().optional(),fps:o().positive().optional(),bitrateKbps:o().int().positive().optional(),gopFrames:o().int().positive().optional(),bf:o().int().min(0).optional(),preset:m([`ultrafast`,`superfast`,`veryfast`,`faster`,`fast`,`medium`]).optional(),tune:m([`zerolatency`,`film`,`animation`]).optional()}),Ke=l([y(`passthrough`),a({codec:m([`opus`,`aac`,`pcmu`,`pcma`,`copy`]),bitrateKbps:o().int().positive().optional(),sampleRateHz:o().int().positive().optional(),channels:l([y(1),y(2)]).optional()})]),qe=a({video:Ge,audio:Ke,inputArgs:p(g()).optional(),outputArgs:p(g()).optional()});function Je(e){let t=e.codec?.toLowerCase().replace(/[.\s-]/g,``),n={codec:t===`h265`||t===`hevc`?`h265`:`h264`,...e.resolution?.width===void 0?{}:{width:e.resolution.width},...e.resolution?.height===void 0?{}:{height:e.resolution.height},...e.fps===void 0?{}:{fps:e.fps}};if(!(n.width===void 0&&n.height===void 0&&n.fps===void 0))return{video:n,audio:`passthrough`}}var Ye={opus:`libopus`,aac:`aac`,pcmu:`pcm_mulaw`,pcma:`pcm_alaw`},Xe={aac:{kind:`encode`,codec:`aac`,bitrateKbps:128,sampleRateHz:48e3,channels:1},opus:{kind:`encode`,codec:`opus`,bitrateKbps:64,sampleRateHz:48e3,channels:1},pcmu:{kind:`encode`,codec:`pcmu`,sampleRateHz:8e3,channels:1}};function Ze(e){return[`-hide_banner`,`-loglevel`,e]}function Qe(e){return!e||e===`none`||e===`copy`}function $e(e,t){let n=[];if(Qe(t)||n.push(`-hwaccel`,String(t)),e.extraArgs?.length&&n.push(...e.extraArgs),e.analyzeDurationUs!==void 0&&n.push(`-analyzeduration`,String(e.analyzeDurationUs)),e.probeSizeBytes!==void 0&&n.push(`-probesize`,String(e.probeSizeBytes)),e.fflags?.length)for(let t of e.fflags)n.push(`-fflags`,t);return e.rtspTransport&&n.push(`-rtsp_transport`,e.rtspTransport),n.push(`-i`,e.url),n}function et(e,t){return!e||t.some(e=>e===`-vf`)?[]:e.mode===`exact`?[`-vf`,`scale=${e.width}:${e.height}`]:[`-vf`,`scale='min(${e.width},iw)':'min(${e.height},ih)':force_original_aspect_ratio=decrease:force_divisible_by=2`]}function tt(e){let t=e.bitrateKbps;if(t===void 0)return[];let n=e.rateControl??{kind:`cap`,vbvSeconds:2},r=Math.max(1,Math.round(t*n.vbvSeconds));return[...n.kind===`cbr`?[`-b:v`,`${t}k`]:[],`-maxrate`,`${t}k`,`-bufsize`,`${r}k`]}function nt(e,t){if(e.kind===`copy`)return[`-c:v`,`copy`,...e.bitstreamFilter?[`-bsf:v`,e.bitstreamFilter]:[]];let n=[...et(e.scale,t),`-c:v`,e.encoder];return e.preset!==void 0&&n.push(`-preset`,e.preset),e.tune!==void 0&&n.push(`-tune`,e.tune),e.profile!==void 0&&n.push(`-profile:v`,e.profile),e.level!==void 0&&n.push(`-level`,e.level),e.pixelFormat!==void 0&&n.push(`-pix_fmt`,e.pixelFormat),e.fps!==void 0&&n.push(`-r`,String(e.fps)),e.gopFrames!==void 0&&n.push(`-g`,String(e.gopFrames)),e.forceKeyFramesSeconds!==void 0&&n.push(`-force_key_frames`,`expr:gte(t,n_forced*${e.forceKeyFramesSeconds})`),e.bf!==void 0&&n.push(`-bf`,String(e.bf)),n.push(...tt(e)),e.bitstreamFilter!==void 0&&n.push(`-bsf:v`,e.bitstreamFilter),n}function rt(e){if(e.kind===`none`)return[`-an`];if(e.kind===`copy`)return[`-c:a`,`copy`];let t=[];return e.filter!==void 0&&t.push(`-af`,e.filter),t.push(`-c:a`,Ye[e.codec]),e.application!==void 0&&t.push(`-application`,e.application),e.frameDurationMs!==void 0&&t.push(`-frame_duration`,String(e.frameDurationMs)),e.globalHeader===!0&&t.push(`-flags`,`+global_header`),e.sampleRateHz!==void 0&&t.push(`-ar`,String(e.sampleRateHz)),e.bitrateKbps!==void 0&&t.push(`-b:a`,`${e.bitrateKbps}k`),e.vbvBufferKbits!==void 0&&t.push(`-bufsize`,`${e.vbvBufferKbits}k`),e.channels!==void 0&&t.push(`-ac`,String(e.channels)),t}function it(e){let t=[];return e.payloadType!==void 0&&t.push(`-payload_type`,String(e.payloadType)),e.ssrc!==void 0&&t.push(`-ssrc`,String(e.ssrc)),e.sdpFile!==void 0&&t.push(`-sdp_file`,e.sdpFile),t.push(`-f`,`rtp`,e.url),t}function at(e){return e.kind===`stdout`&&(e.container===`h264`||e.container===`hevc`)}var ot=`+frag_keyframe+empty_moov+default_base_moof`;function st(e){return e.kind===`rtsp-listen`?[`-f`,`rtsp`,`-rtsp_transport`,`tcp`,`-rtsp_flags`,`listen`,e.url]:e.kind===`rtp-outputs`?[]:e.container===`mp4`?lt(e):[`-f`,e.container,`pipe:1`]}var ct=.9;function lt(e){return[`-movflags`,ot,`-min_frag_duration`,String(Math.max(0,Math.round(e.fragmentMs*ct*1e3))),`-f`,`mp4`,`pipe:1`]}function ut(e){return[`-map`,`0:a:0?`,...rt(e.codec===`pcma`?{kind:`encode`,codec:`pcma`,sampleRateHz:8e3,channels:1}:Xe[e.codec]),...it({url:e.rtpUrl,sdpFile:e.sdpFile})]}function dt(e){let t=[...Ze(e.logLevel),...$e(e.input,e.decodeHwAccel)],n=e.threadCount>0?[`-threads`,String(e.threadCount)]:[];if(e.sink.kind===`rtp-outputs`){let r=e.sink.video?[`-an`,`-map`,`0:v:0`,...nt(e.video,e.outputArgs),...n,...e.outputArgs,...it(e.sink.video)]:[],i=e.sink.audio?[`-vn`,`-map`,`0:a:0?`,...rt(e.audio),...it(e.sink.audio)]:[];return[...t,...r,...i]}let r=at(e.sink)?[`-an`]:rt(e.audio),i=st(e.sink);return[...t,...nt(e.video,e.outputArgs),...n,...r,...e.outputArgs,...i,...e.audioSidecar?ut(e.audioSidecar):[]]}var ft={videotoolbox:{h264:`h264_videotoolbox`,h265:`hevc_videotoolbox`},vaapi:{h264:`h264_vaapi`,h265:`hevc_vaapi`},qsv:{h264:`h264_qsv`,h265:`hevc_qsv`},cuda:{h264:`h264_nvenc`,h265:`hevc_nvenc`},nvdec:{h264:`h264_nvenc`,h265:`hevc_nvenc`},amf:{h264:`h264_amf`,h265:`hevc_amf`}};function pt(e,t,n){let r=e===`h264`?`libx264`:`libx265`;if(!n||t===null||Qe(t)||t===`auto`)return r;let i=ft[t.toLowerCase()];return i?e===`h264`?i.h264:i.h265:r}function mt(e){return e===`passthrough`?{kind:`none`}:e.codec===`copy`?{kind:`copy`}:{kind:`encode`,codec:e.codec,...e.bitrateKbps===void 0?{}:{bitrateKbps:e.bitrateKbps},...e.sampleRateHz===void 0?{}:{sampleRateHz:e.sampleRateHz},...e.channels===void 0?{}:{channels:e.channels}}}function ht(e){let t=e.profile.video,n=t.codec===`copy`||e.forceReencode!==!0&&t.codec===e.sourceCodec,r=t.width!==void 0&&t.height!==void 0?{mode:`fit`,width:t.width,height:t.height}:null,i=t.codec===`h265`?`h265`:`h264`,a=n?{kind:`copy`,...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}}:{kind:`encode`,encoder:pt(i,e.decodeHwAccel,e.hardwareEncoders===!0),scale:r,...t.preset===void 0?{}:{preset:t.preset},...t.tune===void 0?{}:{tune:t.tune},...t.profile===void 0?{}:{profile:t.profile},...t.level===void 0?{}:{level:t.level},...e.pixelFormat===void 0?{}:{pixelFormat:e.pixelFormat},...t.fps===void 0?{}:{fps:t.fps},...t.gopFrames===void 0?{}:{gopFrames:t.gopFrames},...e.forceKeyFramesSeconds===void 0?{}:{forceKeyFramesSeconds:e.forceKeyFramesSeconds},...t.bf===void 0?{}:{bf:t.bf},...t.bitrateKbps===void 0?{}:{bitrateKbps:t.bitrateKbps},...e.rateControl===void 0?{}:{rateControl:e.rateControl},...e.bitstreamFilter===void 0?{}:{bitstreamFilter:e.bitstreamFilter}};return{logLevel:e.logLevel??`error`,decodeHwAccel:e.decodeHwAccel,input:{url:e.sourceUrl,rtspTransport:`tcp`,fflags:[`+discardcorrupt`],...e.profile.inputArgs?.length?{extraArgs:e.profile.inputArgs}:{}},video:a,audio:mt(e.profile.audio),threadCount:e.threadCount??0,outputArgs:e.profile.outputArgs??[],sink:e.sink,...e.audioSidecar===void 0?{}:{audioSidecar:e.audioSidecar}}}var gt={video:{codec:`h264`,profile:`baseline`,level:`3.1`,width:1280,height:720,fps:25,bitrateKbps:2500,gopFrames:25,bf:0,preset:`veryfast`,tune:`zerolatency`},audio:`passthrough`},_t={...gt,video:{...gt.video,bitrateKbps:3e3,gopFrames:30,preset:`ultrafast`},audio:`passthrough`},vt={...gt,audio:{codec:`opus`}},yt={kind:`cbr`,vbvSeconds:1},bt={kind:`cap`,vbvSeconds:2},xt={kind:`encode`,codec:`opus`,bitrateKbps:24,channels:1,application:`lowdelay`,globalHeader:!0,filter:`aresample=async=1000:first_pts=0`},St=16*1024*1024,Ct=8,wt=16,Tt=class{maxUnitBytes;buffer=new Uint8Array;unitStart=0;cursor=0;state=`init`;nextSequence=0;faultReason=null;interstitial=new Set;constructor(e={}){this.maxUnitBytes=e.maxUnitBytes??St}get fault(){return this.faultReason}get pendingBytes(){return this.buffer.length-this.unitStart}get discardedInterstitialTypes(){return[...this.interstitial]}push(e){return this.faultReason!==null||e.length===0?[]:(this.append(e),this.pendingBytes>this.maxUnitBytes?this.fail(`a single fMP4 unit exceeded ${this.maxUnitBytes} bytes — this stream is not fragmented`):this.drainBoxes())}append(e){if(this.buffer.length===0){this.buffer=e.slice();return}let t=new Uint8Array(this.buffer.length+e.length);t.set(this.buffer,0),t.set(e,this.buffer.length),this.buffer=t}drainBoxes(){let e=[];for(;;){let t=this.readHeader();if(this.faultReason!==null)return e;if(t===null||this.cursor+t.totalBytes>this.buffer.length)break;let n=this.cursor,r=n+t.totalBytes;this.cursor=r;let i=this.consumeBox(t.type,n,r);if(this.faultReason!==null)return e;i!==null&&e.push(i)}return this.compact(),e}consumeBox(e,t,n){if(this.state===`init`){if(e!==`moof`)return null;if(t===this.unitStart)return this.fail(`a moof arrived before any initialisation box — there is no ftyp/moov to send`),null;let n=this.emit(`init`,this.unitStart,t);return this.unitStart=t,this.state=`fragment`,n}if(this.state===`idle`)return e===`moof`?(this.unitStart=t,this.state=`fragment`,null):(this.interstitial.add(e),this.unitStart=n,null);if(e!==`mdat`)return null;let r=this.emit(`fragment`,this.unitStart,n);return this.unitStart=n,this.state=`idle`,r}readHeader(){let e=this.buffer.length-this.cursor;if(e<Ct)return null;let t=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),n=t.getUint32(this.cursor),r=String.fromCharCode(this.buffer[this.cursor+4]??0,this.buffer[this.cursor+5]??0,this.buffer[this.cursor+6]??0,this.buffer[this.cursor+7]??0);if(n===0)return this.fail(`box "${r}" declares size 0 (to EOF) — an unbounded box cannot be fragmented`),null;if(n===1){if(e<wt)return null;let n=t.getBigUint64(this.cursor+Ct);return n>BigInt(this.maxUnitBytes)?(this.fail(`box "${r}" declares ${n} bytes, over the ${this.maxUnitBytes} byte bound`),null):{type:r,totalBytes:Number(n)}}return n<Ct?(this.fail(`box "${r}" declares an impossible size of ${n} bytes`),null):{type:r,totalBytes:n}}emit(e,t,n){let r=this.nextSequence;return this.nextSequence+=1,{kind:e,data:this.buffer.slice(t,n),sequence:r}}compact(){this.unitStart!==0&&(this.buffer=this.buffer.slice(this.unitStart),this.cursor-=this.unitStart,this.unitStart=0)}fail(e){return this.faultReason=e,this.buffer=new Uint8Array,this.unitStart=0,this.cursor=0,[]}};function Et(e){let t=e.now??(()=>Date.now()),n=null,r=-1/0;return{read(){return t()-r<e.ttlMs?n:void 0},write(e){n=e,r=t()}}}function Dt(e){return!e||e===`none`||e===`copy`}async function Ot(e){let t=e.override;if(t!=null&&t!==``)return Dt(t)?null:t;let n=e.cache?.read();if(n!==void 0)return n;let r;try{r=await e.readDecoderBackend()}catch(t){let n=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unreadable`,kernelPreferred:n,error:t instanceof Error?t.message:String(t)}),e.cache?.write(null),null}if(r===``){let t=await e.readKernelPreferred().catch(()=>[]);return e.onFallback({reason:`decoder-unprobed`,kernelPreferred:t}),e.cache?.write(null),null}let i=Dt(r)?null:r;return e.cache?.write(i),i}var kt=me();function At(e){let t=JSON.stringify(e,jt);return(0,kt.createHash)(`sha256`).update(t??``).digest(`hex`)}function jt(e,t){if(t&&typeof t==`object`&&!Array.isArray(t)){let e=t,n={};for(let t of Object.keys(e).toSorted())n[t]=e[t];return n}return t}function Mt(e){return{transport:e.publishLocally===!0?`push`:`dial`}}var Nt=`\0unset`;function Pt(e){return{codec:e.codec,profile:e.profile??Nt,level:e.level??Nt,width:e.width??-1,height:e.height??-1,fps:e.fps??-1,bitrateKbps:e.bitrateKbps??-1,gopFrames:e.gopFrames??-1,bf:e.bf??-1,preset:e.preset??Nt,tune:e.tune??Nt}}function Ft(e){return e===`passthrough`?{codec:`passthrough`}:{codec:e.codec,bitrateKbps:e.bitrateKbps??-1,sampleRateHz:e.sampleRateHz??-1,channels:e.channels??-1}}function It(e,t=Mt(e)){return{deviceId:e.deviceId,source:e.source.kind===`profile`?`profile:${e.source.profile}`:`cam-stream:${e.source.camStreamId}`,transport:t.transport,fragmentMs:t.fragmentMs??-1,video:Pt(e.encode.video),audio:Ft(e.encode.audio),rateControl:e.rateControl??`relaxed`,bitstreamFilter:e.bitstreamFilter??Nt,pixelFormat:e.pixelFormat??Nt,decodeHwAccel:e.decodeHwAccel??Nt}}function Lt(e,t=Mt(e)){return`egress:${At(It(e,t))}`}var Rt=m([`singleton`,`device`,`widget`]),zt=a({capName:g(),kind:Rt,deviceId:o().optional(),reachable:v(),latencyMs:o(),error:g().optional()}),Bt=a({addonId:g(),caps:p(zt).readonly(),widgets:p(zt).readonly()}),Vt=a({nodeId:g(),addons:p(Bt).readonly()}),Ht=a({ok:v(),degraded:v(),checkedAt:g(),nodes:p(Vt).readonly(),summary:a({total:o(),reachable:o(),unreachable:o()})}),Ut=`hub-only`;function Wt(e){return{placement:e.execution?.placement??`hub-only`,group:e.execution?.group}}function Gt(e){let t=Wt(e).placement;return t===`any-node`||t===`agent-only`}function Kt(e){return Wt(e).placement===`agent-only`}function qt(e){return Wt(e).group}function Jt(e,t){return e.execution?.group??t}function Yt(e){return Wt(e).placement}function Xt(e){return e.execution?.isolate===!0}var Zt=`x-camstack-dataplane-secret`,Qt=[`grid-view`,`events-view`],$t=m([`running`,`done`,`failed`,`cancelled`]),en=m([`adopted`,`already-adopted`,`failed`,`cancelled`]),tn=a({childNativeId:g(),outcome:en,parentDeviceId:o().int().nonnegative().nullable(),accessoryCount:o().int().nonnegative(),error:g().nullable()}),nn=a({jobId:g(),addonId:g(),integrationId:g(),state:$t,total:o().int().nonnegative(),processed:o().int().nonnegative(),adopted:o().int().nonnegative(),alreadyAdopted:o().int().nonnegative(),failed:o().int().nonnegative(),accessoriesCreated:o().int().nonnegative(),currentChildNativeId:g().nullable(),results:p(tn).readonly(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),rn={cleanupIntervalMs:3600*1e3,detectionEventsDays:30,audioLevelsDays:7,snapshotsDays:14},an=m([`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`]),on=[`stream-broker`,`object-detection`,`privacy-mask`,`device-audio`,`broker-audio`,`audio-analysis`,`recording`,`notifications`],sn=b(`kind`,[a({kind:y(`device-disabled`)}),a({kind:y(`wrapper-binding`),capName:g()}),a({kind:y(`recording-config`)}),a({kind:y(`notification-mute`)}),a({kind:y(`camera-audio`),capName:g()}),a({kind:y(`camera-mask`),capName:g()}),a({kind:y(`broker-audio-mute`)})]),cn=m([`no-provider`,`source-unreachable`,`not-configured`,`device-disabled`]),ln=a({id:an,label:g(),costWhenOff:g(),available:v(),unavailableReason:cn.optional(),enabled:v(),authority:sn}),un=a({deviceId:o().int(),switches:p(ln).readonly(),fetchedAt:o()}),dn=`detection-pipeline`,fn=`audio-analysis`,pn=`privacy-mask`,mn={"stream-broker":{id:`stream-broker`,label:`Camera`,costWhenOff:`Off: the whole camera stops. No live view, no recording, no detection and no notifications — its streams are released and nothing dials it again until you turn it back on.`,authority:{kind:`device-disabled`},countsAsSwitchedOff:!0},"object-detection":{id:`object-detection`,label:`Object detection & tracking`,costWhenOff:`Off: nothing is detected or tracked on this camera, so it produces no events — and with no events there are no object notifications and no event-triggered recording. Live view and continuous recording are unaffected.`,authority:{kind:`wrapper-binding`,capName:dn},countsAsSwitchedOff:!0},"privacy-mask":{id:`privacy-mask`,label:`Privacy mask`,costWhenOff:`On: the zones you drew on this camera are blacked out by the camera itself — live view, playback, exports and detection all see the black boxes, and nothing behind them was ever recorded. Off: the camera captures the whole frame, and your zones are kept for when you turn it back on.`,authority:{kind:`camera-mask`,capName:pn},countsAsSwitchedOff:!1},"device-audio":{id:`device-audio`,label:`Camera microphone`,costWhenOff:`Off: the camera captures no sound at all. Live view and recordings become silent video, and audio detection and classification have nothing left to analyse — turning them back on will not recover it. The picture, motion and object detection are unaffected, and two-way talk still works. Applies at the camera, so every consumer sees the same silence.`,authority:{kind:`camera-audio`,capName:pn},countsAsSwitchedOff:!0},"broker-audio":{id:`broker-audio`,label:`Audio distribution`,costWhenOff:`Off: this server distributes no sound for this camera — live view is silent and everything recorded while it is off is silent FOREVER, even after you turn it back on. Audio detection and classification also have nothing to analyse. The camera keeps capturing sound, so nothing about the camera changes and turning this back on is instant, with no interruption to the picture.`,authority:{kind:`broker-audio-mute`},countsAsSwitchedOff:!0},"audio-analysis":{id:`audio-analysis`,label:`Audio detection & classification`,costWhenOff:`Off: no audio is decoded or classified for this camera. Tracks carry no audio labels and no audio-triggered rule can fire. Audio recorded alongside video is unaffected.`,authority:{kind:`wrapper-binding`,capName:fn},countsAsSwitchedOff:!0},recording:{id:`recording`,label:`Recording`,costWhenOff:`Off: nothing new is written to disk. Footage already recorded stays, but retention keeps deleting it — so this camera’s history shrinks and is not replaced. Your recording schedule is kept and resumes when you turn it back on.`,authority:{kind:`recording-config`},countsAsSwitchedOff:!0},notifications:{id:`notifications`,label:`Notifications`,costWhenOff:`Off: this camera never notifies anyone, on any rule, with no expiry. Detection, events and recording carry on exactly as before — you simply stop being told about them.`,authority:{kind:`notification-mute`},countsAsSwitchedOff:!0}};function hn(e,t){switch(e.authority.kind){case`device-disabled`:return{available:!0,enabled:!t.deviceDisabled};case`wrapper-binding`:{let n=e.authority.capName;return t.bindableCapNames===null||t.activeWrapperCapNames===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:t.bindableCapNames.includes(n)?{available:!0,enabled:t.activeWrapperCapNames.includes(n)}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`recording-config`:return t.recordingEnabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:t.recordingEnabled};case`notification-mute`:return t.notificationsMuted===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!t.notificationsMuted};case`camera-audio`:{let e=t.deviceAudio;return e===null?{available:!1,enabled:!0,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.enabled===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!0,unavailableReason:`no-provider`}}case`camera-mask`:{let e=t.privacyMask;return e===null?{available:!1,enabled:!1,unavailableReason:t.deviceDisabled?`device-disabled`:`source-unreachable`}:e.supported?e.configuredRegions===null||e.enabled===null?{available:!1,enabled:!1,unavailableReason:`source-unreachable`}:e.configuredRegions===0?{available:!1,enabled:!1,unavailableReason:`not-configured`}:{available:!0,enabled:e.enabled}:{available:!1,enabled:!1,unavailableReason:`no-provider`}}case`broker-audio-mute`:{let e=t.brokerAudio;return e===null?{available:!1,enabled:!0,unavailableReason:`source-unreachable`}:{available:!0,enabled:!e.muted}}}}function gn(e){return on.map(t=>{let n=mn[t],r=hn(n,e);return{id:n.id,label:n.label,costWhenOff:n.costWhenOff,available:r.available,...r.unavailableReason===void 0?{}:{unavailableReason:r.unavailableReason},enabled:r.enabled,authority:n.authority}})}function _n(e){return e.filter(e=>mn[e.id].countsAsSwitchedOff&&e.available&&!e.enabled).map(e=>e.id)}function vn(e){let t=[],n=[];for(let r of on){let i=mn[r];if(!i.countsAsSwitchedOff)continue;let a=hn(i,e);a.unavailableReason===`source-unreachable`?n.push(r):a.available&&!a.enabled&&t.push(r)}return{switchedOff:t,unreadable:n}}var yn=`__camstack_redacted__`;function bn(e){return e.type===`password`?!0:`secret`in e&&e.secret===!0}function xn(e){let t=new Set;for(let n of wn(e))for(let e of Tn(n))En(e,t);return t}function Sn(e){for(let t of wn(e))if(Tn(t).length>0)return!0;return!1}function Cn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wn(e){if(!Cn(e))return[];let t=e.sections;return Array.isArray(t)?t:[]}function Tn(e){if(!Cn(e))return[];let t=e.fields;return Array.isArray(t)?t:[]}function En(e,t){if(!Cn(e))return;let n=e.type,r=e.key;if((n===`password`||e.secret===!0)&&typeof r==`string`&&r.length>0&&t.add(r),n===`group`){for(let n of Tn(e))En(n,t);return}if(n===`sub-tabs`){let n=e.tabs;if(!Array.isArray(n))return;for(let e of n)for(let n of Tn(e))En(n,t)}}var Dn={high:`High`,mid:`Mid`,low:`Low`};function On(e){return Dn[e]??e.charAt(0).toUpperCase()+e.slice(1)}function kn(e){return(e.width??0)*(e.height??0)}function An(e){if(e.length===0)return[];let t=e.map((e,t)=>({s:e,i:t,px:kn(e.metadata??{})})).toSorted((e,t)=>t.px-e.px),n=Array.from({length:e.length});for(let e=0;e<t.length;e++){let{s:r,i}=t[e],a;a=e===0?`high`:e===t.length-1?`low`:`mid`,n[i]={...r,quality:a}}return n}function jn(e){let t=e.height??0,n=e.width??0;return t>=1080||n>=1920?`high`:t>=480||n>=640?`mid`:`low`}function Mn(e){let t=e.protocols.find(e=>e.type===`rtsp`&&e.url)??e.protocols.find(e=>e.url),n=t?.type,r=n===`rtsp`?`rtsp`:n===`http`||n===`flv`?`http-mjpeg`:`custom`;return{id:e.id,label:e.label??e.id,protocol:r,url:t?.url,profileHint:e.quality}}function S(e){return typeof e==`string`}function Nn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pn(e){return S(e)&&e.trim()?{url:e}:Nn(e)&&S(e.url)&&e.url.trim()?{url:e.url,label:S(e.label)?e.label:void 0}:null}function Fn(e){let t=S(e.snapshot_url)?e.snapshot_url:void 0;if(Array.isArray(e.streams)){let n=[];for(let t of e.streams){let e=Pn(t);e&&n.push(e)}return{streams:n,snapshot_url:t}}let n=[],r=S(e.main_stream_url)?e.main_stream_url:void 0;r&&n.push({url:r,label:S(e.main_stream_name)?e.main_stream_name:void 0});let i=S(e.sub_stream_url)?e.sub_stream_url:void 0;i&&n.push({url:i,label:S(e.sub_stream_name)?e.sub_stream_name:void 0});let a=S(e.third_stream_url)?e.third_stream_url:void 0;return a&&n.push({url:a,label:S(e.third_stream_name)?e.third_stream_name:void 0}),{streams:n,snapshot_url:t}}function In(e){if(e.length===0)return{};let t=An(e),n={},r=t.find(e=>e.quality===`high`),i=t.find(e=>e.quality===`mid`),a=t.find(e=>e.quality===`low`);r&&(n.high=r.id),i&&(n.mid=i.id),a&&(n.low=a.id);let o=r??i??a??t[0];return o&&(n.high||=o.id,n.mid||=o.id,n.low||=o.id),n}var Ln={streaming:!0,notifications:!0,objectDetection:!1,remoteAccess:!0,agentCluster:!1,smartHome:!0,recordings:!0,backup:!0,repl:!0},Rn={debug:0,info:1,warn:2,error:3};function zn(e,t){return Rn[e]<=Rn[t]}var Bn=m([`info`,`warn`,`error`]),Vn=a({name:g().min(3).regex(/^[a-z0-9-]+(\.[a-z0-9-]+)+$/,`a channel name is dotted lower-kebab, e.g. area.thing`),description:g().min(1),defaultLevel:Bn,perDevice:v()}),Hn=a({channel:g().min(1),armedUntilMs:o(),deviceIds:p(o().int()).readonly().nullable()}),Un=class{descriptor;on=!1;devices=null;level;closesAtMs=0;constructor(e){this.descriptor=e,this.level=e.defaultLevel}get armedUntilMs(){return this.on?this.closesAtMs:0}wants(e){return this.on?this.devices===null||this.devices.has(e):!1}log(e,t,n){if(!this.on)return;let r={...n.tags,logChannel:this.descriptor.name},i={...n,tags:r};this.level===`error`?e.error(t,i):this.level===`warn`?e.warn(t,i):e.info(t,i)}arm(e){let t=e.deviceIds;this.devices=t===null||t.length===0?null:new Set(t),this.closesAtMs=e.armedUntilMs,this.on=!0}disarm(){this.on=!1,this.devices=null,this.closesAtMs=0}},Wn=class{gates=new Map;declare(e){let t=Vn.parse(e);if(this.gates.get(t.name)!==void 0)throw Error(`log channel "${t.name}" is already declared in this process — two declarations of one name is a programming error, not a merge`);let n=new Un(t);return this.gates.set(t.name,n),n}list(){return[...this.gates.values()].map(e=>e.descriptor).sort((e,t)=>e.name.localeCompare(t.name))}gate(e){return this.gates.get(e)}apply(e,t){let n=new Map,r=[];for(let i of e)if(!(i.armedUntilMs<=t)){if(!this.gates.has(i.channel)){r.push(i.channel);continue}n.set(i.channel,i)}for(let[e,t]of this.gates){let r=n.get(e);r===void 0?t.disarm():t.arm(r)}return r}tick(e){let t=[];for(let[n,r]of this.gates)r.on&&r.armedUntilMs<=e&&(r.disarm(),t.push(n));return t}armed(){let e=[];for(let[t,n]of this.gates)n.on&&e.push({channel:t,armedUntilMs:n.armedUntilMs,deviceIds:null});return e}},Gn=null;function Kn(){return Gn??=new Wn,Gn}function qn(e){return Kn().declare(e)}function Jn(){Gn=null}var Yn=5e3;function Xn(e,t={}){let n=Kn(),r=t.now??Date.now,i=t.tickMs??5e3,a=setInterval(()=>{let t=n.tick(r());for(let n of t)e.info(`log channel window closed`,{tags:{logChannel:n},meta:{channel:n}})},i);return a.unref?.(),{list:()=>n.list(),apply:t=>{let i=n.apply(t.windows,r()),a=n.armed();return e.info(`log channels applied`,{meta:{armed:a.map(e=>e.channel),unknown:i,declared:n.list().length}}),{armed:a.length,unknown:i}},stop:()=>{clearInterval(a)}}}var Zn=m([`recording`,`events`]),Qn=m([`prune`,`manual-delete`,`rescan`,`retention-run`,`relocate`,`orphan-audit`]),$n=m([`retention`,`quota`,`manual`,`operator`,`maintenance`,`orphaned-device`]),er=a({id:g(),at:o(),domain:Zn,op:Qn,reason:$n,deviceId:o().nullable(),nodeId:g(),itemsAffected:o(),bytesReclaimed:o(),detail:g().nullable(),actor:g()}),tr=a({deviceId:o().optional(),limit:o().int().min(1).max(1e3).optional()}),C=m([`high`,`mid`,`low`]),nr=[`high`,`mid`,`low`],rr=m([`pull-rtsp`,`pull-rtmp`,`pull-http`,`pull-flv`,`pull-rfc4571`,`push-annexb`,`derived`]),ir=a({width:o().int().positive(),height:o().int().positive()}),ar=a({camStreamId:g().min(1),deviceId:o().int().nonnegative(),kind:rr,url:g().optional(),codec:g().optional(),resolution:ir.optional(),fps:o().positive().optional(),label:g().optional(),deviceFeatures:p(g()).optional(),autoEligible:v().optional(),metadata:r(g(),d()).optional()}),or=m([`unassigned`,`idle`,`connecting`,`streaming`,`error`]),sr=a({deviceId:o().int().nonnegative(),profile:C,brokerId:g(),sourceCamStreamId:g().nullable(),status:or,resolution:ir.optional(),codec:g().optional(),preBufferSec:o().nonnegative().optional(),errorMessage:g().optional()});function cr(e,t){return`${e}/${t}`}function lr(e,t){return`${e}/${t}`}function ur(e){let t=e.indexOf(`/`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);if(!/^\d+$/.test(n))return null;let i=C.safeParse(r);return i.success?{deviceId:Number(n),profile:i.data}:null}function dr(e,t){let n=[...e].filter(e=>t===void 0||e.deviceId===t).toSorted((e,t)=>nr.indexOf(e.profile)-nr.indexOf(t.profile)),r=new Set,i=[];for(let e of n){let t=e.sourceCamStreamId;t!==null&&(r.has(t)||(r.add(t),i.push(e)))}return i}var fr=a({id:g(),label:g(),protocol:m([`rtsp`,`rtmp`,`annexb`,`http-mjpeg`,`webrtc`,`custom`]),url:g().optional(),resolution:a({width:o(),height:o()}).readonly().optional(),fps:o().optional(),bitrate:o().optional(),codec:g().optional(),profileHint:C.optional()}),pr=a({type:g(),url:g(),videoCodec:g().optional(),audioCodec:g().optional(),metadata:r(g(),d()).readonly().optional()}),mr=a({type:m([`video`,`audio`]),data:_(Uint8Array),pts:o(),dts:o(),keyframe:v(),codec:g()}),hr=a({data:_(Uint8Array),width:o(),height:o(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),timestamp:o()}),w=a({shmId:g(),slot:o().int().nonnegative(),seq:o().int().nonnegative(),width:o().int().positive(),height:o().int().positive(),format:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]),pts:o(),byteLength:o().int().nonnegative(),nodeId:g(),slotCount:o().int().positive()}),gr=m([`rgb`,`bgr`,`yuv420`,`gray`]),_r=a({brokerId:g(),format:gr,maxFps:o().positive().optional(),tag:g().optional()}),vr=a({subscriptionId:g(),maxFps:o().nonnegative()}),yr=a({data:_(Uint8Array),sampleRate:o().int().positive(),channels:o().int().positive(),timestamp:o()}),br=a({brokerId:g(),tag:g().optional()}),xr=a({subscriptionId:g()}),Sr=m([`idle`,`connecting`,`streaming`,`error`,`stopped`]),Cr=a({status:Sr,inputFps:o(),decodeFps:o(),encodedSubscribers:o(),decodedSubscribers:o(),uptimeMs:o(),bitrateKbps:o(),idrIntervalMs:o(),codec:g().optional(),totalBytes:o(),packetCount:o(),rtspClients:o(),pipeClients:o(),preBufferSec:o(),preBufferMs:o(),preBufferPackets:o(),decoderNodeId:g().nullable(),audio:a({codec:g(),sampleRate:o(),channels:o(),supported:v()}).nullable().optional(),audioMuted:v().optional(),audioMutedDropped:o().optional()}),wr=a({profile:C,brokerId:g(),url:g(),mutedUrl:g(),enabled:v(),codec:g().optional(),resolution:ir.optional()}),Tr=a({id:g(),name:g(),category:g().optional(),description:g().optional(),icon:g().optional()}),Er=[`person`,`vehicle`,`animal`,`package`],Dr=[`person`,`vehicle`,`animal`];function Or(e){return Dr.some(t=>t===e)}var kr=a({mapping:r(g(),m(Er)),preserveOriginal:v()}),Ar={preMs:5e3,postMs:1e4},jr=o().int().min(0).max(6),Mr=/^([01]\d|2[0-3]):[0-5]\d$/,Nr=m([`off`,`events`,`continuous`]),Pr=m(Dr),Fr=e=>new Set(e).size===e.length,Ir=a({motion:v().optional(),audioThresholdDbfs:o().optional(),objectClasses:p(Pr).min(1).refine(Fr,{message:`objectClasses must not repeat a class`}).optional(),sensorDeviceIds:p(o().int().positive()).min(1).max(16).refine(Fr,{message:`sensorDeviceIds must not repeat a device`}).optional()}),Lr=m([`continuous`,`events`]),Rr=Ir,zr=a({days:p(jr),start:g().regex(Mr),end:g().regex(Mr),mode:Lr,triggers:Rr.optional(),preBufferSec:o().min(0).optional(),postBufferSec:o().min(0).optional()}),Br={preBufferSec:15,postBufferSec:30},Vr=Br.postBufferSec*1e3,Hr=a({maxAgeDays:o().min(0).optional(),maxSizeGb:o().min(0).optional()}),Ur=a({enabled:v(),mode:Nr.optional(),profiles:p(C).optional(),segmentSeconds:o().int().positive().optional(),bands:p(zr).default([]),retention:Hr.optional()}).strict();function Wr(e){return!e.enabled||e.bands.length===0?`off`:e.bands.some(e=>e.mode===`continuous`)?`continuous`:`events`}var Gr=[`high`,`low`];function Kr(e,t){if(t!==void 0&&t.length>0){let n=e.filter(e=>t.includes(e));return n.length>0?n:[...e]}let n=e.filter(e=>Gr.includes(e));return n.length>0?n:[...e]}var qr=m([`queued`,`running`,`done`,`failed`,`cancelled`]),Jr=a({jobId:g(),state:qr,fromLocationId:g(),toLocationId:g(),deviceId:o().nullable(),entities:p(g()),filesMoved:o().int(),bytesMoved:o().int(),filesTotal:o().int().nullable(),rowsReconciled:o().int().nonnegative().optional(),rowsForgotten:o().int().nonnegative().optional(),startedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Yr=m([`recordings`,`recordingsLow`]),Xr=a({fromLocationId:g(),toLocationId:g(),entities:p(m([`segments`])).optional(),footageClass:Yr.optional(),deviceId:o().int().optional(),profiles:p(g()).optional(),throttleMbps:o().min(1).max(1e3).optional(),sinceMs:o().int().optional()}),T=a({leaseId:g().min(1)}),Zr=Xr.extend({leaseId:g().min(1)}),Qr=m([`move`,`seal`,`gallery`]),$r=a({toLocationId:g(),fromLocationId:g().optional(),throttleMbps:o().min(1).max(1e3).optional(),mode:Qr.optional()}),ei=a({present:v(),rows:o().int().nonnegative().nullable()}),ti=a({media:ei,retrainFrames:ei,anyPresent:v(),total:o().int().nonnegative().nullable()}).nullable(),ni=$r.extend({leaseId:g().min(1)}),ri=m([`recordings`,`recordingsLow`,`eventMedia`,`backups`,`galleryMedia`]),ii=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).refine(e=>Object.keys(e).length>0,{message:`select at least one storage class`}),ai=a({recordings:g().min(1).optional(),recordingsLow:g().min(1).optional(),eventMedia:g().min(1).optional(),backups:g().min(1).optional(),galleryMedia:g().min(1).optional()}).optional(),oi=m([`blocking`,`nonBlocking`]),si=a({destinations:ii,sources:ai,throttleMbps:o().min(1).max(1e3).optional(),mode:oi.optional()}),ci=m([`planning`,`sealing`,`pausing`,`moving`,`draining`,`verifying`,`repointing`,`refreshing`,`resuming`,`done`,`failed`,`cancelled`]),li=m([`pipeline`,`recorder`,`analytics`]),ui=a({filesMoved:o().int().nonnegative(),filesTotal:o().int().nonnegative().nullable(),bytesMoved:o().int().nonnegative(),rowsReconciled:o().int().nonnegative().optional(),startedAt:o(),observedAt:o()}),di=a({storageClass:ri,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional(),moverJobId:g().nullable(),state:qr.nullable(),error:g().nullable(),progress:ui.nullable()}),fi=a({jobId:g(),phase:ci,mode:oi,destinations:ii,sources:ai,throttleMbps:o(),moves:p(di),pauseLeaseId:g().nullable(),pausedParticipants:p(li),repointed:v(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),pi=m([`sharesDeviceWithSource`,`deviceIdentityUnknown`,`unstampedEventMediaRows`,`blockingOnly`,`noMover`]),mi=a({code:pi,storageClass:ri,message:g()}),hi=a({destinations:ii,sources:ai,mode:oi,moves:p(a({storageClass:ri,fromLocationId:g(),toLocationId:g(),freezeSource:v().optional()})),findings:p(mi)}),gi=m([`footage`,`media`]),_i=a({lane:gi,job:Jr,migrationJobId:g().nullable(),observedAt:o()}),vi=a({storageClass:ri,fromLocationId:g(),toLocationId:g(),items:o().int().nonnegative().nullable(),bytes:o().int().nonnegative().nullable()}),yi=a({classes:p(ri).min(1),throttleMbps:o().min(1).max(1e3).optional()}),bi=a({fromLocationId:g().min(1),footageClass:Yr.optional()}),xi=a({segments:o().int().nonnegative(),bytes:o().int().nonnegative()}).nullable(),Si=a({locationId:g().min(1),apply:v().optional(),deviceId:o().int().positive().optional(),profiles:p(g().min(1)).optional()}),Ci=m([`location-unknown`,`source-writable`,`no-ledger`,`archive-unreadable`,`anchor-absent`,`anchor-unreadable`,`anchor-moved`]),wi=m([`live-tail`,`listing-error`,`path-mismatch`,`durable-refused`]),Ti=a({"live-tail":o().int().nonnegative(),"listing-error":o().int().nonnegative(),"path-mismatch":o().int().nonnegative(),"durable-refused":o().int().nonnegative()}),Ei=a({deviceId:o().int(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),orphanFiles:o().int().nonnegative()}),Di=a({locationId:g(),applied:v(),refused:Ci.nullable(),archiveSegments:o().int().nonnegative().nullable(),archiveBytes:o().int().nonnegative().nullable(),hoursClaimed:o().int().nonnegative(),hoursWalked:o().int().nonnegative(),hoursMissing:o().int().nonnegative(),listings:o().int().nonnegative(),segmentsClaimed:o().int().nonnegative(),ghostSegments:o().int().nonnegative(),ghostBytes:o().int().nonnegative(),ghostHoursWhole:o().int().nonnegative(),forgottenSegments:o().int().nonnegative(),forgottenBytes:o().int().nonnegative(),orphanFiles:o().int().nonnegative(),orphanSample:p(g()).readonly(),hoursSkipped:o().int().nonnegative(),skippedByReason:Ti,bounded:v(),byDevice:p(Ei).readonly()}),Oi=a({rows:o().int().nonnegative()}).nullable(),ki=a({toLocationId:g().min(1),fromLocationId:g().optional(),mode:Qr.optional()}),Ai=m([`orphans`,`debug-media`,`ghost-ledger`,`done`,`failed`,`cancelled`]),ji=a({includeDebugMedia:v().optional()}),Mi=a({jobId:g(),phase:Ai,includeDebugMedia:v(),orphansReclaimed:o().int().nonnegative(),orphanBytesReclaimed:o().int().nonnegative(),debugMediaReclaimed:o().int().nonnegative(),debugMediaBytesReclaimed:o().int().nonnegative(),ghostsForgotten:o().int().nonnegative(),ghostBytesForgotten:o().int().nonnegative(),detail:g().nullable(),cancelRequested:v(),startedAt:o(),updatedAt:o(),finishedAt:o().nullable(),error:g().nullable()}),Ni=a({jobId:g().optional()}),Pi=[`face`,`plate`],Fi=[`face`,`plate`,`clip`,`custom`],Ii=g().regex(/^[a-z][a-zA-Z0-9-]*$/),E=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/),type:g(),displayName:g().min(1),providerId:g().min(1),config:r(g(),d()),nodeId:g().optional(),isDefault:v().default(!1),isSystem:v().default(!1),enabled:v().optional(),capacity:a({totalBytes:o(),availableBytes:o()}).nullable().optional(),createdAt:o(),updatedAt:o()}),D=l([Ii,g().regex(/^[a-z][a-zA-Z0-9-]*:[a-zA-Z0-9-]+$/)]),Li=m([`local-path`,`cap-mediated`]),Ri=`local-path`,zi=a({id:g().regex(/^[a-z][a-zA-Z0-9-]*$/,{message:`id must start with a lowercase letter and contain only letters, digits, or hyphens`}),displayName:g().min(1,{message:`displayName must not be empty`}),description:g().optional(),cardinality:m([`single`,`multi`]),access:Li.optional(),defaultsTo:g().optional(),defaultRoot:m([`data`,`media`,`backup`]).optional()}),Bi=a({inputFps:o(),outputFps:o(),avgDecodeTimeMs:o(),droppedFrames:o(),lagMs:o().optional(),effectiveFps:o().optional(),adaptiveFps:o().optional()}),Vi=a({codec:g(),maxFps:o().default(0),outputFormat:m([`jpeg`,`rgb`,`bgr`,`yuv420`,`gray`]).default(`jpeg`),scale:o().default(1),width:o().optional(),height:o().optional(),deviceId:o().int().nonnegative().optional(),tag:g().optional(),frameSink:m([`callback`,`shm`]).default(`callback`),debug:v().optional()}),Hi={offsetHours:1,startMonth:3,startWeekIndex:5,startWeekday:`Sunday`,startHour:2,endMonth:10,endWeekIndex:5,endWeekday:`Sunday`,endHour:3},Ui={offsetHours:1,startMonth:3,startWeekIndex:2,startWeekday:`Sunday`,startHour:2,endMonth:11,endWeekIndex:1,endWeekday:`Sunday`,endHour:2},Wi=[{id:`UTC`,label:`UTC (UTC+0)`,region:`Universal`,stdOffsetMinutes:0,dst:null},{id:`Europe/London`,label:`Europe/London (UTC+0 / BST)`,region:`Europe`,stdOffsetMinutes:0,dst:Hi},{id:`Europe/Rome`,label:`Europe/Rome (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Paris`,label:`Europe/Paris (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Berlin`,label:`Europe/Berlin (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Madrid`,label:`Europe/Madrid (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Amsterdam`,label:`Europe/Amsterdam (UTC+1 / CEST)`,region:`Europe`,stdOffsetMinutes:60,dst:Hi},{id:`Europe/Istanbul`,label:`Europe/Istanbul (UTC+3)`,region:`Europe`,stdOffsetMinutes:180,dst:null},{id:`America/New_York`,label:`America/New York (UTC−5 / EDT)`,region:`Americas`,stdOffsetMinutes:-300,dst:Ui},{id:`America/Chicago`,label:`America/Chicago (UTC−6 / CDT)`,region:`Americas`,stdOffsetMinutes:-360,dst:Ui},{id:`America/Denver`,label:`America/Denver (UTC−7 / MDT)`,region:`Americas`,stdOffsetMinutes:-420,dst:Ui},{id:`America/Los_Angeles`,label:`America/Los Angeles (UTC−8 / PDT)`,region:`Americas`,stdOffsetMinutes:-480,dst:Ui},{id:`America/Sao_Paulo`,label:`America/Sao Paulo (UTC−3)`,region:`Americas`,stdOffsetMinutes:-180,dst:null},{id:`Asia/Dubai`,label:`Asia/Dubai (UTC+4)`,region:`Asia`,stdOffsetMinutes:240,dst:null},{id:`Asia/Kolkata`,label:`Asia/Kolkata (UTC+5:30)`,region:`Asia`,stdOffsetMinutes:330,dst:null},{id:`Asia/Singapore`,label:`Asia/Singapore (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Shanghai`,label:`Asia/Shanghai (UTC+8)`,region:`Asia`,stdOffsetMinutes:480,dst:null},{id:`Asia/Tokyo`,label:`Asia/Tokyo (UTC+9)`,region:`Asia`,stdOffsetMinutes:540,dst:null},{id:`Australia/Sydney`,label:`Australia/Sydney (UTC+10 / AEDT)`,region:`Oceania`,stdOffsetMinutes:600,dst:{offsetHours:1,startMonth:10,startWeekIndex:1,startWeekday:`Sunday`,startHour:2,endMonth:4,endWeekIndex:1,endWeekday:`Sunday`,endHour:3}}];function Gi(e){return Wi.find(t=>t.id===e)}var Ki=class extends Error{capName;scope;waitedMs;constructor(e,t,n){super(`Timed out waiting for ${e} (${Ji(t)}) to become ready after ${n}ms`),this.name=`ReadinessTimeoutError`,this.capName=e,this.scope=t,this.waitedMs=n}};function qi(e,t){return`${e}|${Ji(t)}`}function Ji(e){switch(e.type){case`global`:return`global`;case`node`:return`node:${e.nodeId}`;case`device`:return`device:${e.deviceId}`}}function Yi(e){switch(e){case`starting`:return 0;case`ready`:return 1;case`down`:return 2}}function Xi(e,t){return e.type===t.type?e.type===`global`||t.type===`global`?!0:e.type===`node`&&t.type===`node`?e.nodeId===t.nodeId:e.type===`device`&&t.type===`device`?e.deviceId===t.deviceId:!1:!1}var Zi=class{bus;sourceNodeId;logger;now;generation;verboseDeviceScopeLogs;snapshot=new Map;subscriptions=new Set;unsubscribeBus;unsubscribeAgentOffline;constructor(e){if(this.bus=e.eventBus,this.sourceNodeId=e.sourceNodeId,this.logger=e.logger,this.now=e.now??(()=>Date.now()),this.generation=e.generation??Qi(),this.verboseDeviceScopeLogs=e.verboseDeviceScopeLogs??!1,this.unsubscribeBus=this.bus.subscribe({category:`system.ready-state`},e=>this.ingest(e.data)),this.unsubscribeAgentOffline=this.bus.subscribe({category:`agent.offline`},e=>this.synthesizeDownForNode(e.data.agentId)),typeof this.bus.getRecent==`function`)try{let e=this.bus.getRecent({category:`system.ready-state`});for(let t of e)this.ingest(t.data)}catch{}}close(){this.unsubscribeBus(),this.unsubscribeAgentOffline(),this.subscriptions.clear()}get(e,t){return this.snapshot.get(qi(e,t))??null}getSnapshotForTransport(){return Array.from(this.snapshot.values())}hydrate(e){let t=this.now(),n=0;for(let r of e){let e=qi(r.capName,r.scope),i=this.snapshot.get(e)??null,a,o;if(i!==null){if(this.isLocallyAuthoritative(i))continue;let e=i.generation===r.generation;if(e&&Yi(r.state)<=Yi(i.state))continue;a=!e&&r.state===`ready`?i.epoch+1:i.epoch,o=Math.max(0,t-i.lastChange)}else a=1,o=0;let s={capName:r.capName,scope:r.scope,state:r.state,generation:r.generation,epoch:a,lastChange:t,sourceNodeId:r.sourceNodeId};this.snapshot.set(e,s),n++,this.logPerRecord(r.scope,`readiness: ${r.capName} (${Ji(r.scope)}) → ${r.state} (hydrated${i===null?``:` update`}, gen=${r.generation.slice(0,6)})`);let c={capName:r.capName,scope:r.scope,state:r.state,epoch:a,generation:r.generation,sourceNodeId:`hydrated`,ts:t,durationInPrevState:o};for(let e of this.subscriptions)if(e.capName===r.capName&&Xi(e.scope,r.scope))try{e.handler(c)}catch(e){this.logger?.warn(`readiness hydrate handler threw for ${r.capName}: ${e.message??String(e)}`)}}return n}logPerRecord(e,t){if(this.logger){if(e.type===`device`){if(!this.verboseDeviceScopeLogs)return;this.logger.debug(t,{tags:{deviceId:e.deviceId}});return}this.logger.debug(t)}}isLocallyAuthoritative(e){return e.scope.type===`node`?e.scope.nodeId===this.sourceNodeId:e.sourceNodeId===this.sourceNodeId}getAll(){return new Map(this.snapshot)}emitReady(e,t){this.emitTransition(e,t,`ready`)}emitStarting(e,t){this.emitTransition(e,t,`starting`)}emitDown(e,t){this.emitTransition(e,t,`down`)}awaitReady(e,t,n={}){let r=n.timeoutMs??1/0,i=this.now();return this.get(e,t)?.state===`ready`?Promise.resolve():n.signal?.aborted?Promise.reject(n.signal.reason??Error(`aborted`)):new Promise((a,o)=>{let s=!1,c=this.onReadyState(e,t,e=>{e.state===`ready`&&(s||(s=!0,f(),a()))}),l=Number.isFinite(r)?setTimeout(()=>{s||(s=!0,f(),o(new Ki(e,t,this.now()-i)))},r):null,u=setInterval(()=>{s||this.logger?.warn(`readiness: still awaiting ${e} (${Ji(t)}) after ${this.now()-i}ms`)},3e4);typeof u.unref==`function`&&u.unref();let d=()=>{s||(s=!0,f(),o(n.signal?.reason??Error(`aborted`)))};n.signal?.addEventListener(`abort`,d,{once:!0});function f(){c(),l!==null&&clearTimeout(l),clearInterval(u),n.signal?.removeEventListener(`abort`,d)}})}onReadyState(e,t,n){let r={capName:e,scope:t,handler:n};this.subscriptions.add(r);let i=this.get(e,t);return i!==null&&queueMicrotask(()=>{this.subscriptions.has(r)&&n({capName:e,scope:t,state:i.state,epoch:i.epoch,generation:i.generation,sourceNodeId:this.sourceNodeId,ts:i.lastChange,durationInPrevState:0})}),()=>{this.subscriptions.delete(r)}}emitTransition(e,t,n){let r=this.now();this.bus.emit(Oe(`system.ready-state`,{type:`capability`,id:e,nodeId:this.sourceNodeId},{capName:e,scope:t,state:n,generation:this.generation,sourceNodeId:this.sourceNodeId,ts:r}))}ingest(e){if(typeof e?.capName!=`string`||e.state!==`ready`&&e.state!==`starting`&&e.state!==`down`||typeof e.generation!=`string`||e.scope?.type!==`global`&&e.scope?.type!==`node`&&e.scope?.type!==`device`)return;let t=qi(e.capName,e.scope),n=this.snapshot.get(t)??null,r=this.now(),i;if(i=n===null?+(e.state===`ready`):n.generation!==e.generation&&e.state===`ready`?n.epoch+1:n.epoch,n!==null&&n.generation===e.generation&&n.state===e.state)return;let a=n===null?0:Math.max(0,r-n.lastChange),o={capName:e.capName,scope:e.scope,state:e.state,generation:e.generation,epoch:i,lastChange:r,sourceNodeId:e.sourceNodeId};this.snapshot.set(t,o);let s={capName:e.capName,scope:e.scope,state:e.state,epoch:i,generation:e.generation,sourceNodeId:e.sourceNodeId,ts:e.ts,durationInPrevState:a};this.logPerRecord(e.scope,`readiness: ${e.capName} (${Ji(e.scope)}) → ${e.state} epoch=${i} gen=${e.generation.slice(0,6)} (prev ${a}ms)`);for(let t of this.subscriptions)if(t.capName===e.capName&&Xi(t.scope,e.scope))try{t.handler(s)}catch(t){this.logger?.warn(`readiness handler threw for ${e.capName}: ${t.message??String(t)}`)}}synthesizeDownForNode(e){let t=this.now();for(let[n,r]of this.snapshot){if(r.state===`down`||!(r.scope.type===`node`&&r.scope.nodeId===e||r.scope.type===`device`&&r.sourceNodeId===e))continue;let i=Math.max(0,t-r.lastChange),a={...r,state:`down`,lastChange:t};this.snapshot.set(n,a);let o={capName:r.capName,scope:r.scope,state:`down`,epoch:r.epoch,generation:r.generation,sourceNodeId:this.sourceNodeId,ts:t,durationInPrevState:i};this.logPerRecord(r.scope,`readiness: ${r.capName} (${Ji(r.scope)}) → down (synthesized from agent.offline ${e})`);for(let e of this.subscriptions)if(e.capName===r.capName&&Xi(e.scope,r.scope))try{e.handler(o)}catch(e){this.logger?.warn(`readiness handler threw during agent.offline demux for ${r.capName}: ${e.message??String(e)}`)}}}};function Qi(){return typeof crypto<`u`&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2,14)}function $i(e,t){for(let{capName:n,scope:r}of t)e.emitDown(n,r)}function ea(e,t,n,r={}){if(e.length===0)return null;let i=`${n}/`,a=e=>({brokerId:e.brokerId,profileId:e.brokerId.startsWith(i)?e.brokerId.slice(i.length):e.brokerId,url:e.url,mutedUrl:e.mutedUrl,enabled:e.enabled,...e.codec===void 0?{}:{codec:e.codec},...e.resolution===void 0?{}:{resolution:e.resolution}});if(t!==`auto`){let n=e.find(e=>e.enabled&&e.url.length>0&&(e.profile===t||e.brokerId===`${i}${t}`));if(n)return a(n)}let o=e.filter(e=>e.enabled&&e.url.length>0);if(o.length===0)return null;let s=r.targetResolution;if(s){let e=o.filter(e=>e.resolution!==void 0);if(e.length>0){let t=ta(e,s);if(t)return a(t)}}return a(o[0])}function ta(e,t){let n=t.width*t.height,r,i;for(let t of e){if(t.resolution===void 0)continue;let e=t.resolution.width*t.resolution.height;e>=n?(!r||e<r.pixels)&&(r={entry:t,pixels:e}):(!i||e>i.pixels)&&(i={entry:t,pixels:e})}return r?.entry??i?.entry}var na=`__unattributed__`,ra=`__root__`;function ia(e){return e.addonId===null?e.classification===`root`?{key:ra,kind:`root`}:{key:na,kind:`unattributed`}:{key:e.addonId,kind:`addon`}}function aa(e){return Math.round(e*10)/10}function oa(e,t){let n=new Map;for(let t of e){let{key:e,kind:r}=ia(t),i=n.get(e)??{kind:r,main:0,gc:0,lifetime:0,memory:0,count:0,splitKnown:!0},a=t.cpuMainPercent!==null&&t.cpuGcPercent!==null;n.set(e,{kind:i.kind,main:i.main+(t.cpuMainPercent??0),gc:i.gc+(t.cpuGcPercent??0),lifetime:i.lifetime+t.cpuPercent,memory:i.memory+t.memoryRssBytes,count:i.count+1,splitKnown:i.splitKnown&&a})}return[...n.entries()].map(([e,n])=>{let r=n.splitKnown?aa(n.main):null,i=n.splitKnown?aa(n.gc):null,a=aa(n.lifetime);return{key:e,kind:n.kind,point:{atMs:t,samples:1,cpuMainPercent:r,cpuMainPercentMin:r,cpuGcPercent:i,cpuGcPercentMin:i,cpuLifetimePercent:a,cpuLifetimePercentMin:a,memoryRssBytes:n.memory,memoryRssBytesMin:n.memory,processCount:n.count,processCountMin:n.count}}})}function sa(e,t){return e===null||t===null?null:e<t?e:t}function ca(e,t){return e===null||t===null?null:e>t?e:t}function la(e,t,n){return{atMs:n,samples:e.samples+t.samples,cpuMainPercent:ca(e.cpuMainPercent,t.cpuMainPercent),cpuMainPercentMin:sa(e.cpuMainPercentMin,t.cpuMainPercentMin),cpuGcPercent:ca(e.cpuGcPercent,t.cpuGcPercent),cpuGcPercentMin:sa(e.cpuGcPercentMin,t.cpuGcPercentMin),cpuLifetimePercent:Math.max(e.cpuLifetimePercent,t.cpuLifetimePercent),cpuLifetimePercentMin:Math.min(e.cpuLifetimePercentMin,t.cpuLifetimePercentMin),memoryRssBytes:Math.max(e.memoryRssBytes,t.memoryRssBytes),memoryRssBytesMin:Math.min(e.memoryRssBytesMin,t.memoryRssBytesMin),processCount:Math.max(e.processCount,t.processCount),processCountMin:Math.min(e.processCountMin,t.processCountMin)}}function ua(e,t,n){if(n<=0||t<=0||e<=0)return Math.max(t,1);let r=e/n;return r<=t?t:Math.ceil(r/t)*t}function da(e,t,n){if(t<=0||e.length===0)return e;let r=new Map;for(let i of e){let e=n+Math.floor((i.atMs-n)/t)*t,a=r.get(e);r.set(e,a===void 0?{...i,atMs:e}:la(a,i,e))}return[...r.values()].toSorted((e,t)=>e.atMs-t.atMs)}var fa=1024,pa=`other`;function ma(e,t,n){return n===void 0?`${e}${t}`:`${e}${t}${n}`}var ha=class{maxKeys;maxReasons;counters=new Map;refused=0;constructor(e=fa,t=16){this.maxKeys=e,this.maxReasons=t}get keysRefused(){return this.refused}get size(){return this.counters.size}note(e,t){if(!Number.isInteger(e.deviceId)||e.deviceId<=0)return;let n=ma(e.deviceId,e.family,e.variant),r=this.counters.get(n);if(r===void 0){if(this.counters.size>=this.maxKeys){this.refused+=1;return}r={deviceId:e.deviceId,family:e.family,variant:e.variant,sinceMs:t,attempts:0,succeeded:0,reasons:new Map},this.counters.set(n,r)}if(r.attempts+=1,e.reason===void 0){r.succeeded+=1;return}let i=r.reasons.has(e.reason)||r.reasons.size<this.maxReasons?e.reason:pa;r.reasons.set(i,(r.reasons.get(i)??0)+1)}snapshot(e){let t=[];for(let n of this.counters.values())t.push({deviceId:n.deviceId,family:n.family,...n.variant===void 0?{}:{variant:n.variant},sinceMs:n.sinceMs,atMs:e,attempts:n.attempts,succeeded:n.succeeded,reasons:[...n.reasons.entries()].map(([e,t])=>({reason:e,count:t})).toSorted((e,t)=>t.count-e.count)});return t}clear(){this.counters.clear()}};function ga(e){return e.attempts<=0?null:(e.attempts-e.succeeded)/e.attempts}var _a=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`],va={yolo26:`YOLO26`,yolov9:`YOLOv9`};function ya(e){return va[e]??e.toUpperCase()}var ba=/\s*@\s*\d+\s*(?:[x×]\s*\d+)?/gi;function xa(e,t){let n=ya(e),r=t.replace(RegExp(`^${n}\\s+`,`i`),``).replace(ba,``).trim();return r.length>0?r:t}function Sa(e,t){let n=[];return t===`fast`&&n.push(`Fast`),n.push(e===`int8`?`Int8`:`Standard`),n.join(` · `)}function Ca(e){return _a.filter(t=>e.formats[t]!==void 0)}function wa(e){let t=_a.map(t=>e.formats[t]?.sizeMB).filter(e=>typeof e==`number`);return t.length>0?Math.min(...t):0}var Ta=[`t`,`n`,`s`,`m`,`c`,`l`,`x`],Ea=[`fp32`,`int8`];function Da(e){let t=new Map;for(let n of e){if(n.legacy===!0||n.group===void 0)continue;let{family:e,tier:r}=n.group,i=t.get(e)??new Map,a=i.get(r)??[];a.push(n),i.set(r,a),t.set(e,i)}let n=[];for(let[e,r]of t){let t=[];for(let[n,i]of r){let r=i.map(e=>{let t=e.group?.precision??`fp32`,n=e.group?.optimization??`standard`;return{modelId:e.id,precision:t,optimization:n,resolution:e.group?.resolution,label:Sa(t,n),formats:Ca(e),sizeMB:wa(e)}}).toSorted((e,t)=>e.resolution===t.resolution?e.optimization===t.optimization?Ea.indexOf(e.precision)-Ea.indexOf(t.precision):e.optimization===`fast`?1:-1:(t.resolution??1/0)-(e.resolution??1/0)),a=r.find(e=>e.precision===`fp32`&&e.optimization===`standard`)??r[0];if(a===void 0)continue;let o=i.find(e=>e.id===a.modelId);t.push({tier:n,label:o?xa(e,o.name):n.toUpperCase(),baseModelId:a.modelId,options:r})}t.sort((e,t)=>{let n=Ta.indexOf(e.tier),r=Ta.indexOf(t.tier);return n!==-1&&r!==-1?n-r:n===-1?r===-1?e.tier.localeCompare(t.tier):1:-1}),n.push({family:e,label:ya(e),tiers:t})}return n.sort((e,t)=>e.family.localeCompare(t.family)),n}function Oa(e,t){let n=t.precision??`fp32`,r=t.optimization??`standard`,i=e.filter(e=>e.group!==void 0&&e.group.family===t.family&&e.group.tier===t.tier&&(e.group.precision??`fp32`)===n&&(e.group.optimization??`standard`)===r);return t.resolution===void 0?i.toSorted((e,t)=>(t.group?.resolution??1/0)-(e.group?.resolution??1/0))[0]?.id??null:i.find(e=>e.group?.resolution===t.resolution)?.id??null}function ka(e,t){let n=e.find(e=>e.id===t);return n?.group===void 0?null:{family:n.group.family,tier:n.group.tier,precision:n.group.precision??`fp32`,optimization:n.group.optimization??`standard`,resolution:n.group.resolution}}var Aa=[`onnx`,`coreml`,`openvino`,`tflite`,`pt`,`gguf`],ja=a({url:g(),sizeMB:o(),isDirectory:v().optional(),files:p(g()).readonly().optional(),runtimes:p(m([`node`,`python`])).readonly().optional()}),Ma=a({url:g(),filename:g(),sizeMB:o()}),Na=a({onnx:ja.optional(),coreml:ja.optional(),openvino:ja.optional(),tflite:ja.optional(),pt:ja.optional(),gguf:ja.optional()}),Pa=a({family:g(),tier:g(),precision:m([`fp32`,`int8`]).optional(),optimization:m([`standard`,`fast`]).optional(),resolution:o().int().positive().optional()}),Fa=[`camstack`,`frigate`,`scrypted`,`custom`],Ia=m(Fa);function La(e){if(e.provider!==void 0)return e.provider;let t=`${e.id} ${e.description??``}`;return/scrypted/i.test(t)?`scrypted`:/frigate/i.test(t)?`frigate`:`custom`}var Ra=a({id:g(),name:g(),description:g(),formats:Na,inputSize:a({width:o(),height:o()}),inputChannels:o().int().positive().optional(),labels:p(Tr).readonly(),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),outputProbabilities:v().optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),postprocessor:x().optional(),faceAlignment:v().optional(),extraFiles:p(Ma).readonly().optional(),legacy:v().optional(),metrics:a({map50:o().optional(),p95LatencyMs:r(g(),o()).optional()}).optional(),license:g().optional(),group:Pa.optional(),provider:Ia.optional(),classMap:kr.optional()}),za=b(`format`,[a({format:y(`openvino`),precisions:p(m([`fp16`,`int8`])).min(1).readonly()}),a({format:y(`coreml`)})]),Ba=a({id:g().regex(/^[a-zA-Z0-9._-]+$/),name:g(),labels:p(Tr).readonly(),inputSize:a({width:o(),height:o()}),inputLayout:m([`nchw`,`nhwc`]).optional(),inputNormalization:m([`zero-one`,`imagenet`,`none`]).optional(),preprocessMode:m([`letterbox`,`resize`]).optional(),outputFormat:m([`yolo`,`ssd`,`embedding`,`classification`,`ocr`,`segmentation`]),faceAlignment:v().optional(),classMap:kr.optional()}),Va=a({format:m(Aa),precision:m([`fp16`,`int8`]).optional(),sizeMB:o(),validated:v(),files:p(g()).readonly()}),Ha=a({entry:Ra,artifacts:p(Va).readonly()});function Ua(e){switch(e.toUpperCase()){case`GET`:case`HEAD`:case`OPTIONS`:return`view`;case`POST`:case`PUT`:case`PATCH`:return`create`;default:return`delete`}}function Wa(e,t){return e.some(e=>e.type===`category`&&e.target===`device`&&e.access.includes(t))}function Ga(e,t,n){return e.some(e=>e.type===`addon`&&e.target===t&&e.access.includes(n))}function Ka(e){let t=e.kind;if(t===void 0)return{kind:`session`};if(t!==`sso-bridge`)return{kind:`not-a-credential`,reason:`bridge token kind=${String(t)}`};let n=e.provider;return n===`oauth-access`?{kind:`integration`,provider:`oauth-access`}:{kind:`not-a-credential`,reason:`bridge token provider=${String(n)}`}}function qa(e){let{principal:t}=e;if(t.kind===`not-a-credential`)return{allowed:!1,reason:t.reason};if(t.kind===`session`)return{allowed:!0};let n=Ua(e.method);return Ga(e.scopes,e.addonId,n)?{allowed:!0}:{allowed:!1,reason:`integration token holds no addon:${e.addonId}[${n}] grant`}}var O=class extends Error{position;constructor(e,t){super(e),this.name=`ExpressionParseError`,this.position=t}},k=class extends Error{constructor(e){super(e),this.name=`ExpressionEvalError`}};function A(e,t,n){if(typeof e!=`number`||!Number.isFinite(e))throw new k(`${t}: argument ${n+1} must be a finite number`);return e}function Ja(e,t,n){if(typeof e!=`string`)throw new k(`${t}: argument ${n+1} must be a string`);return e}function j(e,t){if(!Number.isFinite(e))throw new k(`${t}: produced a non-finite result`);return e}function Ya(e,t){return e.map((e,n)=>A(e,t,n))}var Xa=1/0,Za={min:{minArgs:1,maxArgs:Xa,apply:e=>j(Math.min(...Ya(e,`min`)),`min`)},max:{minArgs:1,maxArgs:Xa,apply:e=>j(Math.max(...Ya(e,`max`)),`max`)},abs:{minArgs:1,maxArgs:1,apply:e=>j(Math.abs(A(e[0],`abs`,0)),`abs`)},floor:{minArgs:1,maxArgs:1,apply:e=>j(Math.floor(A(e[0],`floor`,0)),`floor`)},ceil:{minArgs:1,maxArgs:1,apply:e=>j(Math.ceil(A(e[0],`ceil`,0)),`ceil`)},sqrt:{minArgs:1,maxArgs:1,apply:e=>j(Math.sqrt(A(e[0],`sqrt`,0)),`sqrt`)},round:{minArgs:1,maxArgs:2,apply:e=>{let t=A(e[0],`round`,0),n=e.length>1?Math.trunc(A(e[1],`round`,1)):0;if(n<0||n>100)throw new k(`round: digits must be between 0 and 100`);let r=10**n;return j(Math.round(t*r)/r,`round`)}},pow:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`pow`,0)**A(e[1],`pow`,1),`pow`)},clamp:{minArgs:3,maxArgs:3,apply:e=>{let t=A(e[0],`clamp`,0),n=A(e[1],`clamp`,1),r=A(e[2],`clamp`,2);if(n>r)throw new k(`clamp: lower bound is greater than upper bound`);return j(Math.min(r,Math.max(n,t)),`clamp`)}},avg:{minArgs:1,maxArgs:Xa,apply:e=>{let t=Ya(e,`avg`);return j(t.reduce((e,t)=>e+t,0)/t.length,`avg`)}},sum:{minArgs:1,maxArgs:Xa,apply:e=>j(Ya(e,`sum`).reduce((e,t)=>e+t,0),`sum`)},coalesce:{minArgs:1,maxArgs:Xa,apply:e=>{for(let t of e)if(t!==null)return t;return null}},age:{minArgs:2,maxArgs:2,apply:e=>j(A(e[0],`age`,0)-A(e[1],`age`,1),`age`)},convert:{minArgs:3,maxArgs:3,apply:(e,t)=>{let n=A(e[0],`convert`,0),r=Ja(e[1],`convert`,1).trim(),i=Ja(e[2],`convert`,2).trim();if(t.convert){let e=t.convert(n,r,i);if(e===null)throw new k(`convert: cannot convert '${r}' to '${i}'`);return j(e,`convert`)}if(r===i)return n;throw new k(`convert: unit conversion table not installed`)}}},Qa=Object.freeze(Object.assign(Object.create(null),Za)),$a=new Set(Object.keys(Za)),eo=2048,to=4096,no=/^[A-Za-z_][A-Za-z0-9_]*$/,ro=new Set([`now`,`true`,`false`,`null`]),io=new Set([`true`,`false`,`null`]);function ao(e){return e>=`0`&&e<=`9`}function oo(e){return e>=`A`&&e<=`Z`||e>=`a`&&e<=`z`||e===`_`}function so(e){return oo(e)||ao(e)}function co(e){return e===` `||e===` `||e===`
3
3
  `||e===`\r`||e===`\f`||e===`\v`}function lo(e){if(e.length>2048)throw new O(`expression too long (${e.length} > ${eo} chars)`,0);let t=[],n=0,r=e.length;for(;n<r;){let i=e[n];if(co(i)){n+=1;continue}if(ao(i)){let i=n;for(;n<r&&ao(e[n]);)n+=1;if(n<r&&e[n]===`.`){if(n+1>=r||!ao(e[n+1]))throw new O(`malformed number: decimal point needs a digit`,n);for(n+=1;n<r&&ao(e[n]);)n+=1}let a=e.slice(i,n),o=Number(a);if(!Number.isFinite(o))throw new O(`malformed number: '${a}'`,i);t.push({type:`number`,value:o,pos:i});continue}if(i===`'`||i===`"`){let a=i,o=n;n+=1;let s=``,c=!1;for(;n<r;){let t=e[n];if(t===`\\`){let t=n+1<r?e[n+1]:``;if(t===`\\`||t===`'`||t===`"`){s+=t,n+=2;continue}throw new O(`invalid string escape: '\\${t}'`,n)}if(t===a){c=!0,n+=1;break}s+=t,n+=1}if(!c)throw new O(`unterminated string literal`,o);t.push({type:`string`,value:s,pos:o});continue}if(oo(i)){let i=n;for(;n<r&&so(e[n]);)n+=1;let a=e.slice(i,n);io.has(a)?t.push({type:`keyword`,keyword:uo(a),pos:i}):t.push({type:`identifier`,name:a,pos:i});continue}let a=n+1<r?e.slice(n,n+2):``;if(a===`<=`||a===`>=`||a===`==`||a===`!=`||a===`&&`||a===`||`){t.push({type:`punct`,punct:a,pos:n}),n+=2;continue}if(fo(i)){t.push({type:`punct`,punct:i,pos:n}),n+=1;continue}throw new O(`unexpected character '${i}'`,n)}return t.push({type:`eof`,pos:r}),t}function uo(e){return e===`true`?`true`:e===`false`?`false`:`null`}function fo(e){return e===`(`||e===`)`||e===`,`||e===`?`||e===`:`||e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`!`||e===`<`||e===`>`}var po={"||":1,"&&":2,"==":3,"!=":3,"<":4,"<=":4,">":4,">=":4,"+":5,"-":5,"*":6,"/":6,"%":6};function mo(e){return e===`&&`||e===`||`}function ho(e){return e===`+`||e===`-`||e===`*`||e===`/`||e===`%`||e===`==`||e===`!=`||e===`<`||e===`<=`||e===`>`||e===`>=`}var go=class{tokens;pos=0;nodeCount=0;identifiers=new Set;callees=new Set;constructor(e){this.tokens=e}parse(){let e=this.parseTernary(),t=this.peek();if(t.type!==`eof`)throw new O(`unexpected trailing input`,t.pos);return{ast:e,identifiers:this.identifiers,callees:this.callees,nodeCount:this.nodeCount}}peek(){return this.tokens[this.pos]}next(){return this.tokens[this.pos++]}expectPunct(e){let t=this.peek();if(t.type!==`punct`||t.punct!==e)throw new O(`expected '${e}'`,t.pos);this.pos+=1}matchPunct(e){let t=this.peek();return t.type===`punct`&&t.punct===e?(this.pos+=1,!0):!1}countNode(){if(this.nodeCount+=1,this.nodeCount>256)throw new O(`expression too complex`,this.peek().pos)}parseTernary(){let e=this.parseBinary(1);if(this.matchPunct(`?`)){let t=this.parseTernary();this.expectPunct(`:`);let n=this.parseTernary();return this.countNode(),{kind:`conditional`,test:e,consequent:t,alternate:n}}return e}parseBinary(e){let t=this.parseUnary();for(;;){let n=this.peek();if(n.type!==`punct`)break;let r=po[n.punct];if(r===void 0||r<e)break;let i=n.punct;this.pos+=1;let a=this.parseBinary(r+1);if(this.countNode(),mo(i))t={kind:`logical`,op:i,left:t,right:a};else if(ho(i))t={kind:`binary`,op:i,left:t,right:a};else throw new O(`unexpected operator '${i}'`,n.pos)}return t}parseUnary(){let e=this.peek();if(e.type===`punct`&&(e.punct===`!`||e.punct===`-`)){let t=e.punct;this.pos+=1;let n=this.parseUnary();return this.countNode(),{kind:`unary`,op:t,operand:n}}return this.parsePrimary()}parsePrimary(){let e=this.next();switch(e.type){case`number`:return this.countNode(),{kind:`literal`,value:e.value};case`string`:return this.countNode(),{kind:`literal`,value:e.value};case`keyword`:return this.countNode(),{kind:`literal`,value:e.keyword===`null`?null:e.keyword===`true`};case`identifier`:{let t=this.peek();return t.type===`punct`&&t.punct===`(`?this.parseCall(e.name,e.pos):(this.identifiers.add(e.name),this.countNode(),{kind:`identifier`,name:e.name})}case`punct`:if(e.punct===`(`){let e=this.parseTernary();return this.expectPunct(`)`),e}throw new O(`unexpected token '${e.punct}'`,e.pos);case`eof`:throw new O(`unexpected end of expression`,e.pos)}}parseCall(e,t){if(!$a.has(e))throw new O(`unknown function '${e}'`,t);this.expectPunct(`(`);let n=[];if(!this.matchPunct(`)`))for(;;){if(n.push(this.parseTernary()),n.length>16)throw new O(`too many arguments to '${e}'`,t);if(!this.matchPunct(`,`)){this.expectPunct(`)`);break}}return this.callees.add(e),this.countNode(),{kind:`call`,callee:e,args:n}}};function _o(e){return new go(lo(e)).parse()}var vo=new Map;function yo(e){let t=vo.get(e);if(t!==void 0)return vo.delete(e),vo.set(e,t),t;let n;try{n={ok:!0,parsed:_o(e)}}catch(e){n={ok:!1,error:e instanceof O?e.message:String(e)}}if(vo.set(e,n),vo.size>256){let e=vo.keys().next().value;e!==void 0&&vo.delete(e)}return n}function bo(e){let t=yo(e);if(t.ok)return t.parsed;throw new O(t.error)}function xo(e){return yo(e)}var So=Object.freeze({});function Co(e){let t=Object.create(null);for(let n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t}function M(e){return typeof e==`number`&&Number.isFinite(e)}function wo(e){return!!e}function To(e,t){if(!Number.isFinite(e))throw new k(`${t} produced a non-finite result`);return e}function Eo(e){if(e.steps+=1,e.steps>e.maxSteps)throw new k(`expression evaluation step budget exceeded`)}function N(e,t){switch(Eo(t),e.kind){case`literal`:return e.value;case`identifier`:if(!(e.name in t.scope))throw new k(`unknown identifier: ${e.name}`);return t.scope[e.name];case`unary`:return Do(e.op,N(e.operand,t));case`binary`:return Oo(e.op,N(e.left,t),N(e.right,t));case`logical`:{let n=N(e.left,t);return e.op===`&&`?wo(n)?N(e.right,t):n:wo(n)?n:N(e.right,t)}case`conditional`:return wo(N(e.test,t))?N(e.consequent,t):N(e.alternate,t);case`call`:return ko(e.callee,e.args.map(e=>N(e,t)),t.hooks)}}function Do(e,t){if(e===`!`)return!wo(t);if(!M(t))throw new k(`unary "-" requires a finite number`);return To(-t,`unary "-"`)}function Oo(e,t,n){switch(e){case`==`:return t===n;case`!=`:return t!==n;case`+`:if(typeof t==`string`&&typeof n==`string`)return t+n;if(M(t)&&M(n))return To(t+n,`"+"`);throw new k(`"+" requires two numbers or two strings`);case`-`:case`*`:case`/`:case`%`:if(!M(t)||!M(n))throw new k(`"${e}" requires two finite numbers`);return To(e===`-`?t-n:e===`*`?t*n:e===`/`?t/n:t%n,`"${e}"`);case`<`:case`<=`:case`>`:case`>=`:if(M(t)&&M(n)||typeof t==`string`&&typeof n==`string`)return e===`<`?t<n:e===`<=`?t<=n:e===`>`?t>n:t>=n;throw new k(`"${e}" requires two numbers or two strings`)}}function ko(e,t,n){if(!Object.prototype.hasOwnProperty.call(Qa,e))throw new k(`unknown function: ${e}`);let r=Qa[e];if(t.length<r.minArgs||t.length>r.maxArgs)throw new k(`${e}: wrong number of arguments (${t.length})`);return r.apply(t,n)}function Ao(e,t,n){return N(e,{scope:t,hooks:n?.hooks??So,maxSteps:n?.maxSteps??4096,steps:0})}function jo(e){if(e===null)return null;if(typeof e==`string`||typeof e==`boolean`)return e;if(typeof e==`number`)return Number.isFinite(e)?e:void 0}function Mo(e){let t=Object.keys(e.bindings);if(t.length>32)return`too many bindings (${t.length} > 32)`;for(let e of t){if(!no.test(e))return`invalid binding name '${e}'`;if(ro.has(e))return`binding name '${e}' is reserved`;if($a.has(e))return`binding name '${e}' shadows a builtin function`}let n=xo(e.expr);if(!n.ok)return n.error;let r=new Set(t);for(let e of n.parsed.identifiers)if(e!==`now`&&!r.has(e))return`expression references unbound identifier '${e}'`;return null}function No(e,t,n,r){let i=xo(e);if(!i.ok)return{ok:!1,error:i.error};let a=Co({...t,now:n});try{return{ok:!0,value:Ao(i.parsed.ast,a,r)}}catch(e){return{ok:!1,error:e instanceof k?e.message:String(e)}}}var Po=a({kind:y(`field`).optional(),sourceKey:g(),cap:g(),fieldPath:g()}),Fo=a({kind:y(`literal`),value:l([g(),o(),v(),le()])}),Io=a({kind:y(`global`),sourceStableId:g(),cap:g(),fieldPath:g()}),Lo=l([Po,Fo,Io]),Ro=a({expr:g().min(1).max(eo),bindings:r(g().regex(no),Lo)}).superRefine((e,t)=>{let n=Mo(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),zo=m([`eq`,`ne`,`gt`,`gte`,`lt`,`lte`,`contains`,`in`]),Bo=a({kind:y(`condition`),deviceId:o().int().nonnegative(),cap:g().min(1),fieldPath:g().min(1),operator:zo,value:l([g(),o(),v(),p(l([g(),o()]))])}),Vo=a({kind:y(`expression`),expr:g().min(1).max(eo),bindings:r(g().regex(no),Lo)}).superRefine((e,t)=>{let n=Mo(e);n!==null&&t.addIssue({code:`custom`,message:n,path:[`expr`]})}),Ho=i(()=>b(`kind`,[a({kind:y(`all`),children:p(Ho)}),a({kind:y(`any`),children:p(Ho)}),a({kind:y(`not`),child:Ho}),Bo,Vo])),Uo=b(`kind`,[a({kind:y(`device-state`),deviceId:o().int().nonnegative(),cap:g().min(1),fieldPath:g().min(1),becomes:l([g(),o(),v()]).optional(),edge:v().optional(),forMs:o().int().min(0).max(864e5).optional(),debounceMs:o().int().min(0).max(6e5).optional()}),a({kind:y(`device-event`),category:g().min(1),deviceId:o().int().nonnegative().optional()}),a({kind:y(`schedule`),cron:g().min(1).max(120)}),a({kind:y(`manual`)})]),Wo=b(`kind`,[a({kind:y(`wait`),seconds:o().min(0).max(300)}),a({kind:y(`cap`),deviceId:l([o().int(),a({$var:g().min(1)})]),cap:g().min(1),method:g().min(1),args:r(g(),d()).optional()}),a({kind:y(`code`),code:g().min(1).max(2e4)})]),Go=a({triggers:p(Uo),conditions:Ho.optional(),actions:p(Wo)});function Ko(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return 1+Ko(e.child);let t=e.children;if(t.length===0)return 1;let n=0;for(let e of t){let t=Ko(e);t>n&&(n=t)}return 1+n}function qo(e){if(e.kind===`condition`||e.kind===`expression`)return 1;if(e.kind===`not`)return qo(e.child);let t=0;for(let n of e.children)t+=qo(n);return t}function Jo(e){return e.kind===`condition`||e.kind===`expression`?!1:e.kind===`not`?Jo(e.child):e.children.length===0?!0:e.children.some(Jo)}function Yo(e){if(e.triggers.length===0)return`an automation needs at least one trigger — without one nothing can start a run`;if(e.actions.length===0)return`an automation needs at least one action — a rule that does nothing is not a rule`;let t=e.conditions;if(t!==void 0){if(Jo(t))return`a condition group is empty — group existing rows instead of leaving a container to fill`;let e=Ko(t);if(e>3)return`conditions nest ${e} levels deep — the limit is 3. "not (any of …)" is the same as "all of (not …)", which is one level shallower`;let n=qo(t);if(n>32)return`conditions use ${n} leaves — the limit is 32`}return null}var Xo=15e3;function P(e){return JSON.stringify(e)}function Zo(e,t){switch(e.kind){case`all`:return`allOf([\n${e.children.map(e=>`${t} () => ${Zo(e,`${t} `)}`).join(`,
4
4
  `)}\n${t}])`;case`any`:return`anyOf([\n${e.children.map(e=>`${t} () => ${Zo(e,`${t} `)}`).join(`,
5
5
  `)}\n${t}])`;case`not`:return`notOf(() => ${Zo(e.child,t)})`;case`condition`:return`leaf(${P(e.deviceId)}, ${P(e.cap)}, ${P(e.fieldPath)}, ${P(e.operator)}, ${P(e.value)})`;case`expression`:return`exprLeaf(${P(e.expr)}, ${P(e.bindings)})`}}function Qo(e,t){switch(e.kind){case`schedule`:return` // trigger ${t}: schedule — armed to the next minute boundary and
@@ -1 +1 @@
1
- import{J as e}from"./index-BnFm_Imc.js";var t=e(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]);export{t};
1
+ import{J as e}from"./index-DpyYghK5.js";var t=e(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]);export{t};
@@ -1 +1 @@
1
- import{a as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Q as t}from"./player-overlays-CkGjHNDd.js";import"./src-DBCz_Wul.js";var n=3e4,r={results:[],unreachableCount:0};function i(i){let a=t(),o=i.length>0,s=[...i].sort((e,t)=>e-t),{data:c,isLoading:l,isError:u}=e({queryKey:[`scenes-feed`,s],enabled:o,staleTime:n,refetchInterval:n,retry:!1,queryFn:async()=>{let e=await a.trpcClient.sceneMonitor.listScenesBatch.query({deviceIds:s}),t=[],n=0;for(let r of e){if(r.status===null){n++;continue}t.push({deviceId:r.deviceId,monitors:r.status.monitors})}return{results:t,unreachableCount:n}}}),d=c??(u?{results:[],unreachableCount:s.length}:r);return{results:d.results,isLoading:o&&l,unreachableCount:d.unreachableCount}}export{i as t};
1
+ import{a as e}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Q as t}from"./player-overlays-C7P-BYK6.js";import"./src-D4J0MlT1.js";var n=3e4,r={results:[],unreachableCount:0};function i(i){let a=t(),o=i.length>0,s=[...i].sort((e,t)=>e-t),{data:c,isLoading:l,isError:u}=e({queryKey:[`scenes-feed`,s],enabled:o,staleTime:n,refetchInterval:n,retry:!1,queryFn:async()=>{let e=await a.trpcClient.sceneMonitor.listScenesBatch.query({deviceIds:s}),t=[],n=0;for(let r of e){if(r.status===null){n++;continue}t.push({deviceId:r.deviceId,monitors:r.status.monitors})}return{results:t,unreachableCount:n}}}),d=c??(u?{results:[],unreachableCount:s.length}:r);return{results:d.results,isLoading:o&&l,unreachableCount:d.unreachableCount}}export{i as t};
@@ -0,0 +1 @@
1
+ import"./src-D4J0MlT1.js";
@@ -1 +1 @@
1
- import{I as e,Q as t,S as n,W as r,x as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Q as a,a as o}from"./index-BnFm_Imc.js";function s({staleNodeId:e,shownNodeName:t}){return e===null?null:n(`div`,{role:`status`,className:`flex items-start gap-2 rounded-md border border-warning/30 bg-warning/5 px-3 py-2 text-[11px] text-foreground-subtle`,children:[i(o,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-warning`}),n(`span`,{children:[`This link named node `,i(`span`,{className:`font-medium text-foreground`,children:e}),`, which is not in this cluster. Showing`,` `,i(`span`,{className:`font-medium text-foreground`,children:t}),` instead.`]})]})}t();var c=`node`;function l(e){return[...e].toSorted((e,t)=>e.isHub===t.isHub?e.isOnline===t.isOnline?e.name.localeCompare(t.name):e.isOnline?-1:1:e.isHub?-1:1)}function u(e,t){let n=l(e),r=n[0]??null;if(r===null)return{node:null,outcome:`empty`,staleNodeId:null};if(t===null||t.length===0)return{node:r,outcome:`default`,staleNodeId:null};let i=n.find(e=>e.id===t);return i===void 0?{node:r,outcome:`stale`,staleNodeId:t}:{node:i,outcome:`requested`,staleNodeId:null}}function d(t){let[n,i]=a(),o=n.get(c);return{selection:r(()=>u(t,o),[t,o]),selectNode:e(e=>{let t=new URLSearchParams(n);t.set(c,e),i(t,{replace:!0})},[n,i]),requestedNodeId:o}}export{l as n,s as r,d as t};
1
+ import{I as e,Q as t,S as n,W as r,x as i}from"./_virtual_mf___mfe_internal__admin_ui_host__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DhP-Lgiq.js";import{Q as a,a as o}from"./index-DpyYghK5.js";function s({staleNodeId:e,shownNodeName:t}){return e===null?null:n(`div`,{role:`status`,className:`flex items-start gap-2 rounded-md border border-warning/30 bg-warning/5 px-3 py-2 text-[11px] text-foreground-subtle`,children:[i(o,{className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-warning`}),n(`span`,{children:[`This link named node `,i(`span`,{className:`font-medium text-foreground`,children:e}),`, which is not in this cluster. Showing`,` `,i(`span`,{className:`font-medium text-foreground`,children:t}),` instead.`]})]})}t();var c=`node`;function l(e){return[...e].toSorted((e,t)=>e.isHub===t.isHub?e.isOnline===t.isOnline?e.name.localeCompare(t.name):e.isOnline?-1:1:e.isHub?-1:1)}function u(e,t){let n=l(e),r=n[0]??null;if(r===null)return{node:null,outcome:`empty`,staleNodeId:null};if(t===null||t.length===0)return{node:r,outcome:`default`,staleNodeId:null};let i=n.find(e=>e.id===t);return i===void 0?{node:r,outcome:`stale`,staleNodeId:t}:{node:i,outcome:`requested`,staleNodeId:null}}function d(t){let[n,i]=a(),o=n.get(c);return{selection:r(()=>u(t,o),[t,o]),selectNode:e(e=>{let t=new URLSearchParams(n);t.set(c,e),i(t,{replace:!0})},[n,i]),requestedNodeId:o}}export{l as n,s as r,d as t};
@@ -0,0 +1 @@
1
+ import{J as e}from"./index-DpyYghK5.js";var t=e(`user-round`,[[`circle`,{cx:`12`,cy:`8`,r:`5`,key:`1hypcn`}],[`path`,{d:`M20 21a8 8 0 0 0-16 0`,key:`rfgkzh`}]]);export{t};
@@ -1 +1 @@
1
- import{J as e}from"./index-BnFm_Imc.js";var t=e(`mic`,[[`path`,{d:`M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z`,key:`131961`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`line`,{x1:`12`,x2:`12`,y1:`19`,y2:`22`,key:`x3vr5v`}]]),n=e(`video`,[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]);export{t as n,n as t};
1
+ import{J as e}from"./index-DpyYghK5.js";var t=e(`mic`,[[`path`,{d:`M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z`,key:`131961`}],[`path`,{d:`M19 10v2a7 7 0 0 1-14 0v-2`,key:`1vc78b`}],[`line`,{x1:`12`,x2:`12`,y1:`19`,y2:`22`,key:`x3vr5v`}]]),n=e(`video`,[[`path`,{d:`m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5`,key:`ftymec`}],[`rect`,{x:`2`,y:`6`,width:`14`,height:`12`,rx:`2`,key:`158x01`}]]);export{t as n,n as t};